From 8834a78b546ca135ef3a8149f802e22ddc516521 Mon Sep 17 00:00:00 2001 From: fzzinchemical Date: Sun, 1 Mar 2026 14:46:22 +0100 Subject: [PATCH] project baseline --- CONTRIBUTING.md | 21 + LICENSE | 21 + README.md | 99 + astro.config.mjs | 178 + biome.json | 63 + deno.lock | 7580 +++++++++ docs/README.es.md | 85 + docs/README.id.md | 106 + docs/README.ja.md | 85 + docs/README.ko.md | 82 + docs/README.th.md | 84 + docs/README.vi.md | 84 + docs/README.zh-CN.md | 86 + frontmatter.json | 67 + package.json | 76 + pagefind.yml | 6 + pnpm-lock.yaml | 11863 ++++++++++++++ postcss.config.mjs | 11 + public/favicon/favicon-dark-128.png | Bin 0 -> 1745 bytes public/favicon/favicon-dark-180.png | Bin 0 -> 2382 bytes public/favicon/favicon-dark-192.png | Bin 0 -> 2513 bytes public/favicon/favicon-dark-32.png | Bin 0 -> 426 bytes public/favicon/favicon-light-128.png | Bin 0 -> 2054 bytes public/favicon/favicon-light-180.png | Bin 0 -> 2786 bytes public/favicon/favicon-light-192.png | Bin 0 -> 2942 bytes public/favicon/favicon-light-32.png | Bin 0 -> 554 bytes scripts/new-post.js | 59 + src/assets/images/demo-avatar.png | Bin 0 -> 416179 bytes src/assets/images/demo-banner.png | Bin 0 -> 898051 bytes src/components/ArchivePanel.svelte | 151 + src/components/ConfigCarrier.astro | 7 + src/components/Footer.astro | 21 + src/components/GlobalStyles.astro | 3 + src/components/LightDarkSwitch.svelte | 99 + src/components/Navbar.astro | 141 + src/components/PostCard.astro | 110 + src/components/PostMeta.astro | 82 + src/components/PostPage.astro | 28 + src/components/Search.svelte | 198 + src/components/control/BackToTop.astro | 49 + src/components/control/ButtonLink.astro | 43 + src/components/control/ButtonTag.astro | 13 + src/components/control/Pagination.astro | 84 + src/components/misc/ImageWrapper.astro | 54 + src/components/misc/License.astro | 43 + src/components/misc/Markdown.astro | 43 + src/components/widget/Categories.astro | 35 + src/components/widget/DisplaySettings.svelte | 93 + src/components/widget/NavMenuPanel.astro | 32 + src/components/widget/Profile.astro | 39 + src/components/widget/SideBar.astro | 22 + src/components/widget/TOC.astro | 268 + src/components/widget/Tags.astro | 31 + src/components/widget/WidgetLayout.astro | 60 + src/config.ts | 90 + src/constants/constants.ts | 17 + src/constants/icon.ts | 44 + src/constants/link-presets.ts | 18 + src/content/.obsidian/app.json | 44 + src/content/.obsidian/appearance.json | 10 + src/content/.obsidian/backlink.json | 3 + src/content/.obsidian/bookmarks.json | 10 + src/content/.obsidian/community-plugins.json | 22 + src/content/.obsidian/core-plugins.json | 33 + src/content/.obsidian/graph.json | 30 + src/content/.obsidian/hotkeys.json | 274 + .../plugins/alias-file-name-history/data.json | 20 + .../plugins/alias-file-name-history/main.js | 512 + .../alias-file-name-history/manifest.json | 1 + .../alias-file-name-history/styles.css | 11 + .../plugins/astro-composer/data.json | 56 + .../.obsidian/plugins/astro-composer/main.js | 4446 +++++ .../plugins/astro-composer/manifest.json | 1 + .../plugins/astro-composer/styles.css | 380 + .../.obsidian/plugins/bases-cms/data.json | 28 + .../.obsidian/plugins/bases-cms/main.js | 6587 ++++++++ .../.obsidian/plugins/bases-cms/manifest.json | 1 + .../.obsidian/plugins/bases-cms/styles.css | 1539 ++ .../plugins/data-files-editor/data.json | 24 + .../plugins/data-files-editor/main.js | 6 + .../plugins/data-files-editor/manifest.json | 11 + .../plugins/data-files-editor/styles.css | 23 + .../.obsidian/plugins/disable-tabs/main.js | 169 + .../plugins/disable-tabs/manifest.json | 11 + .../.obsidian/plugins/disable-tabs/styles.css | 16 + .../plugins/editing-toolbar/data.json | 441 + .../.obsidian/plugins/editing-toolbar/main.js | 12 + .../plugins/editing-toolbar/manifest.json | 10 + .../plugins/editing-toolbar/styles.css | 1506 ++ .../plugins/explorer-focus/data.json | 7 + .../.obsidian/plugins/explorer-focus/main.js | 708 + .../plugins/explorer-focus/manifest.json | 1 + .../plugins/file-name-history/data.json | 18 + .../plugins/file-name-history/main.js | 521 + .../plugins/file-name-history/manifest.json | 1 + .../plugins/file-name-history/styles.css | 11 + .../.obsidian/plugins/folder-notes/data.json | 129 + .../.obsidian/plugins/folder-notes/main.js | 9144 +++++++++++ .../plugins/folder-notes/manifest.json | 12 + .../.obsidian/plugins/folder-notes/styles.css | 349 + .../.obsidian/plugins/home-base/data.json | 31 + .../.obsidian/plugins/home-base/main.js | 3988 +++++ .../.obsidian/plugins/home-base/manifest.json | 1 + .../.obsidian/plugins/home-base/styles.css | 228 + .../.obsidian/plugins/image-manager/data.json | 118 + .../.obsidian/plugins/image-manager/main.js | 4266 +++++ .../plugins/image-manager/manifest.json | 1 + .../plugins/image-manager/styles.css | 537 + .../.obsidian/plugins/obsidian-git/data.json | 68 + .../.obsidian/plugins/obsidian-git/main.js | 452 + .../plugins/obsidian-git/manifest.json | 10 + .../plugins/obsidian-git/obsidian_askpass.sh | 23 + .../.obsidian/plugins/obsidian-git/styles.css | 705 + .../obsidian42-brat/brat-migrations.json | 5 + .../plugins/obsidian42-brat/data.json | 79 + .../.obsidian/plugins/obsidian42-brat/main.js | 45 + .../plugins/obsidian42-brat/manifest.json | 14 + .../plugins/obsidian42-brat/styles.css | 152 + .../.obsidian/plugins/omnisearch/data.json | 42 + .../.obsidian/plugins/omnisearch/main.js | 171 + .../plugins/omnisearch/manifest.json | 14 + .../.obsidian/plugins/omnisearch/styles.css | 135 + .../plugins/oxygen-settings/data.json | 553 + .../.obsidian/plugins/oxygen-settings/main.js | 3504 ++++ .../plugins/oxygen-settings/manifest.json | 1 + .../plugins/oxygen-settings/styles.css | 772 + .../plugins/property-over-file-name/data.json | 20 + .../plugins/property-over-file-name/main.js | 3454 ++++ .../property-over-file-name/manifest.json | 1 + .../property-over-file-name/styles.css | 318 + src/content/.obsidian/plugins/seo/data.json | 147 + src/content/.obsidian/plugins/seo/main.js | 5523 +++++++ .../.obsidian/plugins/seo/manifest.json | 1 + src/content/.obsidian/plugins/seo/styles.css | 749 + .../.obsidian/plugins/settings-search/main.js | 512 + .../plugins/settings-search/manifest.json | 10 + .../plugins/settings-search/styles.css | 25 + .../.obsidian/plugins/tag-wrangler/main.js | 165 + .../plugins/tag-wrangler/manifest.json | 11 + .../.obsidian/plugins/ui-tweaker/data.json | 251 + .../.obsidian/plugins/ui-tweaker/main.js | 6220 +++++++ .../plugins/ui-tweaker/manifest.json | 11 + .../.obsidian/plugins/ui-tweaker/styles.css | 1926 +++ .../.obsidian/plugins/vault-cms/data.json | 251 + .../.obsidian/plugins/vault-cms/main.js | 13462 ++++++++++++++++ .../.obsidian/plugins/vault-cms/manifest.json | 1 + .../.obsidian/plugins/vault-cms/styles.css | 116 + .../.obsidian/plugins/zenmode/data.json | 13 + src/content/.obsidian/plugins/zenmode/main.js | 756 + .../.obsidian/plugins/zenmode/manifest.json | 11 + .../.obsidian/plugins/zenmode/styles.css | 216 + src/content/.obsidian/switcher.json | 5 + src/content/.obsidian/templates.json | 5 + .../.obsidian/themes/Oxygen/manifest.json | 8 + src/content/.obsidian/themes/Oxygen/theme.css | 2251 +++ src/content/.obsidian/types.json | 8 + src/content/.obsidian/workspace.json | 145 + src/content/.obsidian/workspaces.json | 4 + src/content/_GUIDE.md | 26 + src/content/_bases/Home.base | 128 + src/content/config.ts | 28 + src/content/posts/draft.md | 22 + src/content/posts/expressive-code.md | 311 + src/content/posts/guide/cover.jpeg | Bin 0 -> 223295 bytes src/content/posts/guide/index.md | 51 + src/content/posts/markdown-extended.md | 95 + src/content/posts/markdown.md | 175 + src/content/posts/video.md | 28 + src/content/spec/about.md | 9 + src/env.d.ts | 2 + src/global.d.ts | 41 + src/i18n/i18nKey.ts | 37 + src/i18n/languages/en.ts | 38 + src/i18n/languages/es.ts | 38 + src/i18n/languages/id.ts | 38 + src/i18n/languages/ja.ts | 38 + src/i18n/languages/ko.ts | 38 + src/i18n/languages/th.ts | 38 + src/i18n/languages/tr.ts | 38 + src/i18n/languages/vi.ts | 38 + src/i18n/languages/zh_CN.ts | 38 + src/i18n/languages/zh_TW.ts | 38 + src/i18n/translation.ts | 48 + src/layouts/Layout.astro | 567 + src/layouts/MainGridLayout.astro | 125 + src/pages/[...page].astro | 23 + src/pages/about.astro | 25 + src/pages/archive.astro | 14 + src/pages/posts/[...slug].astro | 136 + src/pages/robots.txt.ts | 16 + src/pages/rss.xml.ts | 42 + .../expressive-code/custom-copy-button.ts | 90 + src/plugins/expressive-code/language-badge.ts | 50 + src/plugins/rehype-component-admonition.mjs | 33 + src/plugins/rehype-component-github-card.mjs | 95 + src/plugins/remark-directive-rehype.js | 30 + src/plugins/remark-excerpt.js | 17 + src/plugins/remark-reading-time.mjs | 15 + src/styles/expressive-code.css | 9 + src/styles/main.css | 152 + src/styles/markdown-extend.styl | 245 + src/styles/markdown.css | 121 + src/styles/photoswipe.css | 12 + src/styles/scrollbar.css | 42 + src/styles/transition.css | 53 + src/styles/variables.styl | 98 + src/types/config.ts | 102 + src/utils/content-utils.ts | 114 + src/utils/date-utils.ts | 3 + src/utils/setting-utils.ts | 61 + src/utils/url-utils.ts | 44 + svelte.config.js | 5 + tailwind.config.cjs | 14 + tsconfig.json | 24 + vercel.json | 1 + 215 files changed, 105982 insertions(+) create mode 100644 CONTRIBUTING.md create mode 100644 LICENSE create mode 100644 README.md create mode 100644 astro.config.mjs create mode 100644 biome.json create mode 100644 deno.lock create mode 100644 docs/README.es.md create mode 100644 docs/README.id.md create mode 100644 docs/README.ja.md create mode 100644 docs/README.ko.md create mode 100644 docs/README.th.md create mode 100644 docs/README.vi.md create mode 100644 docs/README.zh-CN.md create mode 100644 frontmatter.json create mode 100644 package.json create mode 100644 pagefind.yml create mode 100644 pnpm-lock.yaml create mode 100644 postcss.config.mjs create mode 100644 public/favicon/favicon-dark-128.png create mode 100644 public/favicon/favicon-dark-180.png create mode 100644 public/favicon/favicon-dark-192.png create mode 100644 public/favicon/favicon-dark-32.png create mode 100644 public/favicon/favicon-light-128.png create mode 100644 public/favicon/favicon-light-180.png create mode 100644 public/favicon/favicon-light-192.png create mode 100644 public/favicon/favicon-light-32.png create mode 100644 scripts/new-post.js create mode 100644 src/assets/images/demo-avatar.png create mode 100644 src/assets/images/demo-banner.png create mode 100644 src/components/ArchivePanel.svelte create mode 100644 src/components/ConfigCarrier.astro create mode 100644 src/components/Footer.astro create mode 100644 src/components/GlobalStyles.astro create mode 100644 src/components/LightDarkSwitch.svelte create mode 100644 src/components/Navbar.astro create mode 100644 src/components/PostCard.astro create mode 100644 src/components/PostMeta.astro create mode 100644 src/components/PostPage.astro create mode 100644 src/components/Search.svelte create mode 100644 src/components/control/BackToTop.astro create mode 100644 src/components/control/ButtonLink.astro create mode 100644 src/components/control/ButtonTag.astro create mode 100644 src/components/control/Pagination.astro create mode 100644 src/components/misc/ImageWrapper.astro create mode 100644 src/components/misc/License.astro create mode 100644 src/components/misc/Markdown.astro create mode 100644 src/components/widget/Categories.astro create mode 100644 src/components/widget/DisplaySettings.svelte create mode 100644 src/components/widget/NavMenuPanel.astro create mode 100644 src/components/widget/Profile.astro create mode 100644 src/components/widget/SideBar.astro create mode 100644 src/components/widget/TOC.astro create mode 100644 src/components/widget/Tags.astro create mode 100644 src/components/widget/WidgetLayout.astro create mode 100644 src/config.ts create mode 100644 src/constants/constants.ts create mode 100644 src/constants/icon.ts create mode 100644 src/constants/link-presets.ts create mode 100644 src/content/.obsidian/app.json create mode 100644 src/content/.obsidian/appearance.json create mode 100644 src/content/.obsidian/backlink.json create mode 100644 src/content/.obsidian/bookmarks.json create mode 100644 src/content/.obsidian/community-plugins.json create mode 100644 src/content/.obsidian/core-plugins.json create mode 100644 src/content/.obsidian/graph.json create mode 100644 src/content/.obsidian/hotkeys.json create mode 100644 src/content/.obsidian/plugins/alias-file-name-history/data.json create mode 100644 src/content/.obsidian/plugins/alias-file-name-history/main.js create mode 100644 src/content/.obsidian/plugins/alias-file-name-history/manifest.json create mode 100644 src/content/.obsidian/plugins/alias-file-name-history/styles.css create mode 100644 src/content/.obsidian/plugins/astro-composer/data.json create mode 100644 src/content/.obsidian/plugins/astro-composer/main.js create mode 100644 src/content/.obsidian/plugins/astro-composer/manifest.json create mode 100644 src/content/.obsidian/plugins/astro-composer/styles.css create mode 100644 src/content/.obsidian/plugins/bases-cms/data.json create mode 100644 src/content/.obsidian/plugins/bases-cms/main.js create mode 100644 src/content/.obsidian/plugins/bases-cms/manifest.json create mode 100644 src/content/.obsidian/plugins/bases-cms/styles.css create mode 100644 src/content/.obsidian/plugins/data-files-editor/data.json create mode 100644 src/content/.obsidian/plugins/data-files-editor/main.js create mode 100644 src/content/.obsidian/plugins/data-files-editor/manifest.json create mode 100644 src/content/.obsidian/plugins/data-files-editor/styles.css create mode 100644 src/content/.obsidian/plugins/disable-tabs/main.js create mode 100644 src/content/.obsidian/plugins/disable-tabs/manifest.json create mode 100644 src/content/.obsidian/plugins/disable-tabs/styles.css create mode 100644 src/content/.obsidian/plugins/editing-toolbar/data.json create mode 100644 src/content/.obsidian/plugins/editing-toolbar/main.js create mode 100644 src/content/.obsidian/plugins/editing-toolbar/manifest.json create mode 100644 src/content/.obsidian/plugins/editing-toolbar/styles.css create mode 100644 src/content/.obsidian/plugins/explorer-focus/data.json create mode 100644 src/content/.obsidian/plugins/explorer-focus/main.js create mode 100644 src/content/.obsidian/plugins/explorer-focus/manifest.json create mode 100644 src/content/.obsidian/plugins/file-name-history/data.json create mode 100644 src/content/.obsidian/plugins/file-name-history/main.js create mode 100644 src/content/.obsidian/plugins/file-name-history/manifest.json create mode 100644 src/content/.obsidian/plugins/file-name-history/styles.css create mode 100644 src/content/.obsidian/plugins/folder-notes/data.json create mode 100644 src/content/.obsidian/plugins/folder-notes/main.js create mode 100644 src/content/.obsidian/plugins/folder-notes/manifest.json create mode 100644 src/content/.obsidian/plugins/folder-notes/styles.css create mode 100644 src/content/.obsidian/plugins/home-base/data.json create mode 100644 src/content/.obsidian/plugins/home-base/main.js create mode 100644 src/content/.obsidian/plugins/home-base/manifest.json create mode 100644 src/content/.obsidian/plugins/home-base/styles.css create mode 100644 src/content/.obsidian/plugins/image-manager/data.json create mode 100644 src/content/.obsidian/plugins/image-manager/main.js create mode 100644 src/content/.obsidian/plugins/image-manager/manifest.json create mode 100644 src/content/.obsidian/plugins/image-manager/styles.css create mode 100644 src/content/.obsidian/plugins/obsidian-git/data.json create mode 100644 src/content/.obsidian/plugins/obsidian-git/main.js create mode 100644 src/content/.obsidian/plugins/obsidian-git/manifest.json create mode 100755 src/content/.obsidian/plugins/obsidian-git/obsidian_askpass.sh create mode 100644 src/content/.obsidian/plugins/obsidian-git/styles.css create mode 100644 src/content/.obsidian/plugins/obsidian42-brat/brat-migrations.json create mode 100644 src/content/.obsidian/plugins/obsidian42-brat/data.json create mode 100644 src/content/.obsidian/plugins/obsidian42-brat/main.js create mode 100644 src/content/.obsidian/plugins/obsidian42-brat/manifest.json create mode 100644 src/content/.obsidian/plugins/obsidian42-brat/styles.css create mode 100644 src/content/.obsidian/plugins/omnisearch/data.json create mode 100644 src/content/.obsidian/plugins/omnisearch/main.js create mode 100644 src/content/.obsidian/plugins/omnisearch/manifest.json create mode 100644 src/content/.obsidian/plugins/omnisearch/styles.css create mode 100644 src/content/.obsidian/plugins/oxygen-settings/data.json create mode 100644 src/content/.obsidian/plugins/oxygen-settings/main.js create mode 100644 src/content/.obsidian/plugins/oxygen-settings/manifest.json create mode 100644 src/content/.obsidian/plugins/oxygen-settings/styles.css create mode 100644 src/content/.obsidian/plugins/property-over-file-name/data.json create mode 100644 src/content/.obsidian/plugins/property-over-file-name/main.js create mode 100644 src/content/.obsidian/plugins/property-over-file-name/manifest.json create mode 100644 src/content/.obsidian/plugins/property-over-file-name/styles.css create mode 100644 src/content/.obsidian/plugins/seo/data.json create mode 100644 src/content/.obsidian/plugins/seo/main.js create mode 100644 src/content/.obsidian/plugins/seo/manifest.json create mode 100644 src/content/.obsidian/plugins/seo/styles.css create mode 100644 src/content/.obsidian/plugins/settings-search/main.js create mode 100644 src/content/.obsidian/plugins/settings-search/manifest.json create mode 100644 src/content/.obsidian/plugins/settings-search/styles.css create mode 100644 src/content/.obsidian/plugins/tag-wrangler/main.js create mode 100644 src/content/.obsidian/plugins/tag-wrangler/manifest.json create mode 100644 src/content/.obsidian/plugins/ui-tweaker/data.json create mode 100644 src/content/.obsidian/plugins/ui-tweaker/main.js create mode 100644 src/content/.obsidian/plugins/ui-tweaker/manifest.json create mode 100644 src/content/.obsidian/plugins/ui-tweaker/styles.css create mode 100644 src/content/.obsidian/plugins/vault-cms/data.json create mode 100644 src/content/.obsidian/plugins/vault-cms/main.js create mode 100644 src/content/.obsidian/plugins/vault-cms/manifest.json create mode 100644 src/content/.obsidian/plugins/vault-cms/styles.css create mode 100644 src/content/.obsidian/plugins/zenmode/data.json create mode 100644 src/content/.obsidian/plugins/zenmode/main.js create mode 100644 src/content/.obsidian/plugins/zenmode/manifest.json create mode 100644 src/content/.obsidian/plugins/zenmode/styles.css create mode 100644 src/content/.obsidian/switcher.json create mode 100644 src/content/.obsidian/templates.json create mode 100644 src/content/.obsidian/themes/Oxygen/manifest.json create mode 100644 src/content/.obsidian/themes/Oxygen/theme.css create mode 100644 src/content/.obsidian/types.json create mode 100644 src/content/.obsidian/workspace.json create mode 100644 src/content/.obsidian/workspaces.json create mode 100644 src/content/_GUIDE.md create mode 100644 src/content/_bases/Home.base create mode 100644 src/content/config.ts create mode 100644 src/content/posts/draft.md create mode 100644 src/content/posts/expressive-code.md create mode 100644 src/content/posts/guide/cover.jpeg create mode 100644 src/content/posts/guide/index.md create mode 100644 src/content/posts/markdown-extended.md create mode 100644 src/content/posts/markdown.md create mode 100644 src/content/posts/video.md create mode 100644 src/content/spec/about.md create mode 100644 src/env.d.ts create mode 100644 src/global.d.ts create mode 100644 src/i18n/i18nKey.ts create mode 100644 src/i18n/languages/en.ts create mode 100644 src/i18n/languages/es.ts create mode 100644 src/i18n/languages/id.ts create mode 100644 src/i18n/languages/ja.ts create mode 100644 src/i18n/languages/ko.ts create mode 100644 src/i18n/languages/th.ts create mode 100644 src/i18n/languages/tr.ts create mode 100644 src/i18n/languages/vi.ts create mode 100644 src/i18n/languages/zh_CN.ts create mode 100644 src/i18n/languages/zh_TW.ts create mode 100644 src/i18n/translation.ts create mode 100644 src/layouts/Layout.astro create mode 100644 src/layouts/MainGridLayout.astro create mode 100644 src/pages/[...page].astro create mode 100644 src/pages/about.astro create mode 100644 src/pages/archive.astro create mode 100644 src/pages/posts/[...slug].astro create mode 100644 src/pages/robots.txt.ts create mode 100644 src/pages/rss.xml.ts create mode 100644 src/plugins/expressive-code/custom-copy-button.ts create mode 100644 src/plugins/expressive-code/language-badge.ts create mode 100644 src/plugins/rehype-component-admonition.mjs create mode 100644 src/plugins/rehype-component-github-card.mjs create mode 100644 src/plugins/remark-directive-rehype.js create mode 100644 src/plugins/remark-excerpt.js create mode 100644 src/plugins/remark-reading-time.mjs create mode 100644 src/styles/expressive-code.css create mode 100644 src/styles/main.css create mode 100644 src/styles/markdown-extend.styl create mode 100644 src/styles/markdown.css create mode 100644 src/styles/photoswipe.css create mode 100644 src/styles/scrollbar.css create mode 100644 src/styles/transition.css create mode 100644 src/styles/variables.styl create mode 100644 src/types/config.ts create mode 100644 src/utils/content-utils.ts create mode 100644 src/utils/date-utils.ts create mode 100644 src/utils/setting-utils.ts create mode 100644 src/utils/url-utils.ts create mode 100644 svelte.config.js create mode 100644 tailwind.config.cjs create mode 100644 tsconfig.json create mode 100644 vercel.json diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 0000000..aa1295b --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,21 @@ + +# Contributing + +Thank you for your interest in contributing! + +## Before You Start + +If you plan to make major changes (especially new features or design changes), please open an issue or discussion before starting work. This helps ensure your effort aligns with the project's direction. + +## Submitting Code + +Please keep each pull request focused on a single purpose. Avoid mixing unrelated changes in one PR, as this can make reviewing and merging code more difficult. + +Please use the [Conventional Commits](https://www.conventionalcommits.org/) format for your commit messages whenever possible. This keeps our history clear and consistent. + +Before submitting code, please run the appropriate commands to check for errors and format your code. + +```bash +pnpm check +pnpm format +``` \ No newline at end of file diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..08fa51c --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2024 saicaca + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/README.md b/README.md new file mode 100644 index 0000000..e7f36fa --- /dev/null +++ b/README.md @@ -0,0 +1,99 @@ +# 🍥Fuwari +![Node.js >= 20](https://img.shields.io/badge/node.js-%3E%3D20-brightgreen) +![pnpm >= 9](https://img.shields.io/badge/pnpm-%3E%3D9-blue) +[![DeepWiki](https://img.shields.io/badge/DeepWiki-saicaca%2Ffuwari-blue.svg?logo=data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACwAAAAyCAYAAAAnWDnqAAAAAXNSR0IArs4c6QAAA05JREFUaEPtmUtyEzEQhtWTQyQLHNak2AB7ZnyXZMEjXMGeK/AIi+QuHrMnbChYY7MIh8g01fJoopFb0uhhEqqcbWTp06/uv1saEDv4O3n3dV60RfP947Mm9/SQc0ICFQgzfc4CYZoTPAswgSJCCUJUnAAoRHOAUOcATwbmVLWdGoH//PB8mnKqScAhsD0kYP3j/Yt5LPQe2KvcXmGvRHcDnpxfL2zOYJ1mFwrryWTz0advv1Ut4CJgf5uhDuDj5eUcAUoahrdY/56ebRWeraTjMt/00Sh3UDtjgHtQNHwcRGOC98BJEAEymycmYcWwOprTgcB6VZ5JK5TAJ+fXGLBm3FDAmn6oPPjR4rKCAoJCal2eAiQp2x0vxTPB3ALO2CRkwmDy5WohzBDwSEFKRwPbknEggCPB/imwrycgxX2NzoMCHhPkDwqYMr9tRcP5qNrMZHkVnOjRMWwLCcr8ohBVb1OMjxLwGCvjTikrsBOiA6fNyCrm8V1rP93iVPpwaE+gO0SsWmPiXB+jikdf6SizrT5qKasx5j8ABbHpFTx+vFXp9EnYQmLx02h1QTTrl6eDqxLnGjporxl3NL3agEvXdT0WmEost648sQOYAeJS9Q7bfUVoMGnjo4AZdUMQku50McDcMWcBPvr0SzbTAFDfvJqwLzgxwATnCgnp4wDl6Aa+Ax283gghmj+vj7feE2KBBRMW3FzOpLOADl0Isb5587h/U4gGvkt5v60Z1VLG8BhYjbzRwyQZemwAd6cCR5/XFWLYZRIMpX39AR0tjaGGiGzLVyhse5C9RKC6ai42ppWPKiBagOvaYk8lO7DajerabOZP46Lby5wKjw1HCRx7p9sVMOWGzb/vA1hwiWc6jm3MvQDTogQkiqIhJV0nBQBTU+3okKCFDy9WwferkHjtxib7t3xIUQtHxnIwtx4mpg26/HfwVNVDb4oI9RHmx5WGelRVlrtiw43zboCLaxv46AZeB3IlTkwouebTr1y2NjSpHz68WNFjHvupy3q8TFn3Hos2IAk4Ju5dCo8B3wP7VPr/FGaKiG+T+v+TQqIrOqMTL1VdWV1DdmcbO8KXBz6esmYWYKPwDL5b5FA1a0hwapHiom0r/cKaoqr+27/XcrS5UwSMbQAAAABJRU5ErkJggg==)](https://deepwiki.com/saicaca/fuwari) +[![FOSSA Status](https://app.fossa.com/api/projects/git%2Bgithub.com%2Fsaicaca%2Ffuwari.svg?type=shield&issueType=license)](https://app.fossa.com/projects/git%2Bgithub.com%2Fsaicaca%2Ffuwari?ref=badge_shield&issueType=license) + +A static blog template built with [Astro](https://astro.build). + +[**🖥️ Live Demo (Vercel)**](https://fuwari.vercel.app) + +![Preview Image](https://raw.githubusercontent.com/saicaca/resource/main/fuwari/home.png) + +🌏 README in +[**中文**](https://github.com/saicaca/fuwari/blob/main/docs/README.zh-CN.md) / +[**日本語**](https://github.com/saicaca/fuwari/blob/main/docs/README.ja.md) / +[**한국어**](https://github.com/saicaca/fuwari/blob/main/docs/README.ko.md) / +[**Español**](https://github.com/saicaca/fuwari/blob/main/docs/README.es.md) / +[**ไทย**](https://github.com/saicaca/fuwari/blob/main/docs/README.th.md) / +[**Tiếng Việt**](https://github.com/saicaca/fuwari/blob/main/docs/README.vi.md) / +[**Bahasa Indonesia**](https://github.com/saicaca/fuwari/blob/main/docs/README.id.md) (Provided by the community and may not always be up-to-date) + +## ✨ Features + +- [x] Built with [Astro](https://astro.build) and [Tailwind CSS](https://tailwindcss.com) +- [x] Smooth animations and page transitions +- [x] Light / dark mode +- [x] Customizable theme colors & banner +- [x] Responsive design +- [x] Search functionality with [Pagefind](https://pagefind.app/) +- [x] [Markdown extended features](https://github.com/saicaca/fuwari?tab=readme-ov-file#-markdown-extended-syntax) +- [x] Table of contents +- [x] RSS feed + +## 🚀 Getting Started + +1. Create your blog repository: + - [Generate a new repository](https://github.com/saicaca/fuwari/generate) from this template or fork this repository. + - Or run one of the following commands: + ```sh + npm create fuwari@latest + yarn create fuwari + pnpm create fuwari@latest + bun create fuwari@latest + deno run -A npm:create-fuwari@latest + ``` +2. To edit your blog locally, clone your repository, run `pnpm install` to install dependencies. + - Install [pnpm](https://pnpm.io) `npm install -g pnpm` if you haven't. +3. Edit the config file `src/config.ts` to customize your blog. +4. Run `pnpm new-post ` to create a new post and edit it in `src/content/posts/`. +5. Deploy your blog to Vercel, Netlify, GitHub Pages, etc. following [the guides](https://docs.astro.build/en/guides/deploy/). You need to edit the site configuration in `astro.config.mjs` before deployment. + +## 📝 Frontmatter of Posts + +```yaml +--- +title: My First Blog Post +published: 2023-09-09 +description: This is the first post of my new Astro blog. +image: ./cover.jpg +tags: [Foo, Bar] +category: Front-end +draft: false +lang: jp # Set only if the post's language differs from the site's language in `config.ts` +--- +``` + +## 🧩 Markdown Extended Syntax + +In addition to Astro's default support for [GitHub Flavored Markdown](https://github.github.com/gfm/), several extra Markdown features are included: + +- Admonitions ([Preview and Usage](https://fuwari.vercel.app/posts/markdown-extended/#admonitions)) +- GitHub repository cards ([Preview and Usage](https://fuwari.vercel.app/posts/markdown-extended/#github-repository-cards)) +- Enhanced code blocks with Expressive Code ([Preview](https://fuwari.vercel.app/posts/expressive-code/) / [Docs](https://expressive-code.com/)) + +## ⚡ Commands + +All commands are run from the root of the project, from a terminal: + +| Command | Action | +|:---------------------------|:----------------------------------------------------| +| `pnpm install` | Installs dependencies | +| `pnpm dev` | Starts local dev server at `localhost:4321` | +| `pnpm build` | Build your production site to `./dist/` | +| `pnpm preview` | Preview your build locally, before deploying | +| `pnpm check` | Run checks for errors in your code | +| `pnpm format` | Format your code using Biome | +| `pnpm new-post ` | Create a new post | +| `pnpm astro ...` | Run CLI commands like `astro add`, `astro check` | +| `pnpm astro --help` | Get help using the Astro CLI | + +## ✏️ Contributing + +Check out the [Contributing Guide](https://github.com/saicaca/fuwari/blob/main/CONTRIBUTING.md) for details on how to contribute to this project. + +## 📄 License + +This project is licensed under the MIT License. + +[![FOSSA Status](https://app.fossa.com/api/projects/git%2Bgithub.com%2Fsaicaca%2Ffuwari.svg?type=large&issueType=license)](https://app.fossa.com/projects/git%2Bgithub.com%2Fsaicaca%2Ffuwari?ref=badge_large&issueType=license) diff --git a/astro.config.mjs b/astro.config.mjs new file mode 100644 index 0000000..78e05a7 --- /dev/null +++ b/astro.config.mjs @@ -0,0 +1,178 @@ +import sitemap from "@astrojs/sitemap"; +import svelte from "@astrojs/svelte"; +import tailwind from "@astrojs/tailwind"; +import { pluginCollapsibleSections } from "@expressive-code/plugin-collapsible-sections"; +import { pluginLineNumbers } from "@expressive-code/plugin-line-numbers"; +import swup from "@swup/astro"; +import expressiveCode from "astro-expressive-code"; +import icon from "astro-icon"; +import { defineConfig } from "astro/config"; +import rehypeAutolinkHeadings from "rehype-autolink-headings"; +import rehypeComponents from "rehype-components"; /* Render the custom directive content */ +import rehypeKatex from "rehype-katex"; +import rehypeSlug from "rehype-slug"; +import remarkDirective from "remark-directive"; /* Handle directives */ +import remarkGithubAdmonitionsToDirectives from "remark-github-admonitions-to-directives"; +import remarkMath from "remark-math"; +import remarkSectionize from "remark-sectionize"; +import { expressiveCodeConfig } from "./src/config.ts"; +import { pluginLanguageBadge } from "./src/plugins/expressive-code/language-badge.ts"; +import { AdmonitionComponent } from "./src/plugins/rehype-component-admonition.mjs"; +import { GithubCardComponent } from "./src/plugins/rehype-component-github-card.mjs"; +import { parseDirectiveNode } from "./src/plugins/remark-directive-rehype.js"; +import { remarkExcerpt } from "./src/plugins/remark-excerpt.js"; +import { remarkReadingTime } from "./src/plugins/remark-reading-time.mjs"; +import { pluginCustomCopyButton } from "./src/plugins/expressive-code/custom-copy-button.js"; + +// https://astro.build/config +export default defineConfig({ + site: "https://fuwari.vercel.app/", + base: "/", + trailingSlash: "always", + integrations: [ + tailwind({ + nesting: true, + }), + swup({ + theme: false, + animationClass: "transition-swup-", // see https://swup.js.org/options/#animationselector + // the default value `transition-` cause transition delay + // when the Tailwind class `transition-all` is used + containers: ["main", "#toc"], + smoothScrolling: true, + cache: true, + preload: true, + accessibility: true, + updateHead: true, + updateBodyClass: false, + globalInstance: true, + }), + icon({ + include: { + "preprocess: vitePreprocess(),": ["*"], + "fa6-brands": ["*"], + "fa6-regular": ["*"], + "fa6-solid": ["*"], + }, + }), + expressiveCode({ + themes: [expressiveCodeConfig.theme, expressiveCodeConfig.theme], + plugins: [ + pluginCollapsibleSections(), + pluginLineNumbers(), + pluginLanguageBadge(), + pluginCustomCopyButton() + ], + defaultProps: { + wrap: true, + overridesByLang: { + 'shellsession': { + showLineNumbers: false, + }, + }, + }, + styleOverrides: { + codeBackground: "var(--codeblock-bg)", + borderRadius: "0.75rem", + borderColor: "none", + codeFontSize: "0.875rem", + codeFontFamily: "'JetBrains Mono Variable', ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, 'Liberation Mono', 'Courier New', monospace", + codeLineHeight: "1.5rem", + frames: { + editorBackground: "var(--codeblock-bg)", + terminalBackground: "var(--codeblock-bg)", + terminalTitlebarBackground: "var(--codeblock-topbar-bg)", + editorTabBarBackground: "var(--codeblock-topbar-bg)", + editorActiveTabBackground: "none", + editorActiveTabIndicatorBottomColor: "var(--primary)", + editorActiveTabIndicatorTopColor: "none", + editorTabBarBorderBottomColor: "var(--codeblock-topbar-bg)", + terminalTitlebarBorderBottomColor: "none" + }, + textMarkers: { + delHue: 0, + insHue: 180, + markHue: 250 + } + }, + frames: { + showCopyToClipboardButton: false, + } + }), + svelte(), + sitemap(), + ], + markdown: { + remarkPlugins: [ + remarkMath, + remarkReadingTime, + remarkExcerpt, + remarkGithubAdmonitionsToDirectives, + remarkDirective, + remarkSectionize, + parseDirectiveNode, + ], + rehypePlugins: [ + rehypeKatex, + rehypeSlug, + [ + rehypeComponents, + { + components: { + github: GithubCardComponent, + note: (x, y) => AdmonitionComponent(x, y, "note"), + tip: (x, y) => AdmonitionComponent(x, y, "tip"), + important: (x, y) => AdmonitionComponent(x, y, "important"), + caution: (x, y) => AdmonitionComponent(x, y, "caution"), + warning: (x, y) => AdmonitionComponent(x, y, "warning"), + }, + }, + ], + [ + rehypeAutolinkHeadings, + { + behavior: "append", + properties: { + className: ["anchor"], + }, + content: { + type: "element", + tagName: "span", + properties: { + className: ["anchor-icon"], + "data-pagefind-ignore": true, + }, + children: [ + { + type: "text", + value: "#", + }, + ], + }, + }, + ], + ], + }, + vite: { + server: { + watch: { + ignored: ['**/.obsidian/**', '**/_bases/**', '**/bases/**', '**/_home/**', '**/home/**', '**/_base/**', '**/base/**'] + } + }, + assetsInclude: ['**/*.base', '**/.obsidian/**', '**/_bases/**'], + build: { + rollupOptions: { + onwarn(warning, warn) { + // temporarily suppress this warning + if ( + warning.message.includes("is dynamically imported by") && + warning.message.includes("but also statically imported by") + ) { + return; + } + warn(warning); + }, + }, + }, + }, +}); diff --git a/biome.json b/biome.json new file mode 100644 index 0000000..b35dc59 --- /dev/null +++ b/biome.json @@ -0,0 +1,63 @@ +{ + "$schema": "https://biomejs.dev/schemas/2.2.0/schema.json", + "vcs": { + "enabled": false, + "clientKind": "git", + "useIgnoreFile": false + }, + "files": { + "ignoreUnknown": false, + "includes": [ + "**", + "!**/src/**/*.css", + "!**/src/public/**/*", + "!**/dist/**/*", + "!**/node_modules/**/*" + ] + }, + "formatter": { + "enabled": true, + "indentStyle": "tab" + }, + "assist": { "actions": { "source": { "organizeImports": "on" } } }, + "linter": { + "enabled": true, + "rules": { + "recommended": true, + "style": { + "noParameterAssign": "error", + "useAsConstAssertion": "error", + "useDefaultParameterLast": "error", + "useEnumInitializers": "error", + "useSelfClosingElements": "error", + "useSingleVarDeclarator": "error", + "noUnusedTemplateLiteral": "error", + "useNumberNamespace": "error", + "noInferrableTypes": "error", + "noUselessElse": "error" + } + } + }, + "javascript": { + "formatter": { + "quoteStyle": "double" + } + }, + "overrides": [ + { + "includes": ["**/*.svelte", "**/*.astro", "**/*.vue"], + "linter": { + "rules": { + "style": { + "useConst": "off", + "useImportType": "off" + }, + "correctness": { + "noUnusedVariables": "off", + "noUnusedImports": "off" + } + } + } + } + ] +} diff --git a/deno.lock b/deno.lock new file mode 100644 index 0000000..0f5cb4b --- /dev/null +++ b/deno.lock @@ -0,0 +1,7580 @@ +{ + "version": "5", + "specifiers": { + "npm:@astrojs/check@~0.9.6": "0.9.6_typescript@5.9.3", + "npm:@astrojs/rss@^4.0.14": "4.0.15", + "npm:@astrojs/sitemap@^3.6.0": "3.7.0", + "npm:@astrojs/svelte@7.2.3": "7.2.3_astro@5.13.10__typescript@5.9.3__stylus@0.64.0__vite@6.4.1___stylus@0.64.0___picomatch@4.0.3__zod@3.25.76_svelte@5.53.6__acorn@8.16.0_typescript@5.9.3_vite@6.4.1__stylus@0.64.0__picomatch@4.0.3_stylus@0.64.0", + "npm:@astrojs/tailwind@^6.0.2": "6.0.2_astro@5.13.10__typescript@5.9.3__stylus@0.64.0__vite@6.4.1___stylus@0.64.0___picomatch@4.0.3__zod@3.25.76_tailwindcss@3.4.19__postcss@8.5.6_postcss@8.5.6_typescript@5.9.3_stylus@0.64.0", + "npm:@astrojs/ts-plugin@^1.10.6": "1.10.6", + "npm:@biomejs/biome@2.2.5": "2.2.5", + "npm:@expressive-code/core@~0.41.4": "0.41.7_postcss@8.5.6", + "npm:@expressive-code/plugin-collapsible-sections@~0.41.4": "0.41.7", + "npm:@expressive-code/plugin-line-numbers@~0.41.4": "0.41.7", + "npm:@fontsource-variable/jetbrains-mono@^5.2.8": "5.2.8", + "npm:@fontsource/roboto@^5.2.9": "5.2.10", + "npm:@iconify-json/fa6-brands@^1.2.6": "1.2.6", + "npm:@iconify-json/fa6-regular@^1.2.4": "1.2.4", + "npm:@iconify-json/fa6-solid@^1.2.4": "1.2.4", + "npm:@iconify-json/material-symbols@^1.2.50": "1.2.59", + "npm:@iconify/svelte@^4.2.0": "4.2.0_svelte@5.53.6__acorn@8.16.0", + "npm:@rollup/plugin-yaml@^4.1.2": "4.1.2", + "npm:@swup/astro@^1.7.0": "1.8.0_swup@4.8.3", + "npm:@tailwindcss/typography@~0.5.19": "0.5.19_tailwindcss@3.4.19__postcss@8.5.6", + "npm:@types/hast@^3.0.4": "3.0.4", + "npm:@types/markdown-it@^14.1.2": "14.1.2", + "npm:@types/mdast@^4.0.4": "4.0.4", + "npm:@types/sanitize-html@^2.16.0": "2.16.0", + "npm:astro-expressive-code@~0.41.4": "0.41.7_astro@5.13.10__typescript@5.9.3__stylus@0.64.0__vite@6.4.1___stylus@0.64.0___picomatch@4.0.3__zod@3.25.76_typescript@5.9.3_stylus@0.64.0", + "npm:astro-icon@^1.1.5": "1.1.5", + "npm:astro@5.13.10": "5.13.10_typescript@5.9.3_stylus@0.64.0_vite@6.4.1__stylus@0.64.0__picomatch@4.0.3_zod@3.25.76", + "npm:hastscript@^9.0.1": "9.0.1", + "npm:katex@~0.16.27": "0.16.33", + "npm:markdown-it@^14.1.0": "14.1.1", + "npm:mdast-util-to-string@4": "4.0.0", + "npm:overlayscrollbars@^2.12.0": "2.14.0", + "npm:pagefind@^1.4.0": "1.4.0", + "npm:photoswipe@^5.4.4": "5.4.4", + "npm:postcss-import@^16.1.1": "16.1.1_postcss@8.5.6", + "npm:postcss-nesting@^13.0.2": "13.0.2_postcss@8.5.6_postcss-selector-parser@7.1.1", + "npm:reading-time@^1.5.0": "1.5.0", + "npm:rehype-autolink-headings@^7.1.0": "7.1.0", + "npm:rehype-components@0.3": "0.3.0", + "npm:rehype-katex@^7.0.1": "7.0.1", + "npm:rehype-slug@6": "6.0.0", + "npm:remark-directive-rehype@~0.4.2": "0.4.2", + "npm:remark-directive@^3.0.1": "3.0.1", + "npm:remark-github-admonitions-to-directives@^1.0.5": "1.0.5", + "npm:remark-math@6": "6.0.0", + "npm:remark-sectionize@^2.1.0": "2.1.0", + "npm:sanitize-html@^2.17.0": "2.17.1", + "npm:sharp@~0.34.5": "0.34.5", + "npm:stylus@0.64": "0.64.0", + "npm:svelte@^5.39.8": "5.53.6_acorn@8.16.0", + "npm:tailwindcss@^3.4.19": "3.4.19_postcss@8.5.6", + "npm:typescript@^5.9.3": "5.9.3", + "npm:unist-util-visit@5": "5.1.0" + }, + "npm": { + "@adobe/css-tools@4.3.3": { + "integrity": "sha512-rE0Pygv0sEZ4vBWHlAgJLGDU7Pm8xoO6p3wsEceb7GYAjScrOHpEo8KK/eVkAcnSM+slAEtXjA2JpdjLp4fJQQ==" + }, + "@alloc/quick-lru@5.2.0": { + "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==" + }, + "@antfu/install-pkg@1.1.0": { + "integrity": "sha512-MGQsmw10ZyI+EJo45CdSER4zEb+p31LpDAFp2Z3gkSd1yqVZGi0Ebx++YTEMonJy4oChEMLsxZ64j8FH6sSqtQ==", + "dependencies": [ + "package-manager-detector", + "tinyexec@1.0.2" + ] + }, + "@antfu/utils@8.1.1": { + "integrity": "sha512-Mex9nXf9vR6AhcXmMrlz/HVgYYZpVGJ6YlPgwl7UnaFpnshXs6EK/oa5Gpf3CzENMjkvEx2tQtntGnb7UtSTOQ==" + }, + "@astrojs/check@0.9.6_typescript@5.9.3": { + "integrity": "sha512-jlaEu5SxvSgmfGIFfNgcn5/f+29H61NJzEMfAZ82Xopr4XBchXB1GVlcJsE+elUlsYSbXlptZLX+JMG3b/wZEA==", + "dependencies": [ + "@astrojs/language-server", + "chokidar@4.0.3", + "kleur@4.1.5", + "typescript@5.9.3", + "yargs" + ], + "bin": true + }, + "@astrojs/compiler@2.13.1": { + "integrity": "sha512-f3FN83d2G/v32ipNClRKgYv30onQlMZX1vCeZMjPsMMPl1mDpmbl0+N5BYo4S/ofzqJyS5hvwacEo0CCVDn/Qg==" + }, + "@astrojs/internal-helpers@0.7.3": { + "integrity": "sha512-6Pl0bQEIChuW5wqN7jdKrzWfCscW2rG/Cz+fzt4PhSQX2ivBpnhXgFUCs0M3DCYvjYHnPVG2W36X5rmFjZ62sw==" + }, + "@astrojs/language-server@2.16.3_typescript@5.9.3_@volar+language-service@2.4.28": { + "integrity": "sha512-yO5K7RYCMXUfeDlnU6UnmtnoXzpuQc0yhlaCNZ67k1C/MiwwwvMZz+LGa+H35c49w5QBfvtr4w4Zcf5PcH8uYA==", + "dependencies": [ + "@astrojs/compiler", + "@astrojs/yaml2ts", + "@jridgewell/sourcemap-codec", + "@volar/kit", + "@volar/language-core", + "@volar/language-server", + "@volar/language-service", + "muggle-string", + "tinyglobby", + "volar-service-css", + "volar-service-emmet", + "volar-service-html", + "volar-service-prettier", + "volar-service-typescript", + "volar-service-typescript-twoslash-queries", + "volar-service-yaml", + "vscode-html-languageservice", + "vscode-uri" + ], + "bin": true + }, + "@astrojs/markdown-remark@6.3.7": { + "integrity": "sha512-KXGdq6/BC18doBCYXp08alHlWChH0hdD2B1qv9wIyOHbvwI5K6I7FhSta8dq1hBQNdun8YkKPR013D/Hm8xd0g==", + "dependencies": [ + "@astrojs/internal-helpers", + "@astrojs/prism", + "github-slugger", + "hast-util-from-html", + "hast-util-to-text", + "import-meta-resolve", + "js-yaml", + "mdast-util-definitions", + "rehype-raw", + "rehype-stringify", + "remark-gfm", + "remark-parse", + "remark-rehype", + "remark-smartypants", + "shiki", + "smol-toml", + "unified", + "unist-util-remove-position", + "unist-util-visit@5.1.0", + "unist-util-visit-parents@6.0.2", + "vfile" + ] + }, + "@astrojs/prism@3.3.0": { + "integrity": "sha512-q8VwfU/fDZNoDOf+r7jUnMC2//H2l0TuQ6FkGJL8vD8nw/q5KiL3DS1KKBI3QhI9UQhpJ5dc7AtqfbXWuOgLCQ==", + "dependencies": [ + "prismjs" + ] + }, + "@astrojs/rss@4.0.15": { + "integrity": "sha512-uXO/k6AhRkIDXmRoc6xQpoPZrimQNUmS43X4+60yunfuMNHtSRN5e/FiSi7NApcZqmugSMc5+cJi8ovqgO+qIg==", + "dependencies": [ + "fast-xml-parser", + "piccolore" + ] + }, + "@astrojs/sitemap@3.7.0": { + "integrity": "sha512-+qxjUrz6Jcgh+D5VE1gKUJTA3pSthuPHe6Ao5JCxok794Lewx8hBFaWHtOnN0ntb2lfOf7gvOi9TefUswQ/ZVA==", + "dependencies": [ + "sitemap", + "stream-replace-string", + "zod" + ] + }, + "@astrojs/svelte@7.2.3_astro@5.13.10__typescript@5.9.3__stylus@0.64.0__vite@6.4.1___stylus@0.64.0___picomatch@4.0.3__zod@3.25.76_svelte@5.53.6__acorn@8.16.0_typescript@5.9.3_vite@6.4.1__stylus@0.64.0__picomatch@4.0.3_stylus@0.64.0": { + "integrity": "sha512-45D9xKOvYBQ/Z7lgt/g8Mli1cD5rJxnnz44i6MDSa2oKxMVocT6pHT/+Uou1a3Ch3yGZ5KpJRyJC6HWCOzreqg==", + "dependencies": [ + "@sveltejs/vite-plugin-svelte", + "astro", + "svelte", + "svelte2tsx", + "typescript@5.9.3", + "vite" + ] + }, + "@astrojs/tailwind@6.0.2_astro@5.13.10__typescript@5.9.3__stylus@0.64.0__vite@6.4.1___stylus@0.64.0___picomatch@4.0.3__zod@3.25.76_tailwindcss@3.4.19__postcss@8.5.6_postcss@8.5.6_typescript@5.9.3_stylus@0.64.0": { + "integrity": "sha512-j3mhLNeugZq6A8dMNXVarUa8K6X9AW+QHU9u3lKNrPLMHhOQ0S7VeWhHwEeJFpEK1BTKEUY1U78VQv2gN6hNGg==", + "dependencies": [ + "astro", + "autoprefixer", + "postcss", + "postcss-load-config@4.0.2_postcss@8.5.6", + "tailwindcss" + ] + }, + "@astrojs/telemetry@3.3.0": { + "integrity": "sha512-UFBgfeldP06qu6khs/yY+q1cDAaArM2/7AEIqQ9Cuvf7B1hNLq0xDrZkct+QoIGyjq56y8IaE2I3CTvG99mlhQ==", + "dependencies": [ + "ci-info", + "debug", + "dlv", + "dset", + "is-docker@3.0.0", + "is-wsl@3.1.1", + "which-pm-runs" + ] + }, + "@astrojs/ts-plugin@1.10.6": { + "integrity": "sha512-Ke5CNwxn/ozsh6THJKuayUlBToa3uiPDi2oSwcXmTdeiJ0PGr+UkdQJf9hdMgBjbIka9fhnSn3UhYamfNfJ73A==", + "dependencies": [ + "@astrojs/compiler", + "@astrojs/yaml2ts", + "@jridgewell/sourcemap-codec", + "@volar/language-core", + "@volar/typescript", + "semver@7.7.4", + "vscode-languageserver-textdocument" + ] + }, + "@astrojs/yaml2ts@0.2.2": { + "integrity": "sha512-GOfvSr5Nqy2z5XiwqTouBBpy5FyI6DEe+/g/Mk5am9SjILN1S5fOEvYK0GuWHg98yS/dobP4m8qyqw/URW35fQ==", + "dependencies": [ + "yaml@2.8.2" + ] + }, + "@babel/code-frame@7.29.0": { + "integrity": "sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==", + "dependencies": [ + "@babel/helper-validator-identifier", + "js-tokens", + "picocolors" + ] + }, + "@babel/compat-data@7.29.0": { + "integrity": "sha512-T1NCJqT/j9+cn8fvkt7jtwbLBfLC/1y1c7NtCeXFRgzGTsafi68MRv8yzkYSapBnFA6L3U2VSc02ciDzoAJhJg==" + }, + "@babel/core@7.29.0": { + "integrity": "sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA==", + "dependencies": [ + "@babel/code-frame", + "@babel/generator", + "@babel/helper-compilation-targets", + "@babel/helper-module-transforms", + "@babel/helpers", + "@babel/parser", + "@babel/template", + "@babel/traverse", + "@babel/types", + "@jridgewell/remapping", + "convert-source-map", + "debug", + "gensync", + "json5", + "semver@6.3.1" + ] + }, + "@babel/generator@7.29.1": { + "integrity": "sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw==", + "dependencies": [ + "@babel/parser", + "@babel/types", + "@jridgewell/gen-mapping", + "@jridgewell/trace-mapping", + "jsesc" + ] + }, + "@babel/helper-annotate-as-pure@7.27.3": { + "integrity": "sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg==", + "dependencies": [ + "@babel/types" + ] + }, + "@babel/helper-compilation-targets@7.28.6": { + "integrity": "sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA==", + "dependencies": [ + "@babel/compat-data", + "@babel/helper-validator-option", + "browserslist", + "lru-cache@5.1.1", + "semver@6.3.1" + ] + }, + "@babel/helper-create-class-features-plugin@7.28.6_@babel+core@7.29.0": { + "integrity": "sha512-dTOdvsjnG3xNT9Y0AUg1wAl38y+4Rl4sf9caSQZOXdNqVn+H+HbbJ4IyyHaIqNR6SW9oJpA/RuRjsjCw2IdIow==", + "dependencies": [ + "@babel/core", + "@babel/helper-annotate-as-pure", + "@babel/helper-member-expression-to-functions", + "@babel/helper-optimise-call-expression", + "@babel/helper-replace-supers", + "@babel/helper-skip-transparent-expression-wrappers", + "@babel/traverse", + "semver@6.3.1" + ] + }, + "@babel/helper-create-regexp-features-plugin@7.28.5_@babel+core@7.29.0": { + "integrity": "sha512-N1EhvLtHzOvj7QQOUCCS3NrPJP8c5W6ZXCHDn7Yialuy1iu4r5EmIYkXlKNqT99Ciw+W0mDqWoR6HWMZlFP3hw==", + "dependencies": [ + "@babel/core", + "@babel/helper-annotate-as-pure", + "regexpu-core", + "semver@6.3.1" + ] + }, + "@babel/helper-define-polyfill-provider@0.6.6_@babel+core@7.29.0": { + "integrity": "sha512-mOAsxeeKkUKayvZR3HeTYD/fICpCPLJrU5ZjelT/PA6WHtNDBOE436YiaEUvHN454bRM3CebhDsIpieCc4texA==", + "dependencies": [ + "@babel/core", + "@babel/helper-compilation-targets", + "@babel/helper-plugin-utils", + "debug", + "lodash.debounce", + "resolve" + ] + }, + "@babel/helper-globals@7.28.0": { + "integrity": "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==" + }, + "@babel/helper-member-expression-to-functions@7.28.5": { + "integrity": "sha512-cwM7SBRZcPCLgl8a7cY0soT1SptSzAlMH39vwiRpOQkJlh53r5hdHwLSCZpQdVLT39sZt+CRpNwYG4Y2v77atg==", + "dependencies": [ + "@babel/traverse", + "@babel/types" + ] + }, + "@babel/helper-module-imports@7.28.6": { + "integrity": "sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw==", + "dependencies": [ + "@babel/traverse", + "@babel/types" + ] + }, + "@babel/helper-module-transforms@7.28.6_@babel+core@7.29.0": { + "integrity": "sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA==", + "dependencies": [ + "@babel/core", + "@babel/helper-module-imports", + "@babel/helper-validator-identifier", + "@babel/traverse" + ] + }, + "@babel/helper-optimise-call-expression@7.27.1": { + "integrity": "sha512-URMGH08NzYFhubNSGJrpUEphGKQwMQYBySzat5cAByY1/YgIRkULnIy3tAMeszlL/so2HbeilYloUmSpd7GdVw==", + "dependencies": [ + "@babel/types" + ] + }, + "@babel/helper-plugin-utils@7.28.6": { + "integrity": "sha512-S9gzZ/bz83GRysI7gAD4wPT/AI3uCnY+9xn+Mx/KPs2JwHJIz1W8PZkg2cqyt3RNOBM8ejcXhV6y8Og7ly/Dug==" + }, + "@babel/helper-remap-async-to-generator@7.27.1_@babel+core@7.29.0": { + "integrity": "sha512-7fiA521aVw8lSPeI4ZOD3vRFkoqkJcS+z4hFo82bFSH/2tNd6eJ5qCVMS5OzDmZh/kaHQeBaeyxK6wljcPtveA==", + "dependencies": [ + "@babel/core", + "@babel/helper-annotate-as-pure", + "@babel/helper-wrap-function", + "@babel/traverse" + ] + }, + "@babel/helper-replace-supers@7.28.6_@babel+core@7.29.0": { + "integrity": "sha512-mq8e+laIk94/yFec3DxSjCRD2Z0TAjhVbEJY3UQrlwVo15Lmt7C2wAUbK4bjnTs4APkwsYLTahXRraQXhb1WCg==", + "dependencies": [ + "@babel/core", + "@babel/helper-member-expression-to-functions", + "@babel/helper-optimise-call-expression", + "@babel/traverse" + ] + }, + "@babel/helper-skip-transparent-expression-wrappers@7.27.1": { + "integrity": "sha512-Tub4ZKEXqbPjXgWLl2+3JpQAYBJ8+ikpQ2Ocj/q/r0LwE3UhENh7EUabyHjz2kCEsrRY83ew2DQdHluuiDQFzg==", + "dependencies": [ + "@babel/traverse", + "@babel/types" + ] + }, + "@babel/helper-string-parser@7.27.1": { + "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==" + }, + "@babel/helper-validator-identifier@7.28.5": { + "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==" + }, + "@babel/helper-validator-option@7.27.1": { + "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==" + }, + "@babel/helper-wrap-function@7.28.6": { + "integrity": "sha512-z+PwLziMNBeSQJonizz2AGnndLsP2DeGHIxDAn+wdHOGuo4Fo1x1HBPPXeE9TAOPHNNWQKCSlA2VZyYyyibDnQ==", + "dependencies": [ + "@babel/template", + "@babel/traverse", + "@babel/types" + ] + }, + "@babel/helpers@7.28.6": { + "integrity": "sha512-xOBvwq86HHdB7WUDTfKfT/Vuxh7gElQ+Sfti2Cy6yIWNW05P8iUslOVcZ4/sKbE+/jQaukQAdz/gf3724kYdqw==", + "dependencies": [ + "@babel/template", + "@babel/types" + ] + }, + "@babel/parser@7.29.0": { + "integrity": "sha512-IyDgFV5GeDUVX4YdF/3CPULtVGSXXMLh1xVIgdCgxApktqnQV0r7/8Nqthg+8YLGaAtdyIlo2qIdZrbCv4+7ww==", + "dependencies": [ + "@babel/types" + ], + "bin": true + }, + "@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.28.5_@babel+core@7.29.0": { + "integrity": "sha512-87GDMS3tsmMSi/3bWOte1UblL+YUTFMV8SZPZ2eSEL17s74Cw/l63rR6NmGVKMYW2GYi85nE+/d6Hw5N0bEk2Q==", + "dependencies": [ + "@babel/core", + "@babel/helper-plugin-utils", + "@babel/traverse" + ] + }, + "@babel/plugin-bugfix-safari-class-field-initializer-scope@7.27.1_@babel+core@7.29.0": { + "integrity": "sha512-qNeq3bCKnGgLkEXUuFry6dPlGfCdQNZbn7yUAPCInwAJHMU7THJfrBSozkcWq5sNM6RcF3S8XyQL2A52KNR9IA==", + "dependencies": [ + "@babel/core", + "@babel/helper-plugin-utils" + ] + }, + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.27.1_@babel+core@7.29.0": { + "integrity": "sha512-g4L7OYun04N1WyqMNjldFwlfPCLVkgB54A/YCXICZYBsvJJE3kByKv9c9+R/nAfmIfjl2rKYLNyMHboYbZaWaA==", + "dependencies": [ + "@babel/core", + "@babel/helper-plugin-utils" + ] + }, + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.27.1_@babel+core@7.29.0": { + "integrity": "sha512-oO02gcONcD5O1iTLi/6frMJBIwWEHceWGSGqrpCmEL8nogiS6J9PBlE48CaK20/Jx1LuRml9aDftLgdjXT8+Cw==", + "dependencies": [ + "@babel/core", + "@babel/helper-plugin-utils", + "@babel/helper-skip-transparent-expression-wrappers", + "@babel/plugin-transform-optional-chaining" + ] + }, + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.28.6_@babel+core@7.29.0": { + "integrity": "sha512-a0aBScVTlNaiUe35UtfxAN7A/tehvvG4/ByO6+46VPKTRSlfnAFsgKy0FUh+qAkQrDTmhDkT+IBOKlOoMUxQ0g==", + "dependencies": [ + "@babel/core", + "@babel/helper-plugin-utils", + "@babel/traverse" + ] + }, + "@babel/plugin-proposal-class-properties@7.12.1_@babel+core@7.29.0": { + "integrity": "sha512-cKp3dlQsFsEs5CWKnN7BnSHOd0EOW8EKpEjkoz1pO2E5KzIDNV9Ros1b0CnmbVgAGXJubOYVBOGCT1OmJwOI7w==", + "dependencies": [ + "@babel/core", + "@babel/helper-create-class-features-plugin", + "@babel/helper-plugin-utils" + ], + "deprecated": true + }, + "@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2_@babel+core@7.29.0": { + "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", + "dependencies": [ + "@babel/core" + ] + }, + "@babel/plugin-syntax-flow@7.28.6_@babel+core@7.29.0": { + "integrity": "sha512-D+OrJumc9McXNEBI/JmFnc/0uCM2/Y3PEBG3gfV3QIYkKv5pvnpzFrl1kYCrcHJP8nOeFB/SHi1IHz29pNGuew==", + "dependencies": [ + "@babel/core", + "@babel/helper-plugin-utils" + ] + }, + "@babel/plugin-syntax-import-assertions@7.28.6_@babel+core@7.29.0": { + "integrity": "sha512-pSJUpFHdx9z5nqTSirOCMtYVP2wFgoWhP0p3g8ONK/4IHhLIBd0B9NYqAvIUAhq+OkhO4VM1tENCt0cjlsNShw==", + "dependencies": [ + "@babel/core", + "@babel/helper-plugin-utils" + ] + }, + "@babel/plugin-syntax-import-attributes@7.28.6_@babel+core@7.29.0": { + "integrity": "sha512-jiLC0ma9XkQT3TKJ9uYvlakm66Pamywo+qwL+oL8HJOvc6TWdZXVfhqJr8CCzbSGUAbDOzlGHJC1U+vRfLQDvw==", + "dependencies": [ + "@babel/core", + "@babel/helper-plugin-utils" + ] + }, + "@babel/plugin-syntax-import-meta@7.10.4_@babel+core@7.29.0": { + "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", + "dependencies": [ + "@babel/core", + "@babel/helper-plugin-utils" + ] + }, + "@babel/plugin-syntax-jsx@7.28.6_@babel+core@7.29.0": { + "integrity": "sha512-wgEmr06G6sIpqr8YDwA2dSRTE3bJ+V0IfpzfSY3Lfgd7YWOaAdlykvJi13ZKBt8cZHfgH1IXN+CL656W3uUa4w==", + "dependencies": [ + "@babel/core", + "@babel/helper-plugin-utils" + ] + }, + "@babel/plugin-syntax-unicode-sets-regex@7.18.6_@babel+core@7.29.0": { + "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==", + "dependencies": [ + "@babel/core", + "@babel/helper-create-regexp-features-plugin", + "@babel/helper-plugin-utils" + ] + }, + "@babel/plugin-transform-arrow-functions@7.27.1_@babel+core@7.29.0": { + "integrity": "sha512-8Z4TGic6xW70FKThA5HYEKKyBpOOsucTOD1DjU3fZxDg+K3zBJcXMFnt/4yQiZnf5+MiOMSXQ9PaEK/Ilh1DeA==", + "dependencies": [ + "@babel/core", + "@babel/helper-plugin-utils" + ] + }, + "@babel/plugin-transform-async-generator-functions@7.29.0_@babel+core@7.29.0": { + "integrity": "sha512-va0VdWro4zlBr2JsXC+ofCPB2iG12wPtVGTWFx2WLDOM3nYQZZIGP82qku2eW/JR83sD+k2k+CsNtyEbUqhU6w==", + "dependencies": [ + "@babel/core", + "@babel/helper-plugin-utils", + "@babel/helper-remap-async-to-generator", + "@babel/traverse" + ] + }, + "@babel/plugin-transform-async-to-generator@7.28.6_@babel+core@7.29.0": { + "integrity": "sha512-ilTRcmbuXjsMmcZ3HASTe4caH5Tpo93PkTxF9oG2VZsSWsahydmcEHhix9Ik122RcTnZnUzPbmux4wh1swfv7g==", + "dependencies": [ + "@babel/core", + "@babel/helper-module-imports", + "@babel/helper-plugin-utils", + "@babel/helper-remap-async-to-generator" + ] + }, + "@babel/plugin-transform-block-scoped-functions@7.27.1_@babel+core@7.29.0": { + "integrity": "sha512-cnqkuOtZLapWYZUYM5rVIdv1nXYuFVIltZ6ZJ7nIj585QsjKM5dhL2Fu/lICXZ1OyIAFc7Qy+bvDAtTXqGrlhg==", + "dependencies": [ + "@babel/core", + "@babel/helper-plugin-utils" + ] + }, + "@babel/plugin-transform-block-scoping@7.28.6_@babel+core@7.29.0": { + "integrity": "sha512-tt/7wOtBmwHPNMPu7ax4pdPz6shjFrmHDghvNC+FG9Qvj7D6mJcoRQIF5dy4njmxR941l6rgtvfSB2zX3VlUIw==", + "dependencies": [ + "@babel/core", + "@babel/helper-plugin-utils" + ] + }, + "@babel/plugin-transform-class-properties@7.28.6_@babel+core@7.29.0": { + "integrity": "sha512-dY2wS3I2G7D697VHndN91TJr8/AAfXQNt5ynCTI/MpxMsSzHp+52uNivYT5wCPax3whc47DR8Ba7cmlQMg24bw==", + "dependencies": [ + "@babel/core", + "@babel/helper-create-class-features-plugin", + "@babel/helper-plugin-utils" + ] + }, + "@babel/plugin-transform-class-static-block@7.28.6_@babel+core@7.29.0": { + "integrity": "sha512-rfQ++ghVwTWTqQ7w8qyDxL1XGihjBss4CmTgGRCTAC9RIbhVpyp4fOeZtta0Lbf+dTNIVJer6ych2ibHwkZqsQ==", + "dependencies": [ + "@babel/core", + "@babel/helper-create-class-features-plugin", + "@babel/helper-plugin-utils" + ] + }, + "@babel/plugin-transform-classes@7.28.6_@babel+core@7.29.0": { + "integrity": "sha512-EF5KONAqC5zAqT783iMGuM2ZtmEBy+mJMOKl2BCvPZ2lVrwvXnB6o+OBWCS+CoeCCpVRF2sA2RBKUxvT8tQT5Q==", + "dependencies": [ + "@babel/core", + "@babel/helper-annotate-as-pure", + "@babel/helper-compilation-targets", + "@babel/helper-globals", + "@babel/helper-plugin-utils", + "@babel/helper-replace-supers", + "@babel/traverse" + ] + }, + "@babel/plugin-transform-computed-properties@7.28.6_@babel+core@7.29.0": { + "integrity": "sha512-bcc3k0ijhHbc2lEfpFHgx7eYw9KNXqOerKWfzbxEHUGKnS3sz9C4CNL9OiFN1297bDNfUiSO7DaLzbvHQQQ1BQ==", + "dependencies": [ + "@babel/core", + "@babel/helper-plugin-utils", + "@babel/template" + ] + }, + "@babel/plugin-transform-destructuring@7.28.5_@babel+core@7.29.0": { + "integrity": "sha512-Kl9Bc6D0zTUcFUvkNuQh4eGXPKKNDOJQXVyyM4ZAQPMveniJdxi8XMJwLo+xSoW3MIq81bD33lcUe9kZpl0MCw==", + "dependencies": [ + "@babel/core", + "@babel/helper-plugin-utils", + "@babel/traverse" + ] + }, + "@babel/plugin-transform-dotall-regex@7.28.6_@babel+core@7.29.0": { + "integrity": "sha512-SljjowuNKB7q5Oayv4FoPzeB74g3QgLt8IVJw9ADvWy3QnUb/01aw8I4AVv8wYnPvQz2GDDZ/g3GhcNyDBI4Bg==", + "dependencies": [ + "@babel/core", + "@babel/helper-create-regexp-features-plugin", + "@babel/helper-plugin-utils" + ] + }, + "@babel/plugin-transform-duplicate-keys@7.27.1_@babel+core@7.29.0": { + "integrity": "sha512-MTyJk98sHvSs+cvZ4nOauwTTG1JeonDjSGvGGUNHreGQns+Mpt6WX/dVzWBHgg+dYZhkC4X+zTDfkTU+Vy9y7Q==", + "dependencies": [ + "@babel/core", + "@babel/helper-plugin-utils" + ] + }, + "@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.29.0_@babel+core@7.29.0": { + "integrity": "sha512-zBPcW2lFGxdiD8PUnPwJjag2J9otbcLQzvbiOzDxpYXyCuYX9agOwMPGn1prVH0a4qzhCKu24rlH4c1f7yA8rw==", + "dependencies": [ + "@babel/core", + "@babel/helper-create-regexp-features-plugin", + "@babel/helper-plugin-utils" + ] + }, + "@babel/plugin-transform-dynamic-import@7.27.1_@babel+core@7.29.0": { + "integrity": "sha512-MHzkWQcEmjzzVW9j2q8LGjwGWpG2mjwaaB0BNQwst3FIjqsg8Ct/mIZlvSPJvfi9y2AC8mi/ktxbFVL9pZ1I4A==", + "dependencies": [ + "@babel/core", + "@babel/helper-plugin-utils" + ] + }, + "@babel/plugin-transform-explicit-resource-management@7.28.6_@babel+core@7.29.0": { + "integrity": "sha512-Iao5Konzx2b6g7EPqTy40UZbcdXE126tTxVFr/nAIj+WItNxjKSYTEw3RC+A2/ZetmdJsgueL1KhaMCQHkLPIg==", + "dependencies": [ + "@babel/core", + "@babel/helper-plugin-utils", + "@babel/plugin-transform-destructuring" + ] + }, + "@babel/plugin-transform-exponentiation-operator@7.28.6_@babel+core@7.29.0": { + "integrity": "sha512-WitabqiGjV/vJ0aPOLSFfNY1u9U3R7W36B03r5I2KoNix+a3sOhJ3pKFB3R5It9/UiK78NiO0KE9P21cMhlPkw==", + "dependencies": [ + "@babel/core", + "@babel/helper-plugin-utils" + ] + }, + "@babel/plugin-transform-export-namespace-from@7.27.1_@babel+core@7.29.0": { + "integrity": "sha512-tQvHWSZ3/jH2xuq/vZDy0jNn+ZdXJeM8gHvX4lnJmsc3+50yPlWdZXIc5ay+umX+2/tJIqHqiEqcJvxlmIvRvQ==", + "dependencies": [ + "@babel/core", + "@babel/helper-plugin-utils" + ] + }, + "@babel/plugin-transform-flow-strip-types@7.27.1_@babel+core@7.29.0": { + "integrity": "sha512-G5eDKsu50udECw7DL2AcsysXiQyB7Nfg521t2OAJ4tbfTJ27doHLeF/vlI1NZGlLdbb/v+ibvtL1YBQqYOwJGg==", + "dependencies": [ + "@babel/core", + "@babel/helper-plugin-utils", + "@babel/plugin-syntax-flow" + ] + }, + "@babel/plugin-transform-for-of@7.27.1_@babel+core@7.29.0": { + "integrity": "sha512-BfbWFFEJFQzLCQ5N8VocnCtA8J1CLkNTe2Ms2wocj75dd6VpiqS5Z5quTYcUoo4Yq+DN0rtikODccuv7RU81sw==", + "dependencies": [ + "@babel/core", + "@babel/helper-plugin-utils", + "@babel/helper-skip-transparent-expression-wrappers" + ] + }, + "@babel/plugin-transform-function-name@7.27.1_@babel+core@7.29.0": { + "integrity": "sha512-1bQeydJF9Nr1eBCMMbC+hdwmRlsv5XYOMu03YSWFwNs0HsAmtSxxF1fyuYPqemVldVyFmlCU7w8UE14LupUSZQ==", + "dependencies": [ + "@babel/core", + "@babel/helper-compilation-targets", + "@babel/helper-plugin-utils", + "@babel/traverse" + ] + }, + "@babel/plugin-transform-json-strings@7.28.6_@babel+core@7.29.0": { + "integrity": "sha512-Nr+hEN+0geQkzhbdgQVPoqr47lZbm+5fCUmO70722xJZd0Mvb59+33QLImGj6F+DkK3xgDi1YVysP8whD6FQAw==", + "dependencies": [ + "@babel/core", + "@babel/helper-plugin-utils" + ] + }, + "@babel/plugin-transform-literals@7.27.1_@babel+core@7.29.0": { + "integrity": "sha512-0HCFSepIpLTkLcsi86GG3mTUzxV5jpmbv97hTETW3yzrAij8aqlD36toB1D0daVFJM8NK6GvKO0gslVQmm+zZA==", + "dependencies": [ + "@babel/core", + "@babel/helper-plugin-utils" + ] + }, + "@babel/plugin-transform-logical-assignment-operators@7.28.6_@babel+core@7.29.0": { + "integrity": "sha512-+anKKair6gpi8VsM/95kmomGNMD0eLz1NQ8+Pfw5sAwWH9fGYXT50E55ZpV0pHUHWf6IUTWPM+f/7AAff+wr9A==", + "dependencies": [ + "@babel/core", + "@babel/helper-plugin-utils" + ] + }, + "@babel/plugin-transform-member-expression-literals@7.27.1_@babel+core@7.29.0": { + "integrity": "sha512-hqoBX4dcZ1I33jCSWcXrP+1Ku7kdqXf1oeah7ooKOIiAdKQ+uqftgCFNOSzA5AMS2XIHEYeGFg4cKRCdpxzVOQ==", + "dependencies": [ + "@babel/core", + "@babel/helper-plugin-utils" + ] + }, + "@babel/plugin-transform-modules-amd@7.27.1_@babel+core@7.29.0": { + "integrity": "sha512-iCsytMg/N9/oFq6n+gFTvUYDZQOMK5kEdeYxmxt91fcJGycfxVP9CnrxoliM0oumFERba2i8ZtwRUCMhvP1LnA==", + "dependencies": [ + "@babel/core", + "@babel/helper-module-transforms", + "@babel/helper-plugin-utils" + ] + }, + "@babel/plugin-transform-modules-commonjs@7.28.6_@babel+core@7.29.0": { + "integrity": "sha512-jppVbf8IV9iWWwWTQIxJMAJCWBuuKx71475wHwYytrRGQ2CWiDvYlADQno3tcYpS/T2UUWFQp3nVtYfK/YBQrA==", + "dependencies": [ + "@babel/core", + "@babel/helper-module-transforms", + "@babel/helper-plugin-utils" + ] + }, + "@babel/plugin-transform-modules-systemjs@7.29.0_@babel+core@7.29.0": { + "integrity": "sha512-PrujnVFbOdUpw4UHiVwKvKRLMMic8+eC0CuNlxjsyZUiBjhFdPsewdXCkveh2KqBA9/waD0W1b4hXSOBQJezpQ==", + "dependencies": [ + "@babel/core", + "@babel/helper-module-transforms", + "@babel/helper-plugin-utils", + "@babel/helper-validator-identifier", + "@babel/traverse" + ] + }, + "@babel/plugin-transform-modules-umd@7.27.1_@babel+core@7.29.0": { + "integrity": "sha512-iQBE/xC5BV1OxJbp6WG7jq9IWiD+xxlZhLrdwpPkTX3ydmXdvoCpyfJN7acaIBZaOqTfr76pgzqBJflNbeRK+w==", + "dependencies": [ + "@babel/core", + "@babel/helper-module-transforms", + "@babel/helper-plugin-utils" + ] + }, + "@babel/plugin-transform-named-capturing-groups-regex@7.29.0_@babel+core@7.29.0": { + "integrity": "sha512-1CZQA5KNAD6ZYQLPw7oi5ewtDNxH/2vuCh+6SmvgDfhumForvs8a1o9n0UrEoBD8HU4djO2yWngTQlXl1NDVEQ==", + "dependencies": [ + "@babel/core", + "@babel/helper-create-regexp-features-plugin", + "@babel/helper-plugin-utils" + ] + }, + "@babel/plugin-transform-new-target@7.27.1_@babel+core@7.29.0": { + "integrity": "sha512-f6PiYeqXQ05lYq3TIfIDu/MtliKUbNwkGApPUvyo6+tc7uaR4cPjPe7DFPr15Uyycg2lZU6btZ575CuQoYh7MQ==", + "dependencies": [ + "@babel/core", + "@babel/helper-plugin-utils" + ] + }, + "@babel/plugin-transform-nullish-coalescing-operator@7.28.6_@babel+core@7.29.0": { + "integrity": "sha512-3wKbRgmzYbw24mDJXT7N+ADXw8BC/imU9yo9c9X9NKaLF1fW+e5H1U5QjMUBe4Qo4Ox/o++IyUkl1sVCLgevKg==", + "dependencies": [ + "@babel/core", + "@babel/helper-plugin-utils" + ] + }, + "@babel/plugin-transform-numeric-separator@7.28.6_@babel+core@7.29.0": { + "integrity": "sha512-SJR8hPynj8outz+SlStQSwvziMN4+Bq99it4tMIf5/Caq+3iOc0JtKyse8puvyXkk3eFRIA5ID/XfunGgO5i6w==", + "dependencies": [ + "@babel/core", + "@babel/helper-plugin-utils" + ] + }, + "@babel/plugin-transform-object-rest-spread@7.28.6_@babel+core@7.29.0": { + "integrity": "sha512-5rh+JR4JBC4pGkXLAcYdLHZjXudVxWMXbB6u6+E9lRL5TrGVbHt1TjxGbZ8CkmYw9zjkB7jutzOROArsqtncEA==", + "dependencies": [ + "@babel/core", + "@babel/helper-compilation-targets", + "@babel/helper-plugin-utils", + "@babel/plugin-transform-destructuring", + "@babel/plugin-transform-parameters", + "@babel/traverse" + ] + }, + "@babel/plugin-transform-object-super@7.27.1_@babel+core@7.29.0": { + "integrity": "sha512-SFy8S9plRPbIcxlJ8A6mT/CxFdJx/c04JEctz4jf8YZaVS2px34j7NXRrlGlHkN/M2gnpL37ZpGRGVFLd3l8Ng==", + "dependencies": [ + "@babel/core", + "@babel/helper-plugin-utils", + "@babel/helper-replace-supers" + ] + }, + "@babel/plugin-transform-optional-catch-binding@7.28.6_@babel+core@7.29.0": { + "integrity": "sha512-R8ja/Pyrv0OGAvAXQhSTmWyPJPml+0TMqXlO5w+AsMEiwb2fg3WkOvob7UxFSL3OIttFSGSRFKQsOhJ/X6HQdQ==", + "dependencies": [ + "@babel/core", + "@babel/helper-plugin-utils" + ] + }, + "@babel/plugin-transform-optional-chaining@7.28.6_@babel+core@7.29.0": { + "integrity": "sha512-A4zobikRGJTsX9uqVFdafzGkqD30t26ck2LmOzAuLL8b2x6k3TIqRiT2xVvA9fNmFeTX484VpsdgmKNA0bS23w==", + "dependencies": [ + "@babel/core", + "@babel/helper-plugin-utils", + "@babel/helper-skip-transparent-expression-wrappers" + ] + }, + "@babel/plugin-transform-parameters@7.27.7_@babel+core@7.29.0": { + "integrity": "sha512-qBkYTYCb76RRxUM6CcZA5KRu8K4SM8ajzVeUgVdMVO9NN9uI/GaVmBg/WKJJGnNokV9SY8FxNOVWGXzqzUidBg==", + "dependencies": [ + "@babel/core", + "@babel/helper-plugin-utils" + ] + }, + "@babel/plugin-transform-private-methods@7.28.6_@babel+core@7.29.0": { + "integrity": "sha512-piiuapX9CRv7+0st8lmuUlRSmX6mBcVeNQ1b4AYzJxfCMuBfB0vBXDiGSmm03pKJw1v6cZ8KSeM+oUnM6yAExg==", + "dependencies": [ + "@babel/core", + "@babel/helper-create-class-features-plugin", + "@babel/helper-plugin-utils" + ] + }, + "@babel/plugin-transform-private-property-in-object@7.28.6_@babel+core@7.29.0": { + "integrity": "sha512-b97jvNSOb5+ehyQmBpmhOCiUC5oVK4PMnpRvO7+ymFBoqYjeDHIU9jnrNUuwHOiL9RpGDoKBpSViarV+BU+eVA==", + "dependencies": [ + "@babel/core", + "@babel/helper-annotate-as-pure", + "@babel/helper-create-class-features-plugin", + "@babel/helper-plugin-utils" + ] + }, + "@babel/plugin-transform-property-literals@7.27.1_@babel+core@7.29.0": { + "integrity": "sha512-oThy3BCuCha8kDZ8ZkgOg2exvPYUlprMukKQXI1r1pJ47NCvxfkEy8vK+r/hT9nF0Aa4H1WUPZZjHTFtAhGfmQ==", + "dependencies": [ + "@babel/core", + "@babel/helper-plugin-utils" + ] + }, + "@babel/plugin-transform-react-display-name@7.28.0_@babel+core@7.29.0": { + "integrity": "sha512-D6Eujc2zMxKjfa4Zxl4GHMsmhKKZ9VpcqIchJLvwTxad9zWIYulwYItBovpDOoNLISpcZSXoDJ5gaGbQUDqViA==", + "dependencies": [ + "@babel/core", + "@babel/helper-plugin-utils" + ] + }, + "@babel/plugin-transform-react-jsx-development@7.27.1_@babel+core@7.29.0": { + "integrity": "sha512-ykDdF5yI4f1WrAolLqeF3hmYU12j9ntLQl/AOG1HAS21jxyg1Q0/J/tpREuYLfatGdGmXp/3yS0ZA76kOlVq9Q==", + "dependencies": [ + "@babel/core", + "@babel/plugin-transform-react-jsx" + ] + }, + "@babel/plugin-transform-react-jsx@7.28.6_@babel+core@7.29.0": { + "integrity": "sha512-61bxqhiRfAACulXSLd/GxqmAedUSrRZIu/cbaT18T1CetkTmtDN15it7i80ru4DVqRK1WMxQhXs+Lf9kajm5Ow==", + "dependencies": [ + "@babel/core", + "@babel/helper-annotate-as-pure", + "@babel/helper-module-imports", + "@babel/helper-plugin-utils", + "@babel/plugin-syntax-jsx", + "@babel/types" + ] + }, + "@babel/plugin-transform-react-pure-annotations@7.27.1_@babel+core@7.29.0": { + "integrity": "sha512-JfuinvDOsD9FVMTHpzA/pBLisxpv1aSf+OIV8lgH3MuWrks19R27e6a6DipIg4aX1Zm9Wpb04p8wljfKrVSnPA==", + "dependencies": [ + "@babel/core", + "@babel/helper-annotate-as-pure", + "@babel/helper-plugin-utils" + ] + }, + "@babel/plugin-transform-regenerator@7.29.0_@babel+core@7.29.0": { + "integrity": "sha512-FijqlqMA7DmRdg/aINBSs04y8XNTYw/lr1gJ2WsmBnnaNw1iS43EPkJW+zK7z65auG3AWRFXWj+NcTQwYptUog==", + "dependencies": [ + "@babel/core", + "@babel/helper-plugin-utils" + ] + }, + "@babel/plugin-transform-regexp-modifiers@7.28.6_@babel+core@7.29.0": { + "integrity": "sha512-QGWAepm9qxpaIs7UM9FvUSnCGlb8Ua1RhyM4/veAxLwt3gMat/LSGrZixyuj4I6+Kn9iwvqCyPTtbdxanYoWYg==", + "dependencies": [ + "@babel/core", + "@babel/helper-create-regexp-features-plugin", + "@babel/helper-plugin-utils" + ] + }, + "@babel/plugin-transform-reserved-words@7.27.1_@babel+core@7.29.0": { + "integrity": "sha512-V2ABPHIJX4kC7HegLkYoDpfg9PVmuWy/i6vUM5eGK22bx4YVFD3M5F0QQnWQoDs6AGsUWTVOopBiMFQgHaSkVw==", + "dependencies": [ + "@babel/core", + "@babel/helper-plugin-utils" + ] + }, + "@babel/plugin-transform-shorthand-properties@7.27.1_@babel+core@7.29.0": { + "integrity": "sha512-N/wH1vcn4oYawbJ13Y/FxcQrWk63jhfNa7jef0ih7PHSIHX2LB7GWE1rkPrOnka9kwMxb6hMl19p7lidA+EHmQ==", + "dependencies": [ + "@babel/core", + "@babel/helper-plugin-utils" + ] + }, + "@babel/plugin-transform-spread@7.28.6_@babel+core@7.29.0": { + "integrity": "sha512-9U4QObUC0FtJl05AsUcodau/RWDytrU6uKgkxu09mLR9HLDAtUMoPuuskm5huQsoktmsYpI+bGmq+iapDcriKA==", + "dependencies": [ + "@babel/core", + "@babel/helper-plugin-utils", + "@babel/helper-skip-transparent-expression-wrappers" + ] + }, + "@babel/plugin-transform-sticky-regex@7.27.1_@babel+core@7.29.0": { + "integrity": "sha512-lhInBO5bi/Kowe2/aLdBAawijx+q1pQzicSgnkB6dUPc1+RC8QmJHKf2OjvU+NZWitguJHEaEmbV6VWEouT58g==", + "dependencies": [ + "@babel/core", + "@babel/helper-plugin-utils" + ] + }, + "@babel/plugin-transform-template-literals@7.27.1_@babel+core@7.29.0": { + "integrity": "sha512-fBJKiV7F2DxZUkg5EtHKXQdbsbURW3DZKQUWphDum0uRP6eHGGa/He9mc0mypL680pb+e/lDIthRohlv8NCHkg==", + "dependencies": [ + "@babel/core", + "@babel/helper-plugin-utils" + ] + }, + "@babel/plugin-transform-typeof-symbol@7.27.1_@babel+core@7.29.0": { + "integrity": "sha512-RiSILC+nRJM7FY5srIyc4/fGIwUhyDuuBSdWn4y6yT6gm652DpCHZjIipgn6B7MQ1ITOUnAKWixEUjQRIBIcLw==", + "dependencies": [ + "@babel/core", + "@babel/helper-plugin-utils" + ] + }, + "@babel/plugin-transform-unicode-escapes@7.27.1_@babel+core@7.29.0": { + "integrity": "sha512-Ysg4v6AmF26k9vpfFuTZg8HRfVWzsh1kVfowA23y9j/Gu6dOuahdUVhkLqpObp3JIv27MLSii6noRnuKN8H0Mg==", + "dependencies": [ + "@babel/core", + "@babel/helper-plugin-utils" + ] + }, + "@babel/plugin-transform-unicode-property-regex@7.28.6_@babel+core@7.29.0": { + "integrity": "sha512-4Wlbdl/sIZjzi/8St0evF0gEZrgOswVO6aOzqxh1kDZOl9WmLrHq2HtGhnOJZmHZYKP8WZ1MDLCt5DAWwRo57A==", + "dependencies": [ + "@babel/core", + "@babel/helper-create-regexp-features-plugin", + "@babel/helper-plugin-utils" + ] + }, + "@babel/plugin-transform-unicode-regex@7.27.1_@babel+core@7.29.0": { + "integrity": "sha512-xvINq24TRojDuyt6JGtHmkVkrfVV3FPT16uytxImLeBZqW3/H52yN+kM1MGuyPkIQxrzKwPHs5U/MP3qKyzkGw==", + "dependencies": [ + "@babel/core", + "@babel/helper-create-regexp-features-plugin", + "@babel/helper-plugin-utils" + ] + }, + "@babel/plugin-transform-unicode-sets-regex@7.28.6_@babel+core@7.29.0": { + "integrity": "sha512-/wHc/paTUmsDYN7SZkpWxogTOBNnlx7nBQYfy6JJlCT7G3mVhltk3e++N7zV0XfgGsrqBxd4rJQt9H16I21Y1Q==", + "dependencies": [ + "@babel/core", + "@babel/helper-create-regexp-features-plugin", + "@babel/helper-plugin-utils" + ] + }, + "@babel/preset-env@7.29.0_@babel+core@7.29.0": { + "integrity": "sha512-fNEdfc0yi16lt6IZo2Qxk3knHVdfMYX33czNb4v8yWhemoBhibCpQK/uYHtSKIiO+p/zd3+8fYVXhQdOVV608w==", + "dependencies": [ + "@babel/compat-data", + "@babel/core", + "@babel/helper-compilation-targets", + "@babel/helper-plugin-utils", + "@babel/helper-validator-option", + "@babel/plugin-bugfix-firefox-class-in-computed-class-key", + "@babel/plugin-bugfix-safari-class-field-initializer-scope", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining", + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly", + "@babel/plugin-proposal-private-property-in-object", + "@babel/plugin-syntax-import-assertions", + "@babel/plugin-syntax-import-attributes", + "@babel/plugin-syntax-unicode-sets-regex", + "@babel/plugin-transform-arrow-functions", + "@babel/plugin-transform-async-generator-functions", + "@babel/plugin-transform-async-to-generator", + "@babel/plugin-transform-block-scoped-functions", + "@babel/plugin-transform-block-scoping", + "@babel/plugin-transform-class-properties", + "@babel/plugin-transform-class-static-block", + "@babel/plugin-transform-classes", + "@babel/plugin-transform-computed-properties", + "@babel/plugin-transform-destructuring", + "@babel/plugin-transform-dotall-regex", + "@babel/plugin-transform-duplicate-keys", + "@babel/plugin-transform-duplicate-named-capturing-groups-regex", + "@babel/plugin-transform-dynamic-import", + "@babel/plugin-transform-explicit-resource-management", + "@babel/plugin-transform-exponentiation-operator", + "@babel/plugin-transform-export-namespace-from", + "@babel/plugin-transform-for-of", + "@babel/plugin-transform-function-name", + "@babel/plugin-transform-json-strings", + "@babel/plugin-transform-literals", + "@babel/plugin-transform-logical-assignment-operators", + "@babel/plugin-transform-member-expression-literals", + "@babel/plugin-transform-modules-amd", + "@babel/plugin-transform-modules-commonjs", + "@babel/plugin-transform-modules-systemjs", + "@babel/plugin-transform-modules-umd", + "@babel/plugin-transform-named-capturing-groups-regex", + "@babel/plugin-transform-new-target", + "@babel/plugin-transform-nullish-coalescing-operator", + "@babel/plugin-transform-numeric-separator", + "@babel/plugin-transform-object-rest-spread", + "@babel/plugin-transform-object-super", + "@babel/plugin-transform-optional-catch-binding", + "@babel/plugin-transform-optional-chaining", + "@babel/plugin-transform-parameters", + "@babel/plugin-transform-private-methods", + "@babel/plugin-transform-private-property-in-object", + "@babel/plugin-transform-property-literals", + "@babel/plugin-transform-regenerator", + "@babel/plugin-transform-regexp-modifiers", + "@babel/plugin-transform-reserved-words", + "@babel/plugin-transform-shorthand-properties", + "@babel/plugin-transform-spread", + "@babel/plugin-transform-sticky-regex", + "@babel/plugin-transform-template-literals", + "@babel/plugin-transform-typeof-symbol", + "@babel/plugin-transform-unicode-escapes", + "@babel/plugin-transform-unicode-property-regex", + "@babel/plugin-transform-unicode-regex", + "@babel/plugin-transform-unicode-sets-regex", + "@babel/preset-modules", + "babel-plugin-polyfill-corejs2", + "babel-plugin-polyfill-corejs3", + "babel-plugin-polyfill-regenerator", + "core-js-compat", + "semver@6.3.1" + ] + }, + "@babel/preset-flow@7.27.1_@babel+core@7.29.0": { + "integrity": "sha512-ez3a2it5Fn6P54W8QkbfIyyIbxlXvcxyWHHvno1Wg0Ej5eiJY5hBb8ExttoIOJJk7V2dZE6prP7iby5q2aQ0Lg==", + "dependencies": [ + "@babel/core", + "@babel/helper-plugin-utils", + "@babel/helper-validator-option", + "@babel/plugin-transform-flow-strip-types" + ] + }, + "@babel/preset-modules@0.1.6-no-external-plugins_@babel+core@7.29.0": { + "integrity": "sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==", + "dependencies": [ + "@babel/core", + "@babel/helper-plugin-utils", + "@babel/types", + "esutils" + ] + }, + "@babel/preset-react@7.28.5_@babel+core@7.29.0": { + "integrity": "sha512-Z3J8vhRq7CeLjdC58jLv4lnZ5RKFUJWqH5emvxmv9Hv3BD1T9R/Im713R4MTKwvFaV74ejZ3sM01LyEKk4ugNQ==", + "dependencies": [ + "@babel/core", + "@babel/helper-plugin-utils", + "@babel/helper-validator-option", + "@babel/plugin-transform-react-display-name", + "@babel/plugin-transform-react-jsx", + "@babel/plugin-transform-react-jsx-development", + "@babel/plugin-transform-react-pure-annotations" + ] + }, + "@babel/runtime@7.28.6": { + "integrity": "sha512-05WQkdpL9COIMz4LjTxGpPNCdlpyimKppYNoJ5Di5EUObifl8t4tuLuUBBZEpoLYOmfvIWrsp9fCl0HoPRVTdA==" + }, + "@babel/template@7.28.6": { + "integrity": "sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==", + "dependencies": [ + "@babel/code-frame", + "@babel/parser", + "@babel/types" + ] + }, + "@babel/traverse@7.29.0": { + "integrity": "sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA==", + "dependencies": [ + "@babel/code-frame", + "@babel/generator", + "@babel/helper-globals", + "@babel/parser", + "@babel/template", + "@babel/types", + "debug" + ] + }, + "@babel/types@7.29.0": { + "integrity": "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==", + "dependencies": [ + "@babel/helper-string-parser", + "@babel/helper-validator-identifier" + ] + }, + "@biomejs/biome@2.2.5": { + "integrity": "sha512-zcIi+163Rc3HtyHbEO7CjeHq8DjQRs40HsGbW6vx2WI0tg8mYQOPouhvHSyEnCBAorfYNnKdR64/IxO7xQ5faw==", + "optionalDependencies": [ + "@biomejs/cli-darwin-arm64", + "@biomejs/cli-darwin-x64", + "@biomejs/cli-linux-arm64", + "@biomejs/cli-linux-arm64-musl", + "@biomejs/cli-linux-x64", + "@biomejs/cli-linux-x64-musl", + "@biomejs/cli-win32-arm64", + "@biomejs/cli-win32-x64" + ], + "bin": true + }, + "@biomejs/cli-darwin-arm64@2.2.5": { + "integrity": "sha512-MYT+nZ38wEIWVcL5xLyOhYQQ7nlWD0b/4mgATW2c8dvq7R4OQjt/XGXFkXrmtWmQofaIM14L7V8qIz/M+bx5QQ==", + "os": ["darwin"], + "cpu": ["arm64"] + }, + "@biomejs/cli-darwin-x64@2.2.5": { + "integrity": "sha512-FLIEl73fv0R7dI10EnEiZLw+IMz3mWLnF95ASDI0kbx6DDLJjWxE5JxxBfmG+udz1hIDd3fr5wsuP7nwuTRdAg==", + "os": ["darwin"], + "cpu": ["x64"] + }, + "@biomejs/cli-linux-arm64-musl@2.2.5": { + "integrity": "sha512-5Ov2wgAFwqDvQiESnu7b9ufD1faRa+40uwrohgBopeY84El2TnBDoMNXx6iuQdreoFGjwW8vH6k68G21EpNERw==", + "os": ["linux"], + "cpu": ["arm64"] + }, + "@biomejs/cli-linux-arm64@2.2.5": { + "integrity": "sha512-5DjiiDfHqGgR2MS9D+AZ8kOfrzTGqLKywn8hoXpXXlJXIECGQ32t+gt/uiS2XyGBM2XQhR6ztUvbjZWeccFMoQ==", + "os": ["linux"], + "cpu": ["arm64"] + }, + "@biomejs/cli-linux-x64-musl@2.2.5": { + "integrity": "sha512-AVqLCDb/6K7aPNIcxHaTQj01sl1m989CJIQFQEaiQkGr2EQwyOpaATJ473h+nXDUuAcREhccfRpe/tu+0wu0eQ==", + "os": ["linux"], + "cpu": ["x64"] + }, + "@biomejs/cli-linux-x64@2.2.5": { + "integrity": "sha512-fq9meKm1AEXeAWan3uCg6XSP5ObA6F/Ovm89TwaMiy1DNIwdgxPkNwxlXJX8iM6oRbFysYeGnT0OG8diCWb9ew==", + "os": ["linux"], + "cpu": ["x64"] + }, + "@biomejs/cli-win32-arm64@2.2.5": { + "integrity": "sha512-xaOIad4wBambwJa6mdp1FigYSIF9i7PCqRbvBqtIi9y29QtPVQ13sDGtUnsRoe6SjL10auMzQ6YAe+B3RpZXVg==", + "os": ["win32"], + "cpu": ["arm64"] + }, + "@biomejs/cli-win32-x64@2.2.5": { + "integrity": "sha512-F/jhuXCssPFAuciMhHKk00xnCAxJRS/pUzVfXYmOMUp//XW7mO6QeCjsjvnm8L4AO/dG2VOB0O+fJPiJ2uXtIw==", + "os": ["win32"], + "cpu": ["x64"] + }, + "@capsizecss/unpack@2.4.0": { + "integrity": "sha512-GrSU71meACqcmIUxPYOJvGKF0yryjN/L1aCuE9DViCTJI7bfkjgYDPD1zbNDcINJwSSP6UaBZY9GAbYDO7re0Q==", + "dependencies": [ + "blob-to-buffer", + "cross-fetch", + "fontkit" + ] + }, + "@csstools/selector-resolve-nested@3.1.0_postcss-selector-parser@7.1.1": { + "integrity": "sha512-mf1LEW0tJLKfWyvn5KdDrhpxHyuxpbNwTIwOYLIvsTffeyOf85j5oIzfG0yosxDgx/sswlqBnESYUcQH0vgZ0g==", + "dependencies": [ + "postcss-selector-parser@7.1.1" + ] + }, + "@csstools/selector-specificity@5.0.0_postcss-selector-parser@7.1.1": { + "integrity": "sha512-PCqQV3c4CoVm3kdPhyeZ07VmBRdH2EpMFA/pd9OASpOEC3aXNGoqPDAZ80D0cLpMBxnmk0+yNhGsEx31hq7Gtw==", + "dependencies": [ + "postcss-selector-parser@7.1.1" + ] + }, + "@ctrl/tinycolor@4.2.0": { + "integrity": "sha512-kzyuwOAQnXJNLS9PSyrk0CWk35nWJW/zl/6KvnTBMFK65gm7U1/Z5BqjxeapjZCIhQcM/DsrEmcbRwDyXyXK4A==" + }, + "@emmetio/abbreviation@2.3.3": { + "integrity": "sha512-mgv58UrU3rh4YgbE/TzgLQwJ3pFsHHhCLqY20aJq+9comytTXUDNGG/SMtSeMJdkpxgXSXunBGLD8Boka3JyVA==", + "dependencies": [ + "@emmetio/scanner" + ] + }, + "@emmetio/css-abbreviation@2.1.8": { + "integrity": "sha512-s9yjhJ6saOO/uk1V74eifykk2CBYi01STTK3WlXWGOepyKa23ymJ053+DNQjpFcy1ingpaO7AxCcwLvHFY9tuw==", + "dependencies": [ + "@emmetio/scanner" + ] + }, + "@emmetio/css-parser@0.4.1": { + "integrity": "sha512-2bC6m0MV/voF4CTZiAbG5MWKbq5EBmDPKu9Sb7s7nVcEzNQlrZP6mFFFlIaISM8X6514H9shWMme1fCm8cWAfQ==", + "dependencies": [ + "@emmetio/stream-reader", + "@emmetio/stream-reader-utils" + ] + }, + "@emmetio/html-matcher@1.3.0": { + "integrity": "sha512-NTbsvppE5eVyBMuyGfVu2CRrLvo7J4YHb6t9sBFLyY03WYhXET37qA4zOYUjBWFCRHO7pS1B9khERtY0f5JXPQ==", + "dependencies": [ + "@emmetio/scanner" + ] + }, + "@emmetio/scanner@1.0.4": { + "integrity": "sha512-IqRuJtQff7YHHBk4G8YZ45uB9BaAGcwQeVzgj/zj8/UdOhtQpEIupUhSk8dys6spFIWVZVeK20CzGEnqR5SbqA==" + }, + "@emmetio/stream-reader-utils@0.1.0": { + "integrity": "sha512-ZsZ2I9Vzso3Ho/pjZFsmmZ++FWeEd/txqybHTm4OgaZzdS8V9V/YYWQwg5TC38Z7uLWUV1vavpLLbjJtKubR1A==" + }, + "@emmetio/stream-reader@2.2.0": { + "integrity": "sha512-fXVXEyFA5Yv3M3n8sUGT7+fvecGrZP4k6FnWWMSZVQf69kAq0LLpaBQLGcPR30m3zMmKYhECP4k/ZkzvhEW5kw==" + }, + "@emnapi/runtime@1.8.1": { + "integrity": "sha512-mehfKSMWjjNol8659Z8KxEMrdSJDDot5SXMq00dM8BN4o+CLNXQ0xH2V7EchNHV4RmbZLmmPdEaXZc5H2FXmDg==", + "dependencies": [ + "tslib" + ] + }, + "@esbuild/aix-ppc64@0.25.12": { + "integrity": "sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==", + "os": ["aix"], + "cpu": ["ppc64"] + }, + "@esbuild/android-arm64@0.25.12": { + "integrity": "sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg==", + "os": ["android"], + "cpu": ["arm64"] + }, + "@esbuild/android-arm@0.25.12": { + "integrity": "sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg==", + "os": ["android"], + "cpu": ["arm"] + }, + "@esbuild/android-x64@0.25.12": { + "integrity": "sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg==", + "os": ["android"], + "cpu": ["x64"] + }, + "@esbuild/darwin-arm64@0.25.12": { + "integrity": "sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg==", + "os": ["darwin"], + "cpu": ["arm64"] + }, + "@esbuild/darwin-x64@0.25.12": { + "integrity": "sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA==", + "os": ["darwin"], + "cpu": ["x64"] + }, + "@esbuild/freebsd-arm64@0.25.12": { + "integrity": "sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg==", + "os": ["freebsd"], + "cpu": ["arm64"] + }, + "@esbuild/freebsd-x64@0.25.12": { + "integrity": "sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ==", + "os": ["freebsd"], + "cpu": ["x64"] + }, + "@esbuild/linux-arm64@0.25.12": { + "integrity": "sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ==", + "os": ["linux"], + "cpu": ["arm64"] + }, + "@esbuild/linux-arm@0.25.12": { + "integrity": "sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw==", + "os": ["linux"], + "cpu": ["arm"] + }, + "@esbuild/linux-ia32@0.25.12": { + "integrity": "sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA==", + "os": ["linux"], + "cpu": ["ia32"] + }, + "@esbuild/linux-loong64@0.25.12": { + "integrity": "sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng==", + "os": ["linux"], + "cpu": ["loong64"] + }, + "@esbuild/linux-mips64el@0.25.12": { + "integrity": "sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw==", + "os": ["linux"], + "cpu": ["mips64el"] + }, + "@esbuild/linux-ppc64@0.25.12": { + "integrity": "sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA==", + "os": ["linux"], + "cpu": ["ppc64"] + }, + "@esbuild/linux-riscv64@0.25.12": { + "integrity": "sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w==", + "os": ["linux"], + "cpu": ["riscv64"] + }, + "@esbuild/linux-s390x@0.25.12": { + "integrity": "sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg==", + "os": ["linux"], + "cpu": ["s390x"] + }, + "@esbuild/linux-x64@0.25.12": { + "integrity": "sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw==", + "os": ["linux"], + "cpu": ["x64"] + }, + "@esbuild/netbsd-arm64@0.25.12": { + "integrity": "sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg==", + "os": ["netbsd"], + "cpu": ["arm64"] + }, + "@esbuild/netbsd-x64@0.25.12": { + "integrity": "sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ==", + "os": ["netbsd"], + "cpu": ["x64"] + }, + "@esbuild/openbsd-arm64@0.25.12": { + "integrity": "sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A==", + "os": ["openbsd"], + "cpu": ["arm64"] + }, + "@esbuild/openbsd-x64@0.25.12": { + "integrity": "sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw==", + "os": ["openbsd"], + "cpu": ["x64"] + }, + "@esbuild/openharmony-arm64@0.25.12": { + "integrity": "sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg==", + "os": ["openharmony"], + "cpu": ["arm64"] + }, + "@esbuild/sunos-x64@0.25.12": { + "integrity": "sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w==", + "os": ["sunos"], + "cpu": ["x64"] + }, + "@esbuild/win32-arm64@0.25.12": { + "integrity": "sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg==", + "os": ["win32"], + "cpu": ["arm64"] + }, + "@esbuild/win32-ia32@0.25.12": { + "integrity": "sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ==", + "os": ["win32"], + "cpu": ["ia32"] + }, + "@esbuild/win32-x64@0.25.12": { + "integrity": "sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA==", + "os": ["win32"], + "cpu": ["x64"] + }, + "@expressive-code/core@0.41.7_postcss@8.5.6": { + "integrity": "sha512-ck92uZYZ9Wba2zxkiZLsZGi9N54pMSAVdrI9uW3Oo9AtLglD5RmrdTwbYPCT2S/jC36JGB2i+pnQtBm/Ib2+dg==", + "dependencies": [ + "@ctrl/tinycolor", + "hast-util-select", + "hast-util-to-html", + "hast-util-to-text", + "hastscript@9.0.1", + "postcss", + "postcss-nested", + "unist-util-visit@5.1.0", + "unist-util-visit-parents@6.0.2" + ] + }, + "@expressive-code/plugin-collapsible-sections@0.41.7": { + "integrity": "sha512-uh74qWhAW6FEoNdlQAcHCcGBfuhslLvbWL5Fqmi+db/9mZI/I2G1Sr8NfApTEzD+jiIB/GmdPHV9kbjebkn0+g==", + "dependencies": [ + "@expressive-code/core" + ] + }, + "@expressive-code/plugin-frames@0.41.7": { + "integrity": "sha512-diKtxjQw/979cTglRFaMCY/sR6hWF0kSMg8jsKLXaZBSfGS0I/Hoe7Qds3vVEgeoW+GHHQzMcwvgx/MOIXhrTA==", + "dependencies": [ + "@expressive-code/core" + ] + }, + "@expressive-code/plugin-line-numbers@0.41.7": { + "integrity": "sha512-wI9D5NBcgE9ksiJJV8YfOC0RPI3283+9AYWIb8pBUM5TSM8msIs1YRPDt8c8Ub0XGQvbjJKtB+f9fAl2RiHJ2A==", + "dependencies": [ + "@expressive-code/core" + ] + }, + "@expressive-code/plugin-shiki@0.41.7": { + "integrity": "sha512-DL605bLrUOgqTdZ0Ot5MlTaWzppRkzzqzeGEu7ODnHF39IkEBbFdsC7pbl3LbUQ1DFtnfx6rD54k/cdofbW6KQ==", + "dependencies": [ + "@expressive-code/core", + "shiki" + ] + }, + "@expressive-code/plugin-text-markers@0.41.7": { + "integrity": "sha512-Ewpwuc5t6eFdZmWlFyeuy3e1PTQC0jFvw2Q+2bpcWXbOZhPLsT7+h8lsSIJxb5mS7wZko7cKyQ2RLYDyK6Fpmw==", + "dependencies": [ + "@expressive-code/core" + ] + }, + "@fontsource-variable/jetbrains-mono@5.2.8": { + "integrity": "sha512-WBA9elru6Jdp5df2mES55wuOO0WIrn3kpXnI4+W2ek5u3ZgLS9XS4gmIlcQhiZOWEKl95meYdvK7xI+ETLCq/Q==" + }, + "@fontsource/roboto@5.2.10": { + "integrity": "sha512-8HlA5FtSfz//oFSr2eL7GFXAiE7eIkcGOtx7tjsLKq+as702x9+GU7K95iDeWFapHC4M2hv9RrpXKRTGGBI8Zg==" + }, + "@iconify-json/fa6-brands@1.2.6": { + "integrity": "sha512-twL3X4KWcxAhbc1vz/mIDsVr+CAItk1/EIfxKUVQtpv6O4eydk5KNYqTZWdvJNHGInUgd6vKg21aWfVgb5DXEg==", + "dependencies": [ + "@iconify/types" + ] + }, + "@iconify-json/fa6-regular@1.2.4": { + "integrity": "sha512-fnUS/MLj3ZAp29oRsC8/aY8Wau7NIg7VesTz3jCcE6VJBzcz95Yxp/Dl5yHvkP+aQxrNw5Lj3nrOXB4nQh+oNA==", + "dependencies": [ + "@iconify/types" + ] + }, + "@iconify-json/fa6-solid@1.2.4": { + "integrity": "sha512-LmDNNdJVyvF5mPm1yxWvL8KjCc/E8LzoqnF1LNTVpyY2ZJRUlGOWuPIThdbuFBF2IovgttkIyumhyqfmlHdwKg==", + "dependencies": [ + "@iconify/types" + ] + }, + "@iconify-json/material-symbols@1.2.59": { + "integrity": "sha512-difuedW4jZyiDDu2SySjPCr+UsM65PRkEg3zUuKz0YRGMkNyBsk3R6j9s/ofP1NaKr2y32XxrzTawmnJZbzOAw==", + "dependencies": [ + "@iconify/types" + ] + }, + "@iconify/svelte@4.2.0_svelte@5.53.6__acorn@8.16.0": { + "integrity": "sha512-fEl0T7SAPonK7xk6xUlRPDmFDZVDe2Z7ZstlqeDS/sS8ve2uyU+Qa8rTWbIqzZJlRvONkK5kVXiUf9nIc+6OOQ==", + "dependencies": [ + "@iconify/types", + "svelte" + ] + }, + "@iconify/tools@4.2.0": { + "integrity": "sha512-WRxPva/ipxYkqZd1+CkEAQmd86dQmrwH0vwK89gmp2Kh2WyyVw57XbPng0NehP3x4V1LzLsXUneP1uMfTMZmUA==", + "dependencies": [ + "@iconify/types", + "@iconify/utils", + "cheerio", + "domhandler@5.0.3", + "extract-zip", + "local-pkg", + "pathe", + "svgo@3.3.2", + "tar" + ] + }, + "@iconify/types@2.0.0": { + "integrity": "sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==" + }, + "@iconify/utils@2.3.0": { + "integrity": "sha512-GmQ78prtwYW6EtzXRU1rY+KwOKfz32PD7iJh6Iyqw68GiKuoZ2A6pRtzWONz5VQJbp50mEjXh/7NkumtrAgRKA==", + "dependencies": [ + "@antfu/install-pkg", + "@antfu/utils", + "@iconify/types", + "debug", + "globals", + "kolorist", + "local-pkg", + "mlly" + ] + }, + "@img/colour@1.1.0": { + "integrity": "sha512-Td76q7j57o/tLVdgS746cYARfSyxk8iEfRxewL9h4OMzYhbW4TAcppl0mT4eyqXddh6L/jwoM75mo7ixa/pCeQ==" + }, + "@img/sharp-darwin-arm64@0.34.5": { + "integrity": "sha512-imtQ3WMJXbMY4fxb/Ndp6HBTNVtWCUI0WdobyheGf5+ad6xX8VIDO8u2xE4qc/fr08CKG/7dDseFtn6M6g/r3w==", + "optionalDependencies": [ + "@img/sharp-libvips-darwin-arm64" + ], + "os": ["darwin"], + "cpu": ["arm64"] + }, + "@img/sharp-darwin-x64@0.34.5": { + "integrity": "sha512-YNEFAF/4KQ/PeW0N+r+aVVsoIY0/qxxikF2SWdp+NRkmMB7y9LBZAVqQ4yhGCm/H3H270OSykqmQMKLBhBJDEw==", + "optionalDependencies": [ + "@img/sharp-libvips-darwin-x64" + ], + "os": ["darwin"], + "cpu": ["x64"] + }, + "@img/sharp-libvips-darwin-arm64@1.2.4": { + "integrity": "sha512-zqjjo7RatFfFoP0MkQ51jfuFZBnVE2pRiaydKJ1G/rHZvnsrHAOcQALIi9sA5co5xenQdTugCvtb1cuf78Vf4g==", + "os": ["darwin"], + "cpu": ["arm64"] + }, + "@img/sharp-libvips-darwin-x64@1.2.4": { + "integrity": "sha512-1IOd5xfVhlGwX+zXv2N93k0yMONvUlANylbJw1eTah8K/Jtpi15KC+WSiaX/nBmbm2HxRM1gZ0nSdjSsrZbGKg==", + "os": ["darwin"], + "cpu": ["x64"] + }, + "@img/sharp-libvips-linux-arm64@1.2.4": { + "integrity": "sha512-excjX8DfsIcJ10x1Kzr4RcWe1edC9PquDRRPx3YVCvQv+U5p7Yin2s32ftzikXojb1PIFc/9Mt28/y+iRklkrw==", + "os": ["linux"], + "cpu": ["arm64"] + }, + "@img/sharp-libvips-linux-arm@1.2.4": { + "integrity": "sha512-bFI7xcKFELdiNCVov8e44Ia4u2byA+l3XtsAj+Q8tfCwO6BQ8iDojYdvoPMqsKDkuoOo+X6HZA0s0q11ANMQ8A==", + "os": ["linux"], + "cpu": ["arm"] + }, + "@img/sharp-libvips-linux-ppc64@1.2.4": { + "integrity": "sha512-FMuvGijLDYG6lW+b/UvyilUWu5Ayu+3r2d1S8notiGCIyYU/76eig1UfMmkZ7vwgOrzKzlQbFSuQfgm7GYUPpA==", + "os": ["linux"], + "cpu": ["ppc64"] + }, + "@img/sharp-libvips-linux-riscv64@1.2.4": { + "integrity": "sha512-oVDbcR4zUC0ce82teubSm+x6ETixtKZBh/qbREIOcI3cULzDyb18Sr/Wcyx7NRQeQzOiHTNbZFF1UwPS2scyGA==", + "os": ["linux"], + "cpu": ["riscv64"] + }, + "@img/sharp-libvips-linux-s390x@1.2.4": { + "integrity": "sha512-qmp9VrzgPgMoGZyPvrQHqk02uyjA0/QrTO26Tqk6l4ZV0MPWIW6LTkqOIov+J1yEu7MbFQaDpwdwJKhbJvuRxQ==", + "os": ["linux"], + "cpu": ["s390x"] + }, + "@img/sharp-libvips-linux-x64@1.2.4": { + "integrity": "sha512-tJxiiLsmHc9Ax1bz3oaOYBURTXGIRDODBqhveVHonrHJ9/+k89qbLl0bcJns+e4t4rvaNBxaEZsFtSfAdquPrw==", + "os": ["linux"], + "cpu": ["x64"] + }, + "@img/sharp-libvips-linuxmusl-arm64@1.2.4": { + "integrity": "sha512-FVQHuwx1IIuNow9QAbYUzJ+En8KcVm9Lk5+uGUQJHaZmMECZmOlix9HnH7n1TRkXMS0pGxIJokIVB9SuqZGGXw==", + "os": ["linux"], + "cpu": ["arm64"] + }, + "@img/sharp-libvips-linuxmusl-x64@1.2.4": { + "integrity": "sha512-+LpyBk7L44ZIXwz/VYfglaX/okxezESc6UxDSoyo2Ks6Jxc4Y7sGjpgU9s4PMgqgjj1gZCylTieNamqA1MF7Dg==", + "os": ["linux"], + "cpu": ["x64"] + }, + "@img/sharp-linux-arm64@0.34.5": { + "integrity": "sha512-bKQzaJRY/bkPOXyKx5EVup7qkaojECG6NLYswgktOZjaXecSAeCWiZwwiFf3/Y+O1HrauiE3FVsGxFg8c24rZg==", + "optionalDependencies": [ + "@img/sharp-libvips-linux-arm64" + ], + "os": ["linux"], + "cpu": ["arm64"] + }, + "@img/sharp-linux-arm@0.34.5": { + "integrity": "sha512-9dLqsvwtg1uuXBGZKsxem9595+ujv0sJ6Vi8wcTANSFpwV/GONat5eCkzQo/1O6zRIkh0m/8+5BjrRr7jDUSZw==", + "optionalDependencies": [ + "@img/sharp-libvips-linux-arm" + ], + "os": ["linux"], + "cpu": ["arm"] + }, + "@img/sharp-linux-ppc64@0.34.5": { + "integrity": "sha512-7zznwNaqW6YtsfrGGDA6BRkISKAAE1Jo0QdpNYXNMHu2+0dTrPflTLNkpc8l7MUP5M16ZJcUvysVWWrMefZquA==", + "optionalDependencies": [ + "@img/sharp-libvips-linux-ppc64" + ], + "os": ["linux"], + "cpu": ["ppc64"] + }, + "@img/sharp-linux-riscv64@0.34.5": { + "integrity": "sha512-51gJuLPTKa7piYPaVs8GmByo7/U7/7TZOq+cnXJIHZKavIRHAP77e3N2HEl3dgiqdD/w0yUfiJnII77PuDDFdw==", + "optionalDependencies": [ + "@img/sharp-libvips-linux-riscv64" + ], + "os": ["linux"], + "cpu": ["riscv64"] + }, + "@img/sharp-linux-s390x@0.34.5": { + "integrity": "sha512-nQtCk0PdKfho3eC5MrbQoigJ2gd1CgddUMkabUj+rBevs8tZ2cULOx46E7oyX+04WGfABgIwmMC0VqieTiR4jg==", + "optionalDependencies": [ + "@img/sharp-libvips-linux-s390x" + ], + "os": ["linux"], + "cpu": ["s390x"] + }, + "@img/sharp-linux-x64@0.34.5": { + "integrity": "sha512-MEzd8HPKxVxVenwAa+JRPwEC7QFjoPWuS5NZnBt6B3pu7EG2Ge0id1oLHZpPJdn3OQK+BQDiw9zStiHBTJQQQQ==", + "optionalDependencies": [ + "@img/sharp-libvips-linux-x64" + ], + "os": ["linux"], + "cpu": ["x64"] + }, + "@img/sharp-linuxmusl-arm64@0.34.5": { + "integrity": "sha512-fprJR6GtRsMt6Kyfq44IsChVZeGN97gTD331weR1ex1c1rypDEABN6Tm2xa1wE6lYb5DdEnk03NZPqA7Id21yg==", + "optionalDependencies": [ + "@img/sharp-libvips-linuxmusl-arm64" + ], + "os": ["linux"], + "cpu": ["arm64"] + }, + "@img/sharp-linuxmusl-x64@0.34.5": { + "integrity": "sha512-Jg8wNT1MUzIvhBFxViqrEhWDGzqymo3sV7z7ZsaWbZNDLXRJZoRGrjulp60YYtV4wfY8VIKcWidjojlLcWrd8Q==", + "optionalDependencies": [ + "@img/sharp-libvips-linuxmusl-x64" + ], + "os": ["linux"], + "cpu": ["x64"] + }, + "@img/sharp-wasm32@0.34.5": { + "integrity": "sha512-OdWTEiVkY2PHwqkbBI8frFxQQFekHaSSkUIJkwzclWZe64O1X4UlUjqqqLaPbUpMOQk6FBu/HtlGXNblIs0huw==", + "dependencies": [ + "@emnapi/runtime" + ], + "cpu": ["wasm32"] + }, + "@img/sharp-win32-arm64@0.34.5": { + "integrity": "sha512-WQ3AgWCWYSb2yt+IG8mnC6Jdk9Whs7O0gxphblsLvdhSpSTtmu69ZG1Gkb6NuvxsNACwiPV6cNSZNzt0KPsw7g==", + "os": ["win32"], + "cpu": ["arm64"] + }, + "@img/sharp-win32-ia32@0.34.5": { + "integrity": "sha512-FV9m/7NmeCmSHDD5j4+4pNI8Cp3aW+JvLoXcTUo0IqyjSfAZJ8dIUmijx1qaJsIiU+Hosw6xM5KijAWRJCSgNg==", + "os": ["win32"], + "cpu": ["ia32"] + }, + "@img/sharp-win32-x64@0.34.5": { + "integrity": "sha512-+29YMsqY2/9eFEiW93eqWnuLcWcufowXewwSNIT6UwZdUUCrM3oFjMWH/Z6/TMmb4hlFenmfAVbpWeup2jryCw==", + "os": ["win32"], + "cpu": ["x64"] + }, + "@isaacs/cliui@8.0.2": { + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dependencies": [ + "string-width@5.1.2", + "string-width-cjs@npm:string-width@4.2.3", + "strip-ansi@7.2.0", + "strip-ansi-cjs@npm:strip-ansi@6.0.1", + "wrap-ansi@8.1.0", + "wrap-ansi-cjs@npm:wrap-ansi@7.0.0" + ] + }, + "@isaacs/fs-minipass@4.0.1": { + "integrity": "sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==", + "dependencies": [ + "minipass" + ] + }, + "@jridgewell/gen-mapping@0.3.13": { + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", + "dependencies": [ + "@jridgewell/sourcemap-codec", + "@jridgewell/trace-mapping" + ] + }, + "@jridgewell/remapping@2.3.5": { + "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", + "dependencies": [ + "@jridgewell/gen-mapping", + "@jridgewell/trace-mapping" + ] + }, + "@jridgewell/resolve-uri@3.1.2": { + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==" + }, + "@jridgewell/source-map@0.3.11": { + "integrity": "sha512-ZMp1V8ZFcPG5dIWnQLr3NSI1MiCU7UETdS/A0G8V/XWHvJv3ZsFqutJn1Y5RPmAPX6F3BiE397OqveU/9NCuIA==", + "dependencies": [ + "@jridgewell/gen-mapping", + "@jridgewell/trace-mapping" + ] + }, + "@jridgewell/sourcemap-codec@1.5.5": { + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==" + }, + "@jridgewell/trace-mapping@0.3.31": { + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", + "dependencies": [ + "@jridgewell/resolve-uri", + "@jridgewell/sourcemap-codec" + ] + }, + "@nodelib/fs.scandir@2.1.5": { + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dependencies": [ + "@nodelib/fs.stat", + "run-parallel" + ] + }, + "@nodelib/fs.stat@2.0.5": { + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==" + }, + "@nodelib/fs.walk@1.2.8": { + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dependencies": [ + "@nodelib/fs.scandir", + "fastq" + ] + }, + "@oslojs/encoding@1.1.0": { + "integrity": "sha512-70wQhgYmndg4GCPxPPxPGevRKqTIJ2Nh4OkiMWmDAVYsTQ+Ta7Sq+rPevXyXGdzr30/qZBnyOalCszoMxlyldQ==" + }, + "@pagefind/darwin-arm64@1.4.0": { + "integrity": "sha512-2vMqkbv3lbx1Awea90gTaBsvpzgRs7MuSgKDxW0m9oV1GPZCZbZBJg/qL83GIUEN2BFlY46dtUZi54pwH+/pTQ==", + "os": ["darwin"], + "cpu": ["arm64"] + }, + "@pagefind/darwin-x64@1.4.0": { + "integrity": "sha512-e7JPIS6L9/cJfow+/IAqknsGqEPjJnVXGjpGm25bnq+NPdoD3c/7fAwr1OXkG4Ocjx6ZGSCijXEV4ryMcH2E3A==", + "os": ["darwin"], + "cpu": ["x64"] + }, + "@pagefind/freebsd-x64@1.4.0": { + "integrity": "sha512-WcJVypXSZ+9HpiqZjFXMUobfFfZZ6NzIYtkhQ9eOhZrQpeY5uQFqNWLCk7w9RkMUwBv1HAMDW3YJQl/8OqsV0Q==", + "os": ["freebsd"], + "cpu": ["x64"] + }, + "@pagefind/linux-arm64@1.4.0": { + "integrity": "sha512-PIt8dkqt4W06KGmQjONw7EZbhDF+uXI7i0XtRLN1vjCUxM9vGPdtJc2mUyVPevjomrGz5M86M8bqTr6cgDp1Uw==", + "os": ["linux"], + "cpu": ["arm64"] + }, + "@pagefind/linux-x64@1.4.0": { + "integrity": "sha512-z4oddcWwQ0UHrTHR8psLnVlz6USGJ/eOlDPTDYZ4cI8TK8PgwRUPQZp9D2iJPNIPcS6Qx/E4TebjuGJOyK8Mmg==", + "os": ["linux"], + "cpu": ["x64"] + }, + "@pagefind/windows-x64@1.4.0": { + "integrity": "sha512-NkT+YAdgS2FPCn8mIA9bQhiBs+xmniMGq1LFPDhcFn0+2yIUEiIG06t7bsZlhdjknEQRTSdT7YitP6fC5qwP0g==", + "os": ["win32"], + "cpu": ["x64"] + }, + "@pkgjs/parseargs@0.11.0": { + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==" + }, + "@rollup/plugin-alias@3.1.9_rollup@2.80.0": { + "integrity": "sha512-QI5fsEvm9bDzt32k39wpOwZhVzRcL5ydcffUHMyLVaVaLeC70I8TJZ17F1z1eMoLu4E/UOcH9BWVkKpIKdrfiw==", + "dependencies": [ + "rollup@2.80.0", + "slash" + ] + }, + "@rollup/plugin-babel@5.3.1_@babel+core@7.29.0_rollup@2.80.0": { + "integrity": "sha512-WFfdLWU/xVWKeRQnKmIAQULUI7Il0gZnBIH/ZFO069wYIfPu+8zrfp/KMW0atmELoRDq8FbiP3VCss9MhCut7Q==", + "dependencies": [ + "@babel/core", + "@babel/helper-module-imports", + "@rollup/pluginutils@3.1.0_rollup@2.80.0", + "rollup@2.80.0" + ] + }, + "@rollup/plugin-commonjs@17.1.0_rollup@2.80.0": { + "integrity": "sha512-PoMdXCw0ZyvjpCMT5aV4nkL0QywxP29sODQsSGeDpr/oI49Qq9tRtAsb/LbYbDzFlOydVEqHmmZWFtXJEAX9ew==", + "dependencies": [ + "@rollup/pluginutils@3.1.0_rollup@2.80.0", + "commondir", + "estree-walker@2.0.2", + "glob@7.2.3", + "is-reference@1.2.1", + "magic-string@0.25.9", + "resolve", + "rollup@2.80.0" + ] + }, + "@rollup/plugin-json@4.1.0_rollup@2.80.0": { + "integrity": "sha512-yfLbTdNS6amI/2OpmbiBoW12vngr5NW2jCJVZSBEz+H5KfUJZ2M7sDjk0U6GOOdCWFVScShte29o9NezJ53TPw==", + "dependencies": [ + "@rollup/pluginutils@3.1.0_rollup@2.80.0", + "rollup@2.80.0" + ] + }, + "@rollup/plugin-node-resolve@11.2.1_rollup@2.80.0": { + "integrity": "sha512-yc2n43jcqVyGE2sqV5/YCmocy9ArjVAP/BeXyTtADTBBX6V0e5UMqwO8CdQ0kzjb6zu5P1qMzsScCMRvE9OlVg==", + "dependencies": [ + "@rollup/pluginutils@3.1.0_rollup@2.80.0", + "@types/resolve", + "builtin-modules", + "deepmerge", + "is-module", + "resolve", + "rollup@2.80.0" + ] + }, + "@rollup/plugin-yaml@4.1.2": { + "integrity": "sha512-RpupciIeZMUqhgFE97ba0s98mOFS7CWzN3EJNhJkqSv9XLlWYtwVdtE6cDw6ASOF/sZVFS7kRJXftaqM2Vakdw==", + "dependencies": [ + "@rollup/pluginutils@5.3.0", + "js-yaml", + "tosource" + ] + }, + "@rollup/pluginutils@3.1.0_rollup@2.80.0": { + "integrity": "sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==", + "dependencies": [ + "@types/estree@0.0.39", + "estree-walker@1.0.1", + "picomatch@2.3.1", + "rollup@2.80.0" + ] + }, + "@rollup/pluginutils@4.2.1": { + "integrity": "sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ==", + "dependencies": [ + "estree-walker@2.0.2", + "picomatch@2.3.1" + ] + }, + "@rollup/pluginutils@5.3.0": { + "integrity": "sha512-5EdhGZtnu3V88ces7s53hhfK5KSASnJZv8Lulpc04cWO3REESroJXg73DFsOmgbU2BhwV0E20bu2IDZb3VKW4Q==", + "dependencies": [ + "@types/estree@1.0.8", + "estree-walker@2.0.2", + "picomatch@4.0.3" + ] + }, + "@rollup/rollup-android-arm-eabi@4.59.0": { + "integrity": "sha512-upnNBkA6ZH2VKGcBj9Fyl9IGNPULcjXRlg0LLeaioQWueH30p6IXtJEbKAgvyv+mJaMxSm1l6xwDXYjpEMiLMg==", + "os": ["android"], + "cpu": ["arm"] + }, + "@rollup/rollup-android-arm64@4.59.0": { + "integrity": "sha512-hZ+Zxj3SySm4A/DylsDKZAeVg0mvi++0PYVceVyX7hemkw7OreKdCvW2oQ3T1FMZvCaQXqOTHb8qmBShoqk69Q==", + "os": ["android"], + "cpu": ["arm64"] + }, + "@rollup/rollup-darwin-arm64@4.59.0": { + "integrity": "sha512-W2Psnbh1J8ZJw0xKAd8zdNgF9HRLkdWwwdWqubSVk0pUuQkoHnv7rx4GiF9rT4t5DIZGAsConRE3AxCdJ4m8rg==", + "os": ["darwin"], + "cpu": ["arm64"] + }, + "@rollup/rollup-darwin-x64@4.59.0": { + "integrity": "sha512-ZW2KkwlS4lwTv7ZVsYDiARfFCnSGhzYPdiOU4IM2fDbL+QGlyAbjgSFuqNRbSthybLbIJ915UtZBtmuLrQAT/w==", + "os": ["darwin"], + "cpu": ["x64"] + }, + "@rollup/rollup-freebsd-arm64@4.59.0": { + "integrity": "sha512-EsKaJ5ytAu9jI3lonzn3BgG8iRBjV4LxZexygcQbpiU0wU0ATxhNVEpXKfUa0pS05gTcSDMKpn3Sx+QB9RlTTA==", + "os": ["freebsd"], + "cpu": ["arm64"] + }, + "@rollup/rollup-freebsd-x64@4.59.0": { + "integrity": "sha512-d3DuZi2KzTMjImrxoHIAODUZYoUUMsuUiY4SRRcJy6NJoZ6iIqWnJu9IScV9jXysyGMVuW+KNzZvBLOcpdl3Vg==", + "os": ["freebsd"], + "cpu": ["x64"] + }, + "@rollup/rollup-linux-arm-gnueabihf@4.59.0": { + "integrity": "sha512-t4ONHboXi/3E0rT6OZl1pKbl2Vgxf9vJfWgmUoCEVQVxhW6Cw/c8I6hbbu7DAvgp82RKiH7TpLwxnJeKv2pbsw==", + "os": ["linux"], + "cpu": ["arm"] + }, + "@rollup/rollup-linux-arm-musleabihf@4.59.0": { + "integrity": "sha512-CikFT7aYPA2ufMD086cVORBYGHffBo4K8MQ4uPS/ZnY54GKj36i196u8U+aDVT2LX4eSMbyHtyOh7D7Zvk2VvA==", + "os": ["linux"], + "cpu": ["arm"] + }, + "@rollup/rollup-linux-arm64-gnu@4.59.0": { + "integrity": "sha512-jYgUGk5aLd1nUb1CtQ8E+t5JhLc9x5WdBKew9ZgAXg7DBk0ZHErLHdXM24rfX+bKrFe+Xp5YuJo54I5HFjGDAA==", + "os": ["linux"], + "cpu": ["arm64"] + }, + "@rollup/rollup-linux-arm64-musl@4.59.0": { + "integrity": "sha512-peZRVEdnFWZ5Bh2KeumKG9ty7aCXzzEsHShOZEFiCQlDEepP1dpUl/SrUNXNg13UmZl+gzVDPsiCwnV1uI0RUA==", + "os": ["linux"], + "cpu": ["arm64"] + }, + "@rollup/rollup-linux-loong64-gnu@4.59.0": { + "integrity": "sha512-gbUSW/97f7+r4gHy3Jlup8zDG190AuodsWnNiXErp9mT90iCy9NKKU0Xwx5k8VlRAIV2uU9CsMnEFg/xXaOfXg==", + "os": ["linux"], + "cpu": ["loong64"] + }, + "@rollup/rollup-linux-loong64-musl@4.59.0": { + "integrity": "sha512-yTRONe79E+o0FWFijasoTjtzG9EBedFXJMl888NBEDCDV9I2wGbFFfJQQe63OijbFCUZqxpHz1GzpbtSFikJ4Q==", + "os": ["linux"], + "cpu": ["loong64"] + }, + "@rollup/rollup-linux-ppc64-gnu@4.59.0": { + "integrity": "sha512-sw1o3tfyk12k3OEpRddF68a1unZ5VCN7zoTNtSn2KndUE+ea3m3ROOKRCZxEpmT9nsGnogpFP9x6mnLTCaoLkA==", + "os": ["linux"], + "cpu": ["ppc64"] + }, + "@rollup/rollup-linux-ppc64-musl@4.59.0": { + "integrity": "sha512-+2kLtQ4xT3AiIxkzFVFXfsmlZiG5FXYW7ZyIIvGA7Bdeuh9Z0aN4hVyXS/G1E9bTP/vqszNIN/pUKCk/BTHsKA==", + "os": ["linux"], + "cpu": ["ppc64"] + }, + "@rollup/rollup-linux-riscv64-gnu@4.59.0": { + "integrity": "sha512-NDYMpsXYJJaj+I7UdwIuHHNxXZ/b/N2hR15NyH3m2qAtb/hHPA4g4SuuvrdxetTdndfj9b1WOmy73kcPRoERUg==", + "os": ["linux"], + "cpu": ["riscv64"] + }, + "@rollup/rollup-linux-riscv64-musl@4.59.0": { + "integrity": "sha512-nLckB8WOqHIf1bhymk+oHxvM9D3tyPndZH8i8+35p/1YiVoVswPid2yLzgX7ZJP0KQvnkhM4H6QZ5m0LzbyIAg==", + "os": ["linux"], + "cpu": ["riscv64"] + }, + "@rollup/rollup-linux-s390x-gnu@4.59.0": { + "integrity": "sha512-oF87Ie3uAIvORFBpwnCvUzdeYUqi2wY6jRFWJAy1qus/udHFYIkplYRW+wo+GRUP4sKzYdmE1Y3+rY5Gc4ZO+w==", + "os": ["linux"], + "cpu": ["s390x"] + }, + "@rollup/rollup-linux-x64-gnu@4.59.0": { + "integrity": "sha512-3AHmtQq/ppNuUspKAlvA8HtLybkDflkMuLK4DPo77DfthRb71V84/c4MlWJXixZz4uruIH4uaa07IqoAkG64fg==", + "os": ["linux"], + "cpu": ["x64"] + }, + "@rollup/rollup-linux-x64-musl@4.59.0": { + "integrity": "sha512-2UdiwS/9cTAx7qIUZB/fWtToJwvt0Vbo0zmnYt7ED35KPg13Q0ym1g442THLC7VyI6JfYTP4PiSOWyoMdV2/xg==", + "os": ["linux"], + "cpu": ["x64"] + }, + "@rollup/rollup-openbsd-x64@4.59.0": { + "integrity": "sha512-M3bLRAVk6GOwFlPTIxVBSYKUaqfLrn8l0psKinkCFxl4lQvOSz8ZrKDz2gxcBwHFpci0B6rttydI4IpS4IS/jQ==", + "os": ["openbsd"], + "cpu": ["x64"] + }, + "@rollup/rollup-openharmony-arm64@4.59.0": { + "integrity": "sha512-tt9KBJqaqp5i5HUZzoafHZX8b5Q2Fe7UjYERADll83O4fGqJ49O1FsL6LpdzVFQcpwvnyd0i+K/VSwu/o/nWlA==", + "os": ["openharmony"], + "cpu": ["arm64"] + }, + "@rollup/rollup-win32-arm64-msvc@4.59.0": { + "integrity": "sha512-V5B6mG7OrGTwnxaNUzZTDTjDS7F75PO1ae6MJYdiMu60sq0CqN5CVeVsbhPxalupvTX8gXVSU9gq+Rx1/hvu6A==", + "os": ["win32"], + "cpu": ["arm64"] + }, + "@rollup/rollup-win32-ia32-msvc@4.59.0": { + "integrity": "sha512-UKFMHPuM9R0iBegwzKF4y0C4J9u8C6MEJgFuXTBerMk7EJ92GFVFYBfOZaSGLu6COf7FxpQNqhNS4c4icUPqxA==", + "os": ["win32"], + "cpu": ["ia32"] + }, + "@rollup/rollup-win32-x64-gnu@4.59.0": { + "integrity": "sha512-laBkYlSS1n2L8fSo1thDNGrCTQMmxjYY5G0WFWjFFYZkKPjsMBsgJfGf4TLxXrF6RyhI60L8TMOjBMvXiTcxeA==", + "os": ["win32"], + "cpu": ["x64"] + }, + "@rollup/rollup-win32-x64-msvc@4.59.0": { + "integrity": "sha512-2HRCml6OztYXyJXAvdDXPKcawukWY2GpR5/nxKp4iBgiO3wcoEGkAaqctIbZcNB6KlUQBIqt8VYkNSj2397EfA==", + "os": ["win32"], + "cpu": ["x64"] + }, + "@shikijs/core@3.23.0": { + "integrity": "sha512-NSWQz0riNb67xthdm5br6lAkvpDJRTgB36fxlo37ZzM2yq0PQFFzbd8psqC2XMPgCzo1fW6cVi18+ArJ44wqgA==", + "dependencies": [ + "@shikijs/types", + "@shikijs/vscode-textmate", + "@types/hast@3.0.4", + "hast-util-to-html" + ] + }, + "@shikijs/engine-javascript@3.23.0": { + "integrity": "sha512-aHt9eiGFobmWR5uqJUViySI1bHMqrAgamWE1TYSUoftkAeCCAiGawPMwM+VCadylQtF4V3VNOZ5LmfItH5f3yA==", + "dependencies": [ + "@shikijs/types", + "@shikijs/vscode-textmate", + "oniguruma-to-es" + ] + }, + "@shikijs/engine-oniguruma@3.23.0": { + "integrity": "sha512-1nWINwKXxKKLqPibT5f4pAFLej9oZzQTsby8942OTlsJzOBZ0MWKiwzMsd+jhzu8YPCHAswGnnN1YtQfirL35g==", + "dependencies": [ + "@shikijs/types", + "@shikijs/vscode-textmate" + ] + }, + "@shikijs/langs@3.23.0": { + "integrity": "sha512-2Ep4W3Re5aB1/62RSYQInK9mM3HsLeB91cHqznAJMuylqjzNVAVCMnNWRHFtcNHXsoNRayP9z1qj4Sq3nMqYXg==", + "dependencies": [ + "@shikijs/types" + ] + }, + "@shikijs/themes@3.23.0": { + "integrity": "sha512-5qySYa1ZgAT18HR/ypENL9cUSGOeI2x+4IvYJu4JgVJdizn6kG4ia5Q1jDEOi7gTbN4RbuYtmHh0W3eccOrjMA==", + "dependencies": [ + "@shikijs/types" + ] + }, + "@shikijs/types@3.23.0": { + "integrity": "sha512-3JZ5HXOZfYjsYSk0yPwBrkupyYSLpAE26Qc0HLghhZNGTZg/SKxXIIgoxOpmmeQP0RRSDJTk1/vPfw9tbw+jSQ==", + "dependencies": [ + "@shikijs/vscode-textmate", + "@types/hast@3.0.4" + ] + }, + "@shikijs/vscode-textmate@10.0.2": { + "integrity": "sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==" + }, + "@surma/rollup-plugin-off-main-thread@2.2.3": { + "integrity": "sha512-lR8q/9W7hZpMWweNiAKU7NQerBnzQQLvi8qnTDU/fxItPhtZVMbPV3lbCwjhIlNBe9Bbr5V+KHshvWmVSG9cxQ==", + "dependencies": [ + "ejs", + "json5", + "magic-string@0.25.9", + "string.prototype.matchall" + ] + }, + "@sveltejs/acorn-typescript@1.0.9_acorn@8.16.0": { + "integrity": "sha512-lVJX6qEgs/4DOcRTpo56tmKzVPtoWAaVbL4hfO7t7NVwl9AAXzQR6cihesW1BmNMPl+bK6dreu2sOKBP2Q9CIA==", + "dependencies": [ + "acorn" + ] + }, + "@sveltejs/vite-plugin-svelte-inspector@4.0.1_@sveltejs+vite-plugin-svelte@5.1.1__svelte@5.53.6___acorn@8.16.0__vite@6.4.1___stylus@0.64.0___picomatch@4.0.3__stylus@0.64.0_svelte@5.53.6__acorn@8.16.0_vite@6.4.1__stylus@0.64.0__picomatch@4.0.3_stylus@0.64.0": { + "integrity": "sha512-J/Nmb2Q2y7mck2hyCX4ckVHcR5tu2J+MtBEQqpDrrgELZ2uvraQcK/ioCV61AqkdXFgriksOKIceDcQmqnGhVw==", + "dependencies": [ + "@sveltejs/vite-plugin-svelte", + "debug", + "svelte", + "vite" + ] + }, + "@sveltejs/vite-plugin-svelte@5.1.1_svelte@5.53.6__acorn@8.16.0_vite@6.4.1__stylus@0.64.0__picomatch@4.0.3_stylus@0.64.0": { + "integrity": "sha512-Y1Cs7hhTc+a5E9Va/xwKlAJoariQyHY+5zBgCZg4PFWNYQ1nMN9sjK1zhw1gK69DuqVP++sht/1GZg1aRwmAXQ==", + "dependencies": [ + "@sveltejs/vite-plugin-svelte-inspector", + "debug", + "deepmerge", + "kleur@4.1.5", + "magic-string@0.30.21", + "svelte", + "vite", + "vitefu" + ] + }, + "@swc/helpers@0.5.19": { + "integrity": "sha512-QamiFeIK3txNjgUTNppE6MiG3p7TdninpZu0E0PbqVh1a9FNLT2FRhisaa4NcaX52XVhA5l7Pk58Ft7Sqi/2sA==", + "dependencies": [ + "tslib" + ] + }, + "@swup/a11y-plugin@5.0.0_swup@4.8.3": { + "integrity": "sha512-t0pVWAVea+Imjj05n9QMPfqZhw9i5rx7BV/l3Ejeic+X3Qs0VZwVvEJIcdqireCVJgAJGZAPlmgbiuaj5UHJaQ==", + "dependencies": [ + "@swup/plugin@4.0.0", + "focus-options-polyfill", + "swup" + ] + }, + "@swup/astro@1.8.0_swup@4.8.3": { + "integrity": "sha512-FI8/jNXgyUoWpnOgdB3MOUobRtRzedKBE8+qbBH5c8CE4q9Ni/GHPGrXK/0xG+g1ZiIQuTF3OXRvTLNVouiBig==", + "dependencies": [ + "@swup/a11y-plugin", + "@swup/body-class-plugin", + "@swup/debug-plugin", + "@swup/fade-theme", + "@swup/forms-plugin", + "@swup/fragment-plugin", + "@swup/head-plugin", + "@swup/overlay-theme", + "@swup/parallel-plugin", + "@swup/preload-plugin", + "@swup/progress-plugin", + "@swup/route-name-plugin", + "@swup/scripts-plugin", + "@swup/scroll-plugin", + "@swup/slide-theme", + "swup", + "swup-morph-plugin" + ] + }, + "@swup/body-class-plugin@3.3.0_swup@4.8.3": { + "integrity": "sha512-4h/6mAgDd0+ml8Gc2kX8tikIR0HZZLF+WTnfm0JTVrGDw74bgEBenbsaWFfIS+gn4RWKZdWBUOfaZ+Im5J7Gvw==", + "dependencies": [ + "@swup/plugin@4.0.0", + "swup" + ] + }, + "@swup/browserslist-config@1.0.1": { + "integrity": "sha512-/3nBqG7LqmK1uqaCSTA6s2NwQBDQXNyLAFBzlX6uaxqjIQcAZyq6K+sgcQ40oj02Vn/2mLSkeL9DOfP7BPOwVA==" + }, + "@swup/debug-plugin@4.1.0_swup@4.8.3": { + "integrity": "sha512-R+RP4hjoeXrO+wowSswaTM4P05lu6iDg6UwdbQn0wfJ082KiUpH+DDwHYNOatxusKVExFuhLec+X9IbyAyiv8w==", + "dependencies": [ + "@swup/plugin@4.0.0", + "swup" + ] + }, + "@swup/fade-theme@2.0.2_swup@4.8.3": { + "integrity": "sha512-x2XLIzAk8akrmVkozrlv0cU8wWnzt8MC164F1801qdffzY7mOi1v2mHl5Db9pqrP3BZ4UqC+5683/hQJ4obYEA==", + "dependencies": [ + "@swup/theme", + "swup" + ] + }, + "@swup/forms-plugin@3.6.0_swup@4.8.3": { + "integrity": "sha512-pRN6OR5wR27LvJqQOlCgu1fP9Z0ZsGauxWOE6nRCtjP1+98wlGTMiMsQ+jGvvs+IOK9IDTJQ7jvprnJAZaw9zw==", + "dependencies": [ + "@swup/plugin@4.0.0", + "swup" + ] + }, + "@swup/fragment-plugin@1.3.0_swup@4.8.3": { + "integrity": "sha512-wz1aaLrvdWfucjO5fs7DgtptYKj3DpfIUNsEyzlt46iOxy9bV74VGDcBOEmnR8blmKBytNBRqDNPT0fhcVCr9w==", + "dependencies": [ + "@swup/plugin@4.0.0", + "swup" + ] + }, + "@swup/head-plugin@2.3.1_swup@4.8.3": { + "integrity": "sha512-kdv60fO9c0/3+K40f7Fj/uV34nSuuPeCsld83J5uVVFizOmoovA737C5M1Iqac5Spf2GLU7q+mhN6AbohSIBjA==", + "dependencies": [ + "@swup/plugin@4.0.0", + "swup" + ] + }, + "@swup/overlay-theme@2.0.2_swup@4.8.3": { + "integrity": "sha512-nfk5jrEru0lbFzlOzkT/f77sUwVHM/iUzlPMAT/KkWecn4/YuT4Y+lgIY3Se9VtD8TbSFrXYoHJea4GMZPJRAg==", + "dependencies": [ + "@swup/theme", + "swup" + ] + }, + "@swup/parallel-plugin@0.4.0_swup@4.8.3": { + "integrity": "sha512-un37RpdFz2vuJV1r9Hr0nCl5qgloN/Z3SczC3wi1XfkiHtzZ8kFTcm5pIW5rUkDVwtCTil44mlAA/STouBEgDw==", + "dependencies": [ + "@swup/plugin@3.0.1_shelljs@0.8.5", + "swup" + ] + }, + "@swup/plugin@3.0.1_shelljs@0.8.5": { + "integrity": "sha512-A9yiJeKTmQ9kac2Eo3MbMWW+Tiw23W5OSzAHVTCfW6n5zze6dexY3FLEUSDTcvRgciknvXfMZ9JTnebbvCKKWw==", + "dependencies": [ + "@swup/browserslist-config", + "@swup/prettier-config", + "chalk@5.6.2", + "microbundle", + "prettier@2.8.8", + "shelljs", + "shelljs-live", + "swup" + ], + "bin": true + }, + "@swup/plugin@4.0.0": { + "integrity": "sha512-3Kq31BJxnzoPg643YxGoWQggoU6VPKZpdE5CqqmP7wwkpCYTzkRmrfcQ29mGhsSS7xfS7D33iZoBiwY+wPoo2A==", + "dependencies": [ + "swup" + ] + }, + "@swup/preload-plugin@3.2.11_swup@4.8.3": { + "integrity": "sha512-dq50u+d8L+63/pU6dUDnypuBoF49ubjRzRJqitGem2K7wRn7xccxRSvdyeGKdA2vNvzGDAmLfwVTZdSotvvDrw==", + "dependencies": [ + "@swup/plugin@4.0.0", + "swup" + ] + }, + "@swup/prettier-config@1.1.0": { + "integrity": "sha512-EF4DMdIGieEsuY2XK0PuLf7Uw7yUQOMbA6IdCMvvRvKXj03WLLpnNIFfFp+6hmMtXRSUE88VBpRyp6Giiu1Pbg==" + }, + "@swup/progress-plugin@3.2.0_swup@4.8.3": { + "integrity": "sha512-Ur+D4+aee9swR6pn7JbEyGMwVP1BTcN5ygjlno7IaSQ/vMZbuJ73po1RkKlIi86p+/PZ+1kynkH4K4eMZuHKKg==", + "dependencies": [ + "@swup/plugin@4.0.0", + "swup" + ] + }, + "@swup/route-name-plugin@4.1.0_swup@4.8.3": { + "integrity": "sha512-1tw3WeExEKwI3pVMXTptCGxFUDOSEpc63D741eeUCjjGW/f9q7ekuqEaPQd5YJ6POpzDjdt1jjuC9yv54CbeXA==", + "dependencies": [ + "@swup/plugin@3.0.1_shelljs@0.8.5", + "swup" + ] + }, + "@swup/scripts-plugin@2.1.0_swup@4.8.3": { + "integrity": "sha512-JSMFsFCN9gn4q3m1Ccv0gq3gwRoZl6UGALOQO3OeQ8wOIq9vPC5dcUD3CMBuaPanksjR4GC8ZoukIjHrlT52fg==", + "dependencies": [ + "@swup/plugin@4.0.0", + "swup" + ] + }, + "@swup/scroll-plugin@3.3.2_swup@4.8.3": { + "integrity": "sha512-jwngTz8LZza8p7ZWqaqQIzkH8x4hwyPh8RbrJSwTKussx24YUQuV9sgjDCzvJ16k/aYk9NCCvqLbb+4TcT3jqA==", + "dependencies": [ + "@swup/plugin@4.0.0", + "scrl", + "swup" + ] + }, + "@swup/slide-theme@2.0.2_swup@4.8.3": { + "integrity": "sha512-CLFD+Nd/wIDLMOfg7D7sOX2d1AyhZsoLXT+G6xB4ARELaP1j+nQGDjyuRvgAESMW+GA1EL43y/BcXOAKTjzrsg==", + "dependencies": [ + "@swup/theme", + "swup" + ] + }, + "@swup/theme@2.1.0_swup@4.8.3": { + "integrity": "sha512-nwAzx+GYySIYs6uSCFYGNdpLWv2z/mEryRD1gvmIqsaSP2N7sVd4mKAboraJAzIzbasRhTsTQzyN1LfLeti3AA==", + "dependencies": [ + "@swup/plugin@4.0.0", + "swup" + ] + }, + "@tailwindcss/typography@0.5.19_tailwindcss@3.4.19__postcss@8.5.6": { + "integrity": "sha512-w31dd8HOx3k9vPtcQh5QHP9GwKcgbMp87j58qi6xgiBnFFtKEAgCWnDw4qUT8aHwkCp8bKvb/KGKWWHedP0AAg==", + "dependencies": [ + "postcss-selector-parser@6.0.10", + "tailwindcss" + ] + }, + "@trysound/sax@0.2.0": { + "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==" + }, + "@types/debug@4.1.12": { + "integrity": "sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==", + "dependencies": [ + "@types/ms" + ] + }, + "@types/estree@0.0.39": { + "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==" + }, + "@types/estree@1.0.8": { + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==" + }, + "@types/fontkit@2.0.8": { + "integrity": "sha512-wN+8bYxIpJf+5oZdrdtaX04qUuWHcKxcDEgRS9Qm9ZClSHjzEn13SxUC+5eRM+4yXIeTYk8mTzLAWGF64847ew==", + "dependencies": [ + "@types/node" + ] + }, + "@types/hast@2.3.10": { + "integrity": "sha512-McWspRw8xx8J9HurkVBfYj0xKoE25tOFlHGdx4MJ5xORQrMGZNqJhVQWaIbm6Oyla5kYOXtDiopzKRJzEOkwJw==", + "dependencies": [ + "@types/unist@2.0.11" + ] + }, + "@types/hast@3.0.4": { + "integrity": "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==", + "dependencies": [ + "@types/unist@3.0.3" + ] + }, + "@types/katex@0.16.8": { + "integrity": "sha512-trgaNyfU+Xh2Tc+ABIb44a5AYUpicB3uwirOioeOkNPPbmgRNtcWyDeeFRzjPZENO9Vq8gvVqfhaaXWLlevVwg==" + }, + "@types/linkify-it@5.0.0": { + "integrity": "sha512-sVDA58zAw4eWAffKOaQH5/5j3XeayukzDk+ewSsnv3p4yJEZHCCzMDiZM8e0OUrRvmpGZ85jf4yDHkHsgBNr9Q==" + }, + "@types/markdown-it@14.1.2": { + "integrity": "sha512-promo4eFwuiW+TfGxhi+0x3czqTYJkG8qB17ZUJiVF10Xm7NLVRSLUsfRTU/6h1e24VvRnXCx+hG7li58lkzog==", + "dependencies": [ + "@types/linkify-it", + "@types/mdurl" + ] + }, + "@types/mdast@4.0.4": { + "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==", + "dependencies": [ + "@types/unist@3.0.3" + ] + }, + "@types/mdurl@2.0.0": { + "integrity": "sha512-RGdgjQUZba5p6QEFAVx2OGb8rQDL/cPRG7GiedRzMcJ1tYnUANBncjbSB1NRGwbvjcPeikRABz2nshyPk1bhWg==" + }, + "@types/ms@2.1.0": { + "integrity": "sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==" + }, + "@types/nlcst@2.0.3": { + "integrity": "sha512-vSYNSDe6Ix3q+6Z7ri9lyWqgGhJTmzRjZRqyq15N0Z/1/UnVsno9G/N40NBijoYx2seFDIl0+B2mgAb9mezUCA==", + "dependencies": [ + "@types/unist@3.0.3" + ] + }, + "@types/node@17.0.45": { + "integrity": "sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==" + }, + "@types/parse-json@4.0.2": { + "integrity": "sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==" + }, + "@types/resolve@1.17.1": { + "integrity": "sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==", + "dependencies": [ + "@types/node" + ] + }, + "@types/sanitize-html@2.16.0": { + "integrity": "sha512-l6rX1MUXje5ztPT0cAFtUayXF06DqPhRyfVXareEN5gGCFaP/iwsxIyKODr9XDhfxPpN6vXUFNfo5kZMXCxBtw==", + "dependencies": [ + "htmlparser2@8.0.2" + ] + }, + "@types/sax@1.2.7": { + "integrity": "sha512-rO73L89PJxeYM3s3pPPjiPgVVcymqU490g0YO5n5By0k2Erzj6tay/4lr1CHAAU4JyOWd1rpQ8bCf6cZfHU96A==", + "dependencies": [ + "@types/node" + ] + }, + "@types/trusted-types@2.0.7": { + "integrity": "sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==" + }, + "@types/unist@2.0.11": { + "integrity": "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==" + }, + "@types/unist@3.0.3": { + "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==" + }, + "@types/yauzl@2.10.3": { + "integrity": "sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==", + "dependencies": [ + "@types/node" + ] + }, + "@ungap/structured-clone@1.3.0": { + "integrity": "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==" + }, + "@volar/kit@2.4.28_typescript@5.9.3": { + "integrity": "sha512-cKX4vK9dtZvDRaAzeoUdaAJEew6IdxHNCRrdp5Kvcl6zZOqb6jTOfk3kXkIkG3T7oTFXguEMt5+9ptyqYR84Pg==", + "dependencies": [ + "@volar/language-service", + "@volar/typescript", + "typesafe-path", + "typescript@5.9.3", + "vscode-languageserver-textdocument", + "vscode-uri" + ] + }, + "@volar/language-core@2.4.28": { + "integrity": "sha512-w4qhIJ8ZSitgLAkVay6AbcnC7gP3glYM3fYwKV3srj8m494E3xtrCv6E+bWviiK/8hs6e6t1ij1s2Endql7vzQ==", + "dependencies": [ + "@volar/source-map" + ] + }, + "@volar/language-server@2.4.28": { + "integrity": "sha512-NqcLnE5gERKuS4PUFwlhMxf6vqYo7hXtbMFbViXcbVkbZ905AIVWhnSo0ZNBC2V127H1/2zP7RvVOVnyITFfBw==", + "dependencies": [ + "@volar/language-core", + "@volar/language-service", + "@volar/typescript", + "path-browserify", + "request-light@0.7.0", + "vscode-languageserver", + "vscode-languageserver-protocol", + "vscode-languageserver-textdocument", + "vscode-uri" + ] + }, + "@volar/language-service@2.4.28": { + "integrity": "sha512-Rh/wYCZJrI5vCwMk9xyw/Z+MsWxlJY1rmMZPsxUoJKfzIRjS/NF1NmnuEcrMbEVGja00aVpCsInJfixQTMdvLw==", + "dependencies": [ + "@volar/language-core", + "vscode-languageserver-protocol", + "vscode-languageserver-textdocument", + "vscode-uri" + ] + }, + "@volar/source-map@2.4.28": { + "integrity": "sha512-yX2BDBqJkRXfKw8my8VarTyjv48QwxdJtvRgUpNE5erCsgEUdI2DsLbpa+rOQVAJYshY99szEcRDmyHbF10ggQ==" + }, + "@volar/typescript@2.4.28": { + "integrity": "sha512-Ja6yvWrbis2QtN4ClAKreeUZPVYMARDYZl9LMEv1iQ1QdepB6wn0jTRxA9MftYmYa4DQ4k/DaSZpFPUfxl8giw==", + "dependencies": [ + "@volar/language-core", + "path-browserify", + "vscode-uri" + ] + }, + "@vscode/emmet-helper@2.11.0": { + "integrity": "sha512-QLxjQR3imPZPQltfbWRnHU6JecWTF1QSWhx3GAKQpslx7y3Dp6sIIXhKjiUJ/BR9FX8PVthjr9PD6pNwOJfAzw==", + "dependencies": [ + "emmet", + "jsonc-parser@2.3.1", + "vscode-languageserver-textdocument", + "vscode-languageserver-types", + "vscode-uri" + ] + }, + "@vscode/l10n@0.0.18": { + "integrity": "sha512-KYSIHVmslkaCDyw013pphY+d7x1qV8IZupYfeIfzNA+nsaWHbn5uPuQRvdRFsa9zFzGeudPuoGoZ1Op4jrJXIQ==" + }, + "acorn@8.16.0": { + "integrity": "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==", + "bin": true + }, + "ajv-draft-04@1.0.0_ajv@8.18.0": { + "integrity": "sha512-mv00Te6nmYbRp5DCwclxtt7yV/joXJPGS7nM+97GdxvuttCOfgI3K4U25zboyeX0O+myI8ERluxQe5wljMmVIw==", + "dependencies": [ + "ajv" + ], + "optionalPeers": [ + "ajv" + ] + }, + "ajv@8.18.0": { + "integrity": "sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==", + "dependencies": [ + "fast-deep-equal", + "fast-uri", + "json-schema-traverse", + "require-from-string" + ] + }, + "ansi-align@3.0.1": { + "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", + "dependencies": [ + "string-width@4.2.3" + ] + }, + "ansi-regex@2.1.1": { + "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==" + }, + "ansi-regex@5.0.1": { + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" + }, + "ansi-regex@6.2.2": { + "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==" + }, + "ansi-styles@2.2.1": { + "integrity": "sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==" + }, + "ansi-styles@4.3.0": { + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": [ + "color-convert" + ] + }, + "ansi-styles@6.2.3": { + "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==" + }, + "any-promise@1.3.0": { + "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==" + }, + "anymatch@3.1.3": { + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dependencies": [ + "normalize-path", + "picomatch@2.3.1" + ] + }, + "arg@5.0.2": { + "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==" + }, + "argparse@2.0.1": { + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" + }, + "aria-query@5.3.1": { + "integrity": "sha512-Z/ZeOgVl7bcSYZ/u/rh0fOpvEpq//LZmdbkXyc7syVzjPAhfOa9ebsdTSjEBDU4vs5nC98Kfduj1uFo0qyET3g==" + }, + "aria-query@5.3.2": { + "integrity": "sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==" + }, + "array-buffer-byte-length@1.0.2": { + "integrity": "sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==", + "dependencies": [ + "call-bound", + "is-array-buffer" + ] + }, + "array-iterate@2.0.1": { + "integrity": "sha512-I1jXZMjAgCMmxT4qxXfPXa6SthSoE8h6gkSI9BGGNv8mP8G/v0blc+qFnZu6K42vTOiuME596QaLO0TP3Lk0xg==" + }, + "arraybuffer.prototype.slice@1.0.4": { + "integrity": "sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==", + "dependencies": [ + "array-buffer-byte-length", + "call-bind", + "define-properties", + "es-abstract", + "es-errors", + "get-intrinsic", + "is-array-buffer" + ] + }, + "astro-expressive-code@0.41.7_astro@5.13.10__typescript@5.9.3__stylus@0.64.0__vite@6.4.1___stylus@0.64.0___picomatch@4.0.3__zod@3.25.76_typescript@5.9.3_stylus@0.64.0": { + "integrity": "sha512-hUpogGc6DdAd+I7pPXsctyYPRBJDK7Q7d06s4cyP0Vz3OcbziP3FNzN0jZci1BpCvLn9675DvS7B9ctKKX64JQ==", + "dependencies": [ + "astro", + "rehype-expressive-code" + ] + }, + "astro-icon@1.1.5": { + "integrity": "sha512-CJYS5nWOw9jz4RpGWmzNQY7D0y2ZZacH7atL2K9DeJXJVaz7/5WrxeyIxO8KASk1jCM96Q4LjRx/F3R+InjJrw==", + "dependencies": [ + "@iconify/tools", + "@iconify/types", + "@iconify/utils" + ] + }, + "astro@5.13.10_typescript@5.9.3_stylus@0.64.0_vite@6.4.1__stylus@0.64.0__picomatch@4.0.3_zod@3.25.76": { + "integrity": "sha512-PgIrIYvrR7fCoSPPt1sGlpoYK/FNil1BwKazND1DyaZC7SbWLi9hdIHM3ApdrL2SWK7oiADRPw7cTn80UyDWqA==", + "dependencies": [ + "@astrojs/compiler", + "@astrojs/internal-helpers", + "@astrojs/markdown-remark", + "@astrojs/telemetry", + "@capsizecss/unpack", + "@oslojs/encoding", + "@rollup/pluginutils@5.3.0", + "acorn", + "aria-query@5.3.2", + "axobject-query", + "boxen", + "ci-info", + "clsx", + "common-ancestor-path", + "cookie", + "cssesc", + "debug", + "deterministic-object-hash", + "devalue", + "diff", + "dlv", + "dset", + "es-module-lexer", + "esbuild", + "estree-walker@3.0.3", + "flattie", + "fontace", + "github-slugger", + "html-escaper", + "http-cache-semantics", + "import-meta-resolve", + "js-yaml", + "kleur@4.1.5", + "magic-string@0.30.21", + "magicast", + "mrmime", + "neotraverse", + "p-limit@6.2.0", + "p-queue@8.1.1", + "package-manager-detector", + "picomatch@4.0.3", + "prompts", + "rehype", + "semver@7.7.4", + "shiki", + "smol-toml", + "tinyexec@0.3.2", + "tinyglobby", + "tsconfck", + "ultrahtml", + "unifont", + "unist-util-visit@5.1.0", + "unstorage", + "vfile", + "vite", + "vitefu", + "xxhash-wasm", + "yargs-parser", + "yocto-spinner", + "zod", + "zod-to-json-schema", + "zod-to-ts" + ], + "optionalDependencies": [ + "sharp" + ], + "bin": true + }, + "async-function@1.0.0": { + "integrity": "sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==" + }, + "async@3.2.6": { + "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==" + }, + "asyncro@3.0.0": { + "integrity": "sha512-nEnWYfrBmA3taTiuiOoZYmgJ/CNrSoQLeLs29SeLcPu60yaw/mHDBHV0iOZ051fTvsTHxpCY+gXibqT9wbQYfg==" + }, + "autoprefixer@10.4.27_postcss@8.5.6": { + "integrity": "sha512-NP9APE+tO+LuJGn7/9+cohklunJsXWiaWEfV3si4Gi/XHDwVNgkwr1J3RQYFIvPy76GmJ9/bW8vyoU1LcxwKHA==", + "dependencies": [ + "browserslist", + "caniuse-lite", + "fraction.js", + "picocolors", + "postcss", + "postcss-value-parser" + ], + "bin": true + }, + "available-typed-arrays@1.0.7": { + "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", + "dependencies": [ + "possible-typed-array-names" + ] + }, + "axobject-query@4.1.0": { + "integrity": "sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==" + }, + "babel-plugin-macros@3.1.0": { + "integrity": "sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==", + "dependencies": [ + "@babel/runtime", + "cosmiconfig", + "resolve" + ] + }, + "babel-plugin-polyfill-corejs2@0.4.15_@babel+core@7.29.0": { + "integrity": "sha512-hR3GwrRwHUfYwGfrisXPIDP3JcYfBrW7wKE7+Au6wDYl7fm/ka1NEII6kORzxNU556JjfidZeBsO10kYvtV1aw==", + "dependencies": [ + "@babel/compat-data", + "@babel/core", + "@babel/helper-define-polyfill-provider", + "semver@6.3.1" + ] + }, + "babel-plugin-polyfill-corejs3@0.14.0_@babel+core@7.29.0": { + "integrity": "sha512-AvDcMxJ34W4Wgy4KBIIePQTAOP1Ie2WFwkQp3dB7FQ/f0lI5+nM96zUnYEOE1P9sEg0es5VCP0HxiWu5fUHZAQ==", + "dependencies": [ + "@babel/core", + "@babel/helper-define-polyfill-provider", + "core-js-compat" + ] + }, + "babel-plugin-polyfill-regenerator@0.6.6_@babel+core@7.29.0": { + "integrity": "sha512-hYm+XLYRMvupxiQzrvXUj7YyvFFVfv5gI0R71AJzudg1g2AI2vyCPPIFEBjk162/wFzti3inBHo7isWFuEVS/A==", + "dependencies": [ + "@babel/core", + "@babel/helper-define-polyfill-provider" + ] + }, + "babel-plugin-transform-async-to-promises@0.8.18": { + "integrity": "sha512-WpOrF76nUHijnNn10eBGOHZmXQC8JYRME9rOLxStOga7Av2VO53ehVFvVNImMksVtQuL2/7ZNxEgxnx7oo/3Hw==" + }, + "babel-plugin-transform-replace-expressions@0.2.0_@babel+core@7.29.0": { + "integrity": "sha512-Eh1rRd9hWEYgkgoA3D0kGp7xJ/wgVshgsqmq60iC4HVWD+Lux+fNHSHBa2v1Hsv+dHflShC71qKhiH40OiPtDA==", + "dependencies": [ + "@babel/core", + "@babel/parser" + ] + }, + "bail@2.0.2": { + "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==" + }, + "balanced-match@1.0.2": { + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + }, + "base-64@1.0.0": { + "integrity": "sha512-kwDPIFCGx0NZHog36dj+tHiwP4QMzsZ3AgMViUBKI0+V5n4U0ufTCUMhnQ04diaRI8EX/QcPfql7zlhZ7j4zgg==" + }, + "base64-js@1.5.1": { + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" + }, + "baseline-browser-mapping@2.10.0": { + "integrity": "sha512-lIyg0szRfYbiy67j9KN8IyeD7q7hcmqnJ1ddWmNt19ItGpNN64mnllmxUNFIOdOm6by97jlL6wfpTTJrmnjWAA==", + "bin": true + }, + "bcp-47-match@2.0.3": { + "integrity": "sha512-JtTezzbAibu8G0R9op9zb3vcWZd9JF6M0xOYGPn0fNCd7wOpRB1mU2mH9T8gaBGbAAyIIVgB2G7xG0GP98zMAQ==" + }, + "binary-extensions@2.3.0": { + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==" + }, + "blob-to-buffer@1.2.9": { + "integrity": "sha512-BF033y5fN6OCofD3vgHmNtwZWRcq9NLyyxyILx9hfMy1sXYy4ojFl765hJ2lP0YaN2fuxPaLO2Vzzoxy0FLFFA==" + }, + "boolbase@1.0.0": { + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==" + }, + "boxen@8.0.1": { + "integrity": "sha512-F3PH5k5juxom4xktynS7MoFY+NUWH5LC4CnH11YB8NPew+HLpmBLCybSAEyb2F+4pRXhuhWqFesoQd6DAyc2hw==", + "dependencies": [ + "ansi-align", + "camelcase@8.0.0", + "chalk@5.6.2", + "cli-boxes", + "string-width@7.2.0", + "type-fest", + "widest-line", + "wrap-ansi@9.0.2" + ] + }, + "brace-expansion@1.1.12": { + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "dependencies": [ + "balanced-match", + "concat-map" + ] + }, + "brace-expansion@2.0.2": { + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "dependencies": [ + "balanced-match" + ] + }, + "braces@3.0.3": { + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dependencies": [ + "fill-range" + ] + }, + "brotli-size@4.0.0": { + "integrity": "sha512-uA9fOtlTRC0iqKfzff1W34DXUA3GyVqbUaeo3Rw3d4gd1eavKVCETXrn3NzO74W+UVkG3UHu8WxUi+XvKI/huA==", + "dependencies": [ + "duplexer@0.1.1" + ] + }, + "brotli@1.3.3": { + "integrity": "sha512-oTKjJdShmDuGW94SyyaoQvAjf30dZaHnjJ8uAF+u2/vGJkJbJPJAT1gDiOJP5v1Zb6f9KEyW/1HpuaWIXtGHPg==", + "dependencies": [ + "base64-js" + ] + }, + "browserslist@4.28.1": { + "integrity": "sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==", + "dependencies": [ + "baseline-browser-mapping", + "caniuse-lite", + "electron-to-chromium", + "node-releases", + "update-browserslist-db" + ], + "bin": true + }, + "buffer-crc32@0.2.13": { + "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==" + }, + "buffer-from@1.1.2": { + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" + }, + "builtin-modules@3.3.0": { + "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==" + }, + "call-bind-apply-helpers@1.0.2": { + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "dependencies": [ + "es-errors", + "function-bind" + ] + }, + "call-bind@1.0.8": { + "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==", + "dependencies": [ + "call-bind-apply-helpers", + "es-define-property", + "get-intrinsic", + "set-function-length" + ] + }, + "call-bound@1.0.4": { + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", + "dependencies": [ + "call-bind-apply-helpers", + "get-intrinsic" + ] + }, + "callsites@3.1.0": { + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==" + }, + "camelcase-css@2.0.1": { + "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==" + }, + "camelcase@6.3.0": { + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==" + }, + "camelcase@8.0.0": { + "integrity": "sha512-8WB3Jcas3swSvjIeA2yvCJ+Miyz5l1ZmB6HFb9R1317dt9LCQoswg/BGrmAmkWVEszSrrg4RwmO46qIm2OEnSA==" + }, + "caniuse-api@3.0.0": { + "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", + "dependencies": [ + "browserslist", + "caniuse-lite", + "lodash.memoize", + "lodash.uniq" + ] + }, + "caniuse-lite@1.0.30001775": { + "integrity": "sha512-s3Qv7Lht9zbVKE9XoTyRG6wVDCKdtOFIjBGg3+Yhn6JaytuNKPIjBMTMIY1AnOH3seL5mvF+x33oGAyK3hVt3A==" + }, + "ccount@2.0.1": { + "integrity": "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==" + }, + "chalk@1.1.3": { + "integrity": "sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==", + "dependencies": [ + "ansi-styles@2.2.1", + "escape-string-regexp@1.0.5", + "has-ansi", + "strip-ansi@3.0.1", + "supports-color@2.0.0" + ] + }, + "chalk@4.1.2": { + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": [ + "ansi-styles@4.3.0", + "supports-color@7.2.0" + ] + }, + "chalk@5.6.2": { + "integrity": "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==" + }, + "character-entities-html4@2.1.0": { + "integrity": "sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==" + }, + "character-entities-legacy@3.0.0": { + "integrity": "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==" + }, + "character-entities@2.0.2": { + "integrity": "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==" + }, + "character-reference-invalid@2.0.1": { + "integrity": "sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==" + }, + "cheerio-select@2.1.0": { + "integrity": "sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==", + "dependencies": [ + "boolbase", + "css-select@5.2.2", + "css-what", + "domelementtype", + "domhandler@5.0.3", + "domutils@3.2.2" + ] + }, + "cheerio@1.2.0": { + "integrity": "sha512-WDrybc/gKFpTYQutKIK6UvfcuxijIZfMfXaYm8NMsPQxSYvf+13fXUJ4rztGGbJcBQ/GF55gvrZ0Bc0bj/mqvg==", + "dependencies": [ + "cheerio-select", + "dom-serializer@2.0.0", + "domhandler@5.0.3", + "domutils@3.2.2", + "encoding-sniffer", + "htmlparser2@10.1.0", + "parse5", + "parse5-htmlparser2-tree-adapter", + "parse5-parser-stream", + "undici", + "whatwg-mimetype" + ] + }, + "chokidar@3.6.0": { + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "dependencies": [ + "anymatch", + "braces", + "glob-parent@5.1.2", + "is-binary-path", + "is-glob", + "normalize-path", + "readdirp@3.6.0" + ], + "optionalDependencies": [ + "fsevents" + ] + }, + "chokidar@4.0.3": { + "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", + "dependencies": [ + "readdirp@4.1.2" + ] + }, + "chokidar@5.0.0": { + "integrity": "sha512-TQMmc3w+5AxjpL8iIiwebF73dRDF4fBIieAqGn9RGCWaEVwQ6Fb2cGe31Yns0RRIzii5goJ1Y7xbMwo1TxMplw==", + "dependencies": [ + "readdirp@5.0.0" + ] + }, + "chownr@3.0.0": { + "integrity": "sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==" + }, + "ci-info@4.4.0": { + "integrity": "sha512-77PSwercCZU2Fc4sX94eF8k8Pxte6JAwL4/ICZLFjJLqegs7kCuAsqqj/70NQF6TvDpgFjkubQB2FW2ZZddvQg==" + }, + "cli-boxes@3.0.0": { + "integrity": "sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==" + }, + "cliui@8.0.1": { + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dependencies": [ + "string-width@4.2.3", + "strip-ansi@6.0.1", + "wrap-ansi@7.0.0" + ] + }, + "clone@2.1.2": { + "integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==" + }, + "clsx@2.1.1": { + "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==" + }, + "color-convert@2.0.1": { + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": [ + "color-name" + ] + }, + "color-name@1.1.4": { + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "colord@2.9.3": { + "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==" + }, + "comma-separated-tokens@2.0.3": { + "integrity": "sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==" + }, + "commander@2.20.3": { + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" + }, + "commander@4.1.1": { + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==" + }, + "commander@7.2.0": { + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==" + }, + "commander@8.3.0": { + "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==" + }, + "common-ancestor-path@1.0.1": { + "integrity": "sha512-L3sHRo1pXXEqX8VU28kfgUY+YGsk09hPqZiZmLacNib6XNTCM8ubYeT7ryXQw8asB1sKgcU5lkB7ONug08aB8w==" + }, + "commondir@1.0.1": { + "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==" + }, + "concat-map@0.0.1": { + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" + }, + "concat-with-sourcemaps@1.1.0": { + "integrity": "sha512-4gEjHJFT9e+2W/77h/DS5SGUgwDaOwprX8L/gl5+3ixnzkVJJsZWDSelmN3Oilw3LNDZjZV0yqH1hLG3k6nghg==", + "dependencies": [ + "source-map@0.6.1" + ] + }, + "confbox@0.1.8": { + "integrity": "sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==" + }, + "confbox@0.2.4": { + "integrity": "sha512-ysOGlgTFbN2/Y6Cg3Iye8YKulHw+R2fNXHrgSmXISQdMnomY6eNDprVdW9R5xBguEqI954+S6709UyiO7B+6OQ==" + }, + "convert-source-map@2.0.0": { + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==" + }, + "cookie-es@1.2.2": { + "integrity": "sha512-+W7VmiVINB+ywl1HGXJXmrqkOhpKrIiVZV6tQuV54ZyQC7MMuBt81Vc336GMLoHBq5hV/F9eXgt5Mnx0Rha5Fg==" + }, + "cookie@1.1.1": { + "integrity": "sha512-ei8Aos7ja0weRpFzJnEA9UHJ/7XQmqglbRwnf2ATjcB9Wq874VKH9kfjjirM6UhU2/E5fFYadylyhFldcqSidQ==" + }, + "core-js-compat@3.48.0": { + "integrity": "sha512-OM4cAF3D6VtH/WkLtWvyNC56EZVXsZdU3iqaMG2B4WvYrlqU831pc4UtG5yp0sE9z8Y02wVN7PjW5Zf9Gt0f1Q==", + "dependencies": [ + "browserslist" + ] + }, + "cosmiconfig@7.1.0": { + "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", + "dependencies": [ + "@types/parse-json", + "import-fresh", + "parse-json", + "path-type", + "yaml@1.10.2" + ] + }, + "cross-fetch@3.2.0": { + "integrity": "sha512-Q+xVJLoGOeIMXZmbUK4HYk+69cQH6LudR0Vu/pRm2YlU/hDV9CiS0gKUMaWY5f2NeUH9C1nV3bsTlCo0FsTV1Q==", + "dependencies": [ + "node-fetch" + ] + }, + "cross-spawn@7.0.6": { + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dependencies": [ + "path-key", + "shebang-command", + "which" + ] + }, + "crossws@0.3.5": { + "integrity": "sha512-ojKiDvcmByhwa8YYqbQI/hg7MEU0NC03+pSdEq4ZUnZR9xXpwk7E43SMNGkn+JxJGPFtNvQ48+vV2p+P1ml5PA==", + "dependencies": [ + "uncrypto" + ] + }, + "css-declaration-sorter@6.4.1_postcss@8.5.6": { + "integrity": "sha512-rtdthzxKuyq6IzqX6jEcIzQF/YqccluefyCYheovBOLhFT/drQA9zj/UbRAa9J7C0o6EG6u3E6g+vKkay7/k3g==", + "dependencies": [ + "postcss" + ] + }, + "css-select@4.3.0": { + "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", + "dependencies": [ + "boolbase", + "css-what", + "domhandler@4.3.1", + "domutils@2.8.0", + "nth-check" + ] + }, + "css-select@5.2.2": { + "integrity": "sha512-TizTzUddG/xYLA3NXodFM0fSbNizXjOKhqiQQwvhlspadZokn1KDy0NZFS0wuEubIYAV5/c1/lAr0TaaFXEXzw==", + "dependencies": [ + "boolbase", + "css-what", + "domhandler@5.0.3", + "domutils@3.2.2", + "nth-check" + ] + }, + "css-selector-parser@3.3.0": { + "integrity": "sha512-Y2asgMGFqJKF4fq4xHDSlFYIkeVfRsm69lQC1q9kbEsH5XtnINTMrweLkjYMeaUgiXBy/uvKeO/a1JHTNnmB2g==" + }, + "css-tree@1.1.3": { + "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", + "dependencies": [ + "mdn-data@2.0.14", + "source-map@0.6.1" + ] + }, + "css-tree@2.2.1": { + "integrity": "sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==", + "dependencies": [ + "mdn-data@2.0.28", + "source-map-js" + ] + }, + "css-tree@2.3.1": { + "integrity": "sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==", + "dependencies": [ + "mdn-data@2.0.30", + "source-map-js" + ] + }, + "css-tree@3.1.0": { + "integrity": "sha512-0eW44TGN5SQXU1mWSkKwFstI/22X2bG1nYzZTYMAWjylYURhse752YgbE4Cx46AC+bAvI+/dYTPRk1LqSUnu6w==", + "dependencies": [ + "mdn-data@2.12.2", + "source-map-js" + ] + }, + "css-what@6.2.2": { + "integrity": "sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA==" + }, + "cssesc@3.0.0": { + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "bin": true + }, + "cssnano-preset-default@5.2.14_postcss@8.5.6": { + "integrity": "sha512-t0SFesj/ZV2OTylqQVOrFgEh5uanxbO6ZAdeCrNsUQ6fVuXwYTxJPNAGvGTxHbD68ldIJNec7PyYZDBrfDQ+6A==", + "dependencies": [ + "css-declaration-sorter", + "cssnano-utils", + "postcss", + "postcss-calc", + "postcss-colormin", + "postcss-convert-values", + "postcss-discard-comments", + "postcss-discard-duplicates", + "postcss-discard-empty", + "postcss-discard-overridden", + "postcss-merge-longhand", + "postcss-merge-rules", + "postcss-minify-font-values", + "postcss-minify-gradients", + "postcss-minify-params", + "postcss-minify-selectors", + "postcss-normalize-charset", + "postcss-normalize-display-values", + "postcss-normalize-positions", + "postcss-normalize-repeat-style", + "postcss-normalize-string", + "postcss-normalize-timing-functions", + "postcss-normalize-unicode", + "postcss-normalize-url", + "postcss-normalize-whitespace", + "postcss-ordered-values", + "postcss-reduce-initial", + "postcss-reduce-transforms", + "postcss-svgo", + "postcss-unique-selectors" + ] + }, + "cssnano-utils@3.1.0_postcss@8.5.6": { + "integrity": "sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA==", + "dependencies": [ + "postcss" + ] + }, + "cssnano@5.1.15_postcss@8.5.6": { + "integrity": "sha512-j+BKgDcLDQA+eDifLx0EO4XSA56b7uut3BQFH+wbSaSTuGLuiyTa/wbRYthUXX8LC9mLg+WWKe8h+qJuwTAbHw==", + "dependencies": [ + "cssnano-preset-default", + "lilconfig@2.1.0", + "postcss", + "yaml@1.10.2" + ] + }, + "csso@4.2.0": { + "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==", + "dependencies": [ + "css-tree@1.1.3" + ] + }, + "csso@5.0.5": { + "integrity": "sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==", + "dependencies": [ + "css-tree@2.2.1" + ] + }, + "data-view-buffer@1.0.2": { + "integrity": "sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==", + "dependencies": [ + "call-bound", + "es-errors", + "is-data-view" + ] + }, + "data-view-byte-length@1.0.2": { + "integrity": "sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==", + "dependencies": [ + "call-bound", + "es-errors", + "is-data-view" + ] + }, + "data-view-byte-offset@1.0.1": { + "integrity": "sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==", + "dependencies": [ + "call-bound", + "es-errors", + "is-data-view" + ] + }, + "debug@4.4.3": { + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "dependencies": [ + "ms" + ] + }, + "decode-named-character-reference@1.3.0": { + "integrity": "sha512-GtpQYB283KrPp6nRw50q3U9/VfOutZOe103qlN7BPP6Ad27xYnOIWv4lPzo8HCAL+mMZofJ9KEy30fq6MfaK6Q==", + "dependencies": [ + "character-entities" + ] + }, + "dedent-js@1.0.1": { + "integrity": "sha512-OUepMozQULMLUmhxS95Vudo0jb0UchLimi3+pQ2plj61Fcy8axbP9hbiD4Sz6DPqn6XG3kfmziVfQ1rSys5AJQ==" + }, + "deepmerge@4.3.1": { + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==" + }, + "define-data-property@1.1.4": { + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "dependencies": [ + "es-define-property", + "es-errors", + "gopd" + ] + }, + "define-lazy-prop@2.0.0": { + "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==" + }, + "define-properties@1.2.1": { + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "dependencies": [ + "define-data-property", + "has-property-descriptors", + "object-keys" + ] + }, + "defu@6.1.4": { + "integrity": "sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==" + }, + "delegate-it@6.3.0": { + "integrity": "sha512-WAa6cA61M5mfDR31PBgMNQQ3LY1q++TxnZzcm7E9XV8ODBPxDutxH0toTR/BXqIkLaVuU7ntFe1uOqDllhA22A==", + "dependencies": [ + "typed-query-selector" + ] + }, + "dequal@2.0.3": { + "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==" + }, + "destr@2.0.5": { + "integrity": "sha512-ugFTXCtDZunbzasqBxrK93Ik/DRYsO6S/fedkWEMKqt04xZ4csmnmwGDBAb07QWNaGMAmnTIemsYZCksjATwsA==" + }, + "detect-libc@2.1.2": { + "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==" + }, + "deterministic-object-hash@2.0.2": { + "integrity": "sha512-KxektNH63SrbfUyDiwXqRb1rLwKt33AmMv+5Nhsw1kqZ13SJBRTgZHtGbE+hH3a1mVW1cz+4pqSWVPAtLVXTzQ==", + "dependencies": [ + "base-64" + ] + }, + "devalue@5.6.3": { + "integrity": "sha512-nc7XjUU/2Lb+SvEFVGcWLiKkzfw8+qHI7zn8WYXKkLMgfGSHbgCEaR6bJpev8Cm6Rmrb19Gfd/tZvGqx9is3wg==" + }, + "devlop@1.1.0": { + "integrity": "sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==", + "dependencies": [ + "dequal" + ] + }, + "dfa@1.2.0": { + "integrity": "sha512-ED3jP8saaweFTjeGX8HQPjeC1YYyZs98jGNZx6IiBvxW7JG5v492kamAQB3m2wop07CvU/RQmzcKr6bgcC5D/Q==" + }, + "didyoumean@1.2.2": { + "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==" + }, + "diff@5.2.2": { + "integrity": "sha512-vtcDfH3TOjP8UekytvnHH1o1P4FcUdt4eQ1Y+Abap1tk/OB2MWQvcwS2ClCd1zuIhc3JKOx6p3kod8Vfys3E+A==" + }, + "direction@2.0.1": { + "integrity": "sha512-9S6m9Sukh1cZNknO1CWAr2QAWsbKLafQiyM5gZ7VgXHeuaoUwffKN4q6NC4A/Mf9iiPlOXQEKW/Mv/mh9/3YFA==", + "bin": true + }, + "dlv@1.1.3": { + "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==" + }, + "dom-serializer@1.4.1": { + "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", + "dependencies": [ + "domelementtype", + "domhandler@4.3.1", + "entities@2.2.0" + ] + }, + "dom-serializer@2.0.0": { + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", + "dependencies": [ + "domelementtype", + "domhandler@5.0.3", + "entities@4.5.0" + ] + }, + "domelementtype@2.3.0": { + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==" + }, + "domhandler@4.3.1": { + "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", + "dependencies": [ + "domelementtype" + ] + }, + "domhandler@5.0.3": { + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "dependencies": [ + "domelementtype" + ] + }, + "domutils@2.8.0": { + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", + "dependencies": [ + "dom-serializer@1.4.1", + "domelementtype", + "domhandler@4.3.1" + ] + }, + "domutils@3.2.2": { + "integrity": "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==", + "dependencies": [ + "dom-serializer@2.0.0", + "domelementtype", + "domhandler@5.0.3" + ] + }, + "dset@3.1.4": { + "integrity": "sha512-2QF/g9/zTaPDc3BjNcVTGoBbXBgYfMTTceLaYcFJ/W9kggFUkhxD/hMEeuLKbugyef9SqAx8cpgwlIP/jinUTA==" + }, + "dunder-proto@1.0.1": { + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "dependencies": [ + "call-bind-apply-helpers", + "es-errors", + "gopd" + ] + }, + "duplexer@0.1.1": { + "integrity": "sha512-sxNZ+ljy+RA1maXoUReeqBBpBC6RLKmg5ewzV+x+mSETmWNoKdZN6vcQjpFROemza23hGFskJtFNoUWUaQ+R4Q==" + }, + "duplexer@0.1.2": { + "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==" + }, + "eastasianwidth@0.2.0": { + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==" + }, + "ejs@3.1.10": { + "integrity": "sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==", + "dependencies": [ + "jake" + ], + "bin": true + }, + "electron-to-chromium@1.5.302": { + "integrity": "sha512-sM6HAN2LyK82IyPBpznDRqlTQAtuSaO+ShzFiWTvoMJLHyZ+Y39r8VMfHzwbU8MVBzQ4Wdn85+wlZl2TLGIlwg==" + }, + "emmet@2.4.11": { + "integrity": "sha512-23QPJB3moh/U9sT4rQzGgeyyGIrcM+GH5uVYg2C6wZIxAIJq7Ng3QLT79tl8FUwDXhyq9SusfknOrofAKqvgyQ==", + "dependencies": [ + "@emmetio/abbreviation", + "@emmetio/css-abbreviation" + ] + }, + "emoji-regex@10.6.0": { + "integrity": "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==" + }, + "emoji-regex@8.0.0": { + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "emoji-regex@9.2.2": { + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" + }, + "encoding-sniffer@0.2.1": { + "integrity": "sha512-5gvq20T6vfpekVtqrYQsSCFZ1wEg5+wW0/QaZMWkFr6BqD3NfKs0rLCx4rrVlSWJeZb5NBJgVLswK/w2MWU+Gw==", + "dependencies": [ + "iconv-lite", + "whatwg-encoding" + ] + }, + "end-of-stream@1.4.5": { + "integrity": "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==", + "dependencies": [ + "once" + ] + }, + "entities@2.2.0": { + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==" + }, + "entities@4.5.0": { + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==" + }, + "entities@6.0.1": { + "integrity": "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==" + }, + "entities@7.0.1": { + "integrity": "sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA==" + }, + "error-ex@1.3.4": { + "integrity": "sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==", + "dependencies": [ + "is-arrayish" + ] + }, + "es-abstract@1.24.1": { + "integrity": "sha512-zHXBLhP+QehSSbsS9Pt23Gg964240DPd6QCf8WpkqEXxQ7fhdZzYsocOr5u7apWonsS5EjZDmTF+/slGMyasvw==", + "dependencies": [ + "array-buffer-byte-length", + "arraybuffer.prototype.slice", + "available-typed-arrays", + "call-bind", + "call-bound", + "data-view-buffer", + "data-view-byte-length", + "data-view-byte-offset", + "es-define-property", + "es-errors", + "es-object-atoms", + "es-set-tostringtag", + "es-to-primitive", + "function.prototype.name", + "get-intrinsic", + "get-proto", + "get-symbol-description", + "globalthis", + "gopd", + "has-property-descriptors", + "has-proto", + "has-symbols", + "hasown", + "internal-slot", + "is-array-buffer", + "is-callable", + "is-data-view", + "is-negative-zero", + "is-regex", + "is-set", + "is-shared-array-buffer", + "is-string", + "is-typed-array", + "is-weakref", + "math-intrinsics", + "object-inspect", + "object-keys", + "object.assign", + "own-keys", + "regexp.prototype.flags", + "safe-array-concat", + "safe-push-apply", + "safe-regex-test", + "set-proto", + "stop-iteration-iterator", + "string.prototype.trim", + "string.prototype.trimend", + "string.prototype.trimstart", + "typed-array-buffer", + "typed-array-byte-length", + "typed-array-byte-offset", + "typed-array-length", + "unbox-primitive", + "which-typed-array" + ] + }, + "es-define-property@1.0.1": { + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==" + }, + "es-errors@1.3.0": { + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==" + }, + "es-module-lexer@1.7.0": { + "integrity": "sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==" + }, + "es-object-atoms@1.1.1": { + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "dependencies": [ + "es-errors" + ] + }, + "es-set-tostringtag@2.1.0": { + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "dependencies": [ + "es-errors", + "get-intrinsic", + "has-tostringtag", + "hasown" + ] + }, + "es-to-primitive@1.3.0": { + "integrity": "sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==", + "dependencies": [ + "is-callable", + "is-date-object", + "is-symbol" + ] + }, + "esbuild@0.25.12": { + "integrity": "sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==", + "optionalDependencies": [ + "@esbuild/aix-ppc64", + "@esbuild/android-arm", + "@esbuild/android-arm64", + "@esbuild/android-x64", + "@esbuild/darwin-arm64", + "@esbuild/darwin-x64", + "@esbuild/freebsd-arm64", + "@esbuild/freebsd-x64", + "@esbuild/linux-arm", + "@esbuild/linux-arm64", + "@esbuild/linux-ia32", + "@esbuild/linux-loong64", + "@esbuild/linux-mips64el", + "@esbuild/linux-ppc64", + "@esbuild/linux-riscv64", + "@esbuild/linux-s390x", + "@esbuild/linux-x64", + "@esbuild/netbsd-arm64", + "@esbuild/netbsd-x64", + "@esbuild/openbsd-arm64", + "@esbuild/openbsd-x64", + "@esbuild/openharmony-arm64", + "@esbuild/sunos-x64", + "@esbuild/win32-arm64", + "@esbuild/win32-ia32", + "@esbuild/win32-x64" + ], + "scripts": true, + "bin": true + }, + "escalade@3.2.0": { + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==" + }, + "escape-string-regexp@1.0.5": { + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==" + }, + "escape-string-regexp@4.0.0": { + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==" + }, + "escape-string-regexp@5.0.0": { + "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==" + }, + "esm-env@1.2.2": { + "integrity": "sha512-Epxrv+Nr/CaL4ZcFGPJIYLWFom+YeV1DqMLHJoEd9SYRxNbaFruBwfEX/kkHUJf55j2+TUbmDcmuilbP1TmXHA==" + }, + "esrap@2.2.3": { + "integrity": "sha512-8fOS+GIGCQZl/ZIlhl59htOlms6U8NvX6ZYgYHpRU/b6tVSh3uHkOHZikl3D4cMbYM0JlpBe+p/BkZEi8J9XIQ==", + "dependencies": [ + "@jridgewell/sourcemap-codec" + ] + }, + "estree-walker@0.6.1": { + "integrity": "sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==" + }, + "estree-walker@1.0.1": { + "integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==" + }, + "estree-walker@2.0.2": { + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==" + }, + "estree-walker@3.0.3": { + "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "dependencies": [ + "@types/estree@1.0.8" + ] + }, + "esutils@2.0.3": { + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==" + }, + "eventemitter3@4.0.7": { + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==" + }, + "eventemitter3@5.0.4": { + "integrity": "sha512-mlsTRyGaPBjPedk6Bvw+aqbsXDtoAyAzm5MO7JgU+yVRyMQ5O8bD4Kcci7BS85f93veegeCPkL8R4GLClnjLFw==" + }, + "expressive-code@0.41.7": { + "integrity": "sha512-2wZjC8OQ3TaVEMcBtYY4Va3lo6J+Ai9jf3d4dbhURMJcU4Pbqe6EcHe424MIZI0VHUA1bR6xdpoHYi3yxokWqA==", + "dependencies": [ + "@expressive-code/core", + "@expressive-code/plugin-frames", + "@expressive-code/plugin-shiki", + "@expressive-code/plugin-text-markers" + ] + }, + "exsolve@1.0.8": { + "integrity": "sha512-LmDxfWXwcTArk8fUEnOfSZpHOJ6zOMUJKOtFLFqJLoKJetuQG874Uc7/Kki7zFLzYybmZhp1M7+98pfMqeX8yA==" + }, + "extend@3.0.2": { + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" + }, + "extract-zip@2.0.1": { + "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", + "dependencies": [ + "debug", + "get-stream", + "yauzl" + ], + "optionalDependencies": [ + "@types/yauzl" + ], + "bin": true + }, + "fast-deep-equal@3.1.3": { + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" + }, + "fast-glob@3.3.3": { + "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", + "dependencies": [ + "@nodelib/fs.stat", + "@nodelib/fs.walk", + "glob-parent@5.1.2", + "merge2", + "micromatch" + ] + }, + "fast-uri@3.1.0": { + "integrity": "sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==" + }, + "fast-xml-builder@1.0.0": { + "integrity": "sha512-fpZuDogrAgnyt9oDDz+5DBz0zgPdPZz6D4IR7iESxRXElrlGTRkHJ9eEt+SACRJwT0FNFrt71DFQIUFBJfX/uQ==" + }, + "fast-xml-parser@5.4.1": { + "integrity": "sha512-BQ30U1mKkvXQXXkAGcuyUA/GA26oEB7NzOtsxCDtyu62sjGw5QraKFhx2Em3WQNjPw9PG6MQ9yuIIgkSDfGu5A==", + "dependencies": [ + "fast-xml-builder", + "strnum" + ], + "bin": true + }, + "fastq@1.20.1": { + "integrity": "sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==", + "dependencies": [ + "reusify" + ] + }, + "fd-slicer@1.1.0": { + "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", + "dependencies": [ + "pend" + ] + }, + "fdir@6.5.0_picomatch@4.0.3": { + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "dependencies": [ + "picomatch@4.0.3" + ], + "optionalPeers": [ + "picomatch@4.0.3" + ] + }, + "figures@1.7.0": { + "integrity": "sha512-UxKlfCRuCBxSXU4C6t9scbDyWZ4VlaFFdojKtzJuSkuOBQ5CNFum+zZXFwHjo+CxBC1t6zlYPgHIgFjL8ggoEQ==", + "dependencies": [ + "escape-string-regexp@1.0.5", + "object-assign" + ] + }, + "filelist@1.0.6": { + "integrity": "sha512-5giy2PkLYY1cP39p17Ech+2xlpTRL9HLspOfEgm0L6CwBXBTgsK5ou0JtzYuepxkaQ/tvhCFIJ5uXo0OrM2DxA==", + "dependencies": [ + "minimatch@5.1.9" + ] + }, + "filesize@6.4.0": { + "integrity": "sha512-mjFIpOHC4jbfcTfoh4rkWpI31mF7viw9ikj/JyLoKzqlwG/YsefKfvYlYhdYdg/9mtK2z1AzgN/0LvVQ3zdlSQ==" + }, + "fill-range@7.1.1": { + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dependencies": [ + "to-regex-range" + ] + }, + "find-cache-dir@3.3.2": { + "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", + "dependencies": [ + "commondir", + "make-dir", + "pkg-dir" + ] + }, + "find-up@4.1.0": { + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dependencies": [ + "locate-path", + "path-exists" + ] + }, + "flattie@1.1.1": { + "integrity": "sha512-9UbaD6XdAL97+k/n+N7JwX46K/M6Zc6KcFYskrYL8wbBV/Uyk0CTAMY0VT+qiK5PM7AIc9aTWYtq65U7T+aCNQ==" + }, + "focus-options-polyfill@1.6.0": { + "integrity": "sha512-uyrAmLZrPnUItQY5wTdg31TO9GGZRGsh/jmohUg9oLmLi/sw5y7LlTV/mwyd6rvbxIOGwmRiv6LcTS8w7Bk9NQ==" + }, + "fontace@0.3.1": { + "integrity": "sha512-9f5g4feWT1jWT8+SbL85aLIRLIXUaDygaM2xPXRmzPYxrOMNok79Lr3FGJoKVNKibE0WCunNiEVG2mwuE+2qEg==", + "dependencies": [ + "@types/fontkit", + "fontkit" + ] + }, + "fontkit@2.0.4": { + "integrity": "sha512-syetQadaUEDNdxdugga9CpEYVaQIxOwk7GlwZWWZ19//qW4zE5bknOKeMBDYAASwnpaSHKJITRLMF9m1fp3s6g==", + "dependencies": [ + "@swc/helpers", + "brotli", + "clone", + "dfa", + "fast-deep-equal", + "restructure", + "tiny-inflate", + "unicode-properties", + "unicode-trie" + ] + }, + "for-each@0.3.5": { + "integrity": "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==", + "dependencies": [ + "is-callable" + ] + }, + "foreground-child@3.3.1": { + "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", + "dependencies": [ + "cross-spawn", + "signal-exit" + ] + }, + "fraction.js@5.3.4": { + "integrity": "sha512-1X1NTtiJphryn/uLQz3whtY6jK3fTqoE3ohKs0tT+Ujr1W59oopxmoEh7Lu5p6vBaPbgoM0bzveAW4Qi5RyWDQ==" + }, + "fs-extra@10.1.0": { + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "dependencies": [ + "graceful-fs", + "jsonfile", + "universalify" + ] + }, + "fs.realpath@1.0.0": { + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" + }, + "fsevents@2.3.3": { + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "os": ["darwin"], + "scripts": true + }, + "function-bind@1.1.2": { + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==" + }, + "function.prototype.name@1.1.8": { + "integrity": "sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==", + "dependencies": [ + "call-bind", + "call-bound", + "define-properties", + "functions-have-names", + "hasown", + "is-callable" + ] + }, + "functions-have-names@1.2.3": { + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==" + }, + "generator-function@2.0.1": { + "integrity": "sha512-SFdFmIJi+ybC0vjlHN0ZGVGHc3lgE0DxPAT0djjVg+kjOnSqclqmj0KQ7ykTOLP6YxoqOvuAODGdcHJn+43q3g==" + }, + "generic-names@4.0.0": { + "integrity": "sha512-ySFolZQfw9FoDb3ed9d80Cm9f0+r7qj+HJkWjeD9RBfpxEVTlVhol+gvaQB/78WbwYfbnNh8nWHHBSlg072y6A==", + "dependencies": [ + "loader-utils" + ] + }, + "gensync@1.0.0-beta.2": { + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==" + }, + "get-caller-file@2.0.5": { + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" + }, + "get-east-asian-width@1.5.0": { + "integrity": "sha512-CQ+bEO+Tva/qlmw24dCejulK5pMzVnUOFOijVogd3KQs07HnRIgp8TGipvCCRT06xeYEbpbgwaCxglFyiuIcmA==" + }, + "get-intrinsic@1.3.0": { + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "dependencies": [ + "call-bind-apply-helpers", + "es-define-property", + "es-errors", + "es-object-atoms", + "function-bind", + "get-proto", + "gopd", + "has-symbols", + "hasown", + "math-intrinsics" + ] + }, + "get-proto@1.0.1": { + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "dependencies": [ + "dunder-proto", + "es-object-atoms" + ] + }, + "get-stream@5.2.0": { + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dependencies": [ + "pump" + ] + }, + "get-symbol-description@1.1.0": { + "integrity": "sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==", + "dependencies": [ + "call-bound", + "es-errors", + "get-intrinsic" + ] + }, + "github-slugger@2.0.0": { + "integrity": "sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw==" + }, + "glob-parent@5.1.2": { + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dependencies": [ + "is-glob" + ] + }, + "glob-parent@6.0.2": { + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dependencies": [ + "is-glob" + ] + }, + "glob@10.5.0": { + "integrity": "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==", + "dependencies": [ + "foreground-child", + "jackspeak", + "minimatch@9.0.9", + "minipass", + "package-json-from-dist", + "path-scurry" + ], + "deprecated": true, + "bin": true + }, + "glob@7.2.3": { + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dependencies": [ + "fs.realpath", + "inflight", + "inherits", + "minimatch@3.1.5", + "once", + "path-is-absolute" + ], + "deprecated": true + }, + "globals@15.15.0": { + "integrity": "sha512-7ACyT3wmyp3I61S4fG682L0VA2RGD9otkqGJIwNUMF1SWUombIIk+af1unuDYgMm082aHYwD+mzJvv9Iu8dsgg==" + }, + "globalthis@1.0.4": { + "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", + "dependencies": [ + "define-properties", + "gopd" + ] + }, + "globalyzer@0.1.0": { + "integrity": "sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q==" + }, + "globrex@0.1.2": { + "integrity": "sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==" + }, + "gopd@1.2.0": { + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==" + }, + "graceful-fs@4.2.11": { + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" + }, + "gzip-size@3.0.0": { + "integrity": "sha512-6s8trQiK+OMzSaCSVXX+iqIcLV9tC+E73jrJrJTyS4h/AJhlxHvzFKqM1YLDJWRGgHX8uLkBeXkA0njNj39L4w==", + "dependencies": [ + "duplexer@0.1.2" + ] + }, + "gzip-size@6.0.0": { + "integrity": "sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==", + "dependencies": [ + "duplexer@0.1.2" + ] + }, + "h3@1.15.5": { + "integrity": "sha512-xEyq3rSl+dhGX2Lm0+eFQIAzlDN6Fs0EcC4f7BNUmzaRX/PTzeuM+Tr2lHB8FoXggsQIeXLj8EDVgs5ywxyxmg==", + "dependencies": [ + "cookie-es", + "crossws", + "defu", + "destr", + "iron-webcrypto", + "node-mock-http", + "radix3", + "ufo", + "uncrypto" + ] + }, + "has-ansi@2.0.0": { + "integrity": "sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg==", + "dependencies": [ + "ansi-regex@2.1.1" + ] + }, + "has-bigints@1.1.0": { + "integrity": "sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==" + }, + "has-flag@4.0.0": { + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "has-property-descriptors@1.0.2": { + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "dependencies": [ + "es-define-property" + ] + }, + "has-proto@1.2.0": { + "integrity": "sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==", + "dependencies": [ + "dunder-proto" + ] + }, + "has-symbols@1.1.0": { + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==" + }, + "has-tostringtag@1.0.2": { + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "dependencies": [ + "has-symbols" + ] + }, + "hasown@2.0.2": { + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dependencies": [ + "function-bind" + ] + }, + "hast-util-from-dom@5.0.1": { + "integrity": "sha512-N+LqofjR2zuzTjCPzyDUdSshy4Ma6li7p/c3pA78uTwzFgENbgbUrm2ugwsOdcjI1muO+o6Dgzp9p8WHtn/39Q==", + "dependencies": [ + "@types/hast@3.0.4", + "hastscript@9.0.1", + "web-namespaces" + ] + }, + "hast-util-from-html-isomorphic@2.0.0": { + "integrity": "sha512-zJfpXq44yff2hmE0XmwEOzdWin5xwH+QIhMLOScpX91e/NSGPsAzNCvLQDIEPyO2TXi+lBmU6hjLIhV8MwP2kw==", + "dependencies": [ + "@types/hast@3.0.4", + "hast-util-from-dom", + "hast-util-from-html", + "unist-util-remove-position" + ] + }, + "hast-util-from-html@2.0.3": { + "integrity": "sha512-CUSRHXyKjzHov8yKsQjGOElXy/3EKpyX56ELnkHH34vDVw1N1XSQ1ZcAvTyAPtGqLTuKP/uxM+aLkSPqF/EtMw==", + "dependencies": [ + "@types/hast@3.0.4", + "devlop", + "hast-util-from-parse5", + "parse5", + "vfile", + "vfile-message" + ] + }, + "hast-util-from-parse5@8.0.3": { + "integrity": "sha512-3kxEVkEKt0zvcZ3hCRYI8rqrgwtlIOFMWkbclACvjlDw8Li9S2hk/d51OI0nr/gIpdMHNepwgOKqZ/sy0Clpyg==", + "dependencies": [ + "@types/hast@3.0.4", + "@types/unist@3.0.3", + "devlop", + "hastscript@9.0.1", + "property-information@7.1.0", + "vfile", + "vfile-location", + "web-namespaces" + ] + }, + "hast-util-has-property@3.0.0": { + "integrity": "sha512-MNilsvEKLFpV604hwfhVStK0usFY/QmM5zX16bo7EjnAEGofr5YyI37kzopBlZJkHD4t887i+q/C8/tr5Q94cA==", + "dependencies": [ + "@types/hast@3.0.4" + ] + }, + "hast-util-heading-rank@3.0.0": { + "integrity": "sha512-EJKb8oMUXVHcWZTDepnr+WNbfnXKFNf9duMesmr4S8SXTJBJ9M4Yok08pu9vxdJwdlGRhVumk9mEhkEvKGifwA==", + "dependencies": [ + "@types/hast@3.0.4" + ] + }, + "hast-util-is-element@3.0.0": { + "integrity": "sha512-Val9mnv2IWpLbNPqc/pUem+a7Ipj2aHacCwgNfTiK0vJKl0LF+4Ba4+v1oPHFpf3bLYmreq0/l3Gud9S5OH42g==", + "dependencies": [ + "@types/hast@3.0.4" + ] + }, + "hast-util-parse-selector@3.1.1": { + "integrity": "sha512-jdlwBjEexy1oGz0aJ2f4GKMaVKkA9jwjr4MjAAI22E5fM/TXVZHuS5OpONtdeIkRKqAaryQ2E9xNQxijoThSZA==", + "dependencies": [ + "@types/hast@2.3.10" + ] + }, + "hast-util-parse-selector@4.0.0": { + "integrity": "sha512-wkQCkSYoOGCRKERFWcxMVMOcYE2K1AaNLU8DXS9arxnLOUEWbOXKXiJUNzEpqZ3JOKpnha3jkFrumEjVliDe7A==", + "dependencies": [ + "@types/hast@3.0.4" + ] + }, + "hast-util-raw@9.1.0": { + "integrity": "sha512-Y8/SBAHkZGoNkpzqqfCldijcuUKh7/su31kEBp67cFY09Wy0mTRgtsLYsiIxMJxlu0f6AA5SUTbDR8K0rxnbUw==", + "dependencies": [ + "@types/hast@3.0.4", + "@types/unist@3.0.3", + "@ungap/structured-clone", + "hast-util-from-parse5", + "hast-util-to-parse5", + "html-void-elements", + "mdast-util-to-hast", + "parse5", + "unist-util-position", + "unist-util-visit@5.1.0", + "vfile", + "web-namespaces", + "zwitch" + ] + }, + "hast-util-select@6.0.4": { + "integrity": "sha512-RqGS1ZgI0MwxLaKLDxjprynNzINEkRHY2i8ln4DDjgv9ZhcYVIHN9rlpiYsqtFwrgpYU361SyWDQcGNIBVu3lw==", + "dependencies": [ + "@types/hast@3.0.4", + "@types/unist@3.0.3", + "bcp-47-match", + "comma-separated-tokens", + "css-selector-parser", + "devlop", + "direction", + "hast-util-has-property", + "hast-util-to-string", + "hast-util-whitespace", + "nth-check", + "property-information@7.1.0", + "space-separated-tokens", + "unist-util-visit@5.1.0", + "zwitch" + ] + }, + "hast-util-to-html@9.0.5": { + "integrity": "sha512-OguPdidb+fbHQSU4Q4ZiLKnzWo8Wwsf5bZfbvu7//a9oTYoqD/fWpe96NuHkoS9h0ccGOTe0C4NGXdtS0iObOw==", + "dependencies": [ + "@types/hast@3.0.4", + "@types/unist@3.0.3", + "ccount", + "comma-separated-tokens", + "hast-util-whitespace", + "html-void-elements", + "mdast-util-to-hast", + "property-information@7.1.0", + "space-separated-tokens", + "stringify-entities", + "zwitch" + ] + }, + "hast-util-to-parse5@8.0.1": { + "integrity": "sha512-MlWT6Pjt4CG9lFCjiz4BH7l9wmrMkfkJYCxFwKQic8+RTZgWPuWxwAfjJElsXkex7DJjfSJsQIt931ilUgmwdA==", + "dependencies": [ + "@types/hast@3.0.4", + "comma-separated-tokens", + "devlop", + "property-information@7.1.0", + "space-separated-tokens", + "web-namespaces", + "zwitch" + ] + }, + "hast-util-to-string@3.0.1": { + "integrity": "sha512-XelQVTDWvqcl3axRfI0xSeoVKzyIFPwsAGSLIsKdJKQMXDYJS4WYrBNF/8J7RdhIcFI2BOHgAifggsvsxp/3+A==", + "dependencies": [ + "@types/hast@3.0.4" + ] + }, + "hast-util-to-text@4.0.2": { + "integrity": "sha512-KK6y/BN8lbaq654j7JgBydev7wuNMcID54lkRav1P0CaE1e47P72AWWPiGKXTJU271ooYzcvTAn/Zt0REnvc7A==", + "dependencies": [ + "@types/hast@3.0.4", + "@types/unist@3.0.3", + "hast-util-is-element", + "unist-util-find-after@5.0.0" + ] + }, + "hast-util-whitespace@3.0.0": { + "integrity": "sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==", + "dependencies": [ + "@types/hast@3.0.4" + ] + }, + "hastscript@7.2.0": { + "integrity": "sha512-TtYPq24IldU8iKoJQqvZOuhi5CyCQRAbvDOX0x1eW6rsHSxa/1i2CCiptNTotGHJ3VoHRGmqiv6/D3q113ikkw==", + "dependencies": [ + "@types/hast@2.3.10", + "comma-separated-tokens", + "hast-util-parse-selector@3.1.1", + "property-information@6.5.0", + "space-separated-tokens" + ] + }, + "hastscript@9.0.1": { + "integrity": "sha512-g7df9rMFX/SPi34tyGCyUBREQoKkapwdY/T04Qn9TDWfHhAYt4/I0gMVirzK5wEzeUqIjEB+LXC/ypb7Aqno5w==", + "dependencies": [ + "@types/hast@3.0.4", + "comma-separated-tokens", + "hast-util-parse-selector@4.0.0", + "property-information@7.1.0", + "space-separated-tokens" + ] + }, + "html-escaper@3.0.3": { + "integrity": "sha512-RuMffC89BOWQoY0WKGpIhn5gX3iI54O6nRA0yC124NYVtzjmFWBIiFd8M0x+ZdX0P9R4lADg1mgP8C7PxGOWuQ==" + }, + "html-void-elements@3.0.0": { + "integrity": "sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==" + }, + "htmlparser2@10.1.0": { + "integrity": "sha512-VTZkM9GWRAtEpveh7MSF6SjjrpNVNNVJfFup7xTY3UpFtm67foy9HDVXneLtFVt4pMz5kZtgNcvCniNFb1hlEQ==", + "dependencies": [ + "domelementtype", + "domhandler@5.0.3", + "domutils@3.2.2", + "entities@7.0.1" + ] + }, + "htmlparser2@8.0.2": { + "integrity": "sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==", + "dependencies": [ + "domelementtype", + "domhandler@5.0.3", + "domutils@3.2.2", + "entities@4.5.0" + ] + }, + "http-cache-semantics@4.2.0": { + "integrity": "sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ==" + }, + "iconv-lite@0.6.3": { + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dependencies": [ + "safer-buffer" + ] + }, + "icss-replace-symbols@1.1.0": { + "integrity": "sha512-chIaY3Vh2mh2Q3RGXttaDIzeiPvaVXJ+C4DAh/w3c37SKZ/U6PGMmuicR2EQQp9bKG8zLMCl7I+PtIoOOPp8Gg==" + }, + "icss-utils@5.1.0_postcss@8.5.6": { + "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", + "dependencies": [ + "postcss" + ] + }, + "import-cwd@3.0.0": { + "integrity": "sha512-4pnzH16plW+hgvRECbDWpQl3cqtvSofHWh44met7ESfZ8UZOWWddm8hEyDTqREJ9RbYHY8gi8DqmaelApoOGMg==", + "dependencies": [ + "import-from" + ] + }, + "import-fresh@3.3.1": { + "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", + "dependencies": [ + "parent-module", + "resolve-from@4.0.0" + ] + }, + "import-from@3.0.0": { + "integrity": "sha512-CiuXOFFSzkU5x/CR0+z7T91Iht4CXgfCxVOFRhh2Zyhg5wOpWvvDLQUsWl+gcN+QscYBjez8hDCt85O7RLDttQ==", + "dependencies": [ + "resolve-from@5.0.0" + ] + }, + "import-meta-resolve@4.2.0": { + "integrity": "sha512-Iqv2fzaTQN28s/FwZAoFq0ZSs/7hMAHJVX+w8PZl3cY19Pxk6jFFalxQoIfW2826i/fDLXv8IiEZRIT0lDuWcg==" + }, + "inflight@1.0.6": { + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dependencies": [ + "once", + "wrappy" + ], + "deprecated": true + }, + "inherits@2.0.4": { + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "internal-slot@1.1.0": { + "integrity": "sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==", + "dependencies": [ + "es-errors", + "hasown", + "side-channel" + ] + }, + "interpret@1.4.0": { + "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==" + }, + "iron-webcrypto@1.2.1": { + "integrity": "sha512-feOM6FaSr6rEABp/eDfVseKyTMDt+KGpeB35SkVn9Tyn0CqvVsY3EwI0v5i8nMHyJnzCIQf7nsy3p41TPkJZhg==" + }, + "is-alphabetical@2.0.1": { + "integrity": "sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==" + }, + "is-alphanumerical@2.0.1": { + "integrity": "sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==", + "dependencies": [ + "is-alphabetical", + "is-decimal" + ] + }, + "is-array-buffer@3.0.5": { + "integrity": "sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==", + "dependencies": [ + "call-bind", + "call-bound", + "get-intrinsic" + ] + }, + "is-arrayish@0.2.1": { + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==" + }, + "is-async-function@2.1.1": { + "integrity": "sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==", + "dependencies": [ + "async-function", + "call-bound", + "get-proto", + "has-tostringtag", + "safe-regex-test" + ] + }, + "is-bigint@1.1.0": { + "integrity": "sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==", + "dependencies": [ + "has-bigints" + ] + }, + "is-binary-path@2.1.0": { + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dependencies": [ + "binary-extensions" + ] + }, + "is-boolean-object@1.2.2": { + "integrity": "sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==", + "dependencies": [ + "call-bound", + "has-tostringtag" + ] + }, + "is-callable@1.2.7": { + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==" + }, + "is-core-module@2.16.1": { + "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", + "dependencies": [ + "hasown" + ] + }, + "is-data-view@1.0.2": { + "integrity": "sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==", + "dependencies": [ + "call-bound", + "get-intrinsic", + "is-typed-array" + ] + }, + "is-date-object@1.1.0": { + "integrity": "sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==", + "dependencies": [ + "call-bound", + "has-tostringtag" + ] + }, + "is-decimal@2.0.1": { + "integrity": "sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==" + }, + "is-docker@2.2.1": { + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "bin": true + }, + "is-docker@3.0.0": { + "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==", + "bin": true + }, + "is-extglob@2.1.1": { + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==" + }, + "is-finalizationregistry@1.1.1": { + "integrity": "sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==", + "dependencies": [ + "call-bound" + ] + }, + "is-fullwidth-code-point@3.0.0": { + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" + }, + "is-generator-function@1.1.2": { + "integrity": "sha512-upqt1SkGkODW9tsGNG5mtXTXtECizwtS2kA161M+gJPc1xdb/Ax629af6YrTwcOeQHbewrPNlE5Dx7kzvXTizA==", + "dependencies": [ + "call-bound", + "generator-function", + "get-proto", + "has-tostringtag", + "safe-regex-test" + ] + }, + "is-glob@4.0.3": { + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dependencies": [ + "is-extglob" + ] + }, + "is-hexadecimal@2.0.1": { + "integrity": "sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==" + }, + "is-inside-container@1.0.0": { + "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==", + "dependencies": [ + "is-docker@3.0.0" + ], + "bin": true + }, + "is-map@2.0.3": { + "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==" + }, + "is-module@1.0.0": { + "integrity": "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==" + }, + "is-negative-zero@2.0.3": { + "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==" + }, + "is-number-object@1.1.1": { + "integrity": "sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==", + "dependencies": [ + "call-bound", + "has-tostringtag" + ] + }, + "is-number@7.0.0": { + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" + }, + "is-plain-obj@4.1.0": { + "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==" + }, + "is-plain-object@5.0.0": { + "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==" + }, + "is-reference@1.2.1": { + "integrity": "sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==", + "dependencies": [ + "@types/estree@1.0.8" + ] + }, + "is-reference@3.0.3": { + "integrity": "sha512-ixkJoqQvAP88E6wLydLGGqCJsrFUnqoH6HnaczB8XmDH1oaWU+xxdptvikTgaEhtZ53Ky6YXiBuUI2WXLMCwjw==", + "dependencies": [ + "@types/estree@1.0.8" + ] + }, + "is-regex@1.2.1": { + "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==", + "dependencies": [ + "call-bound", + "gopd", + "has-tostringtag", + "hasown" + ] + }, + "is-set@2.0.3": { + "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==" + }, + "is-shared-array-buffer@1.0.4": { + "integrity": "sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==", + "dependencies": [ + "call-bound" + ] + }, + "is-string@1.1.1": { + "integrity": "sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==", + "dependencies": [ + "call-bound", + "has-tostringtag" + ] + }, + "is-symbol@1.1.1": { + "integrity": "sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==", + "dependencies": [ + "call-bound", + "has-symbols", + "safe-regex-test" + ] + }, + "is-typed-array@1.1.15": { + "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==", + "dependencies": [ + "which-typed-array" + ] + }, + "is-weakmap@2.0.2": { + "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==" + }, + "is-weakref@1.1.1": { + "integrity": "sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==", + "dependencies": [ + "call-bound" + ] + }, + "is-weakset@2.0.4": { + "integrity": "sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==", + "dependencies": [ + "call-bound", + "get-intrinsic" + ] + }, + "is-wsl@2.2.0": { + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "dependencies": [ + "is-docker@2.2.1" + ] + }, + "is-wsl@3.1.1": { + "integrity": "sha512-e6rvdUCiQCAuumZslxRJWR/Doq4VpPR82kqclvcS0efgt430SlGIk05vdCN58+VrzgtIcfNODjozVielycD4Sw==", + "dependencies": [ + "is-inside-container" + ] + }, + "isarray@2.0.5": { + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==" + }, + "isexe@2.0.0": { + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" + }, + "jackspeak@3.4.3": { + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", + "dependencies": [ + "@isaacs/cliui" + ], + "optionalDependencies": [ + "@pkgjs/parseargs" + ] + }, + "jake@10.9.4": { + "integrity": "sha512-wpHYzhxiVQL+IV05BLE2Xn34zW1S223hvjtqk0+gsPrwd/8JNLXJgZZM/iPFsYc1xyphF+6M6EvdE5E9MBGkDA==", + "dependencies": [ + "async", + "filelist", + "picocolors" + ], + "bin": true + }, + "jest-worker@26.6.2": { + "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", + "dependencies": [ + "@types/node", + "merge-stream", + "supports-color@7.2.0" + ] + }, + "jiti@1.21.7": { + "integrity": "sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==", + "bin": true + }, + "js-tokens@4.0.0": { + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + }, + "js-yaml@4.1.1": { + "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", + "dependencies": [ + "argparse" + ], + "bin": true + }, + "jsesc@3.1.0": { + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", + "bin": true + }, + "json-parse-even-better-errors@2.3.1": { + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" + }, + "json-schema-traverse@1.0.0": { + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" + }, + "json5@2.2.3": { + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "bin": true + }, + "jsonc-parser@2.3.1": { + "integrity": "sha512-H8jvkz1O50L3dMZCsLqiuB2tA7muqbSg1AtGEkN0leAqGjsUzDJir3Zwr02BhqdcITPg3ei3mZ+HjMocAknhhg==" + }, + "jsonc-parser@3.3.1": { + "integrity": "sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==" + }, + "jsonfile@6.2.0": { + "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==", + "dependencies": [ + "universalify" + ], + "optionalDependencies": [ + "graceful-fs" + ] + }, + "katex@0.16.33": { + "integrity": "sha512-q3N5u+1sY9Bu7T4nlXoiRBXWfwSefNGoKeOwekV+gw0cAXQlz2Ww6BLcmBxVDeXBMUDQv6fK5bcNaJLxob3ZQA==", + "dependencies": [ + "commander@8.3.0" + ], + "bin": true + }, + "kleur@3.0.3": { + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==" + }, + "kleur@4.1.5": { + "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==" + }, + "kolorist@1.8.0": { + "integrity": "sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ==" + }, + "lilconfig@2.1.0": { + "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==" + }, + "lilconfig@3.1.3": { + "integrity": "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==" + }, + "lines-and-columns@1.2.4": { + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" + }, + "linkify-it@5.0.0": { + "integrity": "sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==", + "dependencies": [ + "uc.micro" + ] + }, + "loader-utils@3.3.1": { + "integrity": "sha512-FMJTLMXfCLMLfJxcX9PFqX5qD88Z5MRGaZCVzfuqeZSPsyiBzs+pahDQjbIWz2QIzPZz0NX9Zy4FX3lmK6YHIg==" + }, + "local-pkg@1.1.2": { + "integrity": "sha512-arhlxbFRmoQHl33a0Zkle/YWlmNwoyt6QNZEIJcqNbdrsix5Lvc4HyyI3EnwxTYlZYc32EbYrQ8SzEZ7dqgg9A==", + "dependencies": [ + "mlly", + "pkg-types@2.3.0", + "quansync" + ] + }, + "locate-character@3.0.0": { + "integrity": "sha512-SW13ws7BjaeJ6p7Q6CO2nchbYEc3X3J6WrmTTDto7yMPqVSZTUyY5Tjbid+Ab8gLnATtygYtiDIJGQRRn2ZOiA==" + }, + "locate-path@5.0.0": { + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dependencies": [ + "p-locate" + ] + }, + "lodash.camelcase@4.3.0": { + "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==" + }, + "lodash.debounce@4.0.8": { + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==" + }, + "lodash.memoize@4.1.2": { + "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==" + }, + "lodash.merge@4.6.2": { + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==" + }, + "lodash.uniq@4.5.0": { + "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==" + }, + "lodash@4.17.21": { + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "longest-streak@3.1.0": { + "integrity": "sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==" + }, + "lru-cache@10.4.3": { + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==" + }, + "lru-cache@11.2.6": { + "integrity": "sha512-ESL2CrkS/2wTPfuend7Zhkzo2u0daGJ/A2VucJOgQ/C48S/zB8MMeMHSGKYpXhIjbPxfuezITkaBH1wqv00DDQ==" + }, + "lru-cache@5.1.1": { + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dependencies": [ + "yallist@3.1.1" + ] + }, + "magic-string@0.25.9": { + "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==", + "dependencies": [ + "sourcemap-codec" + ] + }, + "magic-string@0.30.21": { + "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", + "dependencies": [ + "@jridgewell/sourcemap-codec" + ] + }, + "magicast@0.3.5": { + "integrity": "sha512-L0WhttDl+2BOsybvEOLK7fW3UA0OQ0IQ2d6Zl2x/a6vVRs3bAY0ECOSHHeL5jD+SbOpOCUEi0y1DgHEn9Qn1AQ==", + "dependencies": [ + "@babel/parser", + "@babel/types", + "source-map-js" + ] + }, + "make-dir@3.1.0": { + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dependencies": [ + "semver@6.3.1" + ] + }, + "markdown-it@14.1.1": { + "integrity": "sha512-BuU2qnTti9YKgK5N+IeMubp14ZUKUUw7yeJbkjtosvHiP0AZ5c8IAgEMk79D0eC8F23r4Ac/q8cAIFdm2FtyoA==", + "dependencies": [ + "argparse", + "entities@4.5.0", + "linkify-it", + "mdurl", + "punycode.js", + "uc.micro" + ], + "bin": true + }, + "markdown-table@3.0.4": { + "integrity": "sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw==" + }, + "math-intrinsics@1.1.0": { + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==" + }, + "maxmin@2.1.0": { + "integrity": "sha512-NWlApBjW9az9qRPaeg7CX4sQBWwytqz32bIEo1PW9pRW+kBP9KLRfJO3UC+TV31EcQZEUq7eMzikC7zt3zPJcw==", + "dependencies": [ + "chalk@1.1.3", + "figures", + "gzip-size@3.0.0", + "pretty-bytes@3.0.1" + ] + }, + "mdast-util-definitions@6.0.0": { + "integrity": "sha512-scTllyX6pnYNZH/AIp/0ePz6s4cZtARxImwoPJ7kS42n+MnVsI4XbnG6d4ibehRIldYMWM2LD7ImQblVhUejVQ==", + "dependencies": [ + "@types/mdast", + "@types/unist@3.0.3", + "unist-util-visit@5.1.0" + ] + }, + "mdast-util-directive@3.1.0": { + "integrity": "sha512-I3fNFt+DHmpWCYAT7quoM6lHf9wuqtI+oCOfvILnoicNIqjh5E3dEJWiXuYME2gNe8vl1iMQwyUHa7bgFmak6Q==", + "dependencies": [ + "@types/mdast", + "@types/unist@3.0.3", + "ccount", + "devlop", + "mdast-util-from-markdown", + "mdast-util-to-markdown", + "parse-entities", + "stringify-entities", + "unist-util-visit-parents@6.0.2" + ] + }, + "mdast-util-find-and-replace@3.0.2": { + "integrity": "sha512-Tmd1Vg/m3Xz43afeNxDIhWRtFZgM2VLyaf4vSTYwudTyeuTneoL3qtWMA5jeLyz/O1vDJmmV4QuScFCA2tBPwg==", + "dependencies": [ + "@types/mdast", + "escape-string-regexp@5.0.0", + "unist-util-is@6.0.1", + "unist-util-visit-parents@6.0.2" + ] + }, + "mdast-util-from-markdown@2.0.3": { + "integrity": "sha512-W4mAWTvSlKvf8L6J+VN9yLSqQ9AOAAvHuoDAmPkz4dHf553m5gVj2ejadHJhoJmcmxEnOv6Pa8XJhpxE93kb8Q==", + "dependencies": [ + "@types/mdast", + "@types/unist@3.0.3", + "decode-named-character-reference", + "devlop", + "mdast-util-to-string", + "micromark", + "micromark-util-decode-numeric-character-reference", + "micromark-util-decode-string", + "micromark-util-normalize-identifier", + "micromark-util-symbol", + "micromark-util-types", + "unist-util-stringify-position" + ] + }, + "mdast-util-gfm-autolink-literal@2.0.1": { + "integrity": "sha512-5HVP2MKaP6L+G6YaxPNjuL0BPrq9orG3TsrZ9YXbA3vDw/ACI4MEsnoDpn6ZNm7GnZgtAcONJyPhOP8tNJQavQ==", + "dependencies": [ + "@types/mdast", + "ccount", + "devlop", + "mdast-util-find-and-replace", + "micromark-util-character" + ] + }, + "mdast-util-gfm-footnote@2.1.0": { + "integrity": "sha512-sqpDWlsHn7Ac9GNZQMeUzPQSMzR6Wv0WKRNvQRg0KqHh02fpTz69Qc1QSseNX29bhz1ROIyNyxExfawVKTm1GQ==", + "dependencies": [ + "@types/mdast", + "devlop", + "mdast-util-from-markdown", + "mdast-util-to-markdown", + "micromark-util-normalize-identifier" + ] + }, + "mdast-util-gfm-strikethrough@2.0.0": { + "integrity": "sha512-mKKb915TF+OC5ptj5bJ7WFRPdYtuHv0yTRxK2tJvi+BDqbkiG7h7u/9SI89nRAYcmap2xHQL9D+QG/6wSrTtXg==", + "dependencies": [ + "@types/mdast", + "mdast-util-from-markdown", + "mdast-util-to-markdown" + ] + }, + "mdast-util-gfm-table@2.0.0": { + "integrity": "sha512-78UEvebzz/rJIxLvE7ZtDd/vIQ0RHv+3Mh5DR96p7cS7HsBhYIICDBCu8csTNWNO6tBWfqXPWekRuj2FNOGOZg==", + "dependencies": [ + "@types/mdast", + "devlop", + "markdown-table", + "mdast-util-from-markdown", + "mdast-util-to-markdown" + ] + }, + "mdast-util-gfm-task-list-item@2.0.0": { + "integrity": "sha512-IrtvNvjxC1o06taBAVJznEnkiHxLFTzgonUdy8hzFVeDun0uTjxxrRGVaNFqkU1wJR3RBPEfsxmU6jDWPofrTQ==", + "dependencies": [ + "@types/mdast", + "devlop", + "mdast-util-from-markdown", + "mdast-util-to-markdown" + ] + }, + "mdast-util-gfm@3.1.0": { + "integrity": "sha512-0ulfdQOM3ysHhCJ1p06l0b0VKlhU0wuQs3thxZQagjcjPrlFRqY215uZGHHJan9GEAXd9MbfPjFJz+qMkVR6zQ==", + "dependencies": [ + "mdast-util-from-markdown", + "mdast-util-gfm-autolink-literal", + "mdast-util-gfm-footnote", + "mdast-util-gfm-strikethrough", + "mdast-util-gfm-table", + "mdast-util-gfm-task-list-item", + "mdast-util-to-markdown" + ] + }, + "mdast-util-math@3.0.0": { + "integrity": "sha512-Tl9GBNeG/AhJnQM221bJR2HPvLOSnLE/T9cJI9tlc6zwQk2nPk/4f0cHkOdEixQPC/j8UtKDdITswvLAy1OZ1w==", + "dependencies": [ + "@types/hast@3.0.4", + "@types/mdast", + "devlop", + "longest-streak", + "mdast-util-from-markdown", + "mdast-util-to-markdown", + "unist-util-remove-position" + ] + }, + "mdast-util-phrasing@4.1.0": { + "integrity": "sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==", + "dependencies": [ + "@types/mdast", + "unist-util-is@6.0.1" + ] + }, + "mdast-util-to-hast@13.2.1": { + "integrity": "sha512-cctsq2wp5vTsLIcaymblUriiTcZd0CwWtCbLvrOzYCDZoWyMNV8sZ7krj09FSnsiJi3WVsHLM4k6Dq/yaPyCXA==", + "dependencies": [ + "@types/hast@3.0.4", + "@types/mdast", + "@ungap/structured-clone", + "devlop", + "micromark-util-sanitize-uri", + "trim-lines", + "unist-util-position", + "unist-util-visit@5.1.0", + "vfile" + ] + }, + "mdast-util-to-markdown@2.1.2": { + "integrity": "sha512-xj68wMTvGXVOKonmog6LwyJKrYXZPvlwabaryTjLh9LuvovB/KAH+kvi8Gjj+7rJjsFi23nkUxRQv1KqSroMqA==", + "dependencies": [ + "@types/mdast", + "@types/unist@3.0.3", + "longest-streak", + "mdast-util-phrasing", + "mdast-util-to-string", + "micromark-util-classify-character", + "micromark-util-decode-string", + "unist-util-visit@5.1.0", + "zwitch" + ] + }, + "mdast-util-to-string@4.0.0": { + "integrity": "sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==", + "dependencies": [ + "@types/mdast" + ] + }, + "mdn-data@2.0.14": { + "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==" + }, + "mdn-data@2.0.28": { + "integrity": "sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==" + }, + "mdn-data@2.0.30": { + "integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==" + }, + "mdn-data@2.12.2": { + "integrity": "sha512-IEn+pegP1aManZuckezWCO+XZQDplx1366JoVhTpMpBB1sPey/SbveZQUosKiKiGYjg1wH4pMlNgXbCiYgihQA==" + }, + "mdurl@2.0.0": { + "integrity": "sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==" + }, + "merge-stream@2.0.0": { + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" + }, + "merge2@1.4.1": { + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==" + }, + "microbundle@0.15.1_@babel+core@7.29.0_rollup@2.80.0_postcss@8.5.6_typescript@4.9.5": { + "integrity": "sha512-aAF+nwFbkSIJGfrJk+HyzmJOq3KFaimH6OIFBU6J2DPjQeg1jXIYlIyEv81Gyisb9moUkudn+wj7zLNYMOv75Q==", + "dependencies": [ + "@babel/core", + "@babel/plugin-proposal-class-properties", + "@babel/plugin-syntax-import-meta", + "@babel/plugin-syntax-jsx", + "@babel/plugin-transform-flow-strip-types", + "@babel/plugin-transform-react-jsx", + "@babel/plugin-transform-regenerator", + "@babel/preset-env", + "@babel/preset-flow", + "@babel/preset-react", + "@rollup/plugin-alias", + "@rollup/plugin-babel", + "@rollup/plugin-commonjs", + "@rollup/plugin-json", + "@rollup/plugin-node-resolve", + "@surma/rollup-plugin-off-main-thread", + "asyncro", + "autoprefixer", + "babel-plugin-macros", + "babel-plugin-transform-async-to-promises", + "babel-plugin-transform-replace-expressions", + "brotli-size", + "builtin-modules", + "camelcase@6.3.0", + "escape-string-regexp@4.0.0", + "filesize", + "gzip-size@6.0.0", + "kleur@4.1.5", + "lodash.merge", + "postcss", + "pretty-bytes@5.6.0", + "rollup@2.80.0", + "rollup-plugin-bundle-size", + "rollup-plugin-postcss", + "rollup-plugin-terser", + "rollup-plugin-typescript2", + "rollup-plugin-visualizer", + "sade", + "terser", + "tiny-glob", + "tslib", + "typescript@4.9.5" + ], + "bin": true + }, + "micromark-core-commonmark@2.0.3": { + "integrity": "sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg==", + "dependencies": [ + "decode-named-character-reference", + "devlop", + "micromark-factory-destination", + "micromark-factory-label", + "micromark-factory-space", + "micromark-factory-title", + "micromark-factory-whitespace", + "micromark-util-character", + "micromark-util-chunked", + "micromark-util-classify-character", + "micromark-util-html-tag-name", + "micromark-util-normalize-identifier", + "micromark-util-resolve-all", + "micromark-util-subtokenize", + "micromark-util-symbol", + "micromark-util-types" + ] + }, + "micromark-extension-directive@3.0.2": { + "integrity": "sha512-wjcXHgk+PPdmvR58Le9d7zQYWy+vKEU9Se44p2CrCDPiLr2FMyiT4Fyb5UFKFC66wGB3kPlgD7q3TnoqPS7SZA==", + "dependencies": [ + "devlop", + "micromark-factory-space", + "micromark-factory-whitespace", + "micromark-util-character", + "micromark-util-symbol", + "micromark-util-types", + "parse-entities" + ] + }, + "micromark-extension-gfm-autolink-literal@2.1.0": { + "integrity": "sha512-oOg7knzhicgQ3t4QCjCWgTmfNhvQbDDnJeVu9v81r7NltNCVmhPy1fJRX27pISafdjL+SVc4d3l48Gb6pbRypw==", + "dependencies": [ + "micromark-util-character", + "micromark-util-sanitize-uri", + "micromark-util-symbol", + "micromark-util-types" + ] + }, + "micromark-extension-gfm-footnote@2.1.0": { + "integrity": "sha512-/yPhxI1ntnDNsiHtzLKYnE3vf9JZ6cAisqVDauhp4CEHxlb4uoOTxOCJ+9s51bIB8U1N1FJ1RXOKTIlD5B/gqw==", + "dependencies": [ + "devlop", + "micromark-core-commonmark", + "micromark-factory-space", + "micromark-util-character", + "micromark-util-normalize-identifier", + "micromark-util-sanitize-uri", + "micromark-util-symbol", + "micromark-util-types" + ] + }, + "micromark-extension-gfm-strikethrough@2.1.0": { + "integrity": "sha512-ADVjpOOkjz1hhkZLlBiYA9cR2Anf8F4HqZUO6e5eDcPQd0Txw5fxLzzxnEkSkfnD0wziSGiv7sYhk/ktvbf1uw==", + "dependencies": [ + "devlop", + "micromark-util-chunked", + "micromark-util-classify-character", + "micromark-util-resolve-all", + "micromark-util-symbol", + "micromark-util-types" + ] + }, + "micromark-extension-gfm-table@2.1.1": { + "integrity": "sha512-t2OU/dXXioARrC6yWfJ4hqB7rct14e8f7m0cbI5hUmDyyIlwv5vEtooptH8INkbLzOatzKuVbQmAYcbWoyz6Dg==", + "dependencies": [ + "devlop", + "micromark-factory-space", + "micromark-util-character", + "micromark-util-symbol", + "micromark-util-types" + ] + }, + "micromark-extension-gfm-tagfilter@2.0.0": { + "integrity": "sha512-xHlTOmuCSotIA8TW1mDIM6X2O1SiX5P9IuDtqGonFhEK0qgRI4yeC6vMxEV2dgyr2TiD+2PQ10o+cOhdVAcwfg==", + "dependencies": [ + "micromark-util-types" + ] + }, + "micromark-extension-gfm-task-list-item@2.1.0": { + "integrity": "sha512-qIBZhqxqI6fjLDYFTBIa4eivDMnP+OZqsNwmQ3xNLE4Cxwc+zfQEfbs6tzAo2Hjq+bh6q5F+Z8/cksrLFYWQQw==", + "dependencies": [ + "devlop", + "micromark-factory-space", + "micromark-util-character", + "micromark-util-symbol", + "micromark-util-types" + ] + }, + "micromark-extension-gfm@3.0.0": { + "integrity": "sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w==", + "dependencies": [ + "micromark-extension-gfm-autolink-literal", + "micromark-extension-gfm-footnote", + "micromark-extension-gfm-strikethrough", + "micromark-extension-gfm-table", + "micromark-extension-gfm-tagfilter", + "micromark-extension-gfm-task-list-item", + "micromark-util-combine-extensions", + "micromark-util-types" + ] + }, + "micromark-extension-math@3.1.0": { + "integrity": "sha512-lvEqd+fHjATVs+2v/8kg9i5Q0AP2k85H0WUOwpIVvUML8BapsMvh1XAogmQjOCsLpoKRCVQqEkQBB3NhVBcsOg==", + "dependencies": [ + "@types/katex", + "devlop", + "katex", + "micromark-factory-space", + "micromark-util-character", + "micromark-util-symbol", + "micromark-util-types" + ] + }, + "micromark-factory-destination@2.0.1": { + "integrity": "sha512-Xe6rDdJlkmbFRExpTOmRj9N3MaWmbAgdpSrBQvCFqhezUn4AHqJHbaEnfbVYYiexVSs//tqOdY/DxhjdCiJnIA==", + "dependencies": [ + "micromark-util-character", + "micromark-util-symbol", + "micromark-util-types" + ] + }, + "micromark-factory-label@2.0.1": { + "integrity": "sha512-VFMekyQExqIW7xIChcXn4ok29YE3rnuyveW3wZQWWqF4Nv9Wk5rgJ99KzPvHjkmPXF93FXIbBp6YdW3t71/7Vg==", + "dependencies": [ + "devlop", + "micromark-util-character", + "micromark-util-symbol", + "micromark-util-types" + ] + }, + "micromark-factory-space@2.0.1": { + "integrity": "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==", + "dependencies": [ + "micromark-util-character", + "micromark-util-types" + ] + }, + "micromark-factory-title@2.0.1": { + "integrity": "sha512-5bZ+3CjhAd9eChYTHsjy6TGxpOFSKgKKJPJxr293jTbfry2KDoWkhBb6TcPVB4NmzaPhMs1Frm9AZH7OD4Cjzw==", + "dependencies": [ + "micromark-factory-space", + "micromark-util-character", + "micromark-util-symbol", + "micromark-util-types" + ] + }, + "micromark-factory-whitespace@2.0.1": { + "integrity": "sha512-Ob0nuZ3PKt/n0hORHyvoD9uZhr+Za8sFoP+OnMcnWK5lngSzALgQYKMr9RJVOWLqQYuyn6ulqGWSXdwf6F80lQ==", + "dependencies": [ + "micromark-factory-space", + "micromark-util-character", + "micromark-util-symbol", + "micromark-util-types" + ] + }, + "micromark-util-character@2.1.1": { + "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", + "dependencies": [ + "micromark-util-symbol", + "micromark-util-types" + ] + }, + "micromark-util-chunked@2.0.1": { + "integrity": "sha512-QUNFEOPELfmvv+4xiNg2sRYeS/P84pTW0TCgP5zc9FpXetHY0ab7SxKyAQCNCc1eK0459uoLI1y5oO5Vc1dbhA==", + "dependencies": [ + "micromark-util-symbol" + ] + }, + "micromark-util-classify-character@2.0.1": { + "integrity": "sha512-K0kHzM6afW/MbeWYWLjoHQv1sgg2Q9EccHEDzSkxiP/EaagNzCm7T/WMKZ3rjMbvIpvBiZgwR3dKMygtA4mG1Q==", + "dependencies": [ + "micromark-util-character", + "micromark-util-symbol", + "micromark-util-types" + ] + }, + "micromark-util-combine-extensions@2.0.1": { + "integrity": "sha512-OnAnH8Ujmy59JcyZw8JSbK9cGpdVY44NKgSM7E9Eh7DiLS2E9RNQf0dONaGDzEG9yjEl5hcqeIsj4hfRkLH/Bg==", + "dependencies": [ + "micromark-util-chunked", + "micromark-util-types" + ] + }, + "micromark-util-decode-numeric-character-reference@2.0.2": { + "integrity": "sha512-ccUbYk6CwVdkmCQMyr64dXz42EfHGkPQlBj5p7YVGzq8I7CtjXZJrubAYezf7Rp+bjPseiROqe7G6foFd+lEuw==", + "dependencies": [ + "micromark-util-symbol" + ] + }, + "micromark-util-decode-string@2.0.1": { + "integrity": "sha512-nDV/77Fj6eH1ynwscYTOsbK7rR//Uj0bZXBwJZRfaLEJ1iGBR6kIfNmlNqaqJf649EP0F3NWNdeJi03elllNUQ==", + "dependencies": [ + "decode-named-character-reference", + "micromark-util-character", + "micromark-util-decode-numeric-character-reference", + "micromark-util-symbol" + ] + }, + "micromark-util-encode@2.0.1": { + "integrity": "sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==" + }, + "micromark-util-html-tag-name@2.0.1": { + "integrity": "sha512-2cNEiYDhCWKI+Gs9T0Tiysk136SnR13hhO8yW6BGNyhOC4qYFnwF1nKfD3HFAIXA5c45RrIG1ub11GiXeYd1xA==" + }, + "micromark-util-normalize-identifier@2.0.1": { + "integrity": "sha512-sxPqmo70LyARJs0w2UclACPUUEqltCkJ6PhKdMIDuJ3gSf/Q+/GIe3WKl0Ijb/GyH9lOpUkRAO2wp0GVkLvS9Q==", + "dependencies": [ + "micromark-util-symbol" + ] + }, + "micromark-util-resolve-all@2.0.1": { + "integrity": "sha512-VdQyxFWFT2/FGJgwQnJYbe1jjQoNTS4RjglmSjTUlpUMa95Htx9NHeYW4rGDJzbjvCsl9eLjMQwGeElsqmzcHg==", + "dependencies": [ + "micromark-util-types" + ] + }, + "micromark-util-sanitize-uri@2.0.1": { + "integrity": "sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==", + "dependencies": [ + "micromark-util-character", + "micromark-util-encode", + "micromark-util-symbol" + ] + }, + "micromark-util-subtokenize@2.1.0": { + "integrity": "sha512-XQLu552iSctvnEcgXw6+Sx75GflAPNED1qx7eBJ+wydBb2KCbRZe+NwvIEEMM83uml1+2WSXpBAcp9IUCgCYWA==", + "dependencies": [ + "devlop", + "micromark-util-chunked", + "micromark-util-symbol", + "micromark-util-types" + ] + }, + "micromark-util-symbol@2.0.1": { + "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==" + }, + "micromark-util-types@2.0.2": { + "integrity": "sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==" + }, + "micromark@4.0.2": { + "integrity": "sha512-zpe98Q6kvavpCr1NPVSCMebCKfD7CA2NqZ+rykeNhONIJBpc1tFKt9hucLGwha3jNTNI8lHpctWJWoimVF4PfA==", + "dependencies": [ + "@types/debug", + "debug", + "decode-named-character-reference", + "devlop", + "micromark-core-commonmark", + "micromark-factory-space", + "micromark-util-character", + "micromark-util-chunked", + "micromark-util-combine-extensions", + "micromark-util-decode-numeric-character-reference", + "micromark-util-encode", + "micromark-util-normalize-identifier", + "micromark-util-resolve-all", + "micromark-util-sanitize-uri", + "micromark-util-subtokenize", + "micromark-util-symbol", + "micromark-util-types" + ] + }, + "micromatch@4.0.8": { + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "dependencies": [ + "braces", + "picomatch@2.3.1" + ] + }, + "minimatch@3.1.5": { + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", + "dependencies": [ + "brace-expansion@1.1.12" + ] + }, + "minimatch@5.1.9": { + "integrity": "sha512-7o1wEA2RyMP7Iu7GNba9vc0RWWGACJOCZBJX2GJWip0ikV+wcOsgVuY9uE8CPiyQhkGFSlhuSkZPavN7u1c2Fw==", + "dependencies": [ + "brace-expansion@2.0.2" + ] + }, + "minimatch@9.0.9": { + "integrity": "sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==", + "dependencies": [ + "brace-expansion@2.0.2" + ] + }, + "minipass@7.1.3": { + "integrity": "sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==" + }, + "minizlib@3.1.0": { + "integrity": "sha512-KZxYo1BUkWD2TVFLr0MQoM8vUUigWD3LlD83a/75BqC+4qE0Hb1Vo5v1FgcfaNXvfXzr+5EhQ6ing/CaBijTlw==", + "dependencies": [ + "minipass" + ] + }, + "mlly@1.8.0": { + "integrity": "sha512-l8D9ODSRWLe2KHJSifWGwBqpTZXIXTeo8mlKjY+E2HAakaTeNpqAyBZ8GSqLzHgw4XmHmC8whvpjJNMbFZN7/g==", + "dependencies": [ + "acorn", + "pathe", + "pkg-types@1.3.1", + "ufo" + ] + }, + "morphdom@2.7.8": { + "integrity": "sha512-D/fR4xgGUyVRbdMGU6Nejea1RFzYxYtyurG4Fbv2Fi/daKlWKuXGLOdXtl+3eIwL110cI2hz1ZojGICjjFLgTg==" + }, + "mri@1.2.0": { + "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==" + }, + "mrmime@2.0.1": { + "integrity": "sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==" + }, + "ms@2.1.3": { + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "muggle-string@0.4.1": { + "integrity": "sha512-VNTrAak/KhO2i8dqqnqnAHOa3cYBwXEZe9h+D5h/1ZqFSTEFHdM65lR7RoIqq3tBBYavsOXV84NoHXZ0AkPyqQ==" + }, + "mz@2.7.0": { + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "dependencies": [ + "any-promise", + "object-assign", + "thenify-all" + ] + }, + "nanoid@3.3.11": { + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", + "bin": true + }, + "neotraverse@0.6.18": { + "integrity": "sha512-Z4SmBUweYa09+o6pG+eASabEpP6QkQ70yHj351pQoEXIs8uHbaU2DWVmzBANKgflPa47A50PtB2+NgRpQvr7vA==" + }, + "nlcst-to-string@4.0.0": { + "integrity": "sha512-YKLBCcUYKAg0FNlOBT6aI91qFmSiFKiluk655WzPF+DDMA02qIyy8uiRqI8QXtcFpEvll12LpL5MXqEmAZ+dcA==", + "dependencies": [ + "@types/nlcst" + ] + }, + "node-fetch-native@1.6.7": { + "integrity": "sha512-g9yhqoedzIUm0nTnTqAQvueMPVOuIY16bqgAJJC8XOOubYFNwz6IER9qs0Gq2Xd0+CecCKFjtdDTMA4u4xG06Q==" + }, + "node-fetch@2.7.0": { + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "dependencies": [ + "whatwg-url" + ] + }, + "node-mock-http@1.0.4": { + "integrity": "sha512-8DY+kFsDkNXy1sJglUfuODx1/opAGJGyrTuFqEoN90oRc2Vk0ZbD4K2qmKXBBEhZQzdKHIVfEJpDU8Ak2NJEvQ==" + }, + "node-releases@2.0.27": { + "integrity": "sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==" + }, + "normalize-path@3.0.0": { + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" + }, + "normalize-url@6.1.0": { + "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==" + }, + "nth-check@2.1.1": { + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "dependencies": [ + "boolbase" + ] + }, + "number-is-nan@1.0.1": { + "integrity": "sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ==" + }, + "object-assign@4.1.1": { + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==" + }, + "object-hash@3.0.0": { + "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==" + }, + "object-inspect@1.13.4": { + "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==" + }, + "object-keys@1.1.1": { + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" + }, + "object.assign@4.1.7": { + "integrity": "sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==", + "dependencies": [ + "call-bind", + "call-bound", + "define-properties", + "es-object-atoms", + "has-symbols", + "object-keys" + ] + }, + "ofetch@1.5.1": { + "integrity": "sha512-2W4oUZlVaqAPAil6FUg/difl6YhqhUR7x2eZY4bQCko22UXg3hptq9KLQdqFClV+Wu85UX7hNtdGTngi/1BxcA==", + "dependencies": [ + "destr", + "node-fetch-native", + "ufo" + ] + }, + "ohash@2.0.11": { + "integrity": "sha512-RdR9FQrFwNBNXAr4GixM8YaRZRJ5PUWbKYbE5eOsrwAjJW0q2REGcf79oYPsLyskQCZG1PLN+S/K1V00joZAoQ==" + }, + "once@1.4.0": { + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dependencies": [ + "wrappy" + ] + }, + "oniguruma-parser@0.12.1": { + "integrity": "sha512-8Unqkvk1RYc6yq2WBYRj4hdnsAxVze8i7iPfQr8e4uSP3tRv0rpZcbGUDvxfQQcdwHt/e9PrMvGCsa8OqG9X3w==" + }, + "oniguruma-to-es@4.3.4": { + "integrity": "sha512-3VhUGN3w2eYxnTzHn+ikMI+fp/96KoRSVK9/kMTcFqj1NRDh2IhQCKvYxDnWePKRXY/AqH+Fuiyb7VHSzBjHfA==", + "dependencies": [ + "oniguruma-parser", + "regex", + "regex-recursion" + ] + }, + "open@8.4.2": { + "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", + "dependencies": [ + "define-lazy-prop", + "is-docker@2.2.1", + "is-wsl@2.2.0" + ] + }, + "opencollective-postinstall@2.0.3": { + "integrity": "sha512-8AV/sCtuzUeTo8gQK5qDZzARrulB3egtLzFgteqB2tcT4Mw7B8Kt7JcDHmltjz6FOAHsvTevk70gZEbhM4ZS9Q==", + "bin": true + }, + "overlayscrollbars@2.14.0": { + "integrity": "sha512-RjV0pqc79kYhQLC3vTcLRb5GLpI1n6qh0Oua3g+bGH4EgNOJHVBGP7u0zZtxoAa0dkHlAqTTSYRb9MMmxNLjig==" + }, + "own-keys@1.0.1": { + "integrity": "sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==", + "dependencies": [ + "get-intrinsic", + "object-keys", + "safe-push-apply" + ] + }, + "p-finally@1.0.0": { + "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==" + }, + "p-limit@2.3.0": { + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dependencies": [ + "p-try" + ] + }, + "p-limit@6.2.0": { + "integrity": "sha512-kuUqqHNUqoIWp/c467RI4X6mmyuojY5jGutNU0wVTmEOOfcuwLqyMVoAi9MKi2Ak+5i9+nhmrK4ufZE8069kHA==", + "dependencies": [ + "yocto-queue" + ] + }, + "p-locate@4.1.0": { + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dependencies": [ + "p-limit@2.3.0" + ] + }, + "p-queue@6.6.2": { + "integrity": "sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ==", + "dependencies": [ + "eventemitter3@4.0.7", + "p-timeout@3.2.0" + ] + }, + "p-queue@8.1.1": { + "integrity": "sha512-aNZ+VfjobsWryoiPnEApGGmf5WmNsCo9xu8dfaYamG5qaLP7ClhLN6NgsFe6SwJ2UbLEBK5dv9x8Mn5+RVhMWQ==", + "dependencies": [ + "eventemitter3@5.0.4", + "p-timeout@6.1.4" + ] + }, + "p-timeout@3.2.0": { + "integrity": "sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==", + "dependencies": [ + "p-finally" + ] + }, + "p-timeout@6.1.4": { + "integrity": "sha512-MyIV3ZA/PmyBN/ud8vV9XzwTrNtR4jFrObymZYnZqMmW0zA8Z17vnT0rBgFE/TlohB+YCHqXMgZzb3Csp49vqg==" + }, + "p-try@2.2.0": { + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" + }, + "package-json-from-dist@1.0.1": { + "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==" + }, + "package-manager-detector@1.6.0": { + "integrity": "sha512-61A5ThoTiDG/C8s8UMZwSorAGwMJ0ERVGj2OjoW5pAalsNOg15+iQiPzrLJ4jhZ1HJzmC2PIHT2oEiH3R5fzNA==" + }, + "pagefind@1.4.0": { + "integrity": "sha512-z2kY1mQlL4J8q5EIsQkLzQjilovKzfNVhX8De6oyE6uHpfFtyBaqUpcl/XzJC/4fjD8vBDyh1zolimIcVrCn9g==", + "optionalDependencies": [ + "@pagefind/darwin-arm64", + "@pagefind/darwin-x64", + "@pagefind/freebsd-x64", + "@pagefind/linux-arm64", + "@pagefind/linux-x64", + "@pagefind/windows-x64" + ], + "bin": true + }, + "pako@0.2.9": { + "integrity": "sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA==" + }, + "parent-module@1.0.1": { + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dependencies": [ + "callsites" + ] + }, + "parse-entities@4.0.2": { + "integrity": "sha512-GG2AQYWoLgL877gQIKeRPGO1xF9+eG1ujIb5soS5gPvLQ1y2o8FL90w2QWNdf9I361Mpp7726c+lj3U0qK1uGw==", + "dependencies": [ + "@types/unist@2.0.11", + "character-entities-legacy", + "character-reference-invalid", + "decode-named-character-reference", + "is-alphanumerical", + "is-decimal", + "is-hexadecimal" + ] + }, + "parse-json@5.2.0": { + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dependencies": [ + "@babel/code-frame", + "error-ex", + "json-parse-even-better-errors", + "lines-and-columns" + ] + }, + "parse-latin@7.0.0": { + "integrity": "sha512-mhHgobPPua5kZ98EF4HWiH167JWBfl4pvAIXXdbaVohtK7a6YBOy56kvhCqduqyo/f3yrHFWmqmiMg/BkBkYYQ==", + "dependencies": [ + "@types/nlcst", + "@types/unist@3.0.3", + "nlcst-to-string", + "unist-util-modify-children", + "unist-util-visit-children", + "vfile" + ] + }, + "parse-srcset@1.0.2": { + "integrity": "sha512-/2qh0lav6CmI15FzA3i/2Bzk2zCgQhGMkvhOhKNcBVQ1ldgpbfiNTVslmooUmWJcADi1f1kIeynbDRVzNlfR6Q==" + }, + "parse5-htmlparser2-tree-adapter@7.1.0": { + "integrity": "sha512-ruw5xyKs6lrpo9x9rCZqZZnIUntICjQAd0Wsmp396Ul9lN/h+ifgVV1x1gZHi8euej6wTfpqX8j+BFQxF0NS/g==", + "dependencies": [ + "domhandler@5.0.3", + "parse5" + ] + }, + "parse5-parser-stream@7.1.2": { + "integrity": "sha512-JyeQc9iwFLn5TbvvqACIF/VXG6abODeB3Fwmv/TGdLk2LfbWkaySGY72at4+Ty7EkPZj854u4CrICqNk2qIbow==", + "dependencies": [ + "parse5" + ] + }, + "parse5@7.3.0": { + "integrity": "sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==", + "dependencies": [ + "entities@6.0.1" + ] + }, + "path-browserify@1.0.1": { + "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==" + }, + "path-exists@4.0.0": { + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==" + }, + "path-is-absolute@1.0.1": { + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==" + }, + "path-key@3.1.1": { + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==" + }, + "path-parse@1.0.7": { + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" + }, + "path-scurry@1.11.1": { + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "dependencies": [ + "lru-cache@10.4.3", + "minipass" + ] + }, + "path-to-regexp@6.3.0": { + "integrity": "sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ==" + }, + "path-type@4.0.0": { + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==" + }, + "pathe@2.0.3": { + "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==" + }, + "pend@1.2.0": { + "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==" + }, + "photoswipe@5.4.4": { + "integrity": "sha512-WNFHoKrkZNnvFFhbHL93WDkW3ifwVOXSW3w1UuZZelSmgXpIGiZSNlZJq37rR8YejqME2rHs9EhH9ZvlvFH2NA==" + }, + "piccolore@0.1.3": { + "integrity": "sha512-o8bTeDWjE086iwKrROaDf31K0qC/BENdm15/uH9usSC/uZjJOKb2YGiVHfLY4GhwsERiPI1jmwI2XrA7ACOxVw==" + }, + "picocolors@1.1.1": { + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==" + }, + "picomatch@2.3.1": { + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==" + }, + "picomatch@4.0.3": { + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==" + }, + "pify@2.3.0": { + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==" + }, + "pify@5.0.0": { + "integrity": "sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA==" + }, + "pirates@4.0.7": { + "integrity": "sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==" + }, + "pkg-dir@4.2.0": { + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dependencies": [ + "find-up" + ] + }, + "pkg-types@1.3.1": { + "integrity": "sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==", + "dependencies": [ + "confbox@0.1.8", + "mlly", + "pathe" + ] + }, + "pkg-types@2.3.0": { + "integrity": "sha512-SIqCzDRg0s9npO5XQ3tNZioRY1uK06lA41ynBC1YmFTmnY6FjUjVt6s4LoADmwoig1qqD0oK8h1p/8mlMx8Oig==", + "dependencies": [ + "confbox@0.2.4", + "exsolve", + "pathe" + ] + }, + "possible-typed-array-names@1.1.0": { + "integrity": "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==" + }, + "postcss-calc@8.2.4_postcss@8.5.6": { + "integrity": "sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q==", + "dependencies": [ + "postcss", + "postcss-selector-parser@6.1.2", + "postcss-value-parser" + ] + }, + "postcss-colormin@5.3.1_postcss@8.5.6": { + "integrity": "sha512-UsWQG0AqTFQmpBegeLLc1+c3jIqBNB0zlDGRWR+dQ3pRKJL1oeMzyqmH3o2PIfn9MBdNrVPWhDbT769LxCTLJQ==", + "dependencies": [ + "browserslist", + "caniuse-api", + "colord", + "postcss", + "postcss-value-parser" + ] + }, + "postcss-convert-values@5.1.3_postcss@8.5.6": { + "integrity": "sha512-82pC1xkJZtcJEfiLw6UXnXVXScgtBrjlO5CBmuDQc+dlb88ZYheFsjTn40+zBVi3DkfF7iezO0nJUPLcJK3pvA==", + "dependencies": [ + "browserslist", + "postcss", + "postcss-value-parser" + ] + }, + "postcss-discard-comments@5.1.2_postcss@8.5.6": { + "integrity": "sha512-+L8208OVbHVF2UQf1iDmRcbdjJkuBF6IS29yBDSiWUIzpYaAhtNl6JYnYm12FnkeCwQqF5LeklOu6rAqgfBZqQ==", + "dependencies": [ + "postcss" + ] + }, + "postcss-discard-duplicates@5.1.0_postcss@8.5.6": { + "integrity": "sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw==", + "dependencies": [ + "postcss" + ] + }, + "postcss-discard-empty@5.1.1_postcss@8.5.6": { + "integrity": "sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A==", + "dependencies": [ + "postcss" + ] + }, + "postcss-discard-overridden@5.1.0_postcss@8.5.6": { + "integrity": "sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw==", + "dependencies": [ + "postcss" + ] + }, + "postcss-import@15.1.0_postcss@8.5.6": { + "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==", + "dependencies": [ + "postcss", + "postcss-value-parser", + "read-cache", + "resolve" + ] + }, + "postcss-import@16.1.1_postcss@8.5.6": { + "integrity": "sha512-2xVS1NCZAfjtVdvXiyegxzJ447GyqCeEI5V7ApgQVOWnros1p5lGNovJNapwPpMombyFBfqDwt7AD3n2l0KOfQ==", + "dependencies": [ + "postcss", + "postcss-value-parser", + "read-cache", + "resolve" + ] + }, + "postcss-js@4.1.0_postcss@8.5.6": { + "integrity": "sha512-oIAOTqgIo7q2EOwbhb8UalYePMvYoIeRY2YKntdpFQXNosSu3vLrniGgmH9OKs/qAkfoj5oB3le/7mINW1LCfw==", + "dependencies": [ + "camelcase-css", + "postcss" + ] + }, + "postcss-load-config@3.1.4_postcss@8.5.6": { + "integrity": "sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==", + "dependencies": [ + "lilconfig@2.1.0", + "postcss", + "yaml@1.10.2" + ], + "optionalPeers": [ + "postcss" + ] + }, + "postcss-load-config@4.0.2_postcss@8.5.6": { + "integrity": "sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==", + "dependencies": [ + "lilconfig@3.1.3", + "postcss", + "yaml@2.8.2" + ], + "optionalPeers": [ + "postcss" + ] + }, + "postcss-merge-longhand@5.1.7_postcss@8.5.6": { + "integrity": "sha512-YCI9gZB+PLNskrK0BB3/2OzPnGhPkBEwmwhfYk1ilBHYVAZB7/tkTHFBAnCrvBBOmeYyMYw3DMjT55SyxMBzjQ==", + "dependencies": [ + "postcss", + "postcss-value-parser", + "stylehacks" + ] + }, + "postcss-merge-rules@5.1.4_postcss@8.5.6": { + "integrity": "sha512-0R2IuYpgU93y9lhVbO/OylTtKMVcHb67zjWIfCiKR9rWL3GUk1677LAqD/BcHizukdZEjT8Ru3oHRoAYoJy44g==", + "dependencies": [ + "browserslist", + "caniuse-api", + "cssnano-utils", + "postcss", + "postcss-selector-parser@6.1.2" + ] + }, + "postcss-minify-font-values@5.1.0_postcss@8.5.6": { + "integrity": "sha512-el3mYTgx13ZAPPirSVsHqFzl+BBBDrXvbySvPGFnQcTI4iNslrPaFq4muTkLZmKlGk4gyFAYUBMH30+HurREyA==", + "dependencies": [ + "postcss", + "postcss-value-parser" + ] + }, + "postcss-minify-gradients@5.1.1_postcss@8.5.6": { + "integrity": "sha512-VGvXMTpCEo4qHTNSa9A0a3D+dxGFZCYwR6Jokk+/3oB6flu2/PnPXAh2x7x52EkY5xlIHLm+Le8tJxe/7TNhzw==", + "dependencies": [ + "colord", + "cssnano-utils", + "postcss", + "postcss-value-parser" + ] + }, + "postcss-minify-params@5.1.4_postcss@8.5.6": { + "integrity": "sha512-+mePA3MgdmVmv6g+30rn57USjOGSAyuxUmkfiWpzalZ8aiBkdPYjXWtHuwJGm1v5Ojy0Z0LaSYhHaLJQB0P8Jw==", + "dependencies": [ + "browserslist", + "cssnano-utils", + "postcss", + "postcss-value-parser" + ] + }, + "postcss-minify-selectors@5.2.1_postcss@8.5.6": { + "integrity": "sha512-nPJu7OjZJTsVUmPdm2TcaiohIwxP+v8ha9NehQ2ye9szv4orirRU3SDdtUmKH+10nzn0bAyOXZ0UEr7OpvLehg==", + "dependencies": [ + "postcss", + "postcss-selector-parser@6.1.2" + ] + }, + "postcss-modules-extract-imports@3.1.0_postcss@8.5.6": { + "integrity": "sha512-k3kNe0aNFQDAZGbin48pL2VNidTF0w4/eASDsxlyspobzU3wZQLOGj7L9gfRe0Jo9/4uud09DsjFNH7winGv8Q==", + "dependencies": [ + "postcss" + ] + }, + "postcss-modules-local-by-default@4.2.0_postcss@8.5.6": { + "integrity": "sha512-5kcJm/zk+GJDSfw+V/42fJ5fhjL5YbFDl8nVdXkJPLLW+Vf9mTD5Xe0wqIaDnLuL2U6cDNpTr+UQ+v2HWIBhzw==", + "dependencies": [ + "icss-utils", + "postcss", + "postcss-selector-parser@7.1.1", + "postcss-value-parser" + ] + }, + "postcss-modules-scope@3.2.1_postcss@8.5.6": { + "integrity": "sha512-m9jZstCVaqGjTAuny8MdgE88scJnCiQSlSrOWcTQgM2t32UBe+MUmFSO5t7VMSfAf/FJKImAxBav8ooCHJXCJA==", + "dependencies": [ + "postcss", + "postcss-selector-parser@7.1.1" + ] + }, + "postcss-modules-values@4.0.0_postcss@8.5.6": { + "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", + "dependencies": [ + "icss-utils", + "postcss" + ] + }, + "postcss-modules@4.3.1_postcss@8.5.6": { + "integrity": "sha512-ItUhSUxBBdNamkT3KzIZwYNNRFKmkJrofvC2nWab3CPKhYBQ1f27XXh1PAPE27Psx58jeelPsxWB/+og+KEH0Q==", + "dependencies": [ + "generic-names", + "icss-replace-symbols", + "lodash.camelcase", + "postcss", + "postcss-modules-extract-imports", + "postcss-modules-local-by-default", + "postcss-modules-scope", + "postcss-modules-values", + "string-hash" + ] + }, + "postcss-nested@6.2.0_postcss@8.5.6": { + "integrity": "sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==", + "dependencies": [ + "postcss", + "postcss-selector-parser@6.1.2" + ] + }, + "postcss-nesting@13.0.2_postcss@8.5.6_postcss-selector-parser@7.1.1": { + "integrity": "sha512-1YCI290TX+VP0U/K/aFxzHzQWHWURL+CtHMSbex1lCdpXD1SoR2sYuxDu5aNI9lPoXpKTCggFZiDJbwylU0LEQ==", + "dependencies": [ + "@csstools/selector-resolve-nested", + "@csstools/selector-specificity", + "postcss", + "postcss-selector-parser@7.1.1" + ] + }, + "postcss-normalize-charset@5.1.0_postcss@8.5.6": { + "integrity": "sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg==", + "dependencies": [ + "postcss" + ] + }, + "postcss-normalize-display-values@5.1.0_postcss@8.5.6": { + "integrity": "sha512-WP4KIM4o2dazQXWmFaqMmcvsKmhdINFblgSeRgn8BJ6vxaMyaJkwAzpPpuvSIoG/rmX3M+IrRZEz2H0glrQNEA==", + "dependencies": [ + "postcss", + "postcss-value-parser" + ] + }, + "postcss-normalize-positions@5.1.1_postcss@8.5.6": { + "integrity": "sha512-6UpCb0G4eofTCQLFVuI3EVNZzBNPiIKcA1AKVka+31fTVySphr3VUgAIULBhxZkKgwLImhzMR2Bw1ORK+37INg==", + "dependencies": [ + "postcss", + "postcss-value-parser" + ] + }, + "postcss-normalize-repeat-style@5.1.1_postcss@8.5.6": { + "integrity": "sha512-mFpLspGWkQtBcWIRFLmewo8aC3ImN2i/J3v8YCFUwDnPu3Xz4rLohDO26lGjwNsQxB3YF0KKRwspGzE2JEuS0g==", + "dependencies": [ + "postcss", + "postcss-value-parser" + ] + }, + "postcss-normalize-string@5.1.0_postcss@8.5.6": { + "integrity": "sha512-oYiIJOf4T9T1N4i+abeIc7Vgm/xPCGih4bZz5Nm0/ARVJ7K6xrDlLwvwqOydvyL3RHNf8qZk6vo3aatiw/go3w==", + "dependencies": [ + "postcss", + "postcss-value-parser" + ] + }, + "postcss-normalize-timing-functions@5.1.0_postcss@8.5.6": { + "integrity": "sha512-DOEkzJ4SAXv5xkHl0Wa9cZLF3WCBhF3o1SKVxKQAa+0pYKlueTpCgvkFAHfk+Y64ezX9+nITGrDZeVGgITJXjg==", + "dependencies": [ + "postcss", + "postcss-value-parser" + ] + }, + "postcss-normalize-unicode@5.1.1_postcss@8.5.6": { + "integrity": "sha512-qnCL5jzkNUmKVhZoENp1mJiGNPcsJCs1aaRmURmeJGES23Z/ajaln+EPTD+rBeNkSryI+2WTdW+lwcVdOikrpA==", + "dependencies": [ + "browserslist", + "postcss", + "postcss-value-parser" + ] + }, + "postcss-normalize-url@5.1.0_postcss@8.5.6": { + "integrity": "sha512-5upGeDO+PVthOxSmds43ZeMeZfKH+/DKgGRD7TElkkyS46JXAUhMzIKiCa7BabPeIy3AQcTkXwVVN7DbqsiCew==", + "dependencies": [ + "normalize-url", + "postcss", + "postcss-value-parser" + ] + }, + "postcss-normalize-whitespace@5.1.1_postcss@8.5.6": { + "integrity": "sha512-83ZJ4t3NUDETIHTa3uEg6asWjSBYL5EdkVB0sDncx9ERzOKBVJIUeDO9RyA9Zwtig8El1d79HBp0JEi8wvGQnA==", + "dependencies": [ + "postcss", + "postcss-value-parser" + ] + }, + "postcss-ordered-values@5.1.3_postcss@8.5.6": { + "integrity": "sha512-9UO79VUhPwEkzbb3RNpqqghc6lcYej1aveQteWY+4POIwlqkYE21HKWaLDF6lWNuqCobEAyTovVhtI32Rbv2RQ==", + "dependencies": [ + "cssnano-utils", + "postcss", + "postcss-value-parser" + ] + }, + "postcss-reduce-initial@5.1.2_postcss@8.5.6": { + "integrity": "sha512-dE/y2XRaqAi6OvjzD22pjTUQ8eOfc6m/natGHgKFBK9DxFmIm69YmaRVQrGgFlEfc1HePIurY0TmDeROK05rIg==", + "dependencies": [ + "browserslist", + "caniuse-api", + "postcss" + ] + }, + "postcss-reduce-transforms@5.1.0_postcss@8.5.6": { + "integrity": "sha512-2fbdbmgir5AvpW9RLtdONx1QoYG2/EtqpNQbFASDlixBbAYuTcJ0dECwlqNqH7VbaUnEnh8SrxOe2sRIn24XyQ==", + "dependencies": [ + "postcss", + "postcss-value-parser" + ] + }, + "postcss-selector-parser@6.0.10": { + "integrity": "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==", + "dependencies": [ + "cssesc", + "util-deprecate" + ] + }, + "postcss-selector-parser@6.1.2": { + "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", + "dependencies": [ + "cssesc", + "util-deprecate" + ] + }, + "postcss-selector-parser@7.1.1": { + "integrity": "sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg==", + "dependencies": [ + "cssesc", + "util-deprecate" + ] + }, + "postcss-svgo@5.1.0_postcss@8.5.6": { + "integrity": "sha512-D75KsH1zm5ZrHyxPakAxJWtkyXew5qwS70v56exwvw542d9CRtTo78K0WeFxZB4G7JXKKMbEZtZayTGdIky/eA==", + "dependencies": [ + "postcss", + "postcss-value-parser", + "svgo@2.8.0" + ] + }, + "postcss-unique-selectors@5.1.1_postcss@8.5.6": { + "integrity": "sha512-5JiODlELrz8L2HwxfPnhOWZYWDxVHWL83ufOv84NrcgipI7TaeRsatAhK4Tr2/ZiYldpK/wBvw5BD3qfaK96GA==", + "dependencies": [ + "postcss", + "postcss-selector-parser@6.1.2" + ] + }, + "postcss-value-parser@4.2.0": { + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==" + }, + "postcss@8.5.6": { + "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", + "dependencies": [ + "nanoid", + "picocolors", + "source-map-js" + ] + }, + "prettier@2.8.8": { + "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", + "bin": true + }, + "prettier@3.8.1": { + "integrity": "sha512-UOnG6LftzbdaHZcKoPFtOcCKztrQ57WkHDeRD9t/PTQtmT0NHSeWWepj6pS0z/N7+08BHFDQVUrfmfMRcZwbMg==", + "bin": true + }, + "pretty-bytes@3.0.1": { + "integrity": "sha512-eb7ZAeUTgfh294cElcu51w+OTRp/6ItW758LjwJSK72LDevcuJn0P4eD71PLMDGPwwatXmAmYHTkzvpKlJE3ow==", + "dependencies": [ + "number-is-nan" + ] + }, + "pretty-bytes@5.6.0": { + "integrity": "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==" + }, + "prismjs@1.30.0": { + "integrity": "sha512-DEvV2ZF2r2/63V+tK8hQvrR2ZGn10srHbXviTlcv7Kpzw8jWiNTqbVgjO3IY8RxrrOUF8VPMQQFysYYYv0YZxw==" + }, + "promise.series@0.2.0": { + "integrity": "sha512-VWQJyU2bcDTgZw8kpfBpB/ejZASlCrzwz5f2hjb/zlujOEB4oeiAhHygAWq8ubsX2GVkD4kCU5V2dwOTaCY5EQ==" + }, + "prompts@2.4.2": { + "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", + "dependencies": [ + "kleur@3.0.3", + "sisteransi" + ] + }, + "property-information@6.5.0": { + "integrity": "sha512-PgTgs/BlvHxOu8QuEN7wi5A0OmXaBcHpmCSTehcs6Uuu9IkDIEo13Hy7n898RHfrQ49vKCoGeWZSaAK01nwVig==" + }, + "property-information@7.1.0": { + "integrity": "sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ==" + }, + "pump@3.0.4": { + "integrity": "sha512-VS7sjc6KR7e1ukRFhQSY5LM2uBWAUPiOPa/A3mkKmiMwSmRFUITt0xuj+/lesgnCv+dPIEYlkzrcyXgquIHMcA==", + "dependencies": [ + "end-of-stream", + "once" + ] + }, + "punycode.js@2.3.1": { + "integrity": "sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==" + }, + "quansync@0.2.11": { + "integrity": "sha512-AifT7QEbW9Nri4tAwR5M/uzpBuqfZf+zwaEM/QkzEjj7NBuFD2rBuy0K3dE+8wltbezDV7JMA0WfnCPYRSYbXA==" + }, + "queue-microtask@1.2.3": { + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==" + }, + "radix3@1.1.2": { + "integrity": "sha512-b484I/7b8rDEdSDKckSSBA8knMpcdsXudlE/LNL639wFoHKwLbEkQFZHWEYwDC0wa0FKUcCY+GAF73Z7wxNVFA==" + }, + "randombytes@2.1.0": { + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dependencies": [ + "safe-buffer" + ] + }, + "read-cache@1.0.0": { + "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", + "dependencies": [ + "pify@2.3.0" + ] + }, + "readdirp@3.6.0": { + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dependencies": [ + "picomatch@2.3.1" + ] + }, + "readdirp@4.1.2": { + "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==" + }, + "readdirp@5.0.0": { + "integrity": "sha512-9u/XQ1pvrQtYyMpZe7DXKv2p5CNvyVwzUB6uhLAnQwHMSgKMBR62lc7AHljaeteeHXn11XTAaLLUVZYVZyuRBQ==" + }, + "reading-time@1.5.0": { + "integrity": "sha512-onYyVhBNr4CmAxFsKS7bz+uTLRakypIe4R+5A824vBSkQy/hB3fZepoVEf8OVAxzLvK+H/jm9TzpI3ETSm64Kg==" + }, + "rechoir@0.6.2": { + "integrity": "sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==", + "dependencies": [ + "resolve" + ] + }, + "reflect.getprototypeof@1.0.10": { + "integrity": "sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==", + "dependencies": [ + "call-bind", + "define-properties", + "es-abstract", + "es-errors", + "es-object-atoms", + "get-intrinsic", + "get-proto", + "which-builtin-type" + ] + }, + "regenerate-unicode-properties@10.2.2": { + "integrity": "sha512-m03P+zhBeQd1RGnYxrGyDAPpWX/epKirLrp8e3qevZdVkKtnCrjjWczIbYc8+xd6vcTStVlqfycTx1KR4LOr0g==", + "dependencies": [ + "regenerate" + ] + }, + "regenerate@1.4.2": { + "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==" + }, + "regex-recursion@6.0.2": { + "integrity": "sha512-0YCaSCq2VRIebiaUviZNs0cBz1kg5kVS2UKUfNIx8YVs1cN3AV7NTctO5FOKBA+UT2BPJIWZauYHPqJODG50cg==", + "dependencies": [ + "regex-utilities" + ] + }, + "regex-utilities@2.3.0": { + "integrity": "sha512-8VhliFJAWRaUiVvREIiW2NXXTmHs4vMNnSzuJVhscgmGav3g9VDxLrQndI3dZZVVdp0ZO/5v0xmX516/7M9cng==" + }, + "regex@6.1.0": { + "integrity": "sha512-6VwtthbV4o/7+OaAF9I5L5V3llLEsoPyq9P1JVXkedTP33c7MfCG0/5NOPcSJn0TzXcG9YUrR0gQSWioew3LDg==", + "dependencies": [ + "regex-utilities" + ] + }, + "regexp.prototype.flags@1.5.4": { + "integrity": "sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==", + "dependencies": [ + "call-bind", + "define-properties", + "es-errors", + "get-proto", + "gopd", + "set-function-name" + ] + }, + "regexpu-core@6.4.0": { + "integrity": "sha512-0ghuzq67LI9bLXpOX/ISfve/Mq33a4aFRzoQYhnnok1JOFpmE/A2TBGkNVenOGEeSBCjIiWcc6MVOG5HEQv0sA==", + "dependencies": [ + "regenerate", + "regenerate-unicode-properties", + "regjsgen", + "regjsparser", + "unicode-match-property-ecmascript", + "unicode-match-property-value-ecmascript" + ] + }, + "regjsgen@0.8.0": { + "integrity": "sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q==" + }, + "regjsparser@0.13.0": { + "integrity": "sha512-NZQZdC5wOE/H3UT28fVGL+ikOZcEzfMGk/c3iN9UGxzWHMa1op7274oyiUVrAG4B2EuFhus8SvkaYnhvW92p9Q==", + "dependencies": [ + "jsesc" + ], + "bin": true + }, + "rehype-autolink-headings@7.1.0": { + "integrity": "sha512-rItO/pSdvnvsP4QRB1pmPiNHUskikqtPojZKJPPPAVx9Hj8i8TwMBhofrrAYRhYOOBZH9tgmG5lPqDLuIWPWmw==", + "dependencies": [ + "@types/hast@3.0.4", + "@ungap/structured-clone", + "hast-util-heading-rank", + "hast-util-is-element", + "unified", + "unist-util-visit@5.1.0" + ] + }, + "rehype-components@0.3.0": { + "integrity": "sha512-yl2bUkZi+sU0gxwVCun7IkjiDLPczSs1SKMKHmjlSLkk4mMryBd/aYba5J8suhJdquBEKSw6ZNxU3MvVQ9xqoQ==", + "dependencies": [ + "hast-util-is-element", + "unist-util-visit@5.1.0" + ] + }, + "rehype-expressive-code@0.41.7": { + "integrity": "sha512-25f8ZMSF1d9CMscX7Cft0TSQIqdwjce2gDOvQ+d/w0FovsMwrSt3ODP4P3Z7wO1jsIJ4eYyaDRnIR/27bd/EMQ==", + "dependencies": [ + "expressive-code" + ] + }, + "rehype-katex@7.0.1": { + "integrity": "sha512-OiM2wrZ/wuhKkigASodFoo8wimG3H12LWQaH8qSPVJn9apWKFSH3YOCtbKpBorTVw/eI7cuT21XBbvwEswbIOA==", + "dependencies": [ + "@types/hast@3.0.4", + "@types/katex", + "hast-util-from-html-isomorphic", + "hast-util-to-text", + "katex", + "unist-util-visit-parents@6.0.2", + "vfile" + ] + }, + "rehype-parse@9.0.1": { + "integrity": "sha512-ksCzCD0Fgfh7trPDxr2rSylbwq9iYDkSn8TCDmEJ49ljEUBxDVCzCHv7QNzZOfODanX4+bWQ4WZqLCRWYLfhag==", + "dependencies": [ + "@types/hast@3.0.4", + "hast-util-from-html", + "unified" + ] + }, + "rehype-raw@7.0.0": { + "integrity": "sha512-/aE8hCfKlQeA8LmyeyQvQF3eBiLRGNlfBJEvWH7ivp9sBqs7TNqBL5X3v157rM4IFETqDnIOO+z5M/biZbo9Ww==", + "dependencies": [ + "@types/hast@3.0.4", + "hast-util-raw", + "vfile" + ] + }, + "rehype-slug@6.0.0": { + "integrity": "sha512-lWyvf/jwu+oS5+hL5eClVd3hNdmwM1kAC0BUvEGD19pajQMIzcNUd/k9GsfQ+FfECvX+JE+e9/btsKH0EjJT6A==", + "dependencies": [ + "@types/hast@3.0.4", + "github-slugger", + "hast-util-heading-rank", + "hast-util-to-string", + "unist-util-visit@5.1.0" + ] + }, + "rehype-stringify@10.0.1": { + "integrity": "sha512-k9ecfXHmIPuFVI61B9DeLPN0qFHfawM6RsuX48hoqlaKSF61RskNjSm1lI8PhBEM0MRdLxVVm4WmTqJQccH9mA==", + "dependencies": [ + "@types/hast@3.0.4", + "hast-util-to-html", + "unified" + ] + }, + "rehype@13.0.2": { + "integrity": "sha512-j31mdaRFrwFRUIlxGeuPXXKWQxet52RBQRvCmzl5eCefn/KGbomK5GMHNMsOJf55fgo3qw5tST5neDuarDYR2A==", + "dependencies": [ + "@types/hast@3.0.4", + "rehype-parse", + "rehype-stringify", + "unified" + ] + }, + "remark-directive-rehype@0.4.2": { + "integrity": "sha512-T6e+IG+BwqU4++MK54vFb+KDFjs3a+tHeK6E0T0ctR1FSyngolfDtAEzqxHWlRzQZqGi2sB4DFXry6oqH87D/g==", + "dependencies": [ + "hastscript@7.2.0", + "unist-util-map" + ] + }, + "remark-directive@3.0.1": { + "integrity": "sha512-gwglrEQEZcZYgVyG1tQuA+h58EZfq5CSULw7J90AFuCTyib1thgHPoqQ+h9iFvU6R+vnZ5oNFQR5QKgGpk741A==", + "dependencies": [ + "@types/mdast", + "mdast-util-directive", + "micromark-extension-directive", + "unified" + ] + }, + "remark-gfm@4.0.1": { + "integrity": "sha512-1quofZ2RQ9EWdeN34S79+KExV1764+wCUGop5CPL1WGdD0ocPpu91lzPGbwWMECpEpd42kJGQwzRfyov9j4yNg==", + "dependencies": [ + "@types/mdast", + "mdast-util-gfm", + "micromark-extension-gfm", + "remark-parse", + "remark-stringify", + "unified" + ] + }, + "remark-github-admonitions-to-directives@1.0.5": { + "integrity": "sha512-MSRzDs51HGbUrHJ0es8POuxwJiUycWw4aYCTN2RZhdOm5UvyqdB8ApWoGBj9QAiPSHKw2HWl1hd5rRzWxVfNew==", + "dependencies": [ + "@types/mdast", + "mdast-util-directive", + "unified", + "unist-util-visit@5.1.0" + ] + }, + "remark-math@6.0.0": { + "integrity": "sha512-MMqgnP74Igy+S3WwnhQ7kqGlEerTETXMvJhrUzDikVZ2/uogJCb+WHUg97hK9/jcfc0dkD73s3LN8zU49cTEtA==", + "dependencies": [ + "@types/mdast", + "mdast-util-math", + "micromark-extension-math", + "unified" + ] + }, + "remark-parse@11.0.0": { + "integrity": "sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==", + "dependencies": [ + "@types/mdast", + "mdast-util-from-markdown", + "micromark-util-types", + "unified" + ] + }, + "remark-rehype@11.1.2": { + "integrity": "sha512-Dh7l57ianaEoIpzbp0PC9UKAdCSVklD8E5Rpw7ETfbTl3FqcOOgq5q2LVDhgGCkaBv7p24JXikPdvhhmHvKMsw==", + "dependencies": [ + "@types/hast@3.0.4", + "@types/mdast", + "mdast-util-to-hast", + "unified", + "vfile" + ] + }, + "remark-sectionize@2.1.0": { + "integrity": "sha512-R/pHt1RLYrEqrbwOVXx8HnvvwOg+mxg8pE4kIWpIYE3/CuZhU8/PAx/0y1BbHWUA0jmTLTeWpUlDrS/B0pyd0g==", + "dependencies": [ + "unist-util-find-after@4.0.1", + "unist-util-visit@4.1.2" + ] + }, + "remark-smartypants@3.0.2": { + "integrity": "sha512-ILTWeOriIluwEvPjv67v7Blgrcx+LZOkAUVtKI3putuhlZm84FnqDORNXPPm+HY3NdZOMhyDwZ1E+eZB/Df5dA==", + "dependencies": [ + "retext", + "retext-smartypants", + "unified", + "unist-util-visit@5.1.0" + ] + }, + "remark-stringify@11.0.0": { + "integrity": "sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==", + "dependencies": [ + "@types/mdast", + "mdast-util-to-markdown", + "unified" + ] + }, + "request-light@0.5.8": { + "integrity": "sha512-3Zjgh+8b5fhRJBQZoy+zbVKpAQGLyka0MPgW3zruTF4dFFJ8Fqcfu9YsAvi/rvdcaTeWG3MkbZv4WKxAn/84Lg==" + }, + "request-light@0.7.0": { + "integrity": "sha512-lMbBMrDoxgsyO+yB3sDcrDuX85yYt7sS8BfQd11jtbW/z5ZWgLZRcEGLsLoYw7I0WSUGQBs8CC8ScIxkTX1+6Q==" + }, + "require-directory@2.1.1": { + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==" + }, + "require-from-string@2.0.2": { + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==" + }, + "resolve-from@4.0.0": { + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==" + }, + "resolve-from@5.0.0": { + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==" + }, + "resolve@1.22.11": { + "integrity": "sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==", + "dependencies": [ + "is-core-module", + "path-parse", + "supports-preserve-symlinks-flag" + ], + "bin": true + }, + "restructure@3.0.2": { + "integrity": "sha512-gSfoiOEA0VPE6Tukkrr7I0RBdE0s7H1eFCDBk05l1KIQT1UIKNc5JZy6jdyW6eYH3aR3g5b3PuL77rq0hvwtAw==" + }, + "retext-latin@4.0.0": { + "integrity": "sha512-hv9woG7Fy0M9IlRQloq/N6atV82NxLGveq+3H2WOi79dtIYWN8OaxogDm77f8YnVXJL2VD3bbqowu5E3EMhBYA==", + "dependencies": [ + "@types/nlcst", + "parse-latin", + "unified" + ] + }, + "retext-smartypants@6.2.0": { + "integrity": "sha512-kk0jOU7+zGv//kfjXEBjdIryL1Acl4i9XNkHxtM7Tm5lFiCog576fjNC9hjoR7LTKQ0DsPWy09JummSsH1uqfQ==", + "dependencies": [ + "@types/nlcst", + "nlcst-to-string", + "unist-util-visit@5.1.0" + ] + }, + "retext-stringify@4.0.0": { + "integrity": "sha512-rtfN/0o8kL1e+78+uxPTqu1Klt0yPzKuQ2BfWwwfgIUSayyzxpM1PJzkKt4V8803uB9qSy32MvI7Xep9khTpiA==", + "dependencies": [ + "@types/nlcst", + "nlcst-to-string", + "unified" + ] + }, + "retext@9.0.0": { + "integrity": "sha512-sbMDcpHCNjvlheSgMfEcVrZko3cDzdbe1x/e7G66dFp0Ff7Mldvi2uv6JkJQzdRcvLYE8CA8Oe8siQx8ZOgTcA==", + "dependencies": [ + "@types/nlcst", + "retext-latin", + "retext-stringify", + "unified" + ] + }, + "reusify@1.1.0": { + "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==" + }, + "rollup-plugin-bundle-size@1.0.3": { + "integrity": "sha512-aWj0Pvzq90fqbI5vN1IvUrlf4utOqy+AERYxwWjegH1G8PzheMnrRIgQ5tkwKVtQMDP0bHZEACW/zLDF+XgfXQ==", + "dependencies": [ + "chalk@1.1.3", + "maxmin" + ] + }, + "rollup-plugin-postcss@4.0.2_postcss@8.5.6": { + "integrity": "sha512-05EaY6zvZdmvPUDi3uCcAQoESDcYnv8ogJJQRp6V5kZ6J6P7uAVJlrTZcaaA20wTH527YTnKfkAoPxWI/jPp4w==", + "dependencies": [ + "chalk@4.1.2", + "concat-with-sourcemaps", + "cssnano", + "import-cwd", + "p-queue@6.6.2", + "pify@5.0.0", + "postcss", + "postcss-load-config@3.1.4_postcss@8.5.6", + "postcss-modules", + "promise.series", + "resolve", + "rollup-pluginutils", + "safe-identifier", + "style-inject" + ] + }, + "rollup-plugin-terser@7.0.2_rollup@2.80.0": { + "integrity": "sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ==", + "dependencies": [ + "@babel/code-frame", + "jest-worker", + "rollup@2.80.0", + "serialize-javascript", + "terser" + ], + "deprecated": true + }, + "rollup-plugin-typescript2@0.32.1_rollup@2.80.0_typescript@4.9.5": { + "integrity": "sha512-RanO8bp1WbeMv0bVlgcbsFNCn+Y3rX7wF97SQLDxf0fMLsg0B/QFF005t4AsGUcDgF3aKJHoqt4JF2xVaABeKw==", + "dependencies": [ + "@rollup/pluginutils@4.2.1", + "find-cache-dir", + "fs-extra", + "resolve", + "rollup@2.80.0", + "tslib", + "typescript@4.9.5" + ] + }, + "rollup-plugin-visualizer@5.14.0_rollup@2.80.0": { + "integrity": "sha512-VlDXneTDaKsHIw8yzJAFWtrzguoJ/LnQ+lMpoVfYJ3jJF4Ihe5oYLAqLklIK/35lgUY+1yEzCkHyZ1j4A5w5fA==", + "dependencies": [ + "open", + "picomatch@4.0.3", + "rollup@2.80.0", + "source-map@0.7.6", + "yargs" + ], + "optionalPeers": [ + "rollup@2.80.0" + ], + "bin": true + }, + "rollup-pluginutils@2.8.2": { + "integrity": "sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==", + "dependencies": [ + "estree-walker@0.6.1" + ] + }, + "rollup@2.80.0": { + "integrity": "sha512-cIFJOD1DESzpjOBl763Kp1AH7UE/0fcdHe6rZXUdQ9c50uvgigvW97u3IcSeBwOkgqL/PXPBktBCh0KEu5L8XQ==", + "optionalDependencies": [ + "fsevents" + ], + "bin": true + }, + "rollup@4.59.0": { + "integrity": "sha512-2oMpl67a3zCH9H79LeMcbDhXW/UmWG/y2zuqnF2jQq5uq9TbM9TVyXvA4+t+ne2IIkBdrLpAaRQAvo7YI/Yyeg==", + "dependencies": [ + "@types/estree@1.0.8" + ], + "optionalDependencies": [ + "@rollup/rollup-android-arm-eabi", + "@rollup/rollup-android-arm64", + "@rollup/rollup-darwin-arm64", + "@rollup/rollup-darwin-x64", + "@rollup/rollup-freebsd-arm64", + "@rollup/rollup-freebsd-x64", + "@rollup/rollup-linux-arm-gnueabihf", + "@rollup/rollup-linux-arm-musleabihf", + "@rollup/rollup-linux-arm64-gnu", + "@rollup/rollup-linux-arm64-musl", + "@rollup/rollup-linux-loong64-gnu", + "@rollup/rollup-linux-loong64-musl", + "@rollup/rollup-linux-ppc64-gnu", + "@rollup/rollup-linux-ppc64-musl", + "@rollup/rollup-linux-riscv64-gnu", + "@rollup/rollup-linux-riscv64-musl", + "@rollup/rollup-linux-s390x-gnu", + "@rollup/rollup-linux-x64-gnu", + "@rollup/rollup-linux-x64-musl", + "@rollup/rollup-openbsd-x64", + "@rollup/rollup-openharmony-arm64", + "@rollup/rollup-win32-arm64-msvc", + "@rollup/rollup-win32-ia32-msvc", + "@rollup/rollup-win32-x64-gnu", + "@rollup/rollup-win32-x64-msvc", + "fsevents" + ], + "bin": true + }, + "run-parallel@1.2.0": { + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dependencies": [ + "queue-microtask" + ] + }, + "sade@1.8.1": { + "integrity": "sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==", + "dependencies": [ + "mri" + ] + }, + "safe-array-concat@1.1.3": { + "integrity": "sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==", + "dependencies": [ + "call-bind", + "call-bound", + "get-intrinsic", + "has-symbols", + "isarray" + ] + }, + "safe-buffer@5.2.1": { + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" + }, + "safe-identifier@0.4.2": { + "integrity": "sha512-6pNbSMW6OhAi9j+N8V+U715yBQsaWJ7eyEUaOrawX+isg5ZxhUlV1NipNtgaKHmFGiABwt+ZF04Ii+3Xjkg+8w==" + }, + "safe-push-apply@1.0.0": { + "integrity": "sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==", + "dependencies": [ + "es-errors", + "isarray" + ] + }, + "safe-regex-test@1.1.0": { + "integrity": "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==", + "dependencies": [ + "call-bound", + "es-errors", + "is-regex" + ] + }, + "safer-buffer@2.1.2": { + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "sanitize-html@2.17.1": { + "integrity": "sha512-ehFCW+q1a4CSOWRAdX97BX/6/PDEkCqw7/0JXZAGQV57FQB3YOkTa/rrzHPeJ+Aghy4vZAFfWMYyfxIiB7F/gw==", + "dependencies": [ + "deepmerge", + "escape-string-regexp@4.0.0", + "htmlparser2@8.0.2", + "is-plain-object", + "parse-srcset", + "postcss" + ] + }, + "sax@1.4.4": { + "integrity": "sha512-1n3r/tGXO6b6VXMdFT54SHzT9ytu9yr7TaELowdYpMqY/Ao7EnlQGmAQ1+RatX7Tkkdm6hONI2owqNx2aZj5Sw==" + }, + "scrl@2.0.0": { + "integrity": "sha512-BbbVXxrOn58Ge4wjOORIRVZamssQu08ISLL/AC2z9aATIsKqZLESwZVW5YR0Yz0C7qqDRHb4yNXJlQ8yW0SGHw==" + }, + "scule@1.3.0": { + "integrity": "sha512-6FtHJEvt+pVMIB9IBY+IcCJ6Z5f1iQnytgyfKMhDKgmzYG+TeH/wx1y3l27rshSbLiSanrR9ffZDrEsmjlQF2g==" + }, + "semver@6.3.1": { + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "bin": true + }, + "semver@7.7.4": { + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", + "bin": true + }, + "serialize-javascript@4.0.0": { + "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", + "dependencies": [ + "randombytes" + ] + }, + "set-function-length@1.2.2": { + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "dependencies": [ + "define-data-property", + "es-errors", + "function-bind", + "get-intrinsic", + "gopd", + "has-property-descriptors" + ] + }, + "set-function-name@2.0.2": { + "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", + "dependencies": [ + "define-data-property", + "es-errors", + "functions-have-names", + "has-property-descriptors" + ] + }, + "set-proto@1.0.0": { + "integrity": "sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==", + "dependencies": [ + "dunder-proto", + "es-errors", + "es-object-atoms" + ] + }, + "sharp@0.34.5": { + "integrity": "sha512-Ou9I5Ft9WNcCbXrU9cMgPBcCK8LiwLqcbywW3t4oDV37n1pzpuNLsYiAV8eODnjbtQlSDwZ2cUEeQz4E54Hltg==", + "dependencies": [ + "@img/colour", + "detect-libc", + "semver@7.7.4" + ], + "optionalDependencies": [ + "@img/sharp-darwin-arm64", + "@img/sharp-darwin-x64", + "@img/sharp-libvips-darwin-arm64", + "@img/sharp-libvips-darwin-x64", + "@img/sharp-libvips-linux-arm", + "@img/sharp-libvips-linux-arm64", + "@img/sharp-libvips-linux-ppc64", + "@img/sharp-libvips-linux-riscv64", + "@img/sharp-libvips-linux-s390x", + "@img/sharp-libvips-linux-x64", + "@img/sharp-libvips-linuxmusl-arm64", + "@img/sharp-libvips-linuxmusl-x64", + "@img/sharp-linux-arm", + "@img/sharp-linux-arm64", + "@img/sharp-linux-ppc64", + "@img/sharp-linux-riscv64", + "@img/sharp-linux-s390x", + "@img/sharp-linux-x64", + "@img/sharp-linuxmusl-arm64", + "@img/sharp-linuxmusl-x64", + "@img/sharp-wasm32", + "@img/sharp-win32-arm64", + "@img/sharp-win32-ia32", + "@img/sharp-win32-x64" + ], + "scripts": true + }, + "shebang-command@2.0.0": { + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dependencies": [ + "shebang-regex" + ] + }, + "shebang-regex@3.0.0": { + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==" + }, + "shelljs-live@0.0.5_shelljs@0.8.5": { + "integrity": "sha512-IR5+gA7f+v/V8ao7ZKE4TQpbG6ABeGxQhwL0seIbOXvHdoFAHw3MEiUICrhUfuroRREKL0n7HDA5b/R5it8KHg==", + "dependencies": [ + "cross-spawn", + "shelljs" + ] + }, + "shelljs@0.8.5": { + "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==", + "dependencies": [ + "glob@7.2.3", + "interpret", + "rechoir" + ], + "bin": true + }, + "shiki@3.23.0": { + "integrity": "sha512-55Dj73uq9ZXL5zyeRPzHQsK7Nbyt6Y10k5s7OjuFZGMhpp4r/rsLBH0o/0fstIzX1Lep9VxefWljK/SKCzygIA==", + "dependencies": [ + "@shikijs/core", + "@shikijs/engine-javascript", + "@shikijs/engine-oniguruma", + "@shikijs/langs", + "@shikijs/themes", + "@shikijs/types", + "@shikijs/vscode-textmate", + "@types/hast@3.0.4" + ] + }, + "side-channel-list@1.0.0": { + "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", + "dependencies": [ + "es-errors", + "object-inspect" + ] + }, + "side-channel-map@1.0.1": { + "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", + "dependencies": [ + "call-bound", + "es-errors", + "get-intrinsic", + "object-inspect" + ] + }, + "side-channel-weakmap@1.0.2": { + "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", + "dependencies": [ + "call-bound", + "es-errors", + "get-intrinsic", + "object-inspect", + "side-channel-map" + ] + }, + "side-channel@1.1.0": { + "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", + "dependencies": [ + "es-errors", + "object-inspect", + "side-channel-list", + "side-channel-map", + "side-channel-weakmap" + ] + }, + "signal-exit@4.1.0": { + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==" + }, + "sisteransi@1.0.5": { + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==" + }, + "sitemap@8.0.3": { + "integrity": "sha512-9Ew1tR2WYw8RGE2XLy7GjkusvYXy8Rg6y8TYuBuQMfIEdGcWoJpY2Wr5DzsEiL/TKCw56+YKTCCUHglorEYK+A==", + "dependencies": [ + "@types/node", + "@types/sax", + "arg", + "sax" + ], + "bin": true + }, + "slash@3.0.0": { + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==" + }, + "smol-toml@1.6.0": { + "integrity": "sha512-4zemZi0HvTnYwLfrpk/CF9LOd9Lt87kAt50GnqhMpyF9U3poDAP2+iukq2bZsO/ufegbYehBkqINbsWxj4l4cw==" + }, + "source-map-js@1.2.1": { + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==" + }, + "source-map-support@0.5.21": { + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dependencies": [ + "buffer-from", + "source-map@0.6.1" + ] + }, + "source-map@0.6.1": { + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "source-map@0.7.6": { + "integrity": "sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==" + }, + "sourcemap-codec@1.4.8": { + "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", + "deprecated": true + }, + "space-separated-tokens@2.0.2": { + "integrity": "sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==" + }, + "stable@0.1.8": { + "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==", + "deprecated": true + }, + "stop-iteration-iterator@1.1.0": { + "integrity": "sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==", + "dependencies": [ + "es-errors", + "internal-slot" + ] + }, + "stream-replace-string@2.0.0": { + "integrity": "sha512-TlnjJ1C0QrmxRNrON00JvaFFlNh5TTG00APw23j74ET7gkQpTASi6/L2fuiav8pzK715HXtUeClpBTw2NPSn6w==" + }, + "string-hash@1.1.3": { + "integrity": "sha512-kJUvRUFK49aub+a7T1nNE66EJbZBMnBgoC1UbCZ5n6bsZKBRga4KgBRTMn/pFkeCZSYtNeSyMxPDM0AXWELk2A==" + }, + "string-width@4.2.3": { + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dependencies": [ + "emoji-regex@8.0.0", + "is-fullwidth-code-point", + "strip-ansi@6.0.1" + ] + }, + "string-width@5.1.2": { + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dependencies": [ + "eastasianwidth", + "emoji-regex@9.2.2", + "strip-ansi@7.2.0" + ] + }, + "string-width@7.2.0": { + "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", + "dependencies": [ + "emoji-regex@10.6.0", + "get-east-asian-width", + "strip-ansi@7.2.0" + ] + }, + "string.prototype.matchall@4.0.12": { + "integrity": "sha512-6CC9uyBL+/48dYizRf7H7VAYCMCNTBeM78x/VTUe9bFEaxBepPJDa1Ow99LqI/1yF7kuy7Q3cQsYMrcjGUcskA==", + "dependencies": [ + "call-bind", + "call-bound", + "define-properties", + "es-abstract", + "es-errors", + "es-object-atoms", + "get-intrinsic", + "gopd", + "has-symbols", + "internal-slot", + "regexp.prototype.flags", + "set-function-name", + "side-channel" + ] + }, + "string.prototype.trim@1.2.10": { + "integrity": "sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==", + "dependencies": [ + "call-bind", + "call-bound", + "define-data-property", + "define-properties", + "es-abstract", + "es-object-atoms", + "has-property-descriptors" + ] + }, + "string.prototype.trimend@1.0.9": { + "integrity": "sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==", + "dependencies": [ + "call-bind", + "call-bound", + "define-properties", + "es-object-atoms" + ] + }, + "string.prototype.trimstart@1.0.8": { + "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", + "dependencies": [ + "call-bind", + "define-properties", + "es-object-atoms" + ] + }, + "stringify-entities@4.0.4": { + "integrity": "sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==", + "dependencies": [ + "character-entities-html4", + "character-entities-legacy" + ] + }, + "strip-ansi@3.0.1": { + "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", + "dependencies": [ + "ansi-regex@2.1.1" + ] + }, + "strip-ansi@6.0.1": { + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dependencies": [ + "ansi-regex@5.0.1" + ] + }, + "strip-ansi@7.2.0": { + "integrity": "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==", + "dependencies": [ + "ansi-regex@6.2.2" + ] + }, + "strnum@2.2.0": { + "integrity": "sha512-Y7Bj8XyJxnPAORMZj/xltsfo55uOiyHcU2tnAVzHUnSJR/KsEX+9RoDeXEnsXtl/CX4fAcrt64gZ13aGaWPeBg==" + }, + "style-inject@0.3.0": { + "integrity": "sha512-IezA2qp+vcdlhJaVm5SOdPPTUu0FCEqfNSli2vRuSIBbu5Nq5UvygTk/VzeCqfLz2Atj3dVII5QBKGZRZ0edzw==" + }, + "stylehacks@5.1.1_postcss@8.5.6": { + "integrity": "sha512-sBpcd5Hx7G6seo7b1LkpttvTz7ikD0LlH5RmdcBNb6fFR0Fl7LQwHDFr300q4cwUqi+IYrFGmsIHieMBfnN/Bw==", + "dependencies": [ + "browserslist", + "postcss", + "postcss-selector-parser@6.1.2" + ] + }, + "stylus@0.64.0": { + "integrity": "sha512-ZIdT8eUv8tegmqy1tTIdJv9We2DumkNZFdCF5mz/Kpq3OcTaxSuCAYZge6HKK2CmNC02G1eJig2RV7XTw5hQrA==", + "dependencies": [ + "@adobe/css-tools", + "debug", + "glob@10.5.0", + "sax", + "source-map@0.7.6" + ], + "bin": true + }, + "sucrase@3.35.1": { + "integrity": "sha512-DhuTmvZWux4H1UOnWMB3sk0sbaCVOoQZjv8u1rDoTV0HTdGem9hkAZtl4JZy8P2z4Bg0nT+YMeOFyVr4zcG5Tw==", + "dependencies": [ + "@jridgewell/gen-mapping", + "commander@4.1.1", + "lines-and-columns", + "mz", + "pirates", + "tinyglobby", + "ts-interface-checker" + ], + "bin": true + }, + "supports-color@2.0.0": { + "integrity": "sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==" + }, + "supports-color@7.2.0": { + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": [ + "has-flag" + ] + }, + "supports-preserve-symlinks-flag@1.0.0": { + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==" + }, + "svelte2tsx@0.7.51_svelte@5.53.6__acorn@8.16.0_typescript@5.9.3": { + "integrity": "sha512-YbVMQi5LtQkVGOMdATTY8v3SMtkNjzYtrVDGaN3Bv+0LQ47tGXu/Oc8ryTkcYuEJWTZFJ8G2+2I8ORcQVGt9Ag==", + "dependencies": [ + "dedent-js", + "scule", + "svelte", + "typescript@5.9.3" + ] + }, + "svelte@5.53.6_acorn@8.16.0": { + "integrity": "sha512-lP5DGF3oDDI9fhHcSpaBiJEkFLuS16h92DhM1L5K1lFm0WjOmUh1i2sNkBBk8rkxJRpob0dBE75jRfUzGZUOGA==", + "dependencies": [ + "@jridgewell/remapping", + "@jridgewell/sourcemap-codec", + "@sveltejs/acorn-typescript", + "@types/estree@1.0.8", + "@types/trusted-types", + "acorn", + "aria-query@5.3.1", + "axobject-query", + "clsx", + "devalue", + "esm-env", + "esrap", + "is-reference@3.0.3", + "locate-character", + "magic-string@0.30.21", + "zimmerframe" + ] + }, + "svgo@2.8.0": { + "integrity": "sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==", + "dependencies": [ + "@trysound/sax", + "commander@7.2.0", + "css-select@4.3.0", + "css-tree@1.1.3", + "csso@4.2.0", + "picocolors", + "stable" + ], + "bin": true + }, + "svgo@3.3.2": { + "integrity": "sha512-OoohrmuUlBs8B8o6MB2Aevn+pRIH9zDALSR+6hhqVfa6fRwG/Qw9VUMSMW9VNg2CFc/MTIfabtdOVl9ODIJjpw==", + "dependencies": [ + "@trysound/sax", + "commander@7.2.0", + "css-select@5.2.2", + "css-tree@2.3.1", + "css-what", + "csso@5.0.5", + "picocolors" + ], + "bin": true + }, + "swup-morph-plugin@1.3.0_swup@4.8.3": { + "integrity": "sha512-vTqWYA5ZFkWMo54K8jlol5OCvboqRsELLfM1PUkS2IiL+1dDDChzMHa4ZBI5+yfl7bZUCWgd8EmuhMd/i/o+Qg==", + "dependencies": [ + "@swup/plugin@4.0.0", + "morphdom", + "swup" + ] + }, + "swup@4.8.3": { + "integrity": "sha512-2U+mE7SnU4Jm+H82C2FChML04v5kb+fnf+2aYP2e0MX7vWOnmd6SHvjSBF8MH3HOrwalaXnynQVImgCaxGZxtA==", + "dependencies": [ + "delegate-it", + "opencollective-postinstall", + "path-to-regexp" + ] + }, + "tailwindcss@3.4.19_postcss@8.5.6": { + "integrity": "sha512-3ofp+LL8E+pK/JuPLPggVAIaEuhvIz4qNcf3nA1Xn2o/7fb7s/TYpHhwGDv1ZU3PkBluUVaF8PyCHcm48cKLWQ==", + "dependencies": [ + "@alloc/quick-lru", + "arg", + "chokidar@3.6.0", + "didyoumean", + "dlv", + "fast-glob", + "glob-parent@6.0.2", + "is-glob", + "jiti", + "lilconfig@3.1.3", + "micromatch", + "normalize-path", + "object-hash", + "picocolors", + "postcss", + "postcss-import@15.1.0_postcss@8.5.6", + "postcss-js", + "postcss-load-config@4.0.2_postcss@8.5.6", + "postcss-nested", + "postcss-selector-parser@6.1.2", + "resolve", + "sucrase" + ], + "bin": true + }, + "tar@7.5.9": { + "integrity": "sha512-BTLcK0xsDh2+PUe9F6c2TlRp4zOOBMTkoQHQIWSIzI0R7KG46uEwq4OPk2W7bZcprBMsuaeFsqwYr7pjh6CuHg==", + "dependencies": [ + "@isaacs/fs-minipass", + "chownr", + "minipass", + "minizlib", + "yallist@5.0.0" + ] + }, + "terser@5.46.0": { + "integrity": "sha512-jTwoImyr/QbOWFFso3YoU3ik0jBBDJ6JTOQiy/J2YxVJdZCc+5u7skhNwiOR3FQIygFqVUPHl7qbbxtjW2K3Qg==", + "dependencies": [ + "@jridgewell/source-map", + "acorn", + "commander@2.20.3", + "source-map-support" + ], + "bin": true + }, + "thenify-all@1.6.0": { + "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", + "dependencies": [ + "thenify" + ] + }, + "thenify@3.3.1": { + "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", + "dependencies": [ + "any-promise" + ] + }, + "tiny-glob@0.2.9": { + "integrity": "sha512-g/55ssRPUjShh+xkfx9UPDXqhckHEsHr4Vd9zX55oSdGZc/MD0m3sferOkwWtp98bv+kcVfEHtRJgBVJzelrzg==", + "dependencies": [ + "globalyzer", + "globrex" + ] + }, + "tiny-inflate@1.0.3": { + "integrity": "sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw==" + }, + "tinyexec@0.3.2": { + "integrity": "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==" + }, + "tinyexec@1.0.2": { + "integrity": "sha512-W/KYk+NFhkmsYpuHq5JykngiOCnxeVL8v8dFnqxSD8qEEdRfXk1SDM6JzNqcERbcGYj9tMrDQBYV9cjgnunFIg==" + }, + "tinyglobby@0.2.15_picomatch@4.0.3": { + "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", + "dependencies": [ + "fdir", + "picomatch@4.0.3" + ] + }, + "to-regex-range@5.0.1": { + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dependencies": [ + "is-number" + ] + }, + "tosource@2.0.0-alpha.3": { + "integrity": "sha512-KAB2lrSS48y91MzFPFuDg4hLbvDiyTjOVgaK7Erw+5AmZXNq4sFRVn8r6yxSLuNs15PaokrDRpS61ERY9uZOug==" + }, + "tr46@0.0.3": { + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + }, + "trim-lines@3.0.1": { + "integrity": "sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==" + }, + "trough@2.2.0": { + "integrity": "sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==" + }, + "ts-interface-checker@0.1.13": { + "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==" + }, + "tsconfck@3.1.6_typescript@5.9.3": { + "integrity": "sha512-ks6Vjr/jEw0P1gmOVwutM3B7fWxoWBL2KRDb1JfqGVawBmO5UsvmWOQFGHBPl5yxYz4eERr19E6L7NMv+Fej4w==", + "dependencies": [ + "typescript@5.9.3" + ], + "optionalPeers": [ + "typescript@5.9.3" + ], + "bin": true + }, + "tslib@2.8.1": { + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==" + }, + "type-fest@4.41.0": { + "integrity": "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==" + }, + "typed-array-buffer@1.0.3": { + "integrity": "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==", + "dependencies": [ + "call-bound", + "es-errors", + "is-typed-array" + ] + }, + "typed-array-byte-length@1.0.3": { + "integrity": "sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==", + "dependencies": [ + "call-bind", + "for-each", + "gopd", + "has-proto", + "is-typed-array" + ] + }, + "typed-array-byte-offset@1.0.4": { + "integrity": "sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==", + "dependencies": [ + "available-typed-arrays", + "call-bind", + "for-each", + "gopd", + "has-proto", + "is-typed-array", + "reflect.getprototypeof" + ] + }, + "typed-array-length@1.0.7": { + "integrity": "sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==", + "dependencies": [ + "call-bind", + "for-each", + "gopd", + "is-typed-array", + "possible-typed-array-names", + "reflect.getprototypeof" + ] + }, + "typed-query-selector@2.12.1": { + "integrity": "sha512-uzR+FzI8qrUEIu96oaeBJmd9E7CFEiQ3goA5qCVgc4s5llSubcfGHq9yUstZx/k4s9dXHVKsE35YWoFyvEqEHA==" + }, + "typesafe-path@0.2.2": { + "integrity": "sha512-OJabfkAg1WLZSqJAJ0Z6Sdt3utnbzr/jh+NAHoyWHJe8CMSy79Gm085094M9nvTPy22KzTVn5Zq5mbapCI/hPA==" + }, + "typescript-auto-import-cache@0.3.6": { + "integrity": "sha512-RpuHXrknHdVdK7wv/8ug3Fr0WNsNi5l5aB8MYYuXhq2UH5lnEB1htJ1smhtD5VeCsGr2p8mUDtd83LCQDFVgjQ==", + "dependencies": [ + "semver@7.7.4" + ] + }, + "typescript@4.9.5": { + "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", + "bin": true + }, + "typescript@5.9.3": { + "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", + "bin": true + }, + "uc.micro@2.1.0": { + "integrity": "sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==" + }, + "ufo@1.6.3": { + "integrity": "sha512-yDJTmhydvl5lJzBmy/hyOAA0d+aqCBuwl818haVdYCRrWV84o7YyeVm4QlVHStqNrrJSTb6jKuFAVqAFsr+K3Q==" + }, + "ultrahtml@1.6.0": { + "integrity": "sha512-R9fBn90VTJrqqLDwyMph+HGne8eqY1iPfYhPzZrvKpIfwkWZbcYlfpsb8B9dTvBfpy1/hqAD7Wi8EKfP9e8zdw==" + }, + "unbox-primitive@1.1.0": { + "integrity": "sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==", + "dependencies": [ + "call-bound", + "has-bigints", + "has-symbols", + "which-boxed-primitive" + ] + }, + "uncrypto@0.1.3": { + "integrity": "sha512-Ql87qFHB3s/De2ClA9e0gsnS6zXG27SkTiSJwjCc9MebbfapQfuPzumMIUMi38ezPZVNFcHI9sUIepeQfw8J8Q==" + }, + "undici@7.22.0": { + "integrity": "sha512-RqslV2Us5BrllB+JeiZnK4peryVTndy9Dnqq62S3yYRRTj0tFQCwEniUy2167skdGOy3vqRzEvl1Dm4sV2ReDg==" + }, + "unicode-canonical-property-names-ecmascript@2.0.1": { + "integrity": "sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg==" + }, + "unicode-match-property-ecmascript@2.0.0": { + "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", + "dependencies": [ + "unicode-canonical-property-names-ecmascript", + "unicode-property-aliases-ecmascript" + ] + }, + "unicode-match-property-value-ecmascript@2.2.1": { + "integrity": "sha512-JQ84qTuMg4nVkx8ga4A16a1epI9H6uTXAknqxkGF/aFfRLw1xC/Bp24HNLaZhHSkWd3+84t8iXnp1J0kYcZHhg==" + }, + "unicode-properties@1.4.1": { + "integrity": "sha512-CLjCCLQ6UuMxWnbIylkisbRj31qxHPAurvena/0iwSVbQ2G1VY5/HjV0IRabOEbDHlzZlRdCrD4NhB0JtU40Pg==", + "dependencies": [ + "base64-js", + "unicode-trie" + ] + }, + "unicode-property-aliases-ecmascript@2.2.0": { + "integrity": "sha512-hpbDzxUY9BFwX+UeBnxv3Sh1q7HFxj48DTmXchNgRa46lO8uj3/1iEn3MiNUYTg1g9ctIqXCCERn8gYZhHC5lQ==" + }, + "unicode-trie@2.0.0": { + "integrity": "sha512-x7bc76x0bm4prf1VLg79uhAzKw8DVboClSN5VxJuQ+LKDOVEW9CdH+VY7SP+vX7xCYQqzzgQpFqz15zeLvAtZQ==", + "dependencies": [ + "pako", + "tiny-inflate" + ] + }, + "unified@11.0.5": { + "integrity": "sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==", + "dependencies": [ + "@types/unist@3.0.3", + "bail", + "devlop", + "extend", + "is-plain-obj", + "trough", + "vfile" + ] + }, + "unifont@0.5.2": { + "integrity": "sha512-LzR4WUqzH9ILFvjLAUU7dK3Lnou/qd5kD+IakBtBK4S15/+x2y9VX+DcWQv6s551R6W+vzwgVS6tFg3XggGBgg==", + "dependencies": [ + "css-tree@3.1.0", + "ofetch", + "ohash" + ] + }, + "unist-util-find-after@4.0.1": { + "integrity": "sha512-QO/PuPMm2ERxC6vFXEPtmAutOopy5PknD+Oq64gGwxKtk4xwo9Z97t9Av1obPmGU0IyTa6EKYUfTrK2QJS3Ozw==", + "dependencies": [ + "@types/unist@2.0.11", + "unist-util-is@5.2.1" + ] + }, + "unist-util-find-after@5.0.0": { + "integrity": "sha512-amQa0Ep2m6hE2g72AugUItjbuM8X8cGQnFoHk0pGfrFeT9GZhzN5SW8nRsiGKK7Aif4CrACPENkA6P/Lw6fHGQ==", + "dependencies": [ + "@types/unist@3.0.3", + "unist-util-is@6.0.1" + ] + }, + "unist-util-is@5.2.1": { + "integrity": "sha512-u9njyyfEh43npf1M+yGKDGVPbY/JWEemg5nH05ncKPfi+kBbKBJoTdsogMu33uhytuLlv9y0O7GH7fEdwLdLQw==", + "dependencies": [ + "@types/unist@2.0.11" + ] + }, + "unist-util-is@6.0.1": { + "integrity": "sha512-LsiILbtBETkDz8I9p1dQ0uyRUWuaQzd/cuEeS1hoRSyW5E5XGmTzlwY1OrNzzakGowI9Dr/I8HVaw4hTtnxy8g==", + "dependencies": [ + "@types/unist@3.0.3" + ] + }, + "unist-util-map@3.1.3": { + "integrity": "sha512-4/mDauoxqZ6geK97lJ6n2kDk6JK88Vh+hWMSJqyaaP/7eqN1dDhjcjnNxKNm3YU6Sw7PVJtcFMUbnmHvYzb6Vg==", + "dependencies": [ + "@types/unist@2.0.11" + ] + }, + "unist-util-modify-children@4.0.0": { + "integrity": "sha512-+tdN5fGNddvsQdIzUF3Xx82CU9sMM+fA0dLgR9vOmT0oPT2jH+P1nd5lSqfCfXAw+93NhcXNY2qqvTUtE4cQkw==", + "dependencies": [ + "@types/unist@3.0.3", + "array-iterate" + ] + }, + "unist-util-position@5.0.0": { + "integrity": "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==", + "dependencies": [ + "@types/unist@3.0.3" + ] + }, + "unist-util-remove-position@5.0.0": { + "integrity": "sha512-Hp5Kh3wLxv0PHj9m2yZhhLt58KzPtEYKQQ4yxfYFEO7EvHwzyDYnduhHnY1mDxoqr7VUwVuHXk9RXKIiYS1N8Q==", + "dependencies": [ + "@types/unist@3.0.3", + "unist-util-visit@5.1.0" + ] + }, + "unist-util-stringify-position@4.0.0": { + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "dependencies": [ + "@types/unist@3.0.3" + ] + }, + "unist-util-visit-children@3.0.0": { + "integrity": "sha512-RgmdTfSBOg04sdPcpTSD1jzoNBjt9a80/ZCzp5cI9n1qPzLZWF9YdvWGN2zmTumP1HWhXKdUWexjy/Wy/lJ7tA==", + "dependencies": [ + "@types/unist@3.0.3" + ] + }, + "unist-util-visit-parents@5.1.3": { + "integrity": "sha512-x6+y8g7wWMyQhL1iZfhIPhDAs7Xwbn9nRosDXl7qoPTSCy0yNxnKc+hWokFifWQIDGi154rdUqKvbCa4+1kLhg==", + "dependencies": [ + "@types/unist@2.0.11", + "unist-util-is@5.2.1" + ] + }, + "unist-util-visit-parents@6.0.2": { + "integrity": "sha512-goh1s1TBrqSqukSc8wrjwWhL0hiJxgA8m4kFxGlQ+8FYQ3C/m11FcTs4YYem7V664AhHVvgoQLk890Ssdsr2IQ==", + "dependencies": [ + "@types/unist@3.0.3", + "unist-util-is@6.0.1" + ] + }, + "unist-util-visit@4.1.2": { + "integrity": "sha512-MSd8OUGISqHdVvfY9TPhyK2VdUrPgxkUtWSuMHF6XAAFuL4LokseigBnZtPnJMu+FbynTkFNnFlyjxpVKujMRg==", + "dependencies": [ + "@types/unist@2.0.11", + "unist-util-is@5.2.1", + "unist-util-visit-parents@5.1.3" + ] + }, + "unist-util-visit@5.1.0": { + "integrity": "sha512-m+vIdyeCOpdr/QeQCu2EzxX/ohgS8KbnPDgFni4dQsfSCtpz8UqDyY5GjRru8PDKuYn7Fq19j1CQ+nJSsGKOzg==", + "dependencies": [ + "@types/unist@3.0.3", + "unist-util-is@6.0.1", + "unist-util-visit-parents@6.0.2" + ] + }, + "universalify@2.0.1": { + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==" + }, + "unstorage@1.17.4": { + "integrity": "sha512-fHK0yNg38tBiJKp/Vgsq4j0JEsCmgqH58HAn707S7zGkArbZsVr/CwINoi+nh3h98BRCwKvx1K3Xg9u3VV83sw==", + "dependencies": [ + "anymatch", + "chokidar@5.0.0", + "destr", + "h3", + "lru-cache@11.2.6", + "node-fetch-native", + "ofetch", + "ufo" + ] + }, + "update-browserslist-db@1.2.3_browserslist@4.28.1": { + "integrity": "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==", + "dependencies": [ + "browserslist", + "escalade", + "picocolors" + ], + "bin": true + }, + "util-deprecate@1.0.2": { + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + }, + "vfile-location@5.0.3": { + "integrity": "sha512-5yXvWDEgqeiYiBe1lbxYF7UMAIm/IcopxMHrMQDq3nvKcjPKIhZklUKL+AE7J7uApI4kwe2snsK+eI6UTj9EHg==", + "dependencies": [ + "@types/unist@3.0.3", + "vfile" + ] + }, + "vfile-message@4.0.3": { + "integrity": "sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw==", + "dependencies": [ + "@types/unist@3.0.3", + "unist-util-stringify-position" + ] + }, + "vfile@6.0.3": { + "integrity": "sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==", + "dependencies": [ + "@types/unist@3.0.3", + "vfile-message" + ] + }, + "vite@6.4.1_stylus@0.64.0_picomatch@4.0.3": { + "integrity": "sha512-+Oxm7q9hDoLMyJOYfUYBuHQo+dkAloi33apOPP56pzj+vsdJDzr+j1NISE5pyaAuKL4A3UD34qd0lx5+kfKp2g==", + "dependencies": [ + "esbuild", + "fdir", + "picomatch@4.0.3", + "postcss", + "rollup@4.59.0", + "stylus", + "tinyglobby" + ], + "optionalDependencies": [ + "fsevents" + ], + "optionalPeers": [ + "stylus" + ], + "bin": true + }, + "vitefu@1.1.2_vite@6.4.1__stylus@0.64.0__picomatch@4.0.3_stylus@0.64.0": { + "integrity": "sha512-zpKATdUbzbsycPFBN71nS2uzBUQiVnFoOrr2rvqv34S1lcAgMKKkjWleLGeiJlZ8lwCXvtWaRn7R3ZC16SYRuw==", + "dependencies": [ + "vite" + ], + "optionalPeers": [ + "vite" + ] + }, + "volar-service-css@0.0.68_@volar+language-service@2.4.28": { + "integrity": "sha512-lJSMh6f3QzZ1tdLOZOzovLX0xzAadPhx8EKwraDLPxBndLCYfoTvnNuiFFV8FARrpAlW5C0WkH+TstPaCxr00Q==", + "dependencies": [ + "@volar/language-service", + "vscode-css-languageservice", + "vscode-languageserver-textdocument", + "vscode-uri" + ], + "optionalPeers": [ + "@volar/language-service" + ] + }, + "volar-service-emmet@0.0.68_@volar+language-service@2.4.28": { + "integrity": "sha512-nHvixrRQ83EzkQ4G/jFxu9Y4eSsXS/X2cltEPDM+K9qZmIv+Ey1w0tg1+6caSe8TU5Hgw4oSTwNMf/6cQb3LzQ==", + "dependencies": [ + "@emmetio/css-parser", + "@emmetio/html-matcher", + "@volar/language-service", + "@vscode/emmet-helper", + "vscode-uri" + ], + "optionalPeers": [ + "@volar/language-service" + ] + }, + "volar-service-html@0.0.68_@volar+language-service@2.4.28": { + "integrity": "sha512-fru9gsLJxy33xAltXOh4TEdi312HP80hpuKhpYQD4O5hDnkNPEBdcQkpB+gcX0oK0VxRv1UOzcGQEUzWCVHLfA==", + "dependencies": [ + "@volar/language-service", + "vscode-html-languageservice", + "vscode-languageserver-textdocument", + "vscode-uri" + ], + "optionalPeers": [ + "@volar/language-service" + ] + }, + "volar-service-prettier@0.0.68_@volar+language-service@2.4.28": { + "integrity": "sha512-grUmWHkHlebMOd6V8vXs2eNQUw/bJGJMjekh/EPf/p2ZNTK0Uyz7hoBRngcvGfJHMsSXZH8w/dZTForIW/4ihw==", + "dependencies": [ + "@volar/language-service", + "vscode-uri" + ], + "optionalPeers": [ + "@volar/language-service" + ] + }, + "volar-service-typescript-twoslash-queries@0.0.68_@volar+language-service@2.4.28": { + "integrity": "sha512-NugzXcM0iwuZFLCJg47vI93su5YhTIweQuLmZxvz5ZPTaman16JCvmDZexx2rd5T/75SNuvvZmrTOTNYUsfe5w==", + "dependencies": [ + "@volar/language-service", + "vscode-uri" + ], + "optionalPeers": [ + "@volar/language-service" + ] + }, + "volar-service-typescript@0.0.68_@volar+language-service@2.4.28": { + "integrity": "sha512-z7B/7CnJ0+TWWFp/gh2r5/QwMObHNDiQiv4C9pTBNI2Wxuwymd4bjEORzrJ/hJ5Yd5+OzeYK+nFCKevoGEEeKw==", + "dependencies": [ + "@volar/language-service", + "path-browserify", + "semver@7.7.4", + "typescript-auto-import-cache", + "vscode-languageserver-textdocument", + "vscode-nls", + "vscode-uri" + ], + "optionalPeers": [ + "@volar/language-service" + ] + }, + "volar-service-yaml@0.0.68_@volar+language-service@2.4.28": { + "integrity": "sha512-84XgE02LV0OvTcwfqhcSwVg4of3MLNUWPMArO6Aj8YXqyEVnPu8xTEMY2btKSq37mVAPuaEVASI4e3ptObmqcA==", + "dependencies": [ + "@volar/language-service", + "vscode-uri", + "yaml-language-server" + ], + "optionalPeers": [ + "@volar/language-service" + ] + }, + "vscode-css-languageservice@6.3.10": { + "integrity": "sha512-eq5N9Er3fC4vA9zd9EFhyBG90wtCCuXgRSpAndaOgXMh1Wgep5lBgRIeDgjZBW9pa+332yC9+49cZMW8jcL3MA==", + "dependencies": [ + "@vscode/l10n", + "vscode-languageserver-textdocument", + "vscode-languageserver-types", + "vscode-uri" + ] + }, + "vscode-html-languageservice@5.6.2": { + "integrity": "sha512-ulCrSnFnfQ16YzvwnYUgEbUEl/ZG7u2eV27YhvLObSHKkb8fw1Z9cgsnUwjTEeDIdJDoTDTDpxuhQwoenoLNMg==", + "dependencies": [ + "@vscode/l10n", + "vscode-languageserver-textdocument", + "vscode-languageserver-types", + "vscode-uri" + ] + }, + "vscode-json-languageservice@4.1.8": { + "integrity": "sha512-0vSpg6Xd9hfV+eZAaYN63xVVMOTmJ4GgHxXnkLCh+9RsQBkWKIghzLhW2B9ebfG+LQQg8uLtsQ2aUKjTgE+QOg==", + "dependencies": [ + "jsonc-parser@3.3.1", + "vscode-languageserver-textdocument", + "vscode-languageserver-types", + "vscode-nls", + "vscode-uri" + ] + }, + "vscode-jsonrpc@8.2.0": { + "integrity": "sha512-C+r0eKJUIfiDIfwJhria30+TYWPtuHJXHtI7J0YlOmKAo7ogxP20T0zxB7HZQIFhIyvoBPwWskjxrvAtfjyZfA==" + }, + "vscode-languageserver-protocol@3.17.5": { + "integrity": "sha512-mb1bvRJN8SVznADSGWM9u/b07H7Ecg0I3OgXDuLdn307rl/J3A9YD6/eYOssqhecL27hK1IPZAsaqh00i/Jljg==", + "dependencies": [ + "vscode-jsonrpc", + "vscode-languageserver-types" + ] + }, + "vscode-languageserver-textdocument@1.0.12": { + "integrity": "sha512-cxWNPesCnQCcMPeenjKKsOCKQZ/L6Tv19DTRIGuLWe32lyzWhihGVJ/rcckZXJxfdKCFvRLS3fpBIsV/ZGX4zA==" + }, + "vscode-languageserver-types@3.17.5": { + "integrity": "sha512-Ld1VelNuX9pdF39h2Hgaeb5hEZM2Z3jUrrMgWQAu82jMtZp7p3vJT3BzToKtZI7NgQssZje5o0zryOrhQvzQAg==" + }, + "vscode-languageserver@9.0.1": { + "integrity": "sha512-woByF3PDpkHFUreUa7Hos7+pUWdeWMXRd26+ZX2A8cFx6v/JPTtd4/uN0/jB6XQHYaOlHbio03NTHCqrgG5n7g==", + "dependencies": [ + "vscode-languageserver-protocol" + ], + "bin": true + }, + "vscode-nls@5.2.0": { + "integrity": "sha512-RAaHx7B14ZU04EU31pT+rKz2/zSl7xMsfIZuo8pd+KZO6PXtQmpevpq3vxvWNcrGbdmhM/rr5Uw5Mz+NBfhVng==" + }, + "vscode-uri@3.1.0": { + "integrity": "sha512-/BpdSx+yCQGnCvecbyXdxHDkuk55/G3xwnC0GqY4gmQ3j+A+g8kzzgB4Nk/SINjqn6+waqw3EgbVF2QKExkRxQ==" + }, + "web-namespaces@2.0.1": { + "integrity": "sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==" + }, + "webidl-conversions@3.0.1": { + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" + }, + "whatwg-encoding@3.1.1": { + "integrity": "sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==", + "dependencies": [ + "iconv-lite" + ], + "deprecated": true + }, + "whatwg-mimetype@4.0.0": { + "integrity": "sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==" + }, + "whatwg-url@5.0.0": { + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "dependencies": [ + "tr46", + "webidl-conversions" + ] + }, + "which-boxed-primitive@1.1.1": { + "integrity": "sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==", + "dependencies": [ + "is-bigint", + "is-boolean-object", + "is-number-object", + "is-string", + "is-symbol" + ] + }, + "which-builtin-type@1.2.1": { + "integrity": "sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==", + "dependencies": [ + "call-bound", + "function.prototype.name", + "has-tostringtag", + "is-async-function", + "is-date-object", + "is-finalizationregistry", + "is-generator-function", + "is-regex", + "is-weakref", + "isarray", + "which-boxed-primitive", + "which-collection", + "which-typed-array" + ] + }, + "which-collection@1.0.2": { + "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==", + "dependencies": [ + "is-map", + "is-set", + "is-weakmap", + "is-weakset" + ] + }, + "which-pm-runs@1.1.0": { + "integrity": "sha512-n1brCuqClxfFfq/Rb0ICg9giSZqCS+pLtccdag6C2HyufBrh3fBOiy9nb6ggRMvWOVH5GrdJskj5iGTZNxd7SA==" + }, + "which-typed-array@1.1.20": { + "integrity": "sha512-LYfpUkmqwl0h9A2HL09Mms427Q1RZWuOHsukfVcKRq9q95iQxdw0ix1JQrqbcDR9PH1QDwf5Qo8OZb5lksZ8Xg==", + "dependencies": [ + "available-typed-arrays", + "call-bind", + "call-bound", + "for-each", + "get-proto", + "gopd", + "has-tostringtag" + ] + }, + "which@2.0.2": { + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dependencies": [ + "isexe" + ], + "bin": true + }, + "widest-line@5.0.0": { + "integrity": "sha512-c9bZp7b5YtRj2wOe6dlj32MK+Bx/M/d+9VB2SHM1OtsUHR0aV0tdP6DWh/iMt0kWi1t5g1Iudu6hQRNd1A4PVA==", + "dependencies": [ + "string-width@7.2.0" + ] + }, + "wrap-ansi@7.0.0": { + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dependencies": [ + "ansi-styles@4.3.0", + "string-width@4.2.3", + "strip-ansi@6.0.1" + ] + }, + "wrap-ansi@8.1.0": { + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dependencies": [ + "ansi-styles@6.2.3", + "string-width@5.1.2", + "strip-ansi@7.2.0" + ] + }, + "wrap-ansi@9.0.2": { + "integrity": "sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==", + "dependencies": [ + "ansi-styles@6.2.3", + "string-width@7.2.0", + "strip-ansi@7.2.0" + ] + }, + "wrappy@1.0.2": { + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" + }, + "xxhash-wasm@1.1.0": { + "integrity": "sha512-147y/6YNh+tlp6nd/2pWq38i9h6mz/EuQ6njIrmW8D1BS5nCqs0P6DG+m6zTGnNz5I+uhZ0SHxBs9BsPrwcKDA==" + }, + "y18n@5.0.8": { + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==" + }, + "yallist@3.1.1": { + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" + }, + "yallist@5.0.0": { + "integrity": "sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==" + }, + "yaml-language-server@1.19.2_ajv@8.18.0": { + "integrity": "sha512-9F3myNmJzUN/679jycdMxqtydPSDRAarSj3wPiF7pchEPnO9Dg07Oc+gIYLqXR4L+g+FSEVXXv2+mr54StLFOg==", + "dependencies": [ + "@vscode/l10n", + "ajv", + "ajv-draft-04", + "lodash", + "prettier@3.8.1", + "request-light@0.5.8", + "vscode-json-languageservice", + "vscode-languageserver", + "vscode-languageserver-textdocument", + "vscode-languageserver-types", + "vscode-uri", + "yaml@2.7.1" + ], + "bin": true + }, + "yaml@1.10.2": { + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==" + }, + "yaml@2.7.1": { + "integrity": "sha512-10ULxpnOCQXxJvBgxsn9ptjq6uviG/htZKk9veJGhlqn3w/DxQ631zFF+nlQXLwmImeS5amR2dl2U8sg6U9jsQ==", + "bin": true + }, + "yaml@2.8.2": { + "integrity": "sha512-mplynKqc1C2hTVYxd0PU2xQAc22TI1vShAYGksCCfxbn/dFwnHTNi1bvYsBTkhdUNtGIf5xNOg938rrSSYvS9A==", + "bin": true + }, + "yargs-parser@21.1.1": { + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==" + }, + "yargs@17.7.2": { + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dependencies": [ + "cliui", + "escalade", + "get-caller-file", + "require-directory", + "string-width@4.2.3", + "y18n", + "yargs-parser" + ] + }, + "yauzl@2.10.0": { + "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", + "dependencies": [ + "buffer-crc32", + "fd-slicer" + ] + }, + "yocto-queue@1.2.2": { + "integrity": "sha512-4LCcse/U2MHZ63HAJVE+v71o7yOdIe4cZ70Wpf8D/IyjDKYQLV5GD46B+hSTjJsvV5PztjvHoU580EftxjDZFQ==" + }, + "yocto-spinner@0.2.3": { + "integrity": "sha512-sqBChb33loEnkoXte1bLg45bEBsOP9N1kzQh5JZNKj/0rik4zAPTNSAVPj3uQAdc6slYJ0Ksc403G2XgxsJQFQ==", + "dependencies": [ + "yoctocolors" + ] + }, + "yoctocolors@2.1.2": { + "integrity": "sha512-CzhO+pFNo8ajLM2d2IW/R93ipy99LWjtwblvC1RsoSUMZgyLbYFr221TnSNT7GjGdYui6P459mw9JH/g/zW2ug==" + }, + "zimmerframe@1.1.4": { + "integrity": "sha512-B58NGBEoc8Y9MWWCQGl/gq9xBCe4IiKM0a2x7GZdQKOW5Exr8S1W24J6OgM1njK8xCRGvAJIL/MxXHf6SkmQKQ==" + }, + "zod-to-json-schema@3.25.1_zod@3.25.76": { + "integrity": "sha512-pM/SU9d3YAggzi6MtR4h7ruuQlqKtad8e9S0fmxcMi+ueAK5Korys/aWcV9LIIHTVbj01NdzxcnXSN+O74ZIVA==", + "dependencies": [ + "zod" + ] + }, + "zod-to-ts@1.2.0_typescript@5.9.3_zod@3.25.76": { + "integrity": "sha512-x30XE43V+InwGpvTySRNz9kB7qFU8DlyEy7BsSTCHPH1R0QasMmHWZDCzYm6bVXtj/9NNJAZF3jW8rzFvH5OFA==", + "dependencies": [ + "typescript@5.9.3", + "zod" + ] + }, + "zod@3.25.76": { + "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==" + }, + "zwitch@2.0.4": { + "integrity": "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==" + } + }, + "workspace": { + "packageJson": { + "dependencies": [ + "npm:@astrojs/check@~0.9.6", + "npm:@astrojs/rss@^4.0.14", + "npm:@astrojs/sitemap@^3.6.0", + "npm:@astrojs/svelte@7.2.3", + "npm:@astrojs/tailwind@^6.0.2", + "npm:@astrojs/ts-plugin@^1.10.6", + "npm:@biomejs/biome@2.2.5", + "npm:@expressive-code/core@~0.41.4", + "npm:@expressive-code/plugin-collapsible-sections@~0.41.4", + "npm:@expressive-code/plugin-line-numbers@~0.41.4", + "npm:@fontsource-variable/jetbrains-mono@^5.2.8", + "npm:@fontsource/roboto@^5.2.9", + "npm:@iconify-json/fa6-brands@^1.2.6", + "npm:@iconify-json/fa6-regular@^1.2.4", + "npm:@iconify-json/fa6-solid@^1.2.4", + "npm:@iconify-json/material-symbols@^1.2.50", + "npm:@iconify/svelte@^4.2.0", + "npm:@rollup/plugin-yaml@^4.1.2", + "npm:@swup/astro@^1.7.0", + "npm:@tailwindcss/typography@~0.5.19", + "npm:@types/hast@^3.0.4", + "npm:@types/markdown-it@^14.1.2", + "npm:@types/mdast@^4.0.4", + "npm:@types/sanitize-html@^2.16.0", + "npm:astro-expressive-code@~0.41.4", + "npm:astro-icon@^1.1.5", + "npm:astro@5.13.10", + "npm:hastscript@^9.0.1", + "npm:katex@~0.16.27", + "npm:markdown-it@^14.1.0", + "npm:mdast-util-to-string@4", + "npm:overlayscrollbars@^2.12.0", + "npm:pagefind@^1.4.0", + "npm:photoswipe@^5.4.4", + "npm:postcss-import@^16.1.1", + "npm:postcss-nesting@^13.0.2", + "npm:reading-time@^1.5.0", + "npm:rehype-autolink-headings@^7.1.0", + "npm:rehype-components@0.3", + "npm:rehype-katex@^7.0.1", + "npm:rehype-slug@6", + "npm:remark-directive-rehype@~0.4.2", + "npm:remark-directive@^3.0.1", + "npm:remark-github-admonitions-to-directives@^1.0.5", + "npm:remark-math@6", + "npm:remark-sectionize@^2.1.0", + "npm:sanitize-html@^2.17.0", + "npm:sharp@~0.34.5", + "npm:stylus@0.64", + "npm:svelte@^5.39.8", + "npm:tailwindcss@^3.4.19", + "npm:typescript@^5.9.3", + "npm:unist-util-visit@5" + ] + } + } +} diff --git a/docs/README.es.md b/docs/README.es.md new file mode 100644 index 0000000..8734530 --- /dev/null +++ b/docs/README.es.md @@ -0,0 +1,85 @@ +# 🍥Fuwari + +Un tema estático para blogs construido con [Astro](https://astro.build). + +[**🖥️ Demostración en Vivo (Vercel)**](https://fuwari.vercel.app) + +![Imagen de Vista Previa](https://raw.githubusercontent.com/saicaca/resource/main/fuwari/home.png) + +## ✨ Características + +- [x] Construido con [Astro](https://astro.build) y [Tailwind CSS](https://tailwindcss.com) +- [x] Animaciones suaves y transiciones de página +- [x] Modo claro / oscuro +- [x] Colores del tema y banner personalizables +- [x] Diseño responsivo +- [ ] Comentarios +- [x] Buscador +- [x] TOC (Tabla de Contenidos) + +## 👀 requiere + +- Node.js <= 22 +- pnpm <= 9 + +## 🚀 Cómo Usar 1 + +Inicializa el proyecto localmente usando [create-fuwari](https://github.com/L4Ph/create-fuwari). + +```sh +# npm +npm create fuwari@latest. + +# yarn +yarn create fuwari. + +# pnpm +pnpm create fuwari@latest + +# bun +bun create fuwari@latest + +# deno +deno run -A npm:create-fuwari@latest +``` + +1. Edita el archivo de configuración `src/config.ts` para personalizar tu blog. +2. Ejecuta `pnpm new-post ` para crear una nueva entrada y edítala en `src/content/posts/`. +3. Despliega tu blog en Vercel, Netlify, GitHub Pages, etc., siguiendo [las guías](https://docs.astro.build/en/guides/deploy/). Necesitas editar la configuración del sitio en `astro.config.mjs` antes del despliegue. + +## 🚀 Cómo Usar 2 + +1. [Genera un nuevo repositorio](https://github.com/saicaca/fuwari/generate) desde esta plantilla o haz un fork de este repositorio. +2. Para editar tu blog localmente, clona tu repositorio, ejecuta `pnpm install` y `pnpm add sharp` para instalar las dependencias. + - Instala [pnpm](https://pnpm.io) `npm install -g pnpm` si aún no lo tienes. +3. Edita el archivo de configuración `src/config.ts` para personalizar tu blog. +4. Ejecuta `pnpm new-post ` para crear una nueva entrada y edítala en `src/content/posts/`. +5. Despliega tu blog en Vercel, Netlify, GitHub Pages, etc., siguiendo [las guías](https://docs.astro.build/en/guides/deploy/). Necesitas editar la configuración del sitio en `astro.config.mjs` antes del despliegue. + +## ⚙️ Cabecera de las Entradas + +```yaml +--- +title: Mi Primer Post en el Blog +published: 2023-09-09 +description: Esta es la primera entrada de mi nuevo blog con Astro. +image: /images/cover.jpg +tags: [Foo, Bar] +category: Front-end +draft: false +--- +``` + +## 🧞 Comandos + +Todos los comandos se ejecutan desde la raíz del proyecto, desde una terminal: + +| Comando | Acción | +|:------------------------------------|:--------------------------------------------------| +| `pnpm install` y `pnpm add sharp` | Instala las dependencias | +| `pnpm dev` | Inicia el servidor de desarrollo local en `localhost:4321` | +| `pnpm build` | Compila tu web para producción en `./dist/` | +| `pnpm preview` | Previsualiza la web localmente, antes del despliegue | +| `pnpm new-post ` | Crea una nueva entrada | +| `pnpm astro ...` | Ejecuta comandos CLI como `astro add`, `astro check` | +| `pnpm astro --help` | Obtén ayuda para usar el CLI de Astro | diff --git a/docs/README.id.md b/docs/README.id.md new file mode 100644 index 0000000..0180568 --- /dev/null +++ b/docs/README.id.md @@ -0,0 +1,106 @@ +# 🍥 Fuwari + +Template blog statis yang dibangun dengan [Astro](https://astro.build). + +[**🖥️ Demo Langsung (Vercel)**](https://fuwari.vercel.app) + +![Gambar Pratinjau](https://raw.githubusercontent.com/saicaca/resource/main/fuwari/home.png) + +🌏 README dalam +[**中文**](https://github.com/saicaca/fuwari/blob/main/docs/README.zh-CN.md) / +[**日本語**](https://github.com/saicaca/fuwari/blob/main/docs/README.ja.md) / +[**한국어**](https://github.com/saicaca/fuwari/blob/main/docs/README.ko.md) / +[**Español**](https://github.com/saicaca/fuwari/blob/main/docs/README.es.md) / +[**ไทย**](https://github.com/saicaca/fuwari/blob/main/docs/README.th.md) / +[**Tiếng Việt**](https://github.com/saicaca/fuwari/blob/main/docs/README.vi.md) / +**Bahasa Indonesia (ini)** (Disediakan oleh komunitas, mungkin tidak selalu paling mutakhir) + +## ✨ Fitur + +- [x] Dibangun dengan [Astro](https://astro.build) dan [Tailwind CSS](https://tailwindcss.com) +- [x] Animasi dan transisi halaman yang halus +- [x] Mode terang / gelap +- [x] Warna tema & banner yang bisa dikustomisasi +- [x] Desain responsif +- [x] Fitur pencarian dengan [Pagefind](https://pagefind.app/) +- [x] [Fitur markdown tambahan](#-markdown-sintaks-ekstensi) +- [x] Daftar isi (Table of Contents) +- [x] RSS feed + +## 🚀 Memulai + +1. Buat repositori blog kamu: + - [Generate repositori baru](https://github.com/saicaca/fuwari/generate) dari template ini atau fork repositori ini. + - Atau jalankan salah satu perintah berikut: + ```sh + # npm + npm create fuwari@latest. + + # yarn + yarn create fuwari. + + # pnpm + pnpm create fuwari@latest + + # bun + bun create fuwari@latest + + # deno + deno run -A npm:create-fuwari@latest + ``` +2. Untuk mengedit blog secara lokal, klon repositori kamu, jalankan `pnpm install` untuk instalasi dependensi. + - Install [pnpm](https://pnpm.io) `npm install -g pnpm` jika belum punya. +3. Edit file konfigurasi `src/config.ts` untuk menyesuaikan blog. +4. Jalankan `pnpm new-post ` untuk membuat postingan baru dan edit di `src/content/posts/`. +5. Deploy blog ke Vercel, Netlify, GitHub Pages, dll. sesuai [panduan](https://docs.astro.build/en/guides/deploy/). Jangan lupa edit konfigurasi situs di `astro.config.mjs` sebelum deploy. + +## 📝 Frontmatter Postingan + +```yaml +--- +title: Judul Postingan Pertama Saya +published: 2023-09-09 +description: Ini adalah postingan pertama blog Astro saya. +image: ./cover.jpg +tags: [Foo, Bar] +category: Front-end +draft: false +lang: id # Isi hanya jika bahasa postingan berbeda dari bahasa default di `config.ts` +--- +``` + +## 🧩 Markdown Sintaks Ekstensi + +Selain dukungan default Astro untuk [GitHub Flavored Markdown](https://github.github.com/gfm/), terdapat beberapa fitur tambahan: + +- Admonisi ([Pratinjau & Cara Pakai](https://fuwari.vercel.app/posts/markdown-extended/#admonitions)) +- Kartu repositori GitHub ([Pratinjau & Cara Pakai](https://fuwari.vercel.app/posts/markdown-extended/#github-repository-cards)) +- Kode blok ekspresif lewat Expressive Code ([Pratinjau](https://fuwari.vercel.app/posts/expressive-code/) / [Dokumentasi](https://expressive-code.com/)) + +## ⚡ Perintah + +Semua perintah dijalankan dari root proyek, via terminal: + +| Perintah | Aksi | +|:-----------------------------|:----------------------------------------------------------| +| `pnpm install` | Instalasi dependensi | +| `pnpm dev` | Menjalankan server dev lokal di `localhost:4321` | +| `pnpm build` | Build untuk produksi ke folder `./dist/` | +| `pnpm preview` | Pratinjau hasil build sebelum deploy | +| `pnpm check` | Cek error atau masalah di kode | +| `pnpm format` | Format kode dengan Biome | +| `pnpm new-post ` | Membuat postingan baru | +| `pnpm astro ...` | Jalankan perintah CLI seperti `astro add`, `astro check` | +| `pnpm astro --help` | Bantuan menggunakan Astro CLI | + +## ✏️ Kontribusi + +Lihat [Panduan Kontribusi](https://github.com/saicaca/fuwari/blob/main/CONTRIBUTING.md) untuk detail tentang cara berkontribusi ke proyek ini. + +## 📄 Lisensi + +Proyek ini dilisensikan di bawah MIT License. + +--- + +> Dokumentasi ini tersedia dalam Bahasa Indonesia. Untuk bahasa lain, lihat README di direktori docs. diff --git a/docs/README.ja.md b/docs/README.ja.md new file mode 100644 index 0000000..87a3d7f --- /dev/null +++ b/docs/README.ja.md @@ -0,0 +1,85 @@ +# 🍥Fuwari + +[Astro](https://astro.build) で構築された静的ブログテンプレート + +[**🖥️ライブデモ (Vercel)**](https://fuwari.vercel.app) + +![Preview Image](https://raw.githubusercontent.com/saicaca/resource/main/fuwari/home.png) + +## ✨ 特徴 + +- [x] [Astro](https://astro.build) 及び [Tailwind CSS](https://tailwindcss.com) で構築 +- [x] スムーズなアニメーションとページ遷移 +- [x] ライト/ダークテーマ対応 +- [x] カスタマイズ可能なテーマカラーとバナー +- [x] レスポンシブデザイン +- [ ] コメント機能 +- [x] 検索機能 +- [x] 目次 + +## 👀 以下が必要 + +- Node.js <= 22 +- pnpm <= 9 + +## 🚀 使用方法 1 + +[create-fuwari](https://github.com/L4Ph/create-fuwari)を使用して、ローカルにプロジェクトを初期化します。 + +```sh +# npm +npm create fuwari@latest + +# yarn +yarn create fuwari + +# pnpm +pnpm create fuwari@latest + +# bun +bun create fuwari@latest + +# deno +deno run -A npm:create-fuwari@latest +``` + +1. `src/config.ts` ファイルを編集する事でブログを自分好みにカスタマイズ出来ます。 +2. `pnpm new-post ` で新しい記事を作成し、`src/content/posts/`.フォルダ内で編集します。 +3. 作成したブログをVercel、Netlify、GitHub Pagesなどにデプロイするには[ガイド](https://docs.astro.build/ja/guides/deploy/)に従って下さい。加えて、別途デプロイを行う前に `astro.config.mjs` を編集してサイト構成を変更する必要があります。 + +## 🚀 使用方法 2 + +1. [テンプレート](https://github.com/saicaca/fuwari/generate)から新しいリポジトリを作成するかCloneをします。 +2. ブログをローカルで編集するには、リポジトリをクローンした後、`pnpm install` と `pnpm add sharp` を実行して依存関係をインストールします。 + - [pnpm](https://pnpm.io) がインストールされていない場合は `npm install -g pnpm` で導入可能です。 +3. `src/config.ts` ファイルを編集する事でブログを自分好みにカスタマイズ出来ます。 +4. `pnpm new-post ` で新しい記事を作成し、`src/content/posts/`.フォルダ内で編集します。 +5. 作成したブログをVercel、Netlify、GitHub Pagesなどにデプロイするには[ガイド](https://docs.astro.build/ja/guides/deploy/)に従って下さい。加えて、別途デプロイを行う前に `astro.config.mjs` を編集してサイト構成を変更する必要があります。 + +## ⚙️ 記事のフロントマター + +```yaml +--- +title: My First Blog Post +published: 2023-09-09 +description: This is the first post of my new Astro blog. +image: /images/cover.jpg +tags: [Foo, Bar] +category: Front-end +draft: false +--- +``` + +## 🧞 コマンド + +すべてのコマンドは、ターミナルでプロジェクトのルートから実行する必要があります: + +| Command | Action | +|:------------------------------------|:--------------------------------------------| +| `pnpm install` AND `pnpm add sharp` | 依存関係のインストール | +| `pnpm dev` | `localhost:4321` で開発用ローカルサーバーを起動 | +| `pnpm build` | `./dist/` にビルド内容を出力 | +| `pnpm preview` | デプロイ前の内容をローカルでプレビュー | +| `pnpm new-post ` | 新しい投稿を作成 | +| `pnpm astro ...` | `astro add`, `astro check` の様なコマンドを実行する際に使用 | +| `pnpm astro --help` | Astro CLIのヘルプを表示 | diff --git a/docs/README.ko.md b/docs/README.ko.md new file mode 100644 index 0000000..f561140 --- /dev/null +++ b/docs/README.ko.md @@ -0,0 +1,82 @@ +# 🍥Fuwari + +[Astro](https://astro.build)로 구축된 정적 블로그 템플릿입니다. + +[**🖥️미리보기 (Vercel)**](https://fuwari.vercel.app) + +![Preview Image](https://raw.githubusercontent.com/saicaca/resource/main/fuwari/home.png) + +## ✨ 특징 + +- [x] [Astro](https://astro.build) 및 [Tailwind CSS](https://tailwindcss.com)로 구축됨 +- [x] 부드러운 애니메이션 및 페이지 전환 +- [x] 라이트 모드 / 다크 모드 +- [x] 사용자 정의 가능한 테마 색상 및 배너 +- [x] 반응형 디자인 +- [x] [Pagefind](https://pagefind.app/)를 이용한 검색 기능 +- [x] [Markdown 확장 기능](https://github.com/saicaca/fuwari?tab=readme-ov-file#-markdown-extended-syntax) +- [x] 목차 +- [x] RSS 피드 + +## 🚀 시작하기 +1. 블로그 저장소를 생성하세요: + - 이 템플릿에서 [새 저장소를 생성](https://github.com/saicaca/fuwari/generate)하거나 이 저장소를 포크하세요. + - 또는 다음 명령어 중 하나를 실행하세요: + ```sh + npm create fuwari@latest + yarn create fuwari + pnpm create fuwari@latest + bun create fuwari@latest + deno run -A npm:create-fuwari@latest + ``` +2. 로컬에서 블로그를 수정하려면, 저장소를 복제하고 `pnpm install`을 실행하여 종속성을 설치하세요. + - [pnpm](https://pnpm.io)이 설치되어 있지 않다면 `npm install -g pnpm`을 실행하여 설치하세요. +3. `src/config.ts`설정 파일을 수정하여 블로그를 커스터마이징하세요. +4. `pnpm new-post `을 실행하여 새 게시물을 만들고 `src/content/posts/`에서 수정하세요. +5. [가이드](https://docs.astro.build/en/guides/deploy/)에 따라 블로그를 Vercel, Netlify, Github Pages 등에 배포하세요. 배포하기 전에 `astro.config.mjs`에서 사이트 구성을 수정해야 합니다. + +## ⚙️ 게시물의 머리말 설정 + +```yaml +--- +title: 내 첫 블로그 게시물 +published: 2023-09-09 +description: 내 새로운 Astro 블로그의 첫 번째 게시물입니다! +image: ./cover.jpg +tags: [Foo, Bar] +category: Front-end +draft: false +lang: jp # 게시물의 언어가 `config.ts`의 사이트 언어와 다른 경우에만 설정합니다. +--- +``` +## 🧩 마크다운 확장 구문 +Astro의 기본 [GitHub Flavored Markdown](https://github.github.com/gfm/) 지원 외에도 몇 가지 추가적인 마크다운 기능이 포함되어 있습니다. +- Admonitions ([미리보기 및 사용법](https://fuwari.vercel.app/posts/markdown-extended/#admonitions)) +- GitHub 저장소 카드 ([미리보기 및 사용법](https://fuwari.vercel.app/posts/markdown-extended/#github-repository-cards)) +- Expressive Code를 사용한 향상된 코드 블록 ([미리보기](https://fuwari.vercel.app/posts/expressive-code/) / [문서](https://expressive-code.com/)) + + + +## ⚡ 명령어 + +모든 명령어는 프로젝트 최상단, 터미널에서 실행됩니다: + +| Command | Action | +|:------------------------------------|:-------------------------------------------------| +| `pnpm install` | 종속성을 설치합니다. | +| `pnpm dev` | `localhost:4321`에서 로컬 개발 서버를 시작합니다. | +| `pnpm build` | `./dist/`에 프로덕션 사이트를 구축합니다. | +| `pnpm check` | 코드에서 오류를 확인합니다. | +| `pnpm format` | Biome을 사용하여 코드를 포멧합니다. | +| `pnpm preview` | 배포하기 전에 로컬에서 빌드 미리보기 | +| `pnpm new-post ` | 새 게시물 작성 | +| `pnpm astro ...` | `astro add`, `astro check`와 같은 CLI 명령어 실행 | +| `pnpm astro --help` | Astro CLI를 사용하여 도움 받기 | + +## ✏️ 기여 +이 프로젝트에 기여하는 방법에 대한 자세한 내용은 [기여 가이드](https://github.com/saicaca/fuwari/blob/main/CONTRIBUTING.md)를 확인하세요. + +## 📄 라이선스 +이 프로젝트는 MIT 라이선스에 따라 라이선스가 부여됩니다. + +[![FOSSA Status](https://app.fossa.com/api/projects/git%2Bgithub.com%2Fsaicaca%2Ffuwari.svg?type=large&issueType=license)](https://app.fossa.com/projects/git%2Bgithub.com%2Fsaicaca%2Ffuwari?ref=badge_large&issueType=license) \ No newline at end of file diff --git a/docs/README.th.md b/docs/README.th.md new file mode 100644 index 0000000..5da83db --- /dev/null +++ b/docs/README.th.md @@ -0,0 +1,84 @@ +# 🍥Fuwari + +แม่แบบสำหรับเว็บบล็อกแบบ static สร้างด้วย [Astro](https://astro.build) + +[**🖥️ ตัวอย่างการใช้งานจริง (Vercel)**](https://fuwari.vercel.app) + +![ภาพตัวอย่าง](https://raw.githubusercontent.com/saicaca/resource/main/fuwari/home.png) + +## ✨ คุณสมบัติ + +- [x] สร้างด้วย [Astro](https://astro.build) และ [Tailwind CSS](https://tailwindcss.com) +- [x] มีอนิเมชั่นและการเปลี่ยนหน้าอย่างลื่นไหล +- [x] โหมดสว่าง / โหมดมืด +- [x] ปรับแต่งสีธีมและแบนเนอร์ได้ +- [x] Responsive design (หน้าตาเว็บปรับเปลี่ยนตามขนาดจอ) +- [x] ฟังก์ชันการค้นหา ขับเคลื่อนด้วย [Pagefind](https://pagefind.app/) +- [x] [คุณสมบัติเพิ่มเติมสำหรับมาร์กดาวน์](https://github.com/saicaca/fuwari/blob/main/docs/README.th.md#-markdown-extended-syntax) +- [x] สารบัญ +- [x] RSS feed + +## 🚀 เริ่มต้นใช้งาน + +1. สร้าง repository ใหม่สำหรับบล็อกของคุณ: + - [Generate repository ใหม่](https://github.com/saicaca/fuwari/generate) ขึ้นมาจากแม่แบบนี้ หรือจะ fork repository นี้ก็ได้ + - หรือจะสร้างโดยการเลือกรันคำสั่งต่อไปนี้ คำสั่งใดคำสั่งหนึ่ง: + ```sh + npm create fuwari@latest + yarn create fuwari + pnpm create fuwari@latest + bun create fuwari@latest + deno run -A npm:create-fuwari@latest + ``` +2. เริ่มแก้ไขบล็อกของคุณแบบ local โดยการ clone repository ของคุณ (จากข้อ 1) ไว้ในเครื่องของคุณ แล้วรันคำสั่ง `pnpm install` เพื่อติดตั้ง dependencies ที่จำเป็น + - ติดตั้ง [pnpm](https://pnpm.io) ด้วยคำสั่ง `npm install -g pnpm` ก่อน ถ้ายังไม่เคยติดตั้ง +3. แก้ไขไฟล์การตั้งค่า `src/config.ts` เพื่อปรับแต่งบล็อกของคุณ +4. รันคำสั่ง `pnpm new-post ` เพื่อสร้างโพสต์ใหม่ใน `src/content/posts/` และแก้ไขไฟล์โพสต์นั้น ๆ ให้สมบูรณ์ +5. Deploy เว็บบล็อกของคุณไปยัง Vercel, Netlify, GitHub Pages หรือบริการอื่น ๆ โดยอ้างอิงวิธีการจาก[คู่มือนี้](https://docs.astro.build/en/guides/deploy/) อย่าลืมแก้ไขการตั้งค่าเว็บไซต์ในไฟล์ `astro.config.mjs` ก่อนที่คุณจะ deploy เว็บ + +## 📝 Frontmatter (ส่วนหัวไฟล์) ของโพสต์ + +```yaml +--- +title: โพสต์แรกของฉัน +published: 2023-09-09 +description: นี่คือโพสต์แรกของเว็บบล็อก Astro อันใหม่ของฉัน +image: ./cover.jpg +tags: [Foo, Bar] +category: Front-end +draft: false +lang: jp # เขียนค่านี้เมื่อภาษาของโพสต์นั้น ๆ แตกต่างจากภาษาของเว็บไซต์ที่ตั้งค่าไว้ใน `config.ts` เท่านั้น +--- +``` + +## 🧩 Markdown Extended Syntax + +เดิมที Astro มีการสนับสนุน[ภาษามาร์กดาวน์แบบของ GitHub](https://github.github.com/gfm/) ไว้อยู่แล้ว แต่ Fuwari ได้เพิ่มเติมคุณสมบัติพิเศษอื่น ๆ เข้าไปอีก: + +- Admonitions หรือ กล่องข้อมูลพิเศษ ([ดูตัวอย่างและการใช้งาน](https://fuwari.vercel.app/posts/markdown-extended/#admonitions)) +- การ์ด GitHub Repository ([ดูตัวอย่างและการใช้งาน](https://fuwari.vercel.app/posts/markdown-extended/#github-repository-cards)) +- บล็อกโค้ดขั้นสูง ด้วย Expressive Code ([ดูตัวอย่าง](https://fuwari.vercel.app/posts/expressive-code/) / [เอกสารประกอบ](https://expressive-code.com/)) + +## ⚡ คำสั่ง + +คำสั่งที่รันได้ใน terminal จาก root ของโปรเจกต์: + +| คำสั่ง | การทำงาน | +|:---------------------------|:-------------------------------------------------------| +| `pnpm install` | ติดตั้ง dependencies | +| `pnpm dev` | เปิดเซิร์ฟเวอร์สำหรับการพัฒนาแบบ local ที่ `localhost:4321` | +| `pnpm build` | Build เว็บไซต์สำหรับใช้งานจริงไปยังโฟลเดอร์ `./dist/` | +| `pnpm preview` | ดูตัวอย่าง build ของคุณแบบ local ก่อนที่จะ deploy จริง | +| `pnpm check` | ดำเนินการตรวจสอบหาข้อผิดพลาดในโค้ดของคุณ | +| `pnpm format` | จัดรูปแบบโค้ดของคุณด้วย Biome | +| `pnpm new-post ` | สร้างโพสต์ใหม่ | +| `pnpm astro ...` | รันคำสั่ง CLI เช่น `astro add`, `astro check` | +| `pnpm astro --help` | แสดงวิธีใช้งาน Astro CLI | + +## ✏️ การมีส่วนร่วม + +กรุณาอ่าน [แนวทางการมีส่วนร่วม](https://github.com/saicaca/fuwari/blob/main/CONTRIBUTING.md) สำหรับรายละเอียดวิธีการมีส่วนร่วมในโปรเจกต์นี้ + +## 📄 สัญญาอนุญาต + +โปรเจกต์นี้เผยแพร่ภายใต้สัญญาอนุญาตแบบ MIT License diff --git a/docs/README.vi.md b/docs/README.vi.md new file mode 100644 index 0000000..90dd2e6 --- /dev/null +++ b/docs/README.vi.md @@ -0,0 +1,84 @@ +# 🍥Fuwari + +Một mẫu blog tĩnh được xây bằng [Astro](https://astro.build). + +[**🖥️ Xem bản dùng thử (Vercel)**](https://fuwari.vercel.app) + +![Hình ảnh xem trước](https://raw.githubusercontent.com/saicaca/resource/main/fuwari/home.png) + +## ✨ Tính năng + +- [x] Được xây dựng bằng [Astro](https://astro.build) và [Tailwind CSS](https://tailwindcss.com) +- [x] Có hoạt ảnh đổi chuyển trang mượt mà +- [x] Chế độ sáng / tối +- [x] Màu sắc và biểu ngữ có thể tùy chỉnh được +- [x] Thiết kế nhanh nhạy +- [x] Có chức năng tìm kiếm với [Pagefind](https://pagefind.app/) +- [x] [Có các tính năng mở rộng của Markdown](https://github.com/saicaca/fuwari?tab=readme-ov-file#-markdown-extended-syntax) +- [x] Có mục lục +- [x] Nguồn cấp dữ liệu RSS + +## 🚀 Bắt đầu + +1. Tạo kho lưu trữ blog của bạn: + - [Tạo một kho lưu trữ mới](https://github.com/saicaca/fuwari/generate) từ mẫu này hoặc fork kho lưu trữ này. + - Hoặc chạy một trong các lệnh sau: + ```sh + npm create fuwari@latest + yarn create fuwari + pnpm create fuwari@latest + bun create fuwari@latest + deno run -A npm:create-fuwari@latest + ``` +2. Để chỉnh sửa blog của bạn trên máy cục bộ, hãy clone kho lưu trữ của bạn, chạy lệnh `pnpm install` để cài đặt các phụ thuộc.. + - Cài đặt [pnpm](https://pnpm.io) `npm install -g pnpm` nếu chưa có. +3. Chỉnh sửa tệp cấu hình `src/config.ts` để tùy chỉnh blog của bạn. +4. Chạy `pnpm new-post ` để tạo một bài viết mới và chỉnh sửa nó trong `src/content/posts/`. +5. Triển khai blog của bạn lên Vercel, Netlify, GitHub Pages, etc. theo [chỉ dẫn](https://docs.astro.build/en/guides/deploy/). Bạn cần chỉnh sửa cấu hình trang web trong `astro.config.mjs` trước khi triển khai. + +## 📝 Tiêu đề đầy đủ của bài viết + +```yaml +--- +title: Blog đầu tiên của mình +published: 2023-09-09 +description: Đây là bài viết đầu tiên vủa mình trên trang blog tạo bằng Astro này. +image: ./cover.jpg +tags: [Foo, Bar] +category: Front-end +draft: false +lang: jp # Chỉ đặt nếu ngôn ngữ của bài viết khác với ngôn ngữ của trang web trong `config.ts` +--- +``` + +## 🧩 Cú pháp Markdown mở rộng + +Ngoài việc Astro đã có hỗ trợ mặc định cho [Markdown vị Github](https://github.github.com/gfm/), một số tính năng Markdown khác cũng đã được bổ sung: + +- Chêm xen ([Xem trước và Cách sử dụng](https://fuwari.vercel.app/posts/markdown-extended/#admonitions)) +- Thẻ hiển thị kho lưu trữ GitHub ([Xem trước và Cách sử dụng](https://fuwari.vercel.app/posts/markdown-extended/#github-repository-cards)) +- Các khối mã nâng cao với Expressive Code ([Xem trước](https://fuwari.vercel.app/posts/expressive-code/) / [Tài liệu](https://expressive-code.com/)) + +## ⚡ Lệnh + +Tất cả các lệnh được chạy từ thư mục gốc của dự án, từ một bảng điều khiển: + +| Lệnh | Mục đích | +|:---------------------------|:----------------------------------------------------| +| `pnpm install` | Cài đặt các phụ thuộc | +| `pnpm dev` | Khởi động máy chủ cục bộ tại `localhost:4321` | +| `pnpm build` | Xây dựng trang web của bạn vào `./dist/` | +| `pnpm preview` | Xem trước bản web cục bộ của bạn, trước khi triển khai | +| `pnpm check` | Chạy kiểm tra lỗi trong mã của bạn | +| `pnpm format` | Định dạng mã của bạn bằng Biome | +| `pnpm new-post ` | Tạo một bài viết mới | +| `pnpm astro ...` | Chạy các lệnh CLI như `astro add`, `astro check` | +| `pnpm astro --help` | Nhận trợ giúp sử dụng Astro CLI | + +## ✏️ Đóng góp + +Xem [Hướng dẫn đóng góp](https://github.com/saicaca/fuwari/blob/main/CONTRIBUTING.md) để biết thêm chi tiết về cách đóng góp cho dự án này. + +## 📄 Giấy phép + +Dự án này đã được cấp Giấy phép MIT. diff --git a/docs/README.zh-CN.md b/docs/README.zh-CN.md new file mode 100644 index 0000000..68fdd2b --- /dev/null +++ b/docs/README.zh-CN.md @@ -0,0 +1,86 @@ +# 🍥Fuwari + +基于 [Astro](https://astro.build) 开发的静态博客模板。 + +[**🖥️在线预览(Vercel)**](https://fuwari.vercel.app) + +![Preview Image](https://raw.githubusercontent.com/saicaca/resource/main/fuwari/home.png) + +## ✨ 功能特性 + +- [x] 基于 Astro 和 Tailwind CSS 开发 +- [x] 流畅的动画和页面过渡 +- [x] 亮色 / 暗色模式 +- [x] 自定义主题色和横幅图片 +- [x] 响应式设计 +- [ ] 评论 +- [x] 搜索 +- [x] 文内目录 + +## 👀 要求 + +- Node.js <= 22 +- pnpm <= 9 + +## 🚀 使用方法 1 + +使用 [create-fuwari](https://github.com/L4Ph/create-fuwari) 在本地初始化项目。 + +```sh +# npm +npm create fuwari@latest + +# yarn +yarn create fuwari + +# pnpm +pnpm create fuwari@latest + +# bun +bun create fuwari@latest + +# deno +deno run -A npm:create-fuwari@latest +``` + +1. 通过配置文件 `src/config.ts` 自定义博客 +2. 执行 `pnpm new-post ` 创建新文章,并在 `src/content/posts/` 目录中编辑 +3. 参考[官方指南](https://docs.astro.build/zh-cn/guides/deploy/)将博客部署至 Vercel, Netlify, GitHub Pages 等;部署前需编辑 `astro.config.mjs` 中的站点设置。 + +## 🚀 使用方法 2 + +1. 使用此模板[生成新仓库](https://github.com/saicaca/fuwari/generate)或 Fork 此仓库 +2. 进行本地开发,Clone 新的仓库,执行 `pnpm install` 和 `pnpm add sharp` 以安装依赖 + - 若未安装 [pnpm](https://pnpm.io),执行 `npm install -g pnpm` +3. 通过配置文件 `src/config.ts` 自定义博客 +4. 执行 `pnpm new-post ` 创建新文章,并在 `src/content/posts/` 目录中编辑 +5. 参考[官方指南](https://docs.astro.build/zh-cn/guides/deploy/)将博客部署至 Vercel, Netlify, GitHub Pages 等;部署前需编辑 `astro.config.mjs` 中的站点设置。 + +## ⚙️ 文章 Frontmatter + +```yaml +--- +title: My First Blog Post +published: 2023-09-09 +description: This is the first post of my new Astro blog. +image: ./cover.jpg +tags: [Foo, Bar] +category: Front-end +draft: false +lang: jp # 仅当文章语言与 `config.ts` 中的网站语言不同时需要设置 +--- +``` + +## 🧞 指令 + +下列指令均需要在项目根目录执行: + +| Command | Action | +|:----------------------------------|:----------------------------------| +| `pnpm install` 并 `pnpm add sharp` | 安装依赖 | +| `pnpm dev` | 在 `localhost:4321` 启动本地开发服务器 | +| `pnpm build` | 构建网站至 `./dist/` | +| `pnpm preview` | 本地预览已构建的网站 | +| `pnpm new-post ` | 创建新文章 | +| `pnpm astro ...` | 执行 `astro add`, `astro check` 等指令 | +| `pnpm astro --help` | 显示 Astro CLI 帮助 | diff --git a/frontmatter.json b/frontmatter.json new file mode 100644 index 0000000..a377ad9 --- /dev/null +++ b/frontmatter.json @@ -0,0 +1,67 @@ +{ + "$schema": "https://frontmatter.codes/frontmatter.schema.json", + "frontMatter.framework.id": "astro", + "frontMatter.preview.host": "http://localhost:4321", + "frontMatter.content.publicFolder": "public", + "frontMatter.content.pageFolders": [ + { + "title": "posts", + "path": "[[workspace]]/src/content/posts" + } + ], + "frontMatter.taxonomy.contentTypes": [ + { + "name": "default", + "pageBundle": true, + "previewPath": "'blog'", + "filePrefix": null, + "clearEmpty": true, + "fields": [ + { + "title": "title", + "name": "title", + "type": "string", + "single": true + }, + { + "title": "description", + "name": "description", + "type": "string" + }, + { + "title": "published", + "name": "published", + "type": "datetime", + "default": "{{now}}", + "isPublishDate": true + }, + { + "title": "preview", + "name": "image", + "type": "image", + "isPreviewImage": true + }, + { + "title": "tags", + "name": "tags", + "type": "list" + }, + { + "title": "category", + "name": "category", + "type": "string" + }, + { + "title": "draft", + "name": "draft", + "type": "boolean" + }, + { + "title": "language", + "name": "language", + "type": "string" + } + ] + } + ] +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..79c0edf --- /dev/null +++ b/package.json @@ -0,0 +1,76 @@ +{ + "name": "fuwari", + "type": "module", + "version": "0.0.1", + "scripts": { + "dev": "astro dev", + "start": "astro dev", + "check": "astro check", + "build": "astro build && pagefind --site dist", + "preview": "astro preview", + "astro": "astro", + "type-check": "tsc --noEmit --isolatedDeclarations", + "new-post": "node scripts/new-post.js", + "format": "biome format --write ./src", + "lint": "biome check --write ./src", + "preinstall": "npx only-allow pnpm" + }, + "dependencies": { + "@astrojs/check": "^0.9.6", + "@astrojs/rss": "^4.0.14", + "@astrojs/sitemap": "^3.6.0", + "@astrojs/svelte": "7.2.3", + "@astrojs/tailwind": "^6.0.2", + "@expressive-code/core": "^0.41.4", + "@expressive-code/plugin-collapsible-sections": "^0.41.4", + "@expressive-code/plugin-line-numbers": "^0.41.4", + "@fontsource-variable/jetbrains-mono": "^5.2.8", + "@fontsource/roboto": "^5.2.9", + "@iconify-json/fa6-brands": "^1.2.6", + "@iconify-json/fa6-regular": "^1.2.4", + "@iconify-json/fa6-solid": "^1.2.4", + "@iconify-json/material-symbols": "^1.2.50", + "@iconify/svelte": "^4.2.0", + "@swup/astro": "^1.7.0", + "@tailwindcss/typography": "^0.5.19", + "astro": "5.13.10", + "astro-expressive-code": "^0.41.4", + "astro-icon": "^1.1.5", + "hastscript": "^9.0.1", + "katex": "^0.16.27", + "markdown-it": "^14.1.0", + "mdast-util-to-string": "^4.0.0", + "overlayscrollbars": "^2.12.0", + "pagefind": "^1.4.0", + "photoswipe": "^5.4.4", + "reading-time": "^1.5.0", + "rehype-autolink-headings": "^7.1.0", + "rehype-components": "^0.3.0", + "rehype-katex": "^7.0.1", + "rehype-slug": "^6.0.0", + "remark-directive": "^3.0.1", + "remark-directive-rehype": "^0.4.2", + "remark-github-admonitions-to-directives": "^1.0.5", + "remark-math": "^6.0.0", + "remark-sectionize": "^2.1.0", + "sanitize-html": "^2.17.0", + "sharp": "^0.34.5", + "stylus": "^0.64.0", + "svelte": "^5.39.8", + "tailwindcss": "^3.4.19", + "typescript": "^5.9.3", + "unist-util-visit": "^5.0.0" + }, + "devDependencies": { + "@astrojs/ts-plugin": "^1.10.6", + "@biomejs/biome": "2.2.5", + "@rollup/plugin-yaml": "^4.1.2", + "@types/hast": "^3.0.4", + "@types/markdown-it": "^14.1.2", + "@types/mdast": "^4.0.4", + "@types/sanitize-html": "^2.16.0", + "postcss-import": "^16.1.1", + "postcss-nesting": "^13.0.2" + }, + "packageManager": "pnpm@9.14.4" +} diff --git a/pagefind.yml b/pagefind.yml new file mode 100644 index 0000000..fdb9528 --- /dev/null +++ b/pagefind.yml @@ -0,0 +1,6 @@ +exclude_selectors: + - "span.katex" + - "span.katex-display" + - "[data-pagefind-ignore]" + - ".search-panel" + - "#search-panel" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml new file mode 100644 index 0000000..a958251 --- /dev/null +++ b/pnpm-lock.yaml @@ -0,0 +1,11863 @@ +lockfileVersion: '9.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +importers: + + .: + dependencies: + '@astrojs/check': + specifier: ^0.9.6 + version: 0.9.6(prettier@3.7.4)(typescript@5.9.3) + '@astrojs/rss': + specifier: ^4.0.14 + version: 4.0.14 + '@astrojs/sitemap': + specifier: ^3.6.0 + version: 3.6.0 + '@astrojs/svelte': + specifier: 7.2.3 + version: 7.2.3(@types/node@24.5.2)(astro@5.13.10(@types/node@24.5.2)(jiti@1.21.7)(lightningcss@1.29.3)(rollup@2.79.2)(sass@1.80.4)(stylus@0.64.0)(terser@5.43.1)(typescript@5.9.3)(yaml@2.8.2))(jiti@1.21.7)(lightningcss@1.29.3)(sass@1.80.4)(stylus@0.64.0)(svelte@5.39.8)(terser@5.43.1)(typescript@5.9.3)(yaml@2.8.2) + '@astrojs/tailwind': + specifier: ^6.0.2 + version: 6.0.2(astro@5.13.10(@types/node@24.5.2)(jiti@1.21.7)(lightningcss@1.29.3)(rollup@2.79.2)(sass@1.80.4)(stylus@0.64.0)(terser@5.43.1)(typescript@5.9.3)(yaml@2.8.2))(tailwindcss@3.4.19(yaml@2.8.2)) + '@expressive-code/core': + specifier: ^0.41.4 + version: 0.41.4 + '@expressive-code/plugin-collapsible-sections': + specifier: ^0.41.4 + version: 0.41.4 + '@expressive-code/plugin-line-numbers': + specifier: ^0.41.4 + version: 0.41.4 + '@fontsource-variable/jetbrains-mono': + specifier: ^5.2.8 + version: 5.2.8 + '@fontsource/roboto': + specifier: ^5.2.9 + version: 5.2.9 + '@iconify-json/fa6-brands': + specifier: ^1.2.6 + version: 1.2.6 + '@iconify-json/fa6-regular': + specifier: ^1.2.4 + version: 1.2.4 + '@iconify-json/fa6-solid': + specifier: ^1.2.4 + version: 1.2.4 + '@iconify-json/material-symbols': + specifier: ^1.2.50 + version: 1.2.50 + '@iconify/svelte': + specifier: ^4.2.0 + version: 4.2.0(svelte@5.39.8) + '@swup/astro': + specifier: ^1.7.0 + version: 1.7.0(@types/babel__core@7.20.5) + '@tailwindcss/typography': + specifier: ^0.5.19 + version: 0.5.19(tailwindcss@3.4.19(yaml@2.8.2)) + astro: + specifier: 5.13.10 + version: 5.13.10(@types/node@24.5.2)(jiti@1.21.7)(lightningcss@1.29.3)(rollup@2.79.2)(sass@1.80.4)(stylus@0.64.0)(terser@5.43.1)(typescript@5.9.3)(yaml@2.8.2) + astro-expressive-code: + specifier: ^0.41.4 + version: 0.41.4(astro@5.13.10(@types/node@24.5.2)(jiti@1.21.7)(lightningcss@1.29.3)(rollup@2.79.2)(sass@1.80.4)(stylus@0.64.0)(terser@5.43.1)(typescript@5.9.3)(yaml@2.8.2)) + astro-icon: + specifier: ^1.1.5 + version: 1.1.5 + hastscript: + specifier: ^9.0.1 + version: 9.0.1 + katex: + specifier: ^0.16.27 + version: 0.16.27 + markdown-it: + specifier: ^14.1.0 + version: 14.1.0 + mdast-util-to-string: + specifier: ^4.0.0 + version: 4.0.0 + overlayscrollbars: + specifier: ^2.12.0 + version: 2.12.0 + pagefind: + specifier: ^1.4.0 + version: 1.4.0 + photoswipe: + specifier: ^5.4.4 + version: 5.4.4 + reading-time: + specifier: ^1.5.0 + version: 1.5.0 + rehype-autolink-headings: + specifier: ^7.1.0 + version: 7.1.0 + rehype-components: + specifier: ^0.3.0 + version: 0.3.0 + rehype-katex: + specifier: ^7.0.1 + version: 7.0.1 + rehype-slug: + specifier: ^6.0.0 + version: 6.0.0 + remark-directive: + specifier: ^3.0.1 + version: 3.0.1 + remark-directive-rehype: + specifier: ^0.4.2 + version: 0.4.2 + remark-github-admonitions-to-directives: + specifier: ^1.0.5 + version: 1.0.5 + remark-math: + specifier: ^6.0.0 + version: 6.0.0 + remark-sectionize: + specifier: ^2.1.0 + version: 2.1.0 + sanitize-html: + specifier: ^2.17.0 + version: 2.17.0 + sharp: + specifier: ^0.34.5 + version: 0.34.5 + stylus: + specifier: ^0.64.0 + version: 0.64.0 + svelte: + specifier: ^5.39.8 + version: 5.39.8 + tailwindcss: + specifier: ^3.4.19 + version: 3.4.19(yaml@2.8.2) + typescript: + specifier: ^5.9.3 + version: 5.9.3 + unist-util-visit: + specifier: ^5.0.0 + version: 5.0.0 + devDependencies: + '@astrojs/ts-plugin': + specifier: ^1.10.6 + version: 1.10.6 + '@biomejs/biome': + specifier: 2.2.5 + version: 2.2.5 + '@rollup/plugin-yaml': + specifier: ^4.1.2 + version: 4.1.2(rollup@2.79.2) + '@types/hast': + specifier: ^3.0.4 + version: 3.0.4 + '@types/markdown-it': + specifier: ^14.1.2 + version: 14.1.2 + '@types/mdast': + specifier: ^4.0.4 + version: 4.0.4 + '@types/sanitize-html': + specifier: ^2.16.0 + version: 2.16.0 + postcss-import: + specifier: ^16.1.1 + version: 16.1.1(postcss@8.5.6) + postcss-nesting: + specifier: ^13.0.2 + version: 13.0.2(postcss@8.5.6) + +packages: + + '@adobe/css-tools@4.3.3': + resolution: {integrity: sha512-rE0Pygv0sEZ4vBWHlAgJLGDU7Pm8xoO6p3wsEceb7GYAjScrOHpEo8KK/eVkAcnSM+slAEtXjA2JpdjLp4fJQQ==} + + '@alloc/quick-lru@5.2.0': + resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==} + engines: {node: '>=10'} + + '@ampproject/remapping@2.3.0': + resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} + engines: {node: '>=6.0.0'} + + '@antfu/install-pkg@1.0.0': + resolution: {integrity: sha512-xvX6P/lo1B3ej0OsaErAjqgFYzYVcJpamjLAFLYh9vRJngBrMoUG7aVnrGTeqM7yxbyTD5p3F2+0/QUEh8Vzhw==} + + '@antfu/utils@8.1.1': + resolution: {integrity: sha512-Mex9nXf9vR6AhcXmMrlz/HVgYYZpVGJ6YlPgwl7UnaFpnshXs6EK/oa5Gpf3CzENMjkvEx2tQtntGnb7UtSTOQ==} + + '@astrojs/check@0.9.6': + resolution: {integrity: sha512-jlaEu5SxvSgmfGIFfNgcn5/f+29H61NJzEMfAZ82Xopr4XBchXB1GVlcJsE+elUlsYSbXlptZLX+JMG3b/wZEA==} + hasBin: true + peerDependencies: + typescript: ^5.0.0 + + '@astrojs/compiler@2.13.0': + resolution: {integrity: sha512-mqVORhUJViA28fwHYaWmsXSzLO9osbdZ5ImUfxBarqsYdMlPbqAqGJCxsNzvppp1BEzc1mJNjOVvQqeDN8Vspw==} + + '@astrojs/internal-helpers@0.7.3': + resolution: {integrity: sha512-6Pl0bQEIChuW5wqN7jdKrzWfCscW2rG/Cz+fzt4PhSQX2ivBpnhXgFUCs0M3DCYvjYHnPVG2W36X5rmFjZ62sw==} + + '@astrojs/language-server@2.16.2': + resolution: {integrity: sha512-J3hVx/mFi3FwEzKf8ExYXQNERogD6RXswtbU+TyrxoXRBiQoBO5ooo7/lRWJ+rlUKUd7+rziMPI9jYB7TRlh0w==} + hasBin: true + peerDependencies: + prettier: ^3.0.0 + prettier-plugin-astro: '>=0.11.0' + peerDependenciesMeta: + prettier: + optional: true + prettier-plugin-astro: + optional: true + + '@astrojs/markdown-remark@6.3.7': + resolution: {integrity: sha512-KXGdq6/BC18doBCYXp08alHlWChH0hdD2B1qv9wIyOHbvwI5K6I7FhSta8dq1hBQNdun8YkKPR013D/Hm8xd0g==} + + '@astrojs/prism@3.3.0': + resolution: {integrity: sha512-q8VwfU/fDZNoDOf+r7jUnMC2//H2l0TuQ6FkGJL8vD8nw/q5KiL3DS1KKBI3QhI9UQhpJ5dc7AtqfbXWuOgLCQ==} + engines: {node: 18.20.8 || ^20.3.0 || >=22.0.0} + + '@astrojs/rss@4.0.14': + resolution: {integrity: sha512-KCe1imDcADKOOuO/wtKOMDO/umsBD6DWF+94r5auna1jKl5fmlK9vzf+sjA3EyveXA/FoB3khtQ/u/tQgETmTw==} + + '@astrojs/sitemap@3.6.0': + resolution: {integrity: sha512-4aHkvcOZBWJigRmMIAJwRQXBS+ayoP5z40OklTXYXhUDhwusz+DyDl+nSshY6y9DvkVEavwNcFO8FD81iGhXjg==} + + '@astrojs/svelte@7.2.3': + resolution: {integrity: sha512-45D9xKOvYBQ/Z7lgt/g8Mli1cD5rJxnnz44i6MDSa2oKxMVocT6pHT/+Uou1a3Ch3yGZ5KpJRyJC6HWCOzreqg==} + engines: {node: 18.20.8 || ^20.3.0 || >=22.0.0} + peerDependencies: + astro: ^5.0.0 + svelte: ^5.1.16 + typescript: ^5.3.3 + + '@astrojs/tailwind@6.0.2': + resolution: {integrity: sha512-j3mhLNeugZq6A8dMNXVarUa8K6X9AW+QHU9u3lKNrPLMHhOQ0S7VeWhHwEeJFpEK1BTKEUY1U78VQv2gN6hNGg==} + peerDependencies: + astro: ^3.0.0 || ^4.0.0 || ^5.0.0 + tailwindcss: ^3.0.24 + + '@astrojs/telemetry@3.3.0': + resolution: {integrity: sha512-UFBgfeldP06qu6khs/yY+q1cDAaArM2/7AEIqQ9Cuvf7B1hNLq0xDrZkct+QoIGyjq56y8IaE2I3CTvG99mlhQ==} + engines: {node: 18.20.8 || ^20.3.0 || >=22.0.0} + + '@astrojs/ts-plugin@1.10.6': + resolution: {integrity: sha512-Ke5CNwxn/ozsh6THJKuayUlBToa3uiPDi2oSwcXmTdeiJ0PGr+UkdQJf9hdMgBjbIka9fhnSn3UhYamfNfJ73A==} + + '@astrojs/yaml2ts@0.2.2': + resolution: {integrity: sha512-GOfvSr5Nqy2z5XiwqTouBBpy5FyI6DEe+/g/Mk5am9SjILN1S5fOEvYK0GuWHg98yS/dobP4m8qyqw/URW35fQ==} + + '@babel/code-frame@7.27.1': + resolution: {integrity: sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==} + engines: {node: '>=6.9.0'} + + '@babel/compat-data@7.28.0': + resolution: {integrity: sha512-60X7qkglvrap8mn1lh2ebxXdZYtUcpd7gsmy9kLaBJ4i/WdY8PqTSdxyA8qraikqKQK5C1KRBKXqznrVapyNaw==} + engines: {node: '>=6.9.0'} + + '@babel/core@7.28.0': + resolution: {integrity: sha512-UlLAnTPrFdNGoFtbSXwcGFQBtQZJCNjaN6hQNP3UPvuNXT1i82N26KL3dZeIpNalWywr9IuQuncaAfUaS1g6sQ==} + engines: {node: '>=6.9.0'} + + '@babel/generator@7.28.0': + resolution: {integrity: sha512-lJjzvrbEeWrhB4P3QBsH7tey117PjLZnDbLiQEKjQ/fNJTjuq4HSqgFA+UNSwZT8D7dxxbnuSBMsa1lrWzKlQg==} + engines: {node: '>=6.9.0'} + + '@babel/helper-annotate-as-pure@7.27.3': + resolution: {integrity: sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg==} + engines: {node: '>=6.9.0'} + + '@babel/helper-compilation-targets@7.27.2': + resolution: {integrity: sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==} + engines: {node: '>=6.9.0'} + + '@babel/helper-create-class-features-plugin@7.27.1': + resolution: {integrity: sha512-QwGAmuvM17btKU5VqXfb+Giw4JcN0hjuufz3DYnpeVDvZLAObloM77bhMXiqry3Iio+Ai4phVRDwl6WU10+r5A==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-create-regexp-features-plugin@7.27.1': + resolution: {integrity: sha512-uVDC72XVf8UbrH5qQTc18Agb8emwjTiZrQE11Nv3CuBEZmVvTwwE9CBUEvHku06gQCAyYf8Nv6ja1IN+6LMbxQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-define-polyfill-provider@0.6.5': + resolution: {integrity: sha512-uJnGFcPsWQK8fvjgGP5LZUZZsYGIoPeRjSF5PGwrelYgq7Q15/Ft9NGFp1zglwgIv//W0uG4BevRuSJRyylZPg==} + peerDependencies: + '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 + + '@babel/helper-globals@7.28.0': + resolution: {integrity: sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-member-expression-to-functions@7.27.1': + resolution: {integrity: sha512-E5chM8eWjTp/aNoVpcbfM7mLxu9XGLWYise2eBKGQomAk/Mb4XoxyqXTZbuTohbsl8EKqdlMhnDI2CCLfcs9wA==} + engines: {node: '>=6.9.0'} + + '@babel/helper-module-imports@7.27.1': + resolution: {integrity: sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==} + engines: {node: '>=6.9.0'} + + '@babel/helper-module-transforms@7.27.3': + resolution: {integrity: sha512-dSOvYwvyLsWBeIRyOeHXp5vPj5l1I011r52FM1+r1jCERv+aFXYk4whgQccYEGYxK2H3ZAIA8nuPkQ0HaUo3qg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-optimise-call-expression@7.27.1': + resolution: {integrity: sha512-URMGH08NzYFhubNSGJrpUEphGKQwMQYBySzat5cAByY1/YgIRkULnIy3tAMeszlL/so2HbeilYloUmSpd7GdVw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-plugin-utils@7.27.1': + resolution: {integrity: sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-remap-async-to-generator@7.27.1': + resolution: {integrity: sha512-7fiA521aVw8lSPeI4ZOD3vRFkoqkJcS+z4hFo82bFSH/2tNd6eJ5qCVMS5OzDmZh/kaHQeBaeyxK6wljcPtveA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-replace-supers@7.27.1': + resolution: {integrity: sha512-7EHz6qDZc8RYS5ElPoShMheWvEgERonFCs7IAonWLLUTXW59DP14bCZt89/GKyreYn8g3S83m21FelHKbeDCKA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-skip-transparent-expression-wrappers@7.27.1': + resolution: {integrity: sha512-Tub4ZKEXqbPjXgWLl2+3JpQAYBJ8+ikpQ2Ocj/q/r0LwE3UhENh7EUabyHjz2kCEsrRY83ew2DQdHluuiDQFzg==} + engines: {node: '>=6.9.0'} + + '@babel/helper-string-parser@7.27.1': + resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==} + engines: {node: '>=6.9.0'} + + '@babel/helper-validator-identifier@7.27.1': + resolution: {integrity: sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==} + engines: {node: '>=6.9.0'} + + '@babel/helper-validator-identifier@7.28.5': + resolution: {integrity: sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==} + engines: {node: '>=6.9.0'} + + '@babel/helper-validator-option@7.27.1': + resolution: {integrity: sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==} + engines: {node: '>=6.9.0'} + + '@babel/helper-wrap-function@7.27.1': + resolution: {integrity: sha512-NFJK2sHUvrjo8wAU/nQTWU890/zB2jj0qBcCbZbbf+005cAsv6tMjXz31fBign6M5ov1o0Bllu+9nbqkfsjjJQ==} + engines: {node: '>=6.9.0'} + + '@babel/helpers@7.27.6': + resolution: {integrity: sha512-muE8Tt8M22638HU31A3CgfSUciwz1fhATfoVai05aPXGor//CdWDCbnlY1yvBPo07njuVOCNGCSp/GTt12lIug==} + engines: {node: '>=6.9.0'} + + '@babel/parser@7.28.4': + resolution: {integrity: sha512-yZbBqeM6TkpP9du/I2pUZnJsRMGGvOuIrhjzC1AwHwW+6he4mni6Bp/m8ijn0iOuZuPI2BfkCoSRunpyjnrQKg==} + engines: {node: '>=6.0.0'} + hasBin: true + + '@babel/parser@7.28.5': + resolution: {integrity: sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ==} + engines: {node: '>=6.0.0'} + hasBin: true + + '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.27.1': + resolution: {integrity: sha512-QPG3C9cCVRQLxAVwmefEmwdTanECuUBMQZ/ym5kiw3XKCGA7qkuQLcjWWHcrD/GKbn/WmJwaezfuuAOcyKlRPA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/plugin-bugfix-safari-class-field-initializer-scope@7.27.1': + resolution: {integrity: sha512-qNeq3bCKnGgLkEXUuFry6dPlGfCdQNZbn7yUAPCInwAJHMU7THJfrBSozkcWq5sNM6RcF3S8XyQL2A52KNR9IA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.27.1': + resolution: {integrity: sha512-g4L7OYun04N1WyqMNjldFwlfPCLVkgB54A/YCXICZYBsvJJE3kByKv9c9+R/nAfmIfjl2rKYLNyMHboYbZaWaA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.27.1': + resolution: {integrity: sha512-oO02gcONcD5O1iTLi/6frMJBIwWEHceWGSGqrpCmEL8nogiS6J9PBlE48CaK20/Jx1LuRml9aDftLgdjXT8+Cw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.13.0 + + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.27.1': + resolution: {integrity: sha512-6BpaYGDavZqkI6yT+KSPdpZFfpnd68UKXbcjI9pJ13pvHhPrCKWOOLp+ysvMeA+DxnhuPpgIaRpxRxo5A9t5jw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/plugin-proposal-class-properties@7.12.1': + resolution: {integrity: sha512-cKp3dlQsFsEs5CWKnN7BnSHOd0EOW8EKpEjkoz1pO2E5KzIDNV9Ros1b0CnmbVgAGXJubOYVBOGCT1OmJwOI7w==} + deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-class-properties instead. + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2': + resolution: {integrity: sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-flow@7.27.1': + resolution: {integrity: sha512-p9OkPbZ5G7UT1MofwYFigGebnrzGJacoBSQM0/6bi/PUMVE+qlWDD/OalvQKbwgQzU6dl0xAv6r4X7Jme0RYxA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-import-assertions@7.27.1': + resolution: {integrity: sha512-UT/Jrhw57xg4ILHLFnzFpPDlMbcdEicaAtjPQpbj9wa8T4r5KVWCimHcL/460g8Ht0DMxDyjsLgiWSkVjnwPFg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-import-attributes@7.27.1': + resolution: {integrity: sha512-oFT0FrKHgF53f4vOsZGi2Hh3I35PfSmVs4IBFLFj4dnafP+hIWDLg3VyKmUHfLoLHlyxY4C7DGtmHuJgn+IGww==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-import-meta@7.10.4': + resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-jsx@7.27.1': + resolution: {integrity: sha512-y8YTNIeKoyhGd9O0Jiyzyyqk8gdjnumGTQPsz0xOZOQ2RmkVJeZ1vmmfIvFEKqucBG6axJGBZDE/7iI5suUI/w==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-unicode-sets-regex@7.18.6': + resolution: {integrity: sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/plugin-transform-arrow-functions@7.27.1': + resolution: {integrity: sha512-8Z4TGic6xW70FKThA5HYEKKyBpOOsucTOD1DjU3fZxDg+K3zBJcXMFnt/4yQiZnf5+MiOMSXQ9PaEK/Ilh1DeA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-async-generator-functions@7.28.0': + resolution: {integrity: sha512-BEOdvX4+M765icNPZeidyADIvQ1m1gmunXufXxvRESy/jNNyfovIqUyE7MVgGBjWktCoJlzvFA1To2O4ymIO3Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-async-to-generator@7.27.1': + resolution: {integrity: sha512-NREkZsZVJS4xmTr8qzE5y8AfIPqsdQfRuUiLRTEzb7Qii8iFWCyDKaUV2c0rCuh4ljDZ98ALHP/PetiBV2nddA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-block-scoped-functions@7.27.1': + resolution: {integrity: sha512-cnqkuOtZLapWYZUYM5rVIdv1nXYuFVIltZ6ZJ7nIj585QsjKM5dhL2Fu/lICXZ1OyIAFc7Qy+bvDAtTXqGrlhg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-block-scoping@7.28.0': + resolution: {integrity: sha512-gKKnwjpdx5sER/wl0WN0efUBFzF/56YZO0RJrSYP4CljXnP31ByY7fol89AzomdlLNzI36AvOTmYHsnZTCkq8Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-class-properties@7.27.1': + resolution: {integrity: sha512-D0VcalChDMtuRvJIu3U/fwWjf8ZMykz5iZsg77Nuj821vCKI3zCyRLwRdWbsuJ/uRwZhZ002QtCqIkwC/ZkvbA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-class-static-block@7.27.1': + resolution: {integrity: sha512-s734HmYU78MVzZ++joYM+NkJusItbdRcbm+AGRgJCt3iA+yux0QpD9cBVdz3tKyrjVYWRl7j0mHSmv4lhV0aoA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.12.0 + + '@babel/plugin-transform-classes@7.28.0': + resolution: {integrity: sha512-IjM1IoJNw72AZFlj33Cu8X0q2XK/6AaVC3jQu+cgQ5lThWD5ajnuUAml80dqRmOhmPkTH8uAwnpMu9Rvj0LTRA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-computed-properties@7.27.1': + resolution: {integrity: sha512-lj9PGWvMTVksbWiDT2tW68zGS/cyo4AkZ/QTp0sQT0mjPopCmrSkzxeXkznjqBxzDI6TclZhOJbBmbBLjuOZUw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-destructuring@7.28.0': + resolution: {integrity: sha512-v1nrSMBiKcodhsyJ4Gf+Z0U/yawmJDBOTpEB3mcQY52r9RIyPneGyAS/yM6seP/8I+mWI3elOMtT5dB8GJVs+A==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-dotall-regex@7.27.1': + resolution: {integrity: sha512-gEbkDVGRvjj7+T1ivxrfgygpT7GUd4vmODtYpbs0gZATdkX8/iSnOtZSxiZnsgm1YjTgjI6VKBGSJJevkrclzw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-duplicate-keys@7.27.1': + resolution: {integrity: sha512-MTyJk98sHvSs+cvZ4nOauwTTG1JeonDjSGvGGUNHreGQns+Mpt6WX/dVzWBHgg+dYZhkC4X+zTDfkTU+Vy9y7Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.27.1': + resolution: {integrity: sha512-hkGcueTEzuhB30B3eJCbCYeCaaEQOmQR0AdvzpD4LoN0GXMWzzGSuRrxR2xTnCrvNbVwK9N6/jQ92GSLfiZWoQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/plugin-transform-dynamic-import@7.27.1': + resolution: {integrity: sha512-MHzkWQcEmjzzVW9j2q8LGjwGWpG2mjwaaB0BNQwst3FIjqsg8Ct/mIZlvSPJvfi9y2AC8mi/ktxbFVL9pZ1I4A==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-explicit-resource-management@7.28.0': + resolution: {integrity: sha512-K8nhUcn3f6iB+P3gwCv/no7OdzOZQcKchW6N389V6PD8NUWKZHzndOd9sPDVbMoBsbmjMqlB4L9fm+fEFNVlwQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-exponentiation-operator@7.27.1': + resolution: {integrity: sha512-uspvXnhHvGKf2r4VVtBpeFnuDWsJLQ6MF6lGJLC89jBR1uoVeqM416AZtTuhTezOfgHicpJQmoD5YUakO/YmXQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-export-namespace-from@7.27.1': + resolution: {integrity: sha512-tQvHWSZ3/jH2xuq/vZDy0jNn+ZdXJeM8gHvX4lnJmsc3+50yPlWdZXIc5ay+umX+2/tJIqHqiEqcJvxlmIvRvQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-flow-strip-types@7.27.1': + resolution: {integrity: sha512-G5eDKsu50udECw7DL2AcsysXiQyB7Nfg521t2OAJ4tbfTJ27doHLeF/vlI1NZGlLdbb/v+ibvtL1YBQqYOwJGg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-for-of@7.27.1': + resolution: {integrity: sha512-BfbWFFEJFQzLCQ5N8VocnCtA8J1CLkNTe2Ms2wocj75dd6VpiqS5Z5quTYcUoo4Yq+DN0rtikODccuv7RU81sw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-function-name@7.27.1': + resolution: {integrity: sha512-1bQeydJF9Nr1eBCMMbC+hdwmRlsv5XYOMu03YSWFwNs0HsAmtSxxF1fyuYPqemVldVyFmlCU7w8UE14LupUSZQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-json-strings@7.27.1': + resolution: {integrity: sha512-6WVLVJiTjqcQauBhn1LkICsR2H+zm62I3h9faTDKt1qP4jn2o72tSvqMwtGFKGTpojce0gJs+76eZ2uCHRZh0Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-literals@7.27.1': + resolution: {integrity: sha512-0HCFSepIpLTkLcsi86GG3mTUzxV5jpmbv97hTETW3yzrAij8aqlD36toB1D0daVFJM8NK6GvKO0gslVQmm+zZA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-logical-assignment-operators@7.27.1': + resolution: {integrity: sha512-SJvDs5dXxiae4FbSL1aBJlG4wvl594N6YEVVn9e3JGulwioy6z3oPjx/sQBO3Y4NwUu5HNix6KJ3wBZoewcdbw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-member-expression-literals@7.27.1': + resolution: {integrity: sha512-hqoBX4dcZ1I33jCSWcXrP+1Ku7kdqXf1oeah7ooKOIiAdKQ+uqftgCFNOSzA5AMS2XIHEYeGFg4cKRCdpxzVOQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-modules-amd@7.27.1': + resolution: {integrity: sha512-iCsytMg/N9/oFq6n+gFTvUYDZQOMK5kEdeYxmxt91fcJGycfxVP9CnrxoliM0oumFERba2i8ZtwRUCMhvP1LnA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-modules-commonjs@7.27.1': + resolution: {integrity: sha512-OJguuwlTYlN0gBZFRPqwOGNWssZjfIUdS7HMYtN8c1KmwpwHFBwTeFZrg9XZa+DFTitWOW5iTAG7tyCUPsCCyw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-modules-systemjs@7.27.1': + resolution: {integrity: sha512-w5N1XzsRbc0PQStASMksmUeqECuzKuTJer7kFagK8AXgpCMkeDMO5S+aaFb7A51ZYDF7XI34qsTX+fkHiIm5yA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-modules-umd@7.27.1': + resolution: {integrity: sha512-iQBE/xC5BV1OxJbp6WG7jq9IWiD+xxlZhLrdwpPkTX3ydmXdvoCpyfJN7acaIBZaOqTfr76pgzqBJflNbeRK+w==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-named-capturing-groups-regex@7.27.1': + resolution: {integrity: sha512-SstR5JYy8ddZvD6MhV0tM/j16Qds4mIpJTOd1Yu9J9pJjH93bxHECF7pgtc28XvkzTD6Pxcm/0Z73Hvk7kb3Ng==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/plugin-transform-new-target@7.27.1': + resolution: {integrity: sha512-f6PiYeqXQ05lYq3TIfIDu/MtliKUbNwkGApPUvyo6+tc7uaR4cPjPe7DFPr15Uyycg2lZU6btZ575CuQoYh7MQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-nullish-coalescing-operator@7.27.1': + resolution: {integrity: sha512-aGZh6xMo6q9vq1JGcw58lZ1Z0+i0xB2x0XaauNIUXd6O1xXc3RwoWEBlsTQrY4KQ9Jf0s5rgD6SiNkaUdJegTA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-numeric-separator@7.27.1': + resolution: {integrity: sha512-fdPKAcujuvEChxDBJ5c+0BTaS6revLV7CJL08e4m3de8qJfNIuCc2nc7XJYOjBoTMJeqSmwXJ0ypE14RCjLwaw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-object-rest-spread@7.28.0': + resolution: {integrity: sha512-9VNGikXxzu5eCiQjdE4IZn8sb9q7Xsk5EXLDBKUYg1e/Tve8/05+KJEtcxGxAgCY5t/BpKQM+JEL/yT4tvgiUA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-object-super@7.27.1': + resolution: {integrity: sha512-SFy8S9plRPbIcxlJ8A6mT/CxFdJx/c04JEctz4jf8YZaVS2px34j7NXRrlGlHkN/M2gnpL37ZpGRGVFLd3l8Ng==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-optional-catch-binding@7.27.1': + resolution: {integrity: sha512-txEAEKzYrHEX4xSZN4kJ+OfKXFVSWKB2ZxM9dpcE3wT7smwkNmXo5ORRlVzMVdJbD+Q8ILTgSD7959uj+3Dm3Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-optional-chaining@7.27.1': + resolution: {integrity: sha512-BQmKPPIuc8EkZgNKsv0X4bPmOoayeu4F1YCwx2/CfmDSXDbp7GnzlUH+/ul5VGfRg1AoFPsrIThlEBj2xb4CAg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-parameters@7.27.7': + resolution: {integrity: sha512-qBkYTYCb76RRxUM6CcZA5KRu8K4SM8ajzVeUgVdMVO9NN9uI/GaVmBg/WKJJGnNokV9SY8FxNOVWGXzqzUidBg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-private-methods@7.27.1': + resolution: {integrity: sha512-10FVt+X55AjRAYI9BrdISN9/AQWHqldOeZDUoLyif1Kn05a56xVBXb8ZouL8pZ9jem8QpXaOt8TS7RHUIS+GPA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-private-property-in-object@7.27.1': + resolution: {integrity: sha512-5J+IhqTi1XPa0DXF83jYOaARrX+41gOewWbkPyjMNRDqgOCqdffGh8L3f/Ek5utaEBZExjSAzcyjmV9SSAWObQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-property-literals@7.27.1': + resolution: {integrity: sha512-oThy3BCuCha8kDZ8ZkgOg2exvPYUlprMukKQXI1r1pJ47NCvxfkEy8vK+r/hT9nF0Aa4H1WUPZZjHTFtAhGfmQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-react-display-name@7.28.0': + resolution: {integrity: sha512-D6Eujc2zMxKjfa4Zxl4GHMsmhKKZ9VpcqIchJLvwTxad9zWIYulwYItBovpDOoNLISpcZSXoDJ5gaGbQUDqViA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-react-jsx-development@7.27.1': + resolution: {integrity: sha512-ykDdF5yI4f1WrAolLqeF3hmYU12j9ntLQl/AOG1HAS21jxyg1Q0/J/tpREuYLfatGdGmXp/3yS0ZA76kOlVq9Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-react-jsx@7.27.1': + resolution: {integrity: sha512-2KH4LWGSrJIkVf5tSiBFYuXDAoWRq2MMwgivCf+93dd0GQi8RXLjKA/0EvRnVV5G0hrHczsquXuD01L8s6dmBw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-react-pure-annotations@7.27.1': + resolution: {integrity: sha512-JfuinvDOsD9FVMTHpzA/pBLisxpv1aSf+OIV8lgH3MuWrks19R27e6a6DipIg4aX1Zm9Wpb04p8wljfKrVSnPA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-regenerator@7.28.1': + resolution: {integrity: sha512-P0QiV/taaa3kXpLY+sXla5zec4E+4t4Aqc9ggHlfZ7a2cp8/x/Gv08jfwEtn9gnnYIMvHx6aoOZ8XJL8eU71Dg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-regexp-modifiers@7.27.1': + resolution: {integrity: sha512-TtEciroaiODtXvLZv4rmfMhkCv8jx3wgKpL68PuiPh2M4fvz5jhsA7697N1gMvkvr/JTF13DrFYyEbY9U7cVPA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/plugin-transform-reserved-words@7.27.1': + resolution: {integrity: sha512-V2ABPHIJX4kC7HegLkYoDpfg9PVmuWy/i6vUM5eGK22bx4YVFD3M5F0QQnWQoDs6AGsUWTVOopBiMFQgHaSkVw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-shorthand-properties@7.27.1': + resolution: {integrity: sha512-N/wH1vcn4oYawbJ13Y/FxcQrWk63jhfNa7jef0ih7PHSIHX2LB7GWE1rkPrOnka9kwMxb6hMl19p7lidA+EHmQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-spread@7.27.1': + resolution: {integrity: sha512-kpb3HUqaILBJcRFVhFUs6Trdd4mkrzcGXss+6/mxUd273PfbWqSDHRzMT2234gIg2QYfAjvXLSquP1xECSg09Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-sticky-regex@7.27.1': + resolution: {integrity: sha512-lhInBO5bi/Kowe2/aLdBAawijx+q1pQzicSgnkB6dUPc1+RC8QmJHKf2OjvU+NZWitguJHEaEmbV6VWEouT58g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-template-literals@7.27.1': + resolution: {integrity: sha512-fBJKiV7F2DxZUkg5EtHKXQdbsbURW3DZKQUWphDum0uRP6eHGGa/He9mc0mypL680pb+e/lDIthRohlv8NCHkg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-typeof-symbol@7.27.1': + resolution: {integrity: sha512-RiSILC+nRJM7FY5srIyc4/fGIwUhyDuuBSdWn4y6yT6gm652DpCHZjIipgn6B7MQ1ITOUnAKWixEUjQRIBIcLw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-unicode-escapes@7.27.1': + resolution: {integrity: sha512-Ysg4v6AmF26k9vpfFuTZg8HRfVWzsh1kVfowA23y9j/Gu6dOuahdUVhkLqpObp3JIv27MLSii6noRnuKN8H0Mg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-unicode-property-regex@7.27.1': + resolution: {integrity: sha512-uW20S39PnaTImxp39O5qFlHLS9LJEmANjMG7SxIhap8rCHqu0Ik+tLEPX5DKmHn6CsWQ7j3lix2tFOa5YtL12Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-unicode-regex@7.27.1': + resolution: {integrity: sha512-xvINq24TRojDuyt6JGtHmkVkrfVV3FPT16uytxImLeBZqW3/H52yN+kM1MGuyPkIQxrzKwPHs5U/MP3qKyzkGw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-unicode-sets-regex@7.27.1': + resolution: {integrity: sha512-EtkOujbc4cgvb0mlpQefi4NTPBzhSIevblFevACNLUspmrALgmEBdL/XfnyyITfd8fKBZrZys92zOWcik7j9Tw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/preset-env@7.28.0': + resolution: {integrity: sha512-VmaxeGOwuDqzLl5JUkIRM1X2Qu2uKGxHEQWh+cvvbl7JuJRgKGJSfsEF/bUaxFhJl/XAyxBe7q7qSuTbKFuCyg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/preset-flow@7.27.1': + resolution: {integrity: sha512-ez3a2it5Fn6P54W8QkbfIyyIbxlXvcxyWHHvno1Wg0Ej5eiJY5hBb8ExttoIOJJk7V2dZE6prP7iby5q2aQ0Lg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/preset-modules@0.1.6-no-external-plugins': + resolution: {integrity: sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==} + peerDependencies: + '@babel/core': ^7.0.0-0 || ^8.0.0-0 <8.0.0 + + '@babel/preset-react@7.27.1': + resolution: {integrity: sha512-oJHWh2gLhU9dW9HHr42q0cI0/iHHXTLGe39qvpAZZzagHy0MzYLCnCVV0symeRvzmjHyVU7mw2K06E6u/JwbhA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/runtime@7.27.6': + resolution: {integrity: sha512-vbavdySgbTTrmFE+EsiqUTzlOr5bzlnJtUv9PynGCAKvfQqjIXbvFdumPM/GxMDfyuGMJaJAU6TO4zc1Jf1i8Q==} + engines: {node: '>=6.9.0'} + + '@babel/template@7.27.2': + resolution: {integrity: sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==} + engines: {node: '>=6.9.0'} + + '@babel/traverse@7.28.0': + resolution: {integrity: sha512-mGe7UK5wWyh0bKRfupsUchrQGqvDbZDbKJw+kcRGSmdHVYrv+ltd0pnpDTVpiTqnaBru9iEvA8pz8W46v0Amwg==} + engines: {node: '>=6.9.0'} + + '@babel/types@7.28.4': + resolution: {integrity: sha512-bkFqkLhh3pMBUQQkpVgWDWq/lqzc2678eUyDlTBhRqhCHFguYYGM0Efga7tYk4TogG/3x0EEl66/OQ+WGbWB/Q==} + engines: {node: '>=6.9.0'} + + '@babel/types@7.28.5': + resolution: {integrity: sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA==} + engines: {node: '>=6.9.0'} + + '@biomejs/biome@2.2.5': + resolution: {integrity: sha512-zcIi+163Rc3HtyHbEO7CjeHq8DjQRs40HsGbW6vx2WI0tg8mYQOPouhvHSyEnCBAorfYNnKdR64/IxO7xQ5faw==} + engines: {node: '>=14.21.3'} + hasBin: true + + '@biomejs/cli-darwin-arm64@2.2.5': + resolution: {integrity: sha512-MYT+nZ38wEIWVcL5xLyOhYQQ7nlWD0b/4mgATW2c8dvq7R4OQjt/XGXFkXrmtWmQofaIM14L7V8qIz/M+bx5QQ==} + engines: {node: '>=14.21.3'} + cpu: [arm64] + os: [darwin] + + '@biomejs/cli-darwin-x64@2.2.5': + resolution: {integrity: sha512-FLIEl73fv0R7dI10EnEiZLw+IMz3mWLnF95ASDI0kbx6DDLJjWxE5JxxBfmG+udz1hIDd3fr5wsuP7nwuTRdAg==} + engines: {node: '>=14.21.3'} + cpu: [x64] + os: [darwin] + + '@biomejs/cli-linux-arm64-musl@2.2.5': + resolution: {integrity: sha512-5Ov2wgAFwqDvQiESnu7b9ufD1faRa+40uwrohgBopeY84El2TnBDoMNXx6iuQdreoFGjwW8vH6k68G21EpNERw==} + engines: {node: '>=14.21.3'} + cpu: [arm64] + os: [linux] + + '@biomejs/cli-linux-arm64@2.2.5': + resolution: {integrity: sha512-5DjiiDfHqGgR2MS9D+AZ8kOfrzTGqLKywn8hoXpXXlJXIECGQ32t+gt/uiS2XyGBM2XQhR6ztUvbjZWeccFMoQ==} + engines: {node: '>=14.21.3'} + cpu: [arm64] + os: [linux] + + '@biomejs/cli-linux-x64-musl@2.2.5': + resolution: {integrity: sha512-AVqLCDb/6K7aPNIcxHaTQj01sl1m989CJIQFQEaiQkGr2EQwyOpaATJ473h+nXDUuAcREhccfRpe/tu+0wu0eQ==} + engines: {node: '>=14.21.3'} + cpu: [x64] + os: [linux] + + '@biomejs/cli-linux-x64@2.2.5': + resolution: {integrity: sha512-fq9meKm1AEXeAWan3uCg6XSP5ObA6F/Ovm89TwaMiy1DNIwdgxPkNwxlXJX8iM6oRbFysYeGnT0OG8diCWb9ew==} + engines: {node: '>=14.21.3'} + cpu: [x64] + os: [linux] + + '@biomejs/cli-win32-arm64@2.2.5': + resolution: {integrity: sha512-xaOIad4wBambwJa6mdp1FigYSIF9i7PCqRbvBqtIi9y29QtPVQ13sDGtUnsRoe6SjL10auMzQ6YAe+B3RpZXVg==} + engines: {node: '>=14.21.3'} + cpu: [arm64] + os: [win32] + + '@biomejs/cli-win32-x64@2.2.5': + resolution: {integrity: sha512-F/jhuXCssPFAuciMhHKk00xnCAxJRS/pUzVfXYmOMUp//XW7mO6QeCjsjvnm8L4AO/dG2VOB0O+fJPiJ2uXtIw==} + engines: {node: '>=14.21.3'} + cpu: [x64] + os: [win32] + + '@capsizecss/unpack@2.4.0': + resolution: {integrity: sha512-GrSU71meACqcmIUxPYOJvGKF0yryjN/L1aCuE9DViCTJI7bfkjgYDPD1zbNDcINJwSSP6UaBZY9GAbYDO7re0Q==} + + '@csstools/selector-resolve-nested@3.1.0': + resolution: {integrity: sha512-mf1LEW0tJLKfWyvn5KdDrhpxHyuxpbNwTIwOYLIvsTffeyOf85j5oIzfG0yosxDgx/sswlqBnESYUcQH0vgZ0g==} + engines: {node: '>=18'} + peerDependencies: + postcss-selector-parser: ^7.0.0 + + '@csstools/selector-specificity@5.0.0': + resolution: {integrity: sha512-PCqQV3c4CoVm3kdPhyeZ07VmBRdH2EpMFA/pd9OASpOEC3aXNGoqPDAZ80D0cLpMBxnmk0+yNhGsEx31hq7Gtw==} + engines: {node: '>=18'} + peerDependencies: + postcss-selector-parser: ^7.0.0 + + '@ctrl/tinycolor@4.2.0': + resolution: {integrity: sha512-kzyuwOAQnXJNLS9PSyrk0CWk35nWJW/zl/6KvnTBMFK65gm7U1/Z5BqjxeapjZCIhQcM/DsrEmcbRwDyXyXK4A==} + engines: {node: '>=14'} + + '@emmetio/abbreviation@2.3.3': + resolution: {integrity: sha512-mgv58UrU3rh4YgbE/TzgLQwJ3pFsHHhCLqY20aJq+9comytTXUDNGG/SMtSeMJdkpxgXSXunBGLD8Boka3JyVA==} + + '@emmetio/css-abbreviation@2.1.8': + resolution: {integrity: sha512-s9yjhJ6saOO/uk1V74eifykk2CBYi01STTK3WlXWGOepyKa23ymJ053+DNQjpFcy1ingpaO7AxCcwLvHFY9tuw==} + + '@emmetio/css-parser@0.4.1': + resolution: {integrity: sha512-2bC6m0MV/voF4CTZiAbG5MWKbq5EBmDPKu9Sb7s7nVcEzNQlrZP6mFFFlIaISM8X6514H9shWMme1fCm8cWAfQ==} + + '@emmetio/html-matcher@1.3.0': + resolution: {integrity: sha512-NTbsvppE5eVyBMuyGfVu2CRrLvo7J4YHb6t9sBFLyY03WYhXET37qA4zOYUjBWFCRHO7pS1B9khERtY0f5JXPQ==} + + '@emmetio/scanner@1.0.4': + resolution: {integrity: sha512-IqRuJtQff7YHHBk4G8YZ45uB9BaAGcwQeVzgj/zj8/UdOhtQpEIupUhSk8dys6spFIWVZVeK20CzGEnqR5SbqA==} + + '@emmetio/stream-reader-utils@0.1.0': + resolution: {integrity: sha512-ZsZ2I9Vzso3Ho/pjZFsmmZ++FWeEd/txqybHTm4OgaZzdS8V9V/YYWQwg5TC38Z7uLWUV1vavpLLbjJtKubR1A==} + + '@emmetio/stream-reader@2.2.0': + resolution: {integrity: sha512-fXVXEyFA5Yv3M3n8sUGT7+fvecGrZP4k6FnWWMSZVQf69kAq0LLpaBQLGcPR30m3zMmKYhECP4k/ZkzvhEW5kw==} + + '@emnapi/runtime@1.7.1': + resolution: {integrity: sha512-PVtJr5CmLwYAU9PZDMITZoR5iAOShYREoR45EyyLrbntV50mdePTgUn4AmOw90Ifcj+x2kRjdzr1HP3RrNiHGA==} + + '@esbuild/aix-ppc64@0.25.10': + resolution: {integrity: sha512-0NFWnA+7l41irNuaSVlLfgNT12caWJVLzp5eAVhZ0z1qpxbockccEt3s+149rE64VUI3Ml2zt8Nv5JVc4QXTsw==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [aix] + + '@esbuild/aix-ppc64@0.25.12': + resolution: {integrity: sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [aix] + + '@esbuild/android-arm64@0.25.10': + resolution: {integrity: sha512-LSQa7eDahypv/VO6WKohZGPSJDq5OVOo3UoFR1E4t4Gj1W7zEQMUhI+lo81H+DtB+kP+tDgBp+M4oNCwp6kffg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [android] + + '@esbuild/android-arm64@0.25.12': + resolution: {integrity: sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [android] + + '@esbuild/android-arm@0.25.10': + resolution: {integrity: sha512-dQAxF1dW1C3zpeCDc5KqIYuZ1tgAdRXNoZP7vkBIRtKZPYe2xVr/d3SkirklCHudW1B45tGiUlz2pUWDfbDD4w==} + engines: {node: '>=18'} + cpu: [arm] + os: [android] + + '@esbuild/android-arm@0.25.12': + resolution: {integrity: sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg==} + engines: {node: '>=18'} + cpu: [arm] + os: [android] + + '@esbuild/android-x64@0.25.10': + resolution: {integrity: sha512-MiC9CWdPrfhibcXwr39p9ha1x0lZJ9KaVfvzA0Wxwz9ETX4v5CHfF09bx935nHlhi+MxhA63dKRRQLiVgSUtEg==} + engines: {node: '>=18'} + cpu: [x64] + os: [android] + + '@esbuild/android-x64@0.25.12': + resolution: {integrity: sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg==} + engines: {node: '>=18'} + cpu: [x64] + os: [android] + + '@esbuild/darwin-arm64@0.25.10': + resolution: {integrity: sha512-JC74bdXcQEpW9KkV326WpZZjLguSZ3DfS8wrrvPMHgQOIEIG/sPXEN/V8IssoJhbefLRcRqw6RQH2NnpdprtMA==} + engines: {node: '>=18'} + cpu: [arm64] + os: [darwin] + + '@esbuild/darwin-arm64@0.25.12': + resolution: {integrity: sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [darwin] + + '@esbuild/darwin-x64@0.25.10': + resolution: {integrity: sha512-tguWg1olF6DGqzws97pKZ8G2L7Ig1vjDmGTwcTuYHbuU6TTjJe5FXbgs5C1BBzHbJ2bo1m3WkQDbWO2PvamRcg==} + engines: {node: '>=18'} + cpu: [x64] + os: [darwin] + + '@esbuild/darwin-x64@0.25.12': + resolution: {integrity: sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA==} + engines: {node: '>=18'} + cpu: [x64] + os: [darwin] + + '@esbuild/freebsd-arm64@0.25.10': + resolution: {integrity: sha512-3ZioSQSg1HT2N05YxeJWYR+Libe3bREVSdWhEEgExWaDtyFbbXWb49QgPvFH8u03vUPX10JhJPcz7s9t9+boWg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [freebsd] + + '@esbuild/freebsd-arm64@0.25.12': + resolution: {integrity: sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [freebsd] + + '@esbuild/freebsd-x64@0.25.10': + resolution: {integrity: sha512-LLgJfHJk014Aa4anGDbh8bmI5Lk+QidDmGzuC2D+vP7mv/GeSN+H39zOf7pN5N8p059FcOfs2bVlrRr4SK9WxA==} + engines: {node: '>=18'} + cpu: [x64] + os: [freebsd] + + '@esbuild/freebsd-x64@0.25.12': + resolution: {integrity: sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [freebsd] + + '@esbuild/linux-arm64@0.25.10': + resolution: {integrity: sha512-5luJWN6YKBsawd5f9i4+c+geYiVEw20FVW5x0v1kEMWNq8UctFjDiMATBxLvmmHA4bf7F6hTRaJgtghFr9iziQ==} + engines: {node: '>=18'} + cpu: [arm64] + os: [linux] + + '@esbuild/linux-arm64@0.25.12': + resolution: {integrity: sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ==} + engines: {node: '>=18'} + cpu: [arm64] + os: [linux] + + '@esbuild/linux-arm@0.25.10': + resolution: {integrity: sha512-oR31GtBTFYCqEBALI9r6WxoU/ZofZl962pouZRTEYECvNF/dtXKku8YXcJkhgK/beU+zedXfIzHijSRapJY3vg==} + engines: {node: '>=18'} + cpu: [arm] + os: [linux] + + '@esbuild/linux-arm@0.25.12': + resolution: {integrity: sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw==} + engines: {node: '>=18'} + cpu: [arm] + os: [linux] + + '@esbuild/linux-ia32@0.25.10': + resolution: {integrity: sha512-NrSCx2Kim3EnnWgS4Txn0QGt0Xipoumb6z6sUtl5bOEZIVKhzfyp/Lyw4C1DIYvzeW/5mWYPBFJU3a/8Yr75DQ==} + engines: {node: '>=18'} + cpu: [ia32] + os: [linux] + + '@esbuild/linux-ia32@0.25.12': + resolution: {integrity: sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA==} + engines: {node: '>=18'} + cpu: [ia32] + os: [linux] + + '@esbuild/linux-loong64@0.25.10': + resolution: {integrity: sha512-xoSphrd4AZda8+rUDDfD9J6FUMjrkTz8itpTITM4/xgerAZZcFW7Dv+sun7333IfKxGG8gAq+3NbfEMJfiY+Eg==} + engines: {node: '>=18'} + cpu: [loong64] + os: [linux] + + '@esbuild/linux-loong64@0.25.12': + resolution: {integrity: sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng==} + engines: {node: '>=18'} + cpu: [loong64] + os: [linux] + + '@esbuild/linux-mips64el@0.25.10': + resolution: {integrity: sha512-ab6eiuCwoMmYDyTnyptoKkVS3k8fy/1Uvq7Dj5czXI6DF2GqD2ToInBI0SHOp5/X1BdZ26RKc5+qjQNGRBelRA==} + engines: {node: '>=18'} + cpu: [mips64el] + os: [linux] + + '@esbuild/linux-mips64el@0.25.12': + resolution: {integrity: sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw==} + engines: {node: '>=18'} + cpu: [mips64el] + os: [linux] + + '@esbuild/linux-ppc64@0.25.10': + resolution: {integrity: sha512-NLinzzOgZQsGpsTkEbdJTCanwA5/wozN9dSgEl12haXJBzMTpssebuXR42bthOF3z7zXFWH1AmvWunUCkBE4EA==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [linux] + + '@esbuild/linux-ppc64@0.25.12': + resolution: {integrity: sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [linux] + + '@esbuild/linux-riscv64@0.25.10': + resolution: {integrity: sha512-FE557XdZDrtX8NMIeA8LBJX3dC2M8VGXwfrQWU7LB5SLOajfJIxmSdyL/gU1m64Zs9CBKvm4UAuBp5aJ8OgnrA==} + engines: {node: '>=18'} + cpu: [riscv64] + os: [linux] + + '@esbuild/linux-riscv64@0.25.12': + resolution: {integrity: sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w==} + engines: {node: '>=18'} + cpu: [riscv64] + os: [linux] + + '@esbuild/linux-s390x@0.25.10': + resolution: {integrity: sha512-3BBSbgzuB9ajLoVZk0mGu+EHlBwkusRmeNYdqmznmMc9zGASFjSsxgkNsqmXugpPk00gJ0JNKh/97nxmjctdew==} + engines: {node: '>=18'} + cpu: [s390x] + os: [linux] + + '@esbuild/linux-s390x@0.25.12': + resolution: {integrity: sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg==} + engines: {node: '>=18'} + cpu: [s390x] + os: [linux] + + '@esbuild/linux-x64@0.25.10': + resolution: {integrity: sha512-QSX81KhFoZGwenVyPoberggdW1nrQZSvfVDAIUXr3WqLRZGZqWk/P4T8p2SP+de2Sr5HPcvjhcJzEiulKgnxtA==} + engines: {node: '>=18'} + cpu: [x64] + os: [linux] + + '@esbuild/linux-x64@0.25.12': + resolution: {integrity: sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw==} + engines: {node: '>=18'} + cpu: [x64] + os: [linux] + + '@esbuild/netbsd-arm64@0.25.10': + resolution: {integrity: sha512-AKQM3gfYfSW8XRk8DdMCzaLUFB15dTrZfnX8WXQoOUpUBQ+NaAFCP1kPS/ykbbGYz7rxn0WS48/81l9hFl3u4A==} + engines: {node: '>=18'} + cpu: [arm64] + os: [netbsd] + + '@esbuild/netbsd-arm64@0.25.12': + resolution: {integrity: sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [netbsd] + + '@esbuild/netbsd-x64@0.25.10': + resolution: {integrity: sha512-7RTytDPGU6fek/hWuN9qQpeGPBZFfB4zZgcz2VK2Z5VpdUxEI8JKYsg3JfO0n/Z1E/6l05n0unDCNc4HnhQGig==} + engines: {node: '>=18'} + cpu: [x64] + os: [netbsd] + + '@esbuild/netbsd-x64@0.25.12': + resolution: {integrity: sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [netbsd] + + '@esbuild/openbsd-arm64@0.25.10': + resolution: {integrity: sha512-5Se0VM9Wtq797YFn+dLimf2Zx6McttsH2olUBsDml+lm0GOCRVebRWUvDtkY4BWYv/3NgzS8b/UM3jQNh5hYyw==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openbsd] + + '@esbuild/openbsd-arm64@0.25.12': + resolution: {integrity: sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openbsd] + + '@esbuild/openbsd-x64@0.25.10': + resolution: {integrity: sha512-XkA4frq1TLj4bEMB+2HnI0+4RnjbuGZfet2gs/LNs5Hc7D89ZQBHQ0gL2ND6Lzu1+QVkjp3x1gIcPKzRNP8bXw==} + engines: {node: '>=18'} + cpu: [x64] + os: [openbsd] + + '@esbuild/openbsd-x64@0.25.12': + resolution: {integrity: sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw==} + engines: {node: '>=18'} + cpu: [x64] + os: [openbsd] + + '@esbuild/openharmony-arm64@0.25.10': + resolution: {integrity: sha512-AVTSBhTX8Y/Fz6OmIVBip9tJzZEUcY8WLh7I59+upa5/GPhh2/aM6bvOMQySspnCCHvFi79kMtdJS1w0DXAeag==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openharmony] + + '@esbuild/openharmony-arm64@0.25.12': + resolution: {integrity: sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openharmony] + + '@esbuild/sunos-x64@0.25.10': + resolution: {integrity: sha512-fswk3XT0Uf2pGJmOpDB7yknqhVkJQkAQOcW/ccVOtfx05LkbWOaRAtn5SaqXypeKQra1QaEa841PgrSL9ubSPQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [sunos] + + '@esbuild/sunos-x64@0.25.12': + resolution: {integrity: sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w==} + engines: {node: '>=18'} + cpu: [x64] + os: [sunos] + + '@esbuild/win32-arm64@0.25.10': + resolution: {integrity: sha512-ah+9b59KDTSfpaCg6VdJoOQvKjI33nTaQr4UluQwW7aEwZQsbMCfTmfEO4VyewOxx4RaDT/xCy9ra2GPWmO7Kw==} + engines: {node: '>=18'} + cpu: [arm64] + os: [win32] + + '@esbuild/win32-arm64@0.25.12': + resolution: {integrity: sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [win32] + + '@esbuild/win32-ia32@0.25.10': + resolution: {integrity: sha512-QHPDbKkrGO8/cz9LKVnJU22HOi4pxZnZhhA2HYHez5Pz4JeffhDjf85E57Oyco163GnzNCVkZK0b/n4Y0UHcSw==} + engines: {node: '>=18'} + cpu: [ia32] + os: [win32] + + '@esbuild/win32-ia32@0.25.12': + resolution: {integrity: sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ==} + engines: {node: '>=18'} + cpu: [ia32] + os: [win32] + + '@esbuild/win32-x64@0.25.10': + resolution: {integrity: sha512-9KpxSVFCu0iK1owoez6aC/s/EdUQLDN3adTxGCqxMVhrPDj6bt5dbrHDXUuq+Bs2vATFBBrQS5vdQ/Ed2P+nbw==} + engines: {node: '>=18'} + cpu: [x64] + os: [win32] + + '@esbuild/win32-x64@0.25.12': + resolution: {integrity: sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA==} + engines: {node: '>=18'} + cpu: [x64] + os: [win32] + + '@expressive-code/core@0.41.4': + resolution: {integrity: sha512-4eDiyq3hI3vJ0KnwIqonh9evy9p8aNixsf5wwnvDWcoPfYU3LGB6Nkb6WDdYS4z52tODCvN5gMRy1DtRopcxXg==} + + '@expressive-code/plugin-collapsible-sections@0.41.4': + resolution: {integrity: sha512-g+QLiLZXpx+bBwzyvjr7vbS1IDHGsTIpC88hsaKaLAMiPuByEwrUMWZUv9qf+1A9bb6xGSn7tpoG4NTKvCr2pg==} + + '@expressive-code/plugin-frames@0.41.4': + resolution: {integrity: sha512-W9jZW8LsPS8fW5T5CQyXUyyCrMxb7qfl6oxlLZB1rW74qM572Id4CWEXOM/7fFDcd1pW2fUxMoGzJMh0T2Awhg==} + + '@expressive-code/plugin-line-numbers@0.41.4': + resolution: {integrity: sha512-h7P0OQBvz4vikkV/XXyMecFsMPHZldm4Sx/AlZVsYFLMFTJ212M40bC1BTWupFw4Rd6mfDGimSNlK4EQuENaHA==} + + '@expressive-code/plugin-shiki@0.41.4': + resolution: {integrity: sha512-zOc0tfWISODHnnpfRJyssTvSWVVe+gj08GcFYiR2a6M8fKF1w5CJkpgf7tTvnoUTuVmL1DHRmiQFUnpGjtRGog==} + + '@expressive-code/plugin-text-markers@0.41.4': + resolution: {integrity: sha512-lGqbjtIuiY+UZ+z61kKIJAZtF7H5xoT8lkxANmeoVaat+H47O5A+rr5WLmD45ezprO/NTogxHsaMfqRCuQ4vlw==} + + '@fontsource-variable/jetbrains-mono@5.2.8': + resolution: {integrity: sha512-WBA9elru6Jdp5df2mES55wuOO0WIrn3kpXnI4+W2ek5u3ZgLS9XS4gmIlcQhiZOWEKl95meYdvK7xI+ETLCq/Q==} + + '@fontsource/roboto@5.2.9': + resolution: {integrity: sha512-ZTkyHiPk74B/aj8BZWbsxD5Yu+Lq+nR64eV4wirlrac2qXR7jYk2h6JlLYuOuoruTkGQWNw2fMuKNavw7/rg0w==} + + '@iconify-json/fa6-brands@1.2.6': + resolution: {integrity: sha512-twL3X4KWcxAhbc1vz/mIDsVr+CAItk1/EIfxKUVQtpv6O4eydk5KNYqTZWdvJNHGInUgd6vKg21aWfVgb5DXEg==} + + '@iconify-json/fa6-regular@1.2.4': + resolution: {integrity: sha512-fnUS/MLj3ZAp29oRsC8/aY8Wau7NIg7VesTz3jCcE6VJBzcz95Yxp/Dl5yHvkP+aQxrNw5Lj3nrOXB4nQh+oNA==} + + '@iconify-json/fa6-solid@1.2.4': + resolution: {integrity: sha512-LmDNNdJVyvF5mPm1yxWvL8KjCc/E8LzoqnF1LNTVpyY2ZJRUlGOWuPIThdbuFBF2IovgttkIyumhyqfmlHdwKg==} + + '@iconify-json/material-symbols@1.2.50': + resolution: {integrity: sha512-71tjHR70h46LHtBFab3fAd2V/wPTO7JMV5lKnRn3IcF303LaFgAlO0BZeTJDcmCv9d0snRZmnoLZAJVD7/eisw==} + + '@iconify/svelte@4.2.0': + resolution: {integrity: sha512-fEl0T7SAPonK7xk6xUlRPDmFDZVDe2Z7ZstlqeDS/sS8ve2uyU+Qa8rTWbIqzZJlRvONkK5kVXiUf9nIc+6OOQ==} + peerDependencies: + svelte: '>4.0.0' + + '@iconify/tools@4.1.2': + resolution: {integrity: sha512-q6NzLQYEN9zkDfcyBqD3vItHcZw97w/s++3H3TBxUORr57EfHxj6tOW6fyufDjMq+Vl56WXWaPx1csBPYlI5CA==} + + '@iconify/types@2.0.0': + resolution: {integrity: sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==} + + '@iconify/utils@2.3.0': + resolution: {integrity: sha512-GmQ78prtwYW6EtzXRU1rY+KwOKfz32PD7iJh6Iyqw68GiKuoZ2A6pRtzWONz5VQJbp50mEjXh/7NkumtrAgRKA==} + + '@img/colour@1.0.0': + resolution: {integrity: sha512-A5P/LfWGFSl6nsckYtjw9da+19jB8hkJ6ACTGcDfEJ0aE+l2n2El7dsVM7UVHZQ9s2lmYMWlrS21YLy2IR1LUw==} + engines: {node: '>=18'} + + '@img/sharp-darwin-arm64@0.34.5': + resolution: {integrity: sha512-imtQ3WMJXbMY4fxb/Ndp6HBTNVtWCUI0WdobyheGf5+ad6xX8VIDO8u2xE4qc/fr08CKG/7dDseFtn6M6g/r3w==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm64] + os: [darwin] + + '@img/sharp-darwin-x64@0.34.5': + resolution: {integrity: sha512-YNEFAF/4KQ/PeW0N+r+aVVsoIY0/qxxikF2SWdp+NRkmMB7y9LBZAVqQ4yhGCm/H3H270OSykqmQMKLBhBJDEw==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [x64] + os: [darwin] + + '@img/sharp-libvips-darwin-arm64@1.2.4': + resolution: {integrity: sha512-zqjjo7RatFfFoP0MkQ51jfuFZBnVE2pRiaydKJ1G/rHZvnsrHAOcQALIi9sA5co5xenQdTugCvtb1cuf78Vf4g==} + cpu: [arm64] + os: [darwin] + + '@img/sharp-libvips-darwin-x64@1.2.4': + resolution: {integrity: sha512-1IOd5xfVhlGwX+zXv2N93k0yMONvUlANylbJw1eTah8K/Jtpi15KC+WSiaX/nBmbm2HxRM1gZ0nSdjSsrZbGKg==} + cpu: [x64] + os: [darwin] + + '@img/sharp-libvips-linux-arm64@1.2.4': + resolution: {integrity: sha512-excjX8DfsIcJ10x1Kzr4RcWe1edC9PquDRRPx3YVCvQv+U5p7Yin2s32ftzikXojb1PIFc/9Mt28/y+iRklkrw==} + cpu: [arm64] + os: [linux] + + '@img/sharp-libvips-linux-arm@1.2.4': + resolution: {integrity: sha512-bFI7xcKFELdiNCVov8e44Ia4u2byA+l3XtsAj+Q8tfCwO6BQ8iDojYdvoPMqsKDkuoOo+X6HZA0s0q11ANMQ8A==} + cpu: [arm] + os: [linux] + + '@img/sharp-libvips-linux-ppc64@1.2.4': + resolution: {integrity: sha512-FMuvGijLDYG6lW+b/UvyilUWu5Ayu+3r2d1S8notiGCIyYU/76eig1UfMmkZ7vwgOrzKzlQbFSuQfgm7GYUPpA==} + cpu: [ppc64] + os: [linux] + + '@img/sharp-libvips-linux-riscv64@1.2.4': + resolution: {integrity: sha512-oVDbcR4zUC0ce82teubSm+x6ETixtKZBh/qbREIOcI3cULzDyb18Sr/Wcyx7NRQeQzOiHTNbZFF1UwPS2scyGA==} + cpu: [riscv64] + os: [linux] + + '@img/sharp-libvips-linux-s390x@1.2.4': + resolution: {integrity: sha512-qmp9VrzgPgMoGZyPvrQHqk02uyjA0/QrTO26Tqk6l4ZV0MPWIW6LTkqOIov+J1yEu7MbFQaDpwdwJKhbJvuRxQ==} + cpu: [s390x] + os: [linux] + + '@img/sharp-libvips-linux-x64@1.2.4': + resolution: {integrity: sha512-tJxiiLsmHc9Ax1bz3oaOYBURTXGIRDODBqhveVHonrHJ9/+k89qbLl0bcJns+e4t4rvaNBxaEZsFtSfAdquPrw==} + cpu: [x64] + os: [linux] + + '@img/sharp-libvips-linuxmusl-arm64@1.2.4': + resolution: {integrity: sha512-FVQHuwx1IIuNow9QAbYUzJ+En8KcVm9Lk5+uGUQJHaZmMECZmOlix9HnH7n1TRkXMS0pGxIJokIVB9SuqZGGXw==} + cpu: [arm64] + os: [linux] + + '@img/sharp-libvips-linuxmusl-x64@1.2.4': + resolution: {integrity: sha512-+LpyBk7L44ZIXwz/VYfglaX/okxezESc6UxDSoyo2Ks6Jxc4Y7sGjpgU9s4PMgqgjj1gZCylTieNamqA1MF7Dg==} + cpu: [x64] + os: [linux] + + '@img/sharp-linux-arm64@0.34.5': + resolution: {integrity: sha512-bKQzaJRY/bkPOXyKx5EVup7qkaojECG6NLYswgktOZjaXecSAeCWiZwwiFf3/Y+O1HrauiE3FVsGxFg8c24rZg==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm64] + os: [linux] + + '@img/sharp-linux-arm@0.34.5': + resolution: {integrity: sha512-9dLqsvwtg1uuXBGZKsxem9595+ujv0sJ6Vi8wcTANSFpwV/GONat5eCkzQo/1O6zRIkh0m/8+5BjrRr7jDUSZw==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm] + os: [linux] + + '@img/sharp-linux-ppc64@0.34.5': + resolution: {integrity: sha512-7zznwNaqW6YtsfrGGDA6BRkISKAAE1Jo0QdpNYXNMHu2+0dTrPflTLNkpc8l7MUP5M16ZJcUvysVWWrMefZquA==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [ppc64] + os: [linux] + + '@img/sharp-linux-riscv64@0.34.5': + resolution: {integrity: sha512-51gJuLPTKa7piYPaVs8GmByo7/U7/7TZOq+cnXJIHZKavIRHAP77e3N2HEl3dgiqdD/w0yUfiJnII77PuDDFdw==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [riscv64] + os: [linux] + + '@img/sharp-linux-s390x@0.34.5': + resolution: {integrity: sha512-nQtCk0PdKfho3eC5MrbQoigJ2gd1CgddUMkabUj+rBevs8tZ2cULOx46E7oyX+04WGfABgIwmMC0VqieTiR4jg==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [s390x] + os: [linux] + + '@img/sharp-linux-x64@0.34.5': + resolution: {integrity: sha512-MEzd8HPKxVxVenwAa+JRPwEC7QFjoPWuS5NZnBt6B3pu7EG2Ge0id1oLHZpPJdn3OQK+BQDiw9zStiHBTJQQQQ==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [x64] + os: [linux] + + '@img/sharp-linuxmusl-arm64@0.34.5': + resolution: {integrity: sha512-fprJR6GtRsMt6Kyfq44IsChVZeGN97gTD331weR1ex1c1rypDEABN6Tm2xa1wE6lYb5DdEnk03NZPqA7Id21yg==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm64] + os: [linux] + + '@img/sharp-linuxmusl-x64@0.34.5': + resolution: {integrity: sha512-Jg8wNT1MUzIvhBFxViqrEhWDGzqymo3sV7z7ZsaWbZNDLXRJZoRGrjulp60YYtV4wfY8VIKcWidjojlLcWrd8Q==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [x64] + os: [linux] + + '@img/sharp-wasm32@0.34.5': + resolution: {integrity: sha512-OdWTEiVkY2PHwqkbBI8frFxQQFekHaSSkUIJkwzclWZe64O1X4UlUjqqqLaPbUpMOQk6FBu/HtlGXNblIs0huw==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [wasm32] + + '@img/sharp-win32-arm64@0.34.5': + resolution: {integrity: sha512-WQ3AgWCWYSb2yt+IG8mnC6Jdk9Whs7O0gxphblsLvdhSpSTtmu69ZG1Gkb6NuvxsNACwiPV6cNSZNzt0KPsw7g==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm64] + os: [win32] + + '@img/sharp-win32-ia32@0.34.5': + resolution: {integrity: sha512-FV9m/7NmeCmSHDD5j4+4pNI8Cp3aW+JvLoXcTUo0IqyjSfAZJ8dIUmijx1qaJsIiU+Hosw6xM5KijAWRJCSgNg==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [ia32] + os: [win32] + + '@img/sharp-win32-x64@0.34.5': + resolution: {integrity: sha512-+29YMsqY2/9eFEiW93eqWnuLcWcufowXewwSNIT6UwZdUUCrM3oFjMWH/Z6/TMmb4hlFenmfAVbpWeup2jryCw==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [x64] + os: [win32] + + '@isaacs/cliui@8.0.2': + resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} + engines: {node: '>=12'} + + '@jridgewell/gen-mapping@0.3.13': + resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==} + + '@jridgewell/remapping@2.3.5': + resolution: {integrity: sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==} + + '@jridgewell/resolve-uri@3.1.2': + resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} + engines: {node: '>=6.0.0'} + + '@jridgewell/source-map@0.3.10': + resolution: {integrity: sha512-0pPkgz9dY+bijgistcTTJ5mR+ocqRXLuhXHYdzoMmmoJ2C9S46RCm2GMUbatPEUK9Yjy26IrAy8D/M00lLkv+Q==} + + '@jridgewell/sourcemap-codec@1.5.5': + resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==} + + '@jridgewell/trace-mapping@0.3.31': + resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==} + + '@nodelib/fs.scandir@2.1.5': + resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} + engines: {node: '>= 8'} + + '@nodelib/fs.stat@2.0.5': + resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} + engines: {node: '>= 8'} + + '@nodelib/fs.walk@1.2.8': + resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} + engines: {node: '>= 8'} + + '@oslojs/encoding@1.1.0': + resolution: {integrity: sha512-70wQhgYmndg4GCPxPPxPGevRKqTIJ2Nh4OkiMWmDAVYsTQ+Ta7Sq+rPevXyXGdzr30/qZBnyOalCszoMxlyldQ==} + + '@pagefind/darwin-arm64@1.4.0': + resolution: {integrity: sha512-2vMqkbv3lbx1Awea90gTaBsvpzgRs7MuSgKDxW0m9oV1GPZCZbZBJg/qL83GIUEN2BFlY46dtUZi54pwH+/pTQ==} + cpu: [arm64] + os: [darwin] + + '@pagefind/darwin-x64@1.4.0': + resolution: {integrity: sha512-e7JPIS6L9/cJfow+/IAqknsGqEPjJnVXGjpGm25bnq+NPdoD3c/7fAwr1OXkG4Ocjx6ZGSCijXEV4ryMcH2E3A==} + cpu: [x64] + os: [darwin] + + '@pagefind/freebsd-x64@1.4.0': + resolution: {integrity: sha512-WcJVypXSZ+9HpiqZjFXMUobfFfZZ6NzIYtkhQ9eOhZrQpeY5uQFqNWLCk7w9RkMUwBv1HAMDW3YJQl/8OqsV0Q==} + cpu: [x64] + os: [freebsd] + + '@pagefind/linux-arm64@1.4.0': + resolution: {integrity: sha512-PIt8dkqt4W06KGmQjONw7EZbhDF+uXI7i0XtRLN1vjCUxM9vGPdtJc2mUyVPevjomrGz5M86M8bqTr6cgDp1Uw==} + cpu: [arm64] + os: [linux] + + '@pagefind/linux-x64@1.4.0': + resolution: {integrity: sha512-z4oddcWwQ0UHrTHR8psLnVlz6USGJ/eOlDPTDYZ4cI8TK8PgwRUPQZp9D2iJPNIPcS6Qx/E4TebjuGJOyK8Mmg==} + cpu: [x64] + os: [linux] + + '@pagefind/windows-x64@1.4.0': + resolution: {integrity: sha512-NkT+YAdgS2FPCn8mIA9bQhiBs+xmniMGq1LFPDhcFn0+2yIUEiIG06t7bsZlhdjknEQRTSdT7YitP6fC5qwP0g==} + cpu: [x64] + os: [win32] + + '@parcel/watcher-android-arm64@2.5.1': + resolution: {integrity: sha512-KF8+j9nNbUN8vzOFDpRMsaKBHZ/mcjEjMToVMJOhTozkDonQFFrRcfdLWn6yWKCmJKmdVxSgHiYvTCef4/qcBA==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] + os: [android] + + '@parcel/watcher-darwin-arm64@2.5.1': + resolution: {integrity: sha512-eAzPv5osDmZyBhou8PoF4i6RQXAfeKL9tjb3QzYuccXFMQU0ruIc/POh30ePnaOyD1UXdlKguHBmsTs53tVoPw==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] + os: [darwin] + + '@parcel/watcher-darwin-x64@2.5.1': + resolution: {integrity: sha512-1ZXDthrnNmwv10A0/3AJNZ9JGlzrF82i3gNQcWOzd7nJ8aj+ILyW1MTxVk35Db0u91oD5Nlk9MBiujMlwmeXZg==} + engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [darwin] + + '@parcel/watcher-freebsd-x64@2.5.1': + resolution: {integrity: sha512-SI4eljM7Flp9yPuKi8W0ird8TI/JK6CSxju3NojVI6BjHsTyK7zxA9urjVjEKJ5MBYC+bLmMcbAWlZ+rFkLpJQ==} + engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [freebsd] + + '@parcel/watcher-linux-arm-glibc@2.5.1': + resolution: {integrity: sha512-RCdZlEyTs8geyBkkcnPWvtXLY44BCeZKmGYRtSgtwwnHR4dxfHRG3gR99XdMEdQ7KeiDdasJwwvNSF5jKtDwdA==} + engines: {node: '>= 10.0.0'} + cpu: [arm] + os: [linux] + + '@parcel/watcher-linux-arm-musl@2.5.1': + resolution: {integrity: sha512-6E+m/Mm1t1yhB8X412stiKFG3XykmgdIOqhjWj+VL8oHkKABfu/gjFj8DvLrYVHSBNC+/u5PeNrujiSQ1zwd1Q==} + engines: {node: '>= 10.0.0'} + cpu: [arm] + os: [linux] + + '@parcel/watcher-linux-arm64-glibc@2.5.1': + resolution: {integrity: sha512-LrGp+f02yU3BN9A+DGuY3v3bmnFUggAITBGriZHUREfNEzZh/GO06FF5u2kx8x+GBEUYfyTGamol4j3m9ANe8w==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] + os: [linux] + + '@parcel/watcher-linux-arm64-musl@2.5.1': + resolution: {integrity: sha512-cFOjABi92pMYRXS7AcQv9/M1YuKRw8SZniCDw0ssQb/noPkRzA+HBDkwmyOJYp5wXcsTrhxO0zq1U11cK9jsFg==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] + os: [linux] + + '@parcel/watcher-linux-x64-glibc@2.5.1': + resolution: {integrity: sha512-GcESn8NZySmfwlTsIur+49yDqSny2IhPeZfXunQi48DMugKeZ7uy1FX83pO0X22sHntJ4Ub+9k34XQCX+oHt2A==} + engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [linux] + + '@parcel/watcher-linux-x64-musl@2.5.1': + resolution: {integrity: sha512-n0E2EQbatQ3bXhcH2D1XIAANAcTZkQICBPVaxMeaCVBtOpBZpWJuf7LwyWPSBDITb7In8mqQgJ7gH8CILCURXg==} + engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [linux] + + '@parcel/watcher-win32-arm64@2.5.1': + resolution: {integrity: sha512-RFzklRvmc3PkjKjry3hLF9wD7ppR4AKcWNzH7kXR7GUe0Igb3Nz8fyPwtZCSquGrhU5HhUNDr/mKBqj7tqA2Vw==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] + os: [win32] + + '@parcel/watcher-win32-ia32@2.5.1': + resolution: {integrity: sha512-c2KkcVN+NJmuA7CGlaGD1qJh1cLfDnQsHjE89E60vUEMlqduHGCdCLJCID5geFVM0dOtA3ZiIO8BoEQmzQVfpQ==} + engines: {node: '>= 10.0.0'} + cpu: [ia32] + os: [win32] + + '@parcel/watcher-win32-x64@2.5.1': + resolution: {integrity: sha512-9lHBdJITeNR++EvSQVUcaZoWupyHfXe1jZvGZ06O/5MflPcuPLtEphScIBL+AiCWBO46tDSHzWyD0uDmmZqsgA==} + engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [win32] + + '@parcel/watcher@2.5.1': + resolution: {integrity: sha512-dfUnCxiN9H4ap84DvD2ubjw+3vUNpstxa0TneY/Paat8a3R4uQZDLSvWjmznAY/DoahqTHl9V46HF/Zs3F29pg==} + engines: {node: '>= 10.0.0'} + + '@pkgjs/parseargs@0.11.0': + resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} + engines: {node: '>=14'} + + '@rollup/plugin-alias@3.1.9': + resolution: {integrity: sha512-QI5fsEvm9bDzt32k39wpOwZhVzRcL5ydcffUHMyLVaVaLeC70I8TJZ17F1z1eMoLu4E/UOcH9BWVkKpIKdrfiw==} + engines: {node: '>=8.0.0'} + peerDependencies: + rollup: ^1.20.0||^2.0.0 + + '@rollup/plugin-babel@5.3.1': + resolution: {integrity: sha512-WFfdLWU/xVWKeRQnKmIAQULUI7Il0gZnBIH/ZFO069wYIfPu+8zrfp/KMW0atmELoRDq8FbiP3VCss9MhCut7Q==} + engines: {node: '>= 10.0.0'} + peerDependencies: + '@babel/core': ^7.0.0 + '@types/babel__core': ^7.1.9 + rollup: ^1.20.0||^2.0.0 + peerDependenciesMeta: + '@types/babel__core': + optional: true + + '@rollup/plugin-commonjs@17.1.0': + resolution: {integrity: sha512-PoMdXCw0ZyvjpCMT5aV4nkL0QywxP29sODQsSGeDpr/oI49Qq9tRtAsb/LbYbDzFlOydVEqHmmZWFtXJEAX9ew==} + engines: {node: '>= 8.0.0'} + peerDependencies: + rollup: ^2.30.0 + + '@rollup/plugin-json@4.1.0': + resolution: {integrity: sha512-yfLbTdNS6amI/2OpmbiBoW12vngr5NW2jCJVZSBEz+H5KfUJZ2M7sDjk0U6GOOdCWFVScShte29o9NezJ53TPw==} + peerDependencies: + rollup: ^1.20.0 || ^2.0.0 + + '@rollup/plugin-node-resolve@11.2.1': + resolution: {integrity: sha512-yc2n43jcqVyGE2sqV5/YCmocy9ArjVAP/BeXyTtADTBBX6V0e5UMqwO8CdQ0kzjb6zu5P1qMzsScCMRvE9OlVg==} + engines: {node: '>= 10.0.0'} + peerDependencies: + rollup: ^1.20.0||^2.0.0 + + '@rollup/plugin-yaml@4.1.2': + resolution: {integrity: sha512-RpupciIeZMUqhgFE97ba0s98mOFS7CWzN3EJNhJkqSv9XLlWYtwVdtE6cDw6ASOF/sZVFS7kRJXftaqM2Vakdw==} + engines: {node: '>=14.0.0'} + peerDependencies: + rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 + peerDependenciesMeta: + rollup: + optional: true + + '@rollup/pluginutils@3.1.0': + resolution: {integrity: sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==} + engines: {node: '>= 8.0.0'} + peerDependencies: + rollup: ^1.20.0||^2.0.0 + + '@rollup/pluginutils@4.2.1': + resolution: {integrity: sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ==} + engines: {node: '>= 8.0.0'} + + '@rollup/pluginutils@5.1.4': + resolution: {integrity: sha512-USm05zrsFxYLPdWWq+K3STlWiT/3ELn3RcV5hJMghpeAIhxfsUIg6mt12CBJBInWMV4VneoV7SfGv8xIwo2qNQ==} + engines: {node: '>=14.0.0'} + peerDependencies: + rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 + peerDependenciesMeta: + rollup: + optional: true + + '@rollup/pluginutils@5.3.0': + resolution: {integrity: sha512-5EdhGZtnu3V88ces7s53hhfK5KSASnJZv8Lulpc04cWO3REESroJXg73DFsOmgbU2BhwV0E20bu2IDZb3VKW4Q==} + engines: {node: '>=14.0.0'} + peerDependencies: + rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 + peerDependenciesMeta: + rollup: + optional: true + + '@rollup/rollup-android-arm-eabi@4.52.2': + resolution: {integrity: sha512-o3pcKzJgSGt4d74lSZ+OCnHwkKBeAbFDmbEm5gg70eA8VkyCuC/zV9TwBnmw6VjDlRdF4Pshfb+WE9E6XY1PoQ==} + cpu: [arm] + os: [android] + + '@rollup/rollup-android-arm-eabi@4.53.3': + resolution: {integrity: sha512-mRSi+4cBjrRLoaal2PnqH82Wqyb+d3HsPUN/W+WslCXsZsyHa9ZeQQX/pQsZaVIWDkPcpV6jJ+3KLbTbgnwv8w==} + cpu: [arm] + os: [android] + + '@rollup/rollup-android-arm64@4.52.2': + resolution: {integrity: sha512-cqFSWO5tX2vhC9hJTK8WAiPIm4Q8q/cU8j2HQA0L3E1uXvBYbOZMhE2oFL8n2pKB5sOCHY6bBuHaRwG7TkfJyw==} + cpu: [arm64] + os: [android] + + '@rollup/rollup-android-arm64@4.53.3': + resolution: {integrity: sha512-CbDGaMpdE9sh7sCmTrTUyllhrg65t6SwhjlMJsLr+J8YjFuPmCEjbBSx4Z/e4SmDyH3aB5hGaJUP2ltV/vcs4w==} + cpu: [arm64] + os: [android] + + '@rollup/rollup-darwin-arm64@4.52.2': + resolution: {integrity: sha512-vngduywkkv8Fkh3wIZf5nFPXzWsNsVu1kvtLETWxTFf/5opZmflgVSeLgdHR56RQh71xhPhWoOkEBvbehwTlVA==} + cpu: [arm64] + os: [darwin] + + '@rollup/rollup-darwin-arm64@4.53.3': + resolution: {integrity: sha512-Nr7SlQeqIBpOV6BHHGZgYBuSdanCXuw09hon14MGOLGmXAFYjx1wNvquVPmpZnl0tLjg25dEdr4IQ6GgyToCUA==} + cpu: [arm64] + os: [darwin] + + '@rollup/rollup-darwin-x64@4.52.2': + resolution: {integrity: sha512-h11KikYrUCYTrDj6h939hhMNlqU2fo/X4NB0OZcys3fya49o1hmFaczAiJWVAFgrM1NCP6RrO7lQKeVYSKBPSQ==} + cpu: [x64] + os: [darwin] + + '@rollup/rollup-darwin-x64@4.53.3': + resolution: {integrity: sha512-DZ8N4CSNfl965CmPktJ8oBnfYr3F8dTTNBQkRlffnUarJ2ohudQD17sZBa097J8xhQ26AwhHJ5mvUyQW8ddTsQ==} + cpu: [x64] + os: [darwin] + + '@rollup/rollup-freebsd-arm64@4.52.2': + resolution: {integrity: sha512-/eg4CI61ZUkLXxMHyVlmlGrSQZ34xqWlZNW43IAU4RmdzWEx0mQJ2mN/Cx4IHLVZFL6UBGAh+/GXhgvGb+nVxw==} + cpu: [arm64] + os: [freebsd] + + '@rollup/rollup-freebsd-arm64@4.53.3': + resolution: {integrity: sha512-yMTrCrK92aGyi7GuDNtGn2sNW+Gdb4vErx4t3Gv/Tr+1zRb8ax4z8GWVRfr3Jw8zJWvpGHNpss3vVlbF58DZ4w==} + cpu: [arm64] + os: [freebsd] + + '@rollup/rollup-freebsd-x64@4.52.2': + resolution: {integrity: sha512-QOWgFH5X9+p+S1NAfOqc0z8qEpJIoUHf7OWjNUGOeW18Mx22lAUOiA9b6r2/vpzLdfxi/f+VWsYjUOMCcYh0Ng==} + cpu: [x64] + os: [freebsd] + + '@rollup/rollup-freebsd-x64@4.53.3': + resolution: {integrity: sha512-lMfF8X7QhdQzseM6XaX0vbno2m3hlyZFhwcndRMw8fbAGUGL3WFMBdK0hbUBIUYcEcMhVLr1SIamDeuLBnXS+Q==} + cpu: [x64] + os: [freebsd] + + '@rollup/rollup-linux-arm-gnueabihf@4.52.2': + resolution: {integrity: sha512-kDWSPafToDd8LcBYd1t5jw7bD5Ojcu12S3uT372e5HKPzQt532vW+rGFFOaiR0opxePyUkHrwz8iWYEyH1IIQA==} + cpu: [arm] + os: [linux] + + '@rollup/rollup-linux-arm-gnueabihf@4.53.3': + resolution: {integrity: sha512-k9oD15soC/Ln6d2Wv/JOFPzZXIAIFLp6B+i14KhxAfnq76ajt0EhYc5YPeX6W1xJkAdItcVT+JhKl1QZh44/qw==} + cpu: [arm] + os: [linux] + + '@rollup/rollup-linux-arm-musleabihf@4.52.2': + resolution: {integrity: sha512-gKm7Mk9wCv6/rkzwCiUC4KnevYhlf8ztBrDRT9g/u//1fZLapSRc+eDZj2Eu2wpJ+0RzUKgtNijnVIB4ZxyL+w==} + cpu: [arm] + os: [linux] + + '@rollup/rollup-linux-arm-musleabihf@4.53.3': + resolution: {integrity: sha512-vTNlKq+N6CK/8UktsrFuc+/7NlEYVxgaEgRXVUVK258Z5ymho29skzW1sutgYjqNnquGwVUObAaxae8rZ6YMhg==} + cpu: [arm] + os: [linux] + + '@rollup/rollup-linux-arm64-gnu@4.52.2': + resolution: {integrity: sha512-66lA8vnj5mB/rtDNwPgrrKUOtCLVQypkyDa2gMfOefXK6rcZAxKLO9Fy3GkW8VkPnENv9hBkNOFfGLf6rNKGUg==} + cpu: [arm64] + os: [linux] + + '@rollup/rollup-linux-arm64-gnu@4.53.3': + resolution: {integrity: sha512-RGrFLWgMhSxRs/EWJMIFM1O5Mzuz3Xy3/mnxJp/5cVhZ2XoCAxJnmNsEyeMJtpK+wu0FJFWz+QF4mjCA7AUQ3w==} + cpu: [arm64] + os: [linux] + + '@rollup/rollup-linux-arm64-musl@4.52.2': + resolution: {integrity: sha512-s+OPucLNdJHvuZHuIz2WwncJ+SfWHFEmlC5nKMUgAelUeBUnlB4wt7rXWiyG4Zn07uY2Dd+SGyVa9oyLkVGOjA==} + cpu: [arm64] + os: [linux] + + '@rollup/rollup-linux-arm64-musl@4.53.3': + resolution: {integrity: sha512-kASyvfBEWYPEwe0Qv4nfu6pNkITLTb32p4yTgzFCocHnJLAHs+9LjUu9ONIhvfT/5lv4YS5muBHyuV84epBo/A==} + cpu: [arm64] + os: [linux] + + '@rollup/rollup-linux-loong64-gnu@4.52.2': + resolution: {integrity: sha512-8wTRM3+gVMDLLDdaT6tKmOE3lJyRy9NpJUS/ZRWmLCmOPIJhVyXwjBo+XbrrwtV33Em1/eCTd5TuGJm4+DmYjw==} + cpu: [loong64] + os: [linux] + + '@rollup/rollup-linux-loong64-gnu@4.53.3': + resolution: {integrity: sha512-JiuKcp2teLJwQ7vkJ95EwESWkNRFJD7TQgYmCnrPtlu50b4XvT5MOmurWNrCj3IFdyjBQ5p9vnrX4JM6I8OE7g==} + cpu: [loong64] + os: [linux] + + '@rollup/rollup-linux-ppc64-gnu@4.52.2': + resolution: {integrity: sha512-6yqEfgJ1anIeuP2P/zhtfBlDpXUb80t8DpbYwXQ3bQd95JMvUaqiX+fKqYqUwZXqdJDd8xdilNtsHM2N0cFm6A==} + cpu: [ppc64] + os: [linux] + + '@rollup/rollup-linux-ppc64-gnu@4.53.3': + resolution: {integrity: sha512-EoGSa8nd6d3T7zLuqdojxC20oBfNT8nexBbB/rkxgKj5T5vhpAQKKnD+h3UkoMuTyXkP5jTjK/ccNRmQrPNDuw==} + cpu: [ppc64] + os: [linux] + + '@rollup/rollup-linux-riscv64-gnu@4.52.2': + resolution: {integrity: sha512-sshYUiYVSEI2B6dp4jMncwxbrUqRdNApF2c3bhtLAU0qA8Lrri0p0NauOsTWh3yCCCDyBOjESHMExonp7Nzc0w==} + cpu: [riscv64] + os: [linux] + + '@rollup/rollup-linux-riscv64-gnu@4.53.3': + resolution: {integrity: sha512-4s+Wped2IHXHPnAEbIB0YWBv7SDohqxobiiPA1FIWZpX+w9o2i4LezzH/NkFUl8LRci/8udci6cLq+jJQlh+0g==} + cpu: [riscv64] + os: [linux] + + '@rollup/rollup-linux-riscv64-musl@4.52.2': + resolution: {integrity: sha512-duBLgd+3pqC4MMwBrKkFxaZerUxZcYApQVC5SdbF5/e/589GwVvlRUnyqMFbM8iUSb1BaoX/3fRL7hB9m2Pj8Q==} + cpu: [riscv64] + os: [linux] + + '@rollup/rollup-linux-riscv64-musl@4.53.3': + resolution: {integrity: sha512-68k2g7+0vs2u9CxDt5ktXTngsxOQkSEV/xBbwlqYcUrAVh6P9EgMZvFsnHy4SEiUl46Xf0IObWVbMvPrr2gw8A==} + cpu: [riscv64] + os: [linux] + + '@rollup/rollup-linux-s390x-gnu@4.52.2': + resolution: {integrity: sha512-tzhYJJidDUVGMgVyE+PmxENPHlvvqm1KILjjZhB8/xHYqAGeizh3GBGf9u6WdJpZrz1aCpIIHG0LgJgH9rVjHQ==} + cpu: [s390x] + os: [linux] + + '@rollup/rollup-linux-s390x-gnu@4.53.3': + resolution: {integrity: sha512-VYsFMpULAz87ZW6BVYw3I6sWesGpsP9OPcyKe8ofdg9LHxSbRMd7zrVrr5xi/3kMZtpWL/wC+UIJWJYVX5uTKg==} + cpu: [s390x] + os: [linux] + + '@rollup/rollup-linux-x64-gnu@4.52.2': + resolution: {integrity: sha512-opH8GSUuVcCSSyHHcl5hELrmnk4waZoVpgn/4FDao9iyE4WpQhyWJ5ryl5M3ocp4qkRuHfyXnGqg8M9oKCEKRA==} + cpu: [x64] + os: [linux] + + '@rollup/rollup-linux-x64-gnu@4.53.3': + resolution: {integrity: sha512-3EhFi1FU6YL8HTUJZ51imGJWEX//ajQPfqWLI3BQq4TlvHy4X0MOr5q3D2Zof/ka0d5FNdPwZXm3Yyib/UEd+w==} + cpu: [x64] + os: [linux] + + '@rollup/rollup-linux-x64-musl@4.52.2': + resolution: {integrity: sha512-LSeBHnGli1pPKVJ79ZVJgeZWWZXkEe/5o8kcn23M8eMKCUANejchJbF/JqzM4RRjOJfNRhKJk8FuqL1GKjF5oQ==} + cpu: [x64] + os: [linux] + + '@rollup/rollup-linux-x64-musl@4.53.3': + resolution: {integrity: sha512-eoROhjcc6HbZCJr+tvVT8X4fW3/5g/WkGvvmwz/88sDtSJzO7r/blvoBDgISDiCjDRZmHpwud7h+6Q9JxFwq1Q==} + cpu: [x64] + os: [linux] + + '@rollup/rollup-openharmony-arm64@4.52.2': + resolution: {integrity: sha512-uPj7MQ6/s+/GOpolavm6BPo+6CbhbKYyZHUDvZ/SmJM7pfDBgdGisFX3bY/CBDMg2ZO4utfhlApkSfZ92yXw7Q==} + cpu: [arm64] + os: [openharmony] + + '@rollup/rollup-openharmony-arm64@4.53.3': + resolution: {integrity: sha512-OueLAWgrNSPGAdUdIjSWXw+u/02BRTcnfw9PN41D2vq/JSEPnJnVuBgw18VkN8wcd4fjUs+jFHVM4t9+kBSNLw==} + cpu: [arm64] + os: [openharmony] + + '@rollup/rollup-win32-arm64-msvc@4.52.2': + resolution: {integrity: sha512-Z9MUCrSgIaUeeHAiNkm3cQyst2UhzjPraR3gYYfOjAuZI7tcFRTOD+4cHLPoS/3qinchth+V56vtqz1Tv+6KPA==} + cpu: [arm64] + os: [win32] + + '@rollup/rollup-win32-arm64-msvc@4.53.3': + resolution: {integrity: sha512-GOFuKpsxR/whszbF/bzydebLiXIHSgsEUp6M0JI8dWvi+fFa1TD6YQa4aSZHtpmh2/uAlj/Dy+nmby3TJ3pkTw==} + cpu: [arm64] + os: [win32] + + '@rollup/rollup-win32-ia32-msvc@4.52.2': + resolution: {integrity: sha512-+GnYBmpjldD3XQd+HMejo+0gJGwYIOfFeoBQv32xF/RUIvccUz20/V6Otdv+57NE70D5pa8W/jVGDoGq0oON4A==} + cpu: [ia32] + os: [win32] + + '@rollup/rollup-win32-ia32-msvc@4.53.3': + resolution: {integrity: sha512-iah+THLcBJdpfZ1TstDFbKNznlzoxa8fmnFYK4V67HvmuNYkVdAywJSoteUszvBQ9/HqN2+9AZghbajMsFT+oA==} + cpu: [ia32] + os: [win32] + + '@rollup/rollup-win32-x64-gnu@4.52.2': + resolution: {integrity: sha512-ApXFKluSB6kDQkAqZOKXBjiaqdF1BlKi+/eqnYe9Ee7U2K3pUDKsIyr8EYm/QDHTJIM+4X+lI0gJc3TTRhd+dA==} + cpu: [x64] + os: [win32] + + '@rollup/rollup-win32-x64-gnu@4.53.3': + resolution: {integrity: sha512-J9QDiOIZlZLdcot5NXEepDkstocktoVjkaKUtqzgzpt2yWjGlbYiKyp05rWwk4nypbYUNoFAztEgixoLaSETkg==} + cpu: [x64] + os: [win32] + + '@rollup/rollup-win32-x64-msvc@4.52.2': + resolution: {integrity: sha512-ARz+Bs8kY6FtitYM96PqPEVvPXqEZmPZsSkXvyX19YzDqkCaIlhCieLLMI5hxO9SRZ2XtCtm8wxhy0iJ2jxNfw==} + cpu: [x64] + os: [win32] + + '@rollup/rollup-win32-x64-msvc@4.53.3': + resolution: {integrity: sha512-UhTd8u31dXadv0MopwGgNOBpUVROFKWVQgAg5N1ESyCz8AuBcMqm4AuTjrwgQKGDfoFuz02EuMRHQIw/frmYKQ==} + cpu: [x64] + os: [win32] + + '@shikijs/core@3.13.0': + resolution: {integrity: sha512-3P8rGsg2Eh2qIHekwuQjzWhKI4jV97PhvYjYUzGqjvJfqdQPz+nMlfWahU24GZAyW1FxFI1sYjyhfh5CoLmIUA==} + + '@shikijs/core@3.19.0': + resolution: {integrity: sha512-L7SrRibU7ZoYi1/TrZsJOFAnnHyLTE1SwHG1yNWjZIVCqjOEmCSuK2ZO9thnRbJG6TOkPp+Z963JmpCNw5nzvA==} + + '@shikijs/engine-javascript@3.13.0': + resolution: {integrity: sha512-Ty7xv32XCp8u0eQt8rItpMs6rU9Ki6LJ1dQOW3V/56PKDcpvfHPnYFbsx5FFUP2Yim34m/UkazidamMNVR4vKg==} + + '@shikijs/engine-javascript@3.19.0': + resolution: {integrity: sha512-ZfWJNm2VMhKkQIKT9qXbs76RRcT0SF/CAvEz0+RkpUDAoDaCx0uFdCGzSRiD9gSlhm6AHkjdieOBJMaO2eC1rQ==} + + '@shikijs/engine-oniguruma@3.13.0': + resolution: {integrity: sha512-O42rBGr4UDSlhT2ZFMxqM7QzIU+IcpoTMzb3W7AlziI1ZF7R8eS2M0yt5Ry35nnnTX/LTLXFPUjRFCIW+Operg==} + + '@shikijs/engine-oniguruma@3.19.0': + resolution: {integrity: sha512-1hRxtYIJfJSZeM5ivbUXv9hcJP3PWRo5prG/V2sWwiubUKTa+7P62d2qxCW8jiVFX4pgRHhnHNp+qeR7Xl+6kg==} + + '@shikijs/langs@3.13.0': + resolution: {integrity: sha512-672c3WAETDYHwrRP0yLy3W1QYB89Hbpj+pO4KhxK6FzIrDI2FoEXNiNCut6BQmEApYLfuYfpgOZaqbY+E9b8wQ==} + + '@shikijs/langs@3.19.0': + resolution: {integrity: sha512-dBMFzzg1QiXqCVQ5ONc0z2ebyoi5BKz+MtfByLm0o5/nbUu3Iz8uaTCa5uzGiscQKm7lVShfZHU1+OG3t5hgwg==} + + '@shikijs/themes@3.13.0': + resolution: {integrity: sha512-Vxw1Nm1/Od8jyA7QuAenaV78BG2nSr3/gCGdBkLpfLscddCkzkL36Q5b67SrLLfvAJTOUzW39x4FHVCFriPVgg==} + + '@shikijs/themes@3.19.0': + resolution: {integrity: sha512-H36qw+oh91Y0s6OlFfdSuQ0Ld+5CgB/VE6gNPK+Hk4VRbVG/XQgkjnt4KzfnnoO6tZPtKJKHPjwebOCfjd6F8A==} + + '@shikijs/types@3.13.0': + resolution: {integrity: sha512-oM9P+NCFri/mmQ8LoFGVfVyemm5Hi27330zuOBp0annwJdKH1kOLndw3zCtAVDehPLg9fKqoEx3Ht/wNZxolfw==} + + '@shikijs/types@3.19.0': + resolution: {integrity: sha512-Z2hdeEQlzuntf/BZpFG8a+Fsw9UVXdML7w0o3TgSXV3yNESGon+bs9ITkQb3Ki7zxoXOOu5oJWqZ2uto06V9iQ==} + + '@shikijs/vscode-textmate@10.0.2': + resolution: {integrity: sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==} + + '@surma/rollup-plugin-off-main-thread@2.2.3': + resolution: {integrity: sha512-lR8q/9W7hZpMWweNiAKU7NQerBnzQQLvi8qnTDU/fxItPhtZVMbPV3lbCwjhIlNBe9Bbr5V+KHshvWmVSG9cxQ==} + + '@sveltejs/acorn-typescript@1.0.6': + resolution: {integrity: sha512-4awhxtMh4cx9blePWl10HRHj8Iivtqj+2QdDCSMDzxG+XKa9+VCNupQuCuvzEhYPzZSrX+0gC+0lHA/0fFKKQQ==} + peerDependencies: + acorn: ^8.9.0 + + '@sveltejs/vite-plugin-svelte-inspector@4.0.1': + resolution: {integrity: sha512-J/Nmb2Q2y7mck2hyCX4ckVHcR5tu2J+MtBEQqpDrrgELZ2uvraQcK/ioCV61AqkdXFgriksOKIceDcQmqnGhVw==} + engines: {node: ^18.0.0 || ^20.0.0 || >=22} + peerDependencies: + '@sveltejs/vite-plugin-svelte': ^5.0.0 + svelte: ^5.0.0 + vite: ^6.0.0 + + '@sveltejs/vite-plugin-svelte@5.1.1': + resolution: {integrity: sha512-Y1Cs7hhTc+a5E9Va/xwKlAJoariQyHY+5zBgCZg4PFWNYQ1nMN9sjK1zhw1gK69DuqVP++sht/1GZg1aRwmAXQ==} + engines: {node: ^18.0.0 || ^20.0.0 || >=22} + peerDependencies: + svelte: ^5.0.0 + vite: ^6.0.0 + + '@swc/helpers@0.5.17': + resolution: {integrity: sha512-5IKx/Y13RsYd+sauPb2x+U/xZikHjolzfuDgTAl/Tdf3Q8rslRvC19NKDLgAJQ6wsqADk10ntlv08nPFw/gO/A==} + + '@swup/a11y-plugin@5.0.0': + resolution: {integrity: sha512-t0pVWAVea+Imjj05n9QMPfqZhw9i5rx7BV/l3Ejeic+X3Qs0VZwVvEJIcdqireCVJgAJGZAPlmgbiuaj5UHJaQ==} + peerDependencies: + swup: ^4.0.0 + + '@swup/astro@1.7.0': + resolution: {integrity: sha512-OxZskzeYkEZ4+McbwJKyD018sHNlrKQLdtHzlmNjivrzQY/dB7ncnWqDs3d4IkA7Y+ydNjpwBqpR/asjDhTiag==} + + '@swup/body-class-plugin@3.3.0': + resolution: {integrity: sha512-4h/6mAgDd0+ml8Gc2kX8tikIR0HZZLF+WTnfm0JTVrGDw74bgEBenbsaWFfIS+gn4RWKZdWBUOfaZ+Im5J7Gvw==} + peerDependencies: + swup: ^4.6.0 + + '@swup/browserslist-config@1.0.1': + resolution: {integrity: sha512-/3nBqG7LqmK1uqaCSTA6s2NwQBDQXNyLAFBzlX6uaxqjIQcAZyq6K+sgcQ40oj02Vn/2mLSkeL9DOfP7BPOwVA==} + + '@swup/debug-plugin@4.1.0': + resolution: {integrity: sha512-R+RP4hjoeXrO+wowSswaTM4P05lu6iDg6UwdbQn0wfJ082KiUpH+DDwHYNOatxusKVExFuhLec+X9IbyAyiv8w==} + peerDependencies: + swup: ^4.0.0 + + '@swup/fade-theme@2.0.1': + resolution: {integrity: sha512-viQ23vcv47lTz2nYFSDqYR0cbfAEvWOtsNepERGDD221guwSHU7lNz3zDfvWsFGSjP/nCmMUGS5p204rizkdgw==} + peerDependencies: + swup: ^4.0.0 + + '@swup/forms-plugin@3.6.0': + resolution: {integrity: sha512-pRN6OR5wR27LvJqQOlCgu1fP9Z0ZsGauxWOE6nRCtjP1+98wlGTMiMsQ+jGvvs+IOK9IDTJQ7jvprnJAZaw9zw==} + peerDependencies: + swup: ^4.6.0 + + '@swup/fragment-plugin@1.1.2': + resolution: {integrity: sha512-4kW6PaxuF+ydQk023j7t7rhbbWOTzpmWe4wZ4eSKutDSOErpajjkREsml9kOIx9apCzUVfSrwg9U6yjEx77q7A==} + peerDependencies: + swup: ^4.6.0 + + '@swup/head-plugin@2.3.1': + resolution: {integrity: sha512-kdv60fO9c0/3+K40f7Fj/uV34nSuuPeCsld83J5uVVFizOmoovA737C5M1Iqac5Spf2GLU7q+mhN6AbohSIBjA==} + peerDependencies: + swup: ^4.6.0 + + '@swup/overlay-theme@2.0.1': + resolution: {integrity: sha512-8SGIvq8av5cFTxaYy1isZsQXWme2d1onE/cy4QpsyRlxiyhzXbYDAgrBLZzY0Ev8TGf3dYFxXg195eOMW1OP+Q==} + peerDependencies: + swup: ^4.0.0 + + '@swup/parallel-plugin@0.4.0': + resolution: {integrity: sha512-un37RpdFz2vuJV1r9Hr0nCl5qgloN/Z3SczC3wi1XfkiHtzZ8kFTcm5pIW5rUkDVwtCTil44mlAA/STouBEgDw==} + peerDependencies: + swup: ^4.6.0 + + '@swup/plugin@3.0.1': + resolution: {integrity: sha512-A9yiJeKTmQ9kac2Eo3MbMWW+Tiw23W5OSzAHVTCfW6n5zze6dexY3FLEUSDTcvRgciknvXfMZ9JTnebbvCKKWw==} + hasBin: true + + '@swup/plugin@4.0.0': + resolution: {integrity: sha512-3Kq31BJxnzoPg643YxGoWQggoU6VPKZpdE5CqqmP7wwkpCYTzkRmrfcQ29mGhsSS7xfS7D33iZoBiwY+wPoo2A==} + + '@swup/preload-plugin@3.2.11': + resolution: {integrity: sha512-dq50u+d8L+63/pU6dUDnypuBoF49ubjRzRJqitGem2K7wRn7xccxRSvdyeGKdA2vNvzGDAmLfwVTZdSotvvDrw==} + peerDependencies: + swup: ^4.0.0 + + '@swup/prettier-config@1.1.0': + resolution: {integrity: sha512-EF4DMdIGieEsuY2XK0PuLf7Uw7yUQOMbA6IdCMvvRvKXj03WLLpnNIFfFp+6hmMtXRSUE88VBpRyp6Giiu1Pbg==} + + '@swup/progress-plugin@3.2.0': + resolution: {integrity: sha512-Ur+D4+aee9swR6pn7JbEyGMwVP1BTcN5ygjlno7IaSQ/vMZbuJ73po1RkKlIi86p+/PZ+1kynkH4K4eMZuHKKg==} + peerDependencies: + swup: ^4.0.0 + + '@swup/route-name-plugin@4.1.0': + resolution: {integrity: sha512-1tw3WeExEKwI3pVMXTptCGxFUDOSEpc63D741eeUCjjGW/f9q7ekuqEaPQd5YJ6POpzDjdt1jjuC9yv54CbeXA==} + peerDependencies: + swup: ^4.0.0 + + '@swup/scripts-plugin@2.1.0': + resolution: {integrity: sha512-JSMFsFCN9gn4q3m1Ccv0gq3gwRoZl6UGALOQO3OeQ8wOIq9vPC5dcUD3CMBuaPanksjR4GC8ZoukIjHrlT52fg==} + peerDependencies: + swup: ^4.2.0 + + '@swup/scroll-plugin@3.3.2': + resolution: {integrity: sha512-jwngTz8LZza8p7ZWqaqQIzkH8x4hwyPh8RbrJSwTKussx24YUQuV9sgjDCzvJ16k/aYk9NCCvqLbb+4TcT3jqA==} + peerDependencies: + swup: ^4.2.0 + + '@swup/slide-theme@2.0.1': + resolution: {integrity: sha512-tTKYg5qNie2FtLVBj64FqQqDwXO0B3UgNmvO5MU2A8RtPpNFYaWmtbomrVQX862SXOEjWF/arHzrNfxhuRVnAg==} + peerDependencies: + swup: ^4.0.0 + + '@swup/theme@2.1.0': + resolution: {integrity: sha512-nwAzx+GYySIYs6uSCFYGNdpLWv2z/mEryRD1gvmIqsaSP2N7sVd4mKAboraJAzIzbasRhTsTQzyN1LfLeti3AA==} + peerDependencies: + swup: ^4.0.0 + + '@tailwindcss/typography@0.5.19': + resolution: {integrity: sha512-w31dd8HOx3k9vPtcQh5QHP9GwKcgbMp87j58qi6xgiBnFFtKEAgCWnDw4qUT8aHwkCp8bKvb/KGKWWHedP0AAg==} + peerDependencies: + tailwindcss: '>=3.0.0 || insiders || >=4.0.0-alpha.20 || >=4.0.0-beta.1' + + '@trysound/sax@0.2.0': + resolution: {integrity: sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==} + engines: {node: '>=10.13.0'} + + '@types/babel__core@7.20.5': + resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} + + '@types/babel__generator@7.27.0': + resolution: {integrity: sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==} + + '@types/babel__template@7.4.4': + resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==} + + '@types/babel__traverse@7.28.0': + resolution: {integrity: sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==} + + '@types/debug@4.1.12': + resolution: {integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==} + + '@types/estree@0.0.39': + resolution: {integrity: sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==} + + '@types/estree@1.0.8': + resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} + + '@types/fontkit@2.0.8': + resolution: {integrity: sha512-wN+8bYxIpJf+5oZdrdtaX04qUuWHcKxcDEgRS9Qm9ZClSHjzEn13SxUC+5eRM+4yXIeTYk8mTzLAWGF64847ew==} + + '@types/hast@2.3.10': + resolution: {integrity: sha512-McWspRw8xx8J9HurkVBfYj0xKoE25tOFlHGdx4MJ5xORQrMGZNqJhVQWaIbm6Oyla5kYOXtDiopzKRJzEOkwJw==} + + '@types/hast@3.0.4': + resolution: {integrity: sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==} + + '@types/katex@0.16.7': + resolution: {integrity: sha512-HMwFiRujE5PjrgwHQ25+bsLJgowjGjm5Z8FVSf0N6PwgJrwxH0QxzHYDcKsTfV3wva0vzrpqMTJS2jXPr5BMEQ==} + + '@types/linkify-it@5.0.0': + resolution: {integrity: sha512-sVDA58zAw4eWAffKOaQH5/5j3XeayukzDk+ewSsnv3p4yJEZHCCzMDiZM8e0OUrRvmpGZ85jf4yDHkHsgBNr9Q==} + + '@types/markdown-it@14.1.2': + resolution: {integrity: sha512-promo4eFwuiW+TfGxhi+0x3czqTYJkG8qB17ZUJiVF10Xm7NLVRSLUsfRTU/6h1e24VvRnXCx+hG7li58lkzog==} + + '@types/mdast@4.0.4': + resolution: {integrity: sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==} + + '@types/mdurl@2.0.0': + resolution: {integrity: sha512-RGdgjQUZba5p6QEFAVx2OGb8rQDL/cPRG7GiedRzMcJ1tYnUANBncjbSB1NRGwbvjcPeikRABz2nshyPk1bhWg==} + + '@types/ms@2.1.0': + resolution: {integrity: sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==} + + '@types/nlcst@2.0.3': + resolution: {integrity: sha512-vSYNSDe6Ix3q+6Z7ri9lyWqgGhJTmzRjZRqyq15N0Z/1/UnVsno9G/N40NBijoYx2seFDIl0+B2mgAb9mezUCA==} + + '@types/node@17.0.45': + resolution: {integrity: sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==} + + '@types/node@24.5.1': + resolution: {integrity: sha512-/SQdmUP2xa+1rdx7VwB9yPq8PaKej8TD5cQ+XfKDPWWC+VDJU4rvVVagXqKUzhKjtFoNA8rXDJAkCxQPAe00+Q==} + + '@types/node@24.5.2': + resolution: {integrity: sha512-FYxk1I7wPv3K2XBaoyH2cTnocQEu8AOZ60hPbsyukMPLv5/5qr7V1i8PLHdl6Zf87I+xZXFvPCXYjiTFq+YSDQ==} + + '@types/parse-json@4.0.2': + resolution: {integrity: sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==} + + '@types/resolve@1.17.1': + resolution: {integrity: sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==} + + '@types/sanitize-html@2.16.0': + resolution: {integrity: sha512-l6rX1MUXje5ztPT0cAFtUayXF06DqPhRyfVXareEN5gGCFaP/iwsxIyKODr9XDhfxPpN6vXUFNfo5kZMXCxBtw==} + + '@types/sax@1.2.7': + resolution: {integrity: sha512-rO73L89PJxeYM3s3pPPjiPgVVcymqU490g0YO5n5By0k2Erzj6tay/4lr1CHAAU4JyOWd1rpQ8bCf6cZfHU96A==} + + '@types/tar@6.1.13': + resolution: {integrity: sha512-IznnlmU5f4WcGTh2ltRu/Ijpmk8wiWXfF0VA4s+HPjHZgvFggk1YaIkbo5krX/zUCzWF8N/l4+W/LNxnvAJ8nw==} + + '@types/unist@2.0.11': + resolution: {integrity: sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==} + + '@types/unist@3.0.3': + resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==} + + '@types/yauzl@2.10.3': + resolution: {integrity: sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==} + + '@ungap/structured-clone@1.3.0': + resolution: {integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==} + + '@volar/kit@2.4.27': + resolution: {integrity: sha512-ilZoQDMLzqmSsImJRWx4YiZ4FcvvPrPnFVmL6hSsIWB6Bn3qc7k88J9yP32dagrs5Y8EXIlvvD/mAFaiuEOACQ==} + peerDependencies: + typescript: '*' + + '@volar/language-core@2.4.27': + resolution: {integrity: sha512-DjmjBWZ4tJKxfNC1F6HyYERNHPYS7L7OPFyCrestykNdUZMFYzI9WTyvwPcaNaHlrEUwESHYsfEw3isInncZxQ==} + + '@volar/language-server@2.4.27': + resolution: {integrity: sha512-SymGNkErcHg8GjiG65iQN8sLkhqu1pwKhFySmxeBuYq5xFYagKBW36eiNITXQTdvT0tutI1GXcXdq/FdE/IyjA==} + + '@volar/language-service@2.4.27': + resolution: {integrity: sha512-SxKZ8yLhpWa7Y5e/RDxtNfm7j7xsXp/uf2urijXEffRNpPSmVdfzQrFFy5d7l8PNpZy+bHg+yakmqBPjQN+MOw==} + + '@volar/source-map@2.4.27': + resolution: {integrity: sha512-ynlcBReMgOZj2i6po+qVswtDUeeBRCTgDurjMGShbm8WYZgJ0PA4RmtebBJ0BCYol1qPv3GQF6jK7C9qoVc7lg==} + + '@volar/typescript@2.4.27': + resolution: {integrity: sha512-eWaYCcl/uAPInSK2Lze6IqVWaBu/itVqR5InXcHXFyles4zO++Mglt3oxdgj75BDcv1Knr9Y93nowS8U3wqhxg==} + + '@vscode/emmet-helper@2.11.0': + resolution: {integrity: sha512-QLxjQR3imPZPQltfbWRnHU6JecWTF1QSWhx3GAKQpslx7y3Dp6sIIXhKjiUJ/BR9FX8PVthjr9PD6pNwOJfAzw==} + + '@vscode/l10n@0.0.18': + resolution: {integrity: sha512-KYSIHVmslkaCDyw013pphY+d7x1qV8IZupYfeIfzNA+nsaWHbn5uPuQRvdRFsa9zFzGeudPuoGoZ1Op4jrJXIQ==} + + acorn@8.15.0: + resolution: {integrity: sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==} + engines: {node: '>=0.4.0'} + hasBin: true + + ajv-draft-04@1.0.0: + resolution: {integrity: sha512-mv00Te6nmYbRp5DCwclxtt7yV/joXJPGS7nM+97GdxvuttCOfgI3K4U25zboyeX0O+myI8ERluxQe5wljMmVIw==} + peerDependencies: + ajv: ^8.5.0 + peerDependenciesMeta: + ajv: + optional: true + + ajv@8.17.1: + resolution: {integrity: sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==} + + ansi-align@3.0.1: + resolution: {integrity: sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==} + + ansi-regex@2.1.1: + resolution: {integrity: sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==} + engines: {node: '>=0.10.0'} + + ansi-regex@5.0.1: + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} + + ansi-regex@6.2.2: + resolution: {integrity: sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==} + engines: {node: '>=12'} + + ansi-styles@2.2.1: + resolution: {integrity: sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==} + engines: {node: '>=0.10.0'} + + ansi-styles@4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} + + ansi-styles@6.2.3: + resolution: {integrity: sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==} + engines: {node: '>=12'} + + any-promise@1.3.0: + resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} + + anymatch@3.1.3: + resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} + engines: {node: '>= 8'} + + arg@5.0.2: + resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} + + argparse@2.0.1: + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + + aria-query@5.3.2: + resolution: {integrity: sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==} + engines: {node: '>= 0.4'} + + array-buffer-byte-length@1.0.2: + resolution: {integrity: sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==} + engines: {node: '>= 0.4'} + + array-iterate@2.0.1: + resolution: {integrity: sha512-I1jXZMjAgCMmxT4qxXfPXa6SthSoE8h6gkSI9BGGNv8mP8G/v0blc+qFnZu6K42vTOiuME596QaLO0TP3Lk0xg==} + + arraybuffer.prototype.slice@1.0.4: + resolution: {integrity: sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==} + engines: {node: '>= 0.4'} + + astro-expressive-code@0.41.4: + resolution: {integrity: sha512-LK6EcK/hIHfOSo9zqapzu4CbTC0YBtMOVdvWjInpB2SgYtxiF22aZDqdpejN8J28mWPqPLQwSqdl2lWuirNXmw==} + peerDependencies: + astro: ^4.0.0-beta || ^5.0.0-beta || ^3.3.0 + + astro-icon@1.1.5: + resolution: {integrity: sha512-CJYS5nWOw9jz4RpGWmzNQY7D0y2ZZacH7atL2K9DeJXJVaz7/5WrxeyIxO8KASk1jCM96Q4LjRx/F3R+InjJrw==} + + astro@5.13.10: + resolution: {integrity: sha512-PgIrIYvrR7fCoSPPt1sGlpoYK/FNil1BwKazND1DyaZC7SbWLi9hdIHM3ApdrL2SWK7oiADRPw7cTn80UyDWqA==} + engines: {node: 18.20.8 || ^20.3.0 || >=22.0.0, npm: '>=9.6.5', pnpm: '>=7.1.0'} + hasBin: true + + async-function@1.0.0: + resolution: {integrity: sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==} + engines: {node: '>= 0.4'} + + async@3.2.6: + resolution: {integrity: sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==} + + asynckit@0.4.0: + resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} + + asyncro@3.0.0: + resolution: {integrity: sha512-nEnWYfrBmA3taTiuiOoZYmgJ/CNrSoQLeLs29SeLcPu60yaw/mHDBHV0iOZ051fTvsTHxpCY+gXibqT9wbQYfg==} + + autoprefixer@10.4.21: + resolution: {integrity: sha512-O+A6LWV5LDHSJD3LjHYoNi4VLsj/Whi7k6zG12xTYaU4cQ8oxQGckXNX8cRHK5yOZ/ppVHe0ZBXGzSV9jXdVbQ==} + engines: {node: ^10 || ^12 || >=14} + hasBin: true + peerDependencies: + postcss: ^8.1.0 + + available-typed-arrays@1.0.7: + resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} + engines: {node: '>= 0.4'} + + axios@1.8.4: + resolution: {integrity: sha512-eBSYY4Y68NNlHbHBMdeDmKNtDgXWhQsJcGqzO3iLUM0GraQFSS9cVgPX5I9b3lbdFKyYoAEGAZF1DwhTaljNAw==} + + axobject-query@4.1.0: + resolution: {integrity: sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==} + engines: {node: '>= 0.4'} + + babel-plugin-macros@3.1.0: + resolution: {integrity: sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==} + engines: {node: '>=10', npm: '>=6'} + + babel-plugin-polyfill-corejs2@0.4.14: + resolution: {integrity: sha512-Co2Y9wX854ts6U8gAAPXfn0GmAyctHuK8n0Yhfjd6t30g7yvKjspvvOo9yG+z52PZRgFErt7Ka2pYnXCjLKEpg==} + peerDependencies: + '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 + + babel-plugin-polyfill-corejs3@0.13.0: + resolution: {integrity: sha512-U+GNwMdSFgzVmfhNm8GJUX88AadB3uo9KpJqS3FaqNIPKgySuvMb+bHPsOmmuWyIcuqZj/pzt1RUIUZns4y2+A==} + peerDependencies: + '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 + + babel-plugin-polyfill-regenerator@0.6.5: + resolution: {integrity: sha512-ISqQ2frbiNU9vIJkzg7dlPpznPZ4jOiUQ1uSmB0fEHeowtN3COYRsXr/xexn64NpU13P06jc/L5TgiJXOgrbEg==} + peerDependencies: + '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 + + babel-plugin-transform-async-to-promises@0.8.18: + resolution: {integrity: sha512-WpOrF76nUHijnNn10eBGOHZmXQC8JYRME9rOLxStOga7Av2VO53ehVFvVNImMksVtQuL2/7ZNxEgxnx7oo/3Hw==} + + babel-plugin-transform-replace-expressions@0.2.0: + resolution: {integrity: sha512-Eh1rRd9hWEYgkgoA3D0kGp7xJ/wgVshgsqmq60iC4HVWD+Lux+fNHSHBa2v1Hsv+dHflShC71qKhiH40OiPtDA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + bail@2.0.2: + resolution: {integrity: sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==} + + balanced-match@1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + + base-64@1.0.0: + resolution: {integrity: sha512-kwDPIFCGx0NZHog36dj+tHiwP4QMzsZ3AgMViUBKI0+V5n4U0ufTCUMhnQ04diaRI8EX/QcPfql7zlhZ7j4zgg==} + + base64-js@1.5.1: + resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} + + bcp-47-match@2.0.3: + resolution: {integrity: sha512-JtTezzbAibu8G0R9op9zb3vcWZd9JF6M0xOYGPn0fNCd7wOpRB1mU2mH9T8gaBGbAAyIIVgB2G7xG0GP98zMAQ==} + + binary-extensions@2.3.0: + resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} + engines: {node: '>=8'} + + blob-to-buffer@1.2.9: + resolution: {integrity: sha512-BF033y5fN6OCofD3vgHmNtwZWRcq9NLyyxyILx9hfMy1sXYy4ojFl765hJ2lP0YaN2fuxPaLO2Vzzoxy0FLFFA==} + + boolbase@1.0.0: + resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} + + boxen@8.0.1: + resolution: {integrity: sha512-F3PH5k5juxom4xktynS7MoFY+NUWH5LC4CnH11YB8NPew+HLpmBLCybSAEyb2F+4pRXhuhWqFesoQd6DAyc2hw==} + engines: {node: '>=18'} + + brace-expansion@1.1.12: + resolution: {integrity: sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==} + + brace-expansion@2.0.1: + resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} + + brace-expansion@2.0.2: + resolution: {integrity: sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==} + + braces@3.0.3: + resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} + engines: {node: '>=8'} + + brotli-size@4.0.0: + resolution: {integrity: sha512-uA9fOtlTRC0iqKfzff1W34DXUA3GyVqbUaeo3Rw3d4gd1eavKVCETXrn3NzO74W+UVkG3UHu8WxUi+XvKI/huA==} + engines: {node: '>= 10.16.0'} + + brotli@1.3.3: + resolution: {integrity: sha512-oTKjJdShmDuGW94SyyaoQvAjf30dZaHnjJ8uAF+u2/vGJkJbJPJAT1gDiOJP5v1Zb6f9KEyW/1HpuaWIXtGHPg==} + + browserslist@4.24.4: + resolution: {integrity: sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + + browserslist@4.25.1: + resolution: {integrity: sha512-KGj0KoOMXLpSNkkEI6Z6mShmQy0bc1I+T7K9N81k4WWMrfz+6fQ6es80B/YLAeRoKvjYE1YSHHOW1qe9xIVzHw==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + + buffer-crc32@0.2.13: + resolution: {integrity: sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==} + + buffer-from@1.1.2: + resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} + + builtin-modules@3.3.0: + resolution: {integrity: sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==} + engines: {node: '>=6'} + + call-bind-apply-helpers@1.0.2: + resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==} + engines: {node: '>= 0.4'} + + call-bind@1.0.8: + resolution: {integrity: sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==} + engines: {node: '>= 0.4'} + + call-bound@1.0.4: + resolution: {integrity: sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==} + engines: {node: '>= 0.4'} + + callsites@3.1.0: + resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} + engines: {node: '>=6'} + + camelcase-css@2.0.1: + resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==} + engines: {node: '>= 6'} + + camelcase@6.3.0: + resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} + engines: {node: '>=10'} + + camelcase@8.0.0: + resolution: {integrity: sha512-8WB3Jcas3swSvjIeA2yvCJ+Miyz5l1ZmB6HFb9R1317dt9LCQoswg/BGrmAmkWVEszSrrg4RwmO46qIm2OEnSA==} + engines: {node: '>=16'} + + caniuse-api@3.0.0: + resolution: {integrity: sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==} + + caniuse-lite@1.0.30001707: + resolution: {integrity: sha512-3qtRjw/HQSMlDWf+X79N206fepf4SOOU6SQLMaq/0KkZLmSjPxAkBOQQ+FxbHKfHmYLZFfdWsO3KA90ceHPSnw==} + + caniuse-lite@1.0.30001727: + resolution: {integrity: sha512-pB68nIHmbN6L/4C6MH1DokyR3bYqFwjaSs/sWDHGj4CTcFtQUQMuJftVwWkXq7mNWOybD3KhUv3oWHoGxgP14Q==} + + ccount@2.0.1: + resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} + + chalk@1.1.3: + resolution: {integrity: sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==} + engines: {node: '>=0.10.0'} + + chalk@4.1.2: + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} + engines: {node: '>=10'} + + chalk@5.6.2: + resolution: {integrity: sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==} + engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} + + character-entities-html4@2.1.0: + resolution: {integrity: sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==} + + character-entities-legacy@3.0.0: + resolution: {integrity: sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==} + + character-entities@2.0.2: + resolution: {integrity: sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==} + + character-reference-invalid@2.0.1: + resolution: {integrity: sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==} + + cheerio-select@2.1.0: + resolution: {integrity: sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==} + + cheerio@1.0.0: + resolution: {integrity: sha512-quS9HgjQpdaXOvsZz82Oz7uxtXiy6UIsIQcpBj7HRw2M63Skasm9qlDocAM7jNuaxdhpPU7c4kJN+gA5MCu4ww==} + engines: {node: '>=18.17'} + + chokidar@3.6.0: + resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} + engines: {node: '>= 8.10.0'} + + chokidar@4.0.3: + resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==} + engines: {node: '>= 14.16.0'} + + chownr@2.0.0: + resolution: {integrity: sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==} + engines: {node: '>=10'} + + ci-info@4.3.0: + resolution: {integrity: sha512-l+2bNRMiQgcfILUi33labAZYIWlH1kWDp+ecNo5iisRKrbm0xcRyCww71/YU0Fkw0mAFpz9bJayXPjey6vkmaQ==} + engines: {node: '>=8'} + + cli-boxes@3.0.0: + resolution: {integrity: sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==} + engines: {node: '>=10'} + + cliui@8.0.1: + resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} + engines: {node: '>=12'} + + clone@2.1.2: + resolution: {integrity: sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==} + engines: {node: '>=0.8'} + + clsx@2.1.1: + resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==} + engines: {node: '>=6'} + + color-convert@2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} + + color-name@1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + + colord@2.9.3: + resolution: {integrity: sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==} + + combined-stream@1.0.8: + resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} + engines: {node: '>= 0.8'} + + comma-separated-tokens@2.0.3: + resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==} + + commander@2.20.3: + resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} + + commander@4.1.1: + resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} + engines: {node: '>= 6'} + + commander@7.2.0: + resolution: {integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==} + engines: {node: '>= 10'} + + commander@8.3.0: + resolution: {integrity: sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==} + engines: {node: '>= 12'} + + common-ancestor-path@1.0.1: + resolution: {integrity: sha512-L3sHRo1pXXEqX8VU28kfgUY+YGsk09hPqZiZmLacNib6XNTCM8ubYeT7ryXQw8asB1sKgcU5lkB7ONug08aB8w==} + + commondir@1.0.1: + resolution: {integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==} + + concat-map@0.0.1: + resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + + concat-with-sourcemaps@1.1.0: + resolution: {integrity: sha512-4gEjHJFT9e+2W/77h/DS5SGUgwDaOwprX8L/gl5+3ixnzkVJJsZWDSelmN3Oilw3LNDZjZV0yqH1hLG3k6nghg==} + + confbox@0.1.8: + resolution: {integrity: sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==} + + confbox@0.2.1: + resolution: {integrity: sha512-hkT3yDPFbs95mNCy1+7qNKC6Pro+/ibzYxtM2iqEigpf0sVw+bg4Zh9/snjsBcf990vfIsg5+1U7VyiyBb3etg==} + + convert-source-map@2.0.0: + resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} + + cookie-es@1.2.2: + resolution: {integrity: sha512-+W7VmiVINB+ywl1HGXJXmrqkOhpKrIiVZV6tQuV54ZyQC7MMuBt81Vc336GMLoHBq5hV/F9eXgt5Mnx0Rha5Fg==} + + cookie@1.0.2: + resolution: {integrity: sha512-9Kr/j4O16ISv8zBBhJoi4bXOYNTkFLOqSL3UDB0njXxCXNezjeyVrJyGOWtgfs/q2km1gwBcfH8q1yEGoMYunA==} + engines: {node: '>=18'} + + core-js-compat@3.44.0: + resolution: {integrity: sha512-JepmAj2zfl6ogy34qfWtcE7nHKAJnKsQFRn++scjVS2bZFllwptzw61BZcZFYBPpUznLfAvh0LGhxKppk04ClA==} + + cosmiconfig@7.1.0: + resolution: {integrity: sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==} + engines: {node: '>=10'} + + cross-fetch@3.2.0: + resolution: {integrity: sha512-Q+xVJLoGOeIMXZmbUK4HYk+69cQH6LudR0Vu/pRm2YlU/hDV9CiS0gKUMaWY5f2NeUH9C1nV3bsTlCo0FsTV1Q==} + + cross-spawn@7.0.6: + resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} + engines: {node: '>= 8'} + + crossws@0.3.5: + resolution: {integrity: sha512-ojKiDvcmByhwa8YYqbQI/hg7MEU0NC03+pSdEq4ZUnZR9xXpwk7E43SMNGkn+JxJGPFtNvQ48+vV2p+P1ml5PA==} + + css-declaration-sorter@6.4.1: + resolution: {integrity: sha512-rtdthzxKuyq6IzqX6jEcIzQF/YqccluefyCYheovBOLhFT/drQA9zj/UbRAa9J7C0o6EG6u3E6g+vKkay7/k3g==} + engines: {node: ^10 || ^12 || >=14} + peerDependencies: + postcss: ^8.0.9 + + css-select@4.3.0: + resolution: {integrity: sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==} + + css-select@5.1.0: + resolution: {integrity: sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==} + + css-selector-parser@3.2.0: + resolution: {integrity: sha512-L1bdkNKUP5WYxiW5dW6vA2hd3sL8BdRNLy2FCX0rLVise4eNw9nBdeBuJHxlELieSE2H1f6bYQFfwVUwWCV9rQ==} + + css-tree@1.1.3: + resolution: {integrity: sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==} + engines: {node: '>=8.0.0'} + + css-tree@2.2.1: + resolution: {integrity: sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==} + engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0, npm: '>=7.0.0'} + + css-tree@2.3.1: + resolution: {integrity: sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==} + engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0} + + css-tree@3.1.0: + resolution: {integrity: sha512-0eW44TGN5SQXU1mWSkKwFstI/22X2bG1nYzZTYMAWjylYURhse752YgbE4Cx46AC+bAvI+/dYTPRk1LqSUnu6w==} + engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0} + + css-what@6.1.0: + resolution: {integrity: sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==} + engines: {node: '>= 6'} + + css-what@6.2.2: + resolution: {integrity: sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA==} + engines: {node: '>= 6'} + + cssesc@3.0.0: + resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} + engines: {node: '>=4'} + hasBin: true + + cssnano-preset-default@5.2.14: + resolution: {integrity: sha512-t0SFesj/ZV2OTylqQVOrFgEh5uanxbO6ZAdeCrNsUQ6fVuXwYTxJPNAGvGTxHbD68ldIJNec7PyYZDBrfDQ+6A==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + + cssnano-utils@3.1.0: + resolution: {integrity: sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + + cssnano@5.1.15: + resolution: {integrity: sha512-j+BKgDcLDQA+eDifLx0EO4XSA56b7uut3BQFH+wbSaSTuGLuiyTa/wbRYthUXX8LC9mLg+WWKe8h+qJuwTAbHw==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + + csso@4.2.0: + resolution: {integrity: sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==} + engines: {node: '>=8.0.0'} + + csso@5.0.5: + resolution: {integrity: sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==} + engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0, npm: '>=7.0.0'} + + data-view-buffer@1.0.2: + resolution: {integrity: sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==} + engines: {node: '>= 0.4'} + + data-view-byte-length@1.0.2: + resolution: {integrity: sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==} + engines: {node: '>= 0.4'} + + data-view-byte-offset@1.0.1: + resolution: {integrity: sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==} + engines: {node: '>= 0.4'} + + debug@4.4.0: + resolution: {integrity: sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + debug@4.4.3: + resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + decode-named-character-reference@1.1.0: + resolution: {integrity: sha512-Wy+JTSbFThEOXQIR2L6mxJvEs+veIzpmqD7ynWxMXGpnk3smkHQOp6forLdHsKpAMW9iJpaBBIxz285t1n1C3w==} + + dedent-js@1.0.1: + resolution: {integrity: sha512-OUepMozQULMLUmhxS95Vudo0jb0UchLimi3+pQ2plj61Fcy8axbP9hbiD4Sz6DPqn6XG3kfmziVfQ1rSys5AJQ==} + + deepmerge@4.3.1: + resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} + engines: {node: '>=0.10.0'} + + define-data-property@1.1.4: + resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} + engines: {node: '>= 0.4'} + + define-lazy-prop@2.0.0: + resolution: {integrity: sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==} + engines: {node: '>=8'} + + define-properties@1.2.1: + resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} + engines: {node: '>= 0.4'} + + defu@6.1.4: + resolution: {integrity: sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==} + + delayed-stream@1.0.0: + resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} + engines: {node: '>=0.4.0'} + + delegate-it@6.2.1: + resolution: {integrity: sha512-3/P/rwj+zal/99EEml7y1+bXjBY+Wok/WSg0EngWAtdvHK6iKTPbABQE84RyyRfR0Fmejs93BrkZQWlgyeWuFQ==} + + dequal@2.0.3: + resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} + engines: {node: '>=6'} + + destr@2.0.5: + resolution: {integrity: sha512-ugFTXCtDZunbzasqBxrK93Ik/DRYsO6S/fedkWEMKqt04xZ4csmnmwGDBAb07QWNaGMAmnTIemsYZCksjATwsA==} + + detect-libc@1.0.3: + resolution: {integrity: sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==} + engines: {node: '>=0.10'} + hasBin: true + + detect-libc@2.1.2: + resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==} + engines: {node: '>=8'} + + deterministic-object-hash@2.0.2: + resolution: {integrity: sha512-KxektNH63SrbfUyDiwXqRb1rLwKt33AmMv+5Nhsw1kqZ13SJBRTgZHtGbE+hH3a1mVW1cz+4pqSWVPAtLVXTzQ==} + engines: {node: '>=18'} + + devalue@5.3.2: + resolution: {integrity: sha512-UDsjUbpQn9kvm68slnrs+mfxwFkIflOhkanmyabZ8zOYk8SMEIbJ3TK+88g70hSIeytu4y18f0z/hYHMTrXIWw==} + + devlop@1.1.0: + resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==} + + dfa@1.2.0: + resolution: {integrity: sha512-ED3jP8saaweFTjeGX8HQPjeC1YYyZs98jGNZx6IiBvxW7JG5v492kamAQB3m2wop07CvU/RQmzcKr6bgcC5D/Q==} + + didyoumean@1.2.2: + resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==} + + diff@5.2.0: + resolution: {integrity: sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==} + engines: {node: '>=0.3.1'} + + direction@2.0.1: + resolution: {integrity: sha512-9S6m9Sukh1cZNknO1CWAr2QAWsbKLafQiyM5gZ7VgXHeuaoUwffKN4q6NC4A/Mf9iiPlOXQEKW/Mv/mh9/3YFA==} + hasBin: true + + dlv@1.1.3: + resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==} + + dom-serializer@1.4.1: + resolution: {integrity: sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==} + + dom-serializer@2.0.0: + resolution: {integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==} + + domelementtype@2.3.0: + resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==} + + domhandler@4.3.1: + resolution: {integrity: sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==} + engines: {node: '>= 4'} + + domhandler@5.0.3: + resolution: {integrity: sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==} + engines: {node: '>= 4'} + + domutils@2.8.0: + resolution: {integrity: sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==} + + domutils@3.2.2: + resolution: {integrity: sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==} + + dset@3.1.4: + resolution: {integrity: sha512-2QF/g9/zTaPDc3BjNcVTGoBbXBgYfMTTceLaYcFJ/W9kggFUkhxD/hMEeuLKbugyef9SqAx8cpgwlIP/jinUTA==} + engines: {node: '>=4'} + + dunder-proto@1.0.1: + resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} + engines: {node: '>= 0.4'} + + duplexer@0.1.1: + resolution: {integrity: sha512-sxNZ+ljy+RA1maXoUReeqBBpBC6RLKmg5ewzV+x+mSETmWNoKdZN6vcQjpFROemza23hGFskJtFNoUWUaQ+R4Q==} + + duplexer@0.1.2: + resolution: {integrity: sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==} + + eastasianwidth@0.2.0: + resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} + + ejs@3.1.10: + resolution: {integrity: sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==} + engines: {node: '>=0.10.0'} + hasBin: true + + electron-to-chromium@1.5.126: + resolution: {integrity: sha512-AtH1uLcTC72LA4vfYcEJJkrMk/MY/X0ub8Hv7QGAePW2JkeUFHEL/QfS4J77R6M87Sss8O0OcqReSaN1bpyA+Q==} + + electron-to-chromium@1.5.190: + resolution: {integrity: sha512-k4McmnB2091YIsdCgkS0fMVMPOJgxl93ltFzaryXqwip1AaxeDqKCGLxkXODDA5Ab/D+tV5EL5+aTx76RvLRxw==} + + emmet@2.4.11: + resolution: {integrity: sha512-23QPJB3moh/U9sT4rQzGgeyyGIrcM+GH5uVYg2C6wZIxAIJq7Ng3QLT79tl8FUwDXhyq9SusfknOrofAKqvgyQ==} + + emoji-regex@10.5.0: + resolution: {integrity: sha512-lb49vf1Xzfx080OKA0o6l8DQQpV+6Vg95zyCJX9VB/BqKYlhG7N4wgROUUHRA+ZPUefLnteQOad7z1kT2bV7bg==} + + emoji-regex@8.0.0: + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + + emoji-regex@9.2.2: + resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} + + encoding-sniffer@0.2.0: + resolution: {integrity: sha512-ju7Wq1kg04I3HtiYIOrUrdfdDvkyO9s5XM8QAj/bN61Yo/Vb4vgJxy5vi4Yxk01gWHbrofpPtpxM8bKger9jhg==} + + end-of-stream@1.4.4: + resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==} + + entities@2.2.0: + resolution: {integrity: sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==} + + entities@4.5.0: + resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} + engines: {node: '>=0.12'} + + entities@6.0.1: + resolution: {integrity: sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==} + engines: {node: '>=0.12'} + + error-ex@1.3.2: + resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} + + es-abstract@1.24.0: + resolution: {integrity: sha512-WSzPgsdLtTcQwm4CROfS5ju2Wa1QQcVeT37jFjYzdFz1r9ahadC8B8/a4qxJxM+09F18iumCdRmlr96ZYkQvEg==} + engines: {node: '>= 0.4'} + + es-define-property@1.0.1: + resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==} + engines: {node: '>= 0.4'} + + es-errors@1.3.0: + resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} + engines: {node: '>= 0.4'} + + es-module-lexer@1.7.0: + resolution: {integrity: sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==} + + es-object-atoms@1.1.1: + resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==} + engines: {node: '>= 0.4'} + + es-set-tostringtag@2.1.0: + resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==} + engines: {node: '>= 0.4'} + + es-to-primitive@1.3.0: + resolution: {integrity: sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==} + engines: {node: '>= 0.4'} + + esbuild@0.25.10: + resolution: {integrity: sha512-9RiGKvCwaqxO2owP61uQ4BgNborAQskMR6QusfWzQqv7AZOg5oGehdY2pRJMTKuwxd1IDBP4rSbI5lHzU7SMsQ==} + engines: {node: '>=18'} + hasBin: true + + esbuild@0.25.12: + resolution: {integrity: sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==} + engines: {node: '>=18'} + hasBin: true + + escalade@3.2.0: + resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} + engines: {node: '>=6'} + + escape-string-regexp@1.0.5: + resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} + engines: {node: '>=0.8.0'} + + escape-string-regexp@4.0.0: + resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} + engines: {node: '>=10'} + + escape-string-regexp@5.0.0: + resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==} + engines: {node: '>=12'} + + esm-env@1.2.2: + resolution: {integrity: sha512-Epxrv+Nr/CaL4ZcFGPJIYLWFom+YeV1DqMLHJoEd9SYRxNbaFruBwfEX/kkHUJf55j2+TUbmDcmuilbP1TmXHA==} + + esrap@2.1.0: + resolution: {integrity: sha512-yzmPNpl7TBbMRC5Lj2JlJZNPml0tzqoqP5B1JXycNUwtqma9AKCO0M2wHrdgsHcy1WRW7S9rJknAMtByg3usgA==} + + estree-walker@0.6.1: + resolution: {integrity: sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==} + + estree-walker@1.0.1: + resolution: {integrity: sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==} + + estree-walker@2.0.2: + resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} + + estree-walker@3.0.3: + resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} + + esutils@2.0.3: + resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} + engines: {node: '>=0.10.0'} + + eventemitter3@4.0.7: + resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==} + + eventemitter3@5.0.1: + resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==} + + expressive-code@0.41.4: + resolution: {integrity: sha512-A9aFLhgqLkL6VSfqYkPqkJVMtA90/bhCLmUO7L3/a1xWISNMcHoCS6d6i8ePwi8HvHr3xRLswHTNt6NheTjdXA==} + + exsolve@1.0.4: + resolution: {integrity: sha512-xsZH6PXaER4XoV+NiT7JHp1bJodJVT+cxeSH1G0f0tlT0lJqYuHUP3bUx2HtfTDvOagMINYp8rsqusxud3RXhw==} + + extend@3.0.2: + resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} + + extract-zip@2.0.1: + resolution: {integrity: sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==} + engines: {node: '>= 10.17.0'} + hasBin: true + + fast-deep-equal@3.1.3: + resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + + fast-glob@3.3.3: + resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==} + engines: {node: '>=8.6.0'} + + fast-uri@3.1.0: + resolution: {integrity: sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==} + + fast-xml-parser@5.3.2: + resolution: {integrity: sha512-n8v8b6p4Z1sMgqRmqLJm3awW4NX7NkaKPfb3uJIBTSH7Pdvufi3PQ3/lJLQrvxcMYl7JI2jnDO90siPEpD8JBA==} + hasBin: true + + fastq@1.19.1: + resolution: {integrity: sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==} + + fd-slicer@1.1.0: + resolution: {integrity: sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==} + + fdir@6.5.0: + resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==} + engines: {node: '>=12.0.0'} + peerDependencies: + picomatch: ^3 || ^4 + peerDependenciesMeta: + picomatch: + optional: true + + figures@1.7.0: + resolution: {integrity: sha512-UxKlfCRuCBxSXU4C6t9scbDyWZ4VlaFFdojKtzJuSkuOBQ5CNFum+zZXFwHjo+CxBC1t6zlYPgHIgFjL8ggoEQ==} + engines: {node: '>=0.10.0'} + + filelist@1.0.4: + resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==} + + filesize@6.4.0: + resolution: {integrity: sha512-mjFIpOHC4jbfcTfoh4rkWpI31mF7viw9ikj/JyLoKzqlwG/YsefKfvYlYhdYdg/9mtK2z1AzgN/0LvVQ3zdlSQ==} + engines: {node: '>= 0.4.0'} + + fill-range@7.1.1: + resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} + engines: {node: '>=8'} + + find-cache-dir@3.3.2: + resolution: {integrity: sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==} + engines: {node: '>=8'} + + find-up@4.1.0: + resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} + engines: {node: '>=8'} + + flattie@1.1.1: + resolution: {integrity: sha512-9UbaD6XdAL97+k/n+N7JwX46K/M6Zc6KcFYskrYL8wbBV/Uyk0CTAMY0VT+qiK5PM7AIc9aTWYtq65U7T+aCNQ==} + engines: {node: '>=8'} + + focus-options-polyfill@1.6.0: + resolution: {integrity: sha512-uyrAmLZrPnUItQY5wTdg31TO9GGZRGsh/jmohUg9oLmLi/sw5y7LlTV/mwyd6rvbxIOGwmRiv6LcTS8w7Bk9NQ==} + + follow-redirects@1.15.9: + resolution: {integrity: sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==} + engines: {node: '>=4.0'} + peerDependencies: + debug: '*' + peerDependenciesMeta: + debug: + optional: true + + fontace@0.3.0: + resolution: {integrity: sha512-czoqATrcnxgWb/nAkfyIrRp6Q8biYj7nGnL6zfhTcX+JKKpWHFBnb8uNMw/kZr7u++3Y3wYSYoZgHkCcsuBpBg==} + + fontkit@2.0.4: + resolution: {integrity: sha512-syetQadaUEDNdxdugga9CpEYVaQIxOwk7GlwZWWZ19//qW4zE5bknOKeMBDYAASwnpaSHKJITRLMF9m1fp3s6g==} + + for-each@0.3.5: + resolution: {integrity: sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==} + engines: {node: '>= 0.4'} + + foreground-child@3.3.1: + resolution: {integrity: sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==} + engines: {node: '>=14'} + + form-data@4.0.2: + resolution: {integrity: sha512-hGfm/slu0ZabnNt4oaRZ6uREyfCj6P4fT/n6A1rGV+Z0VdGXjfOhVUpkn6qVQONHGIFwmveGXyDs75+nr6FM8w==} + engines: {node: '>= 6'} + + fraction.js@4.3.7: + resolution: {integrity: sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==} + + fs-extra@10.1.0: + resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==} + engines: {node: '>=12'} + + fs-minipass@2.1.0: + resolution: {integrity: sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==} + engines: {node: '>= 8'} + + fs.realpath@1.0.0: + resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} + + fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + + function-bind@1.1.2: + resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + + function.prototype.name@1.1.8: + resolution: {integrity: sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==} + engines: {node: '>= 0.4'} + + functions-have-names@1.2.3: + resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} + + generic-names@4.0.0: + resolution: {integrity: sha512-ySFolZQfw9FoDb3ed9d80Cm9f0+r7qj+HJkWjeD9RBfpxEVTlVhol+gvaQB/78WbwYfbnNh8nWHHBSlg072y6A==} + + gensync@1.0.0-beta.2: + resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} + engines: {node: '>=6.9.0'} + + get-caller-file@2.0.5: + resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} + engines: {node: 6.* || 8.* || >= 10.*} + + get-east-asian-width@1.4.0: + resolution: {integrity: sha512-QZjmEOC+IT1uk6Rx0sX22V6uHWVwbdbxf1faPqJ1QhLdGgsRGCZoyaQBm/piRdJy/D2um6hM1UP7ZEeQ4EkP+Q==} + engines: {node: '>=18'} + + get-intrinsic@1.3.0: + resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==} + engines: {node: '>= 0.4'} + + get-proto@1.0.1: + resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} + engines: {node: '>= 0.4'} + + get-stream@5.2.0: + resolution: {integrity: sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==} + engines: {node: '>=8'} + + get-symbol-description@1.1.0: + resolution: {integrity: sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==} + engines: {node: '>= 0.4'} + + github-slugger@2.0.0: + resolution: {integrity: sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw==} + + glob-parent@5.1.2: + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} + + glob-parent@6.0.2: + resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} + engines: {node: '>=10.13.0'} + + glob@10.4.5: + resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==} + hasBin: true + + glob@7.2.3: + resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} + deprecated: Glob versions prior to v9 are no longer supported + + globals@15.15.0: + resolution: {integrity: sha512-7ACyT3wmyp3I61S4fG682L0VA2RGD9otkqGJIwNUMF1SWUombIIk+af1unuDYgMm082aHYwD+mzJvv9Iu8dsgg==} + engines: {node: '>=18'} + + globalthis@1.0.4: + resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} + engines: {node: '>= 0.4'} + + globalyzer@0.1.0: + resolution: {integrity: sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q==} + + globrex@0.1.2: + resolution: {integrity: sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==} + + gopd@1.2.0: + resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} + engines: {node: '>= 0.4'} + + graceful-fs@4.2.11: + resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + + gzip-size@3.0.0: + resolution: {integrity: sha512-6s8trQiK+OMzSaCSVXX+iqIcLV9tC+E73jrJrJTyS4h/AJhlxHvzFKqM1YLDJWRGgHX8uLkBeXkA0njNj39L4w==} + engines: {node: '>=0.12.0'} + + gzip-size@6.0.0: + resolution: {integrity: sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==} + engines: {node: '>=10'} + + h3@1.15.4: + resolution: {integrity: sha512-z5cFQWDffyOe4vQ9xIqNfCZdV4p//vy6fBnr8Q1AWnVZ0teurKMG66rLj++TKwKPUP3u7iMUvrvKaEUiQw2QWQ==} + + has-ansi@2.0.0: + resolution: {integrity: sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg==} + engines: {node: '>=0.10.0'} + + has-bigints@1.1.0: + resolution: {integrity: sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==} + engines: {node: '>= 0.4'} + + has-flag@4.0.0: + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} + + has-property-descriptors@1.0.2: + resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} + + has-proto@1.2.0: + resolution: {integrity: sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==} + engines: {node: '>= 0.4'} + + has-symbols@1.1.0: + resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==} + engines: {node: '>= 0.4'} + + has-tostringtag@1.0.2: + resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} + engines: {node: '>= 0.4'} + + hasown@2.0.2: + resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} + engines: {node: '>= 0.4'} + + hast-util-from-dom@5.0.1: + resolution: {integrity: sha512-N+LqofjR2zuzTjCPzyDUdSshy4Ma6li7p/c3pA78uTwzFgENbgbUrm2ugwsOdcjI1muO+o6Dgzp9p8WHtn/39Q==} + + hast-util-from-html-isomorphic@2.0.0: + resolution: {integrity: sha512-zJfpXq44yff2hmE0XmwEOzdWin5xwH+QIhMLOScpX91e/NSGPsAzNCvLQDIEPyO2TXi+lBmU6hjLIhV8MwP2kw==} + + hast-util-from-html@2.0.3: + resolution: {integrity: sha512-CUSRHXyKjzHov8yKsQjGOElXy/3EKpyX56ELnkHH34vDVw1N1XSQ1ZcAvTyAPtGqLTuKP/uxM+aLkSPqF/EtMw==} + + hast-util-from-parse5@8.0.3: + resolution: {integrity: sha512-3kxEVkEKt0zvcZ3hCRYI8rqrgwtlIOFMWkbclACvjlDw8Li9S2hk/d51OI0nr/gIpdMHNepwgOKqZ/sy0Clpyg==} + + hast-util-has-property@3.0.0: + resolution: {integrity: sha512-MNilsvEKLFpV604hwfhVStK0usFY/QmM5zX16bo7EjnAEGofr5YyI37kzopBlZJkHD4t887i+q/C8/tr5Q94cA==} + + hast-util-heading-rank@3.0.0: + resolution: {integrity: sha512-EJKb8oMUXVHcWZTDepnr+WNbfnXKFNf9duMesmr4S8SXTJBJ9M4Yok08pu9vxdJwdlGRhVumk9mEhkEvKGifwA==} + + hast-util-is-element@3.0.0: + resolution: {integrity: sha512-Val9mnv2IWpLbNPqc/pUem+a7Ipj2aHacCwgNfTiK0vJKl0LF+4Ba4+v1oPHFpf3bLYmreq0/l3Gud9S5OH42g==} + + hast-util-parse-selector@3.1.1: + resolution: {integrity: sha512-jdlwBjEexy1oGz0aJ2f4GKMaVKkA9jwjr4MjAAI22E5fM/TXVZHuS5OpONtdeIkRKqAaryQ2E9xNQxijoThSZA==} + + hast-util-parse-selector@4.0.0: + resolution: {integrity: sha512-wkQCkSYoOGCRKERFWcxMVMOcYE2K1AaNLU8DXS9arxnLOUEWbOXKXiJUNzEpqZ3JOKpnha3jkFrumEjVliDe7A==} + + hast-util-raw@9.1.0: + resolution: {integrity: sha512-Y8/SBAHkZGoNkpzqqfCldijcuUKh7/su31kEBp67cFY09Wy0mTRgtsLYsiIxMJxlu0f6AA5SUTbDR8K0rxnbUw==} + + hast-util-select@6.0.4: + resolution: {integrity: sha512-RqGS1ZgI0MwxLaKLDxjprynNzINEkRHY2i8ln4DDjgv9ZhcYVIHN9rlpiYsqtFwrgpYU361SyWDQcGNIBVu3lw==} + + hast-util-to-html@9.0.5: + resolution: {integrity: sha512-OguPdidb+fbHQSU4Q4ZiLKnzWo8Wwsf5bZfbvu7//a9oTYoqD/fWpe96NuHkoS9h0ccGOTe0C4NGXdtS0iObOw==} + + hast-util-to-parse5@8.0.0: + resolution: {integrity: sha512-3KKrV5ZVI8if87DVSi1vDeByYrkGzg4mEfeu4alwgmmIeARiBLKCZS2uw5Gb6nU9x9Yufyj3iudm6i7nl52PFw==} + + hast-util-to-string@3.0.1: + resolution: {integrity: sha512-XelQVTDWvqcl3axRfI0xSeoVKzyIFPwsAGSLIsKdJKQMXDYJS4WYrBNF/8J7RdhIcFI2BOHgAifggsvsxp/3+A==} + + hast-util-to-text@4.0.2: + resolution: {integrity: sha512-KK6y/BN8lbaq654j7JgBydev7wuNMcID54lkRav1P0CaE1e47P72AWWPiGKXTJU271ooYzcvTAn/Zt0REnvc7A==} + + hast-util-whitespace@3.0.0: + resolution: {integrity: sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==} + + hastscript@7.2.0: + resolution: {integrity: sha512-TtYPq24IldU8iKoJQqvZOuhi5CyCQRAbvDOX0x1eW6rsHSxa/1i2CCiptNTotGHJ3VoHRGmqiv6/D3q113ikkw==} + + hastscript@9.0.1: + resolution: {integrity: sha512-g7df9rMFX/SPi34tyGCyUBREQoKkapwdY/T04Qn9TDWfHhAYt4/I0gMVirzK5wEzeUqIjEB+LXC/ypb7Aqno5w==} + + html-escaper@3.0.3: + resolution: {integrity: sha512-RuMffC89BOWQoY0WKGpIhn5gX3iI54O6nRA0yC124NYVtzjmFWBIiFd8M0x+ZdX0P9R4lADg1mgP8C7PxGOWuQ==} + + html-void-elements@3.0.0: + resolution: {integrity: sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==} + + htmlparser2@8.0.2: + resolution: {integrity: sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==} + + htmlparser2@9.1.0: + resolution: {integrity: sha512-5zfg6mHUoaer/97TxnGpxmbR7zJtPwIYFMZ/H5ucTlPZhKvtum05yiPK3Mgai3a0DyVxv7qYqoweaEd2nrYQzQ==} + + http-cache-semantics@4.2.0: + resolution: {integrity: sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ==} + + iconv-lite@0.6.3: + resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} + engines: {node: '>=0.10.0'} + + icss-replace-symbols@1.1.0: + resolution: {integrity: sha512-chIaY3Vh2mh2Q3RGXttaDIzeiPvaVXJ+C4DAh/w3c37SKZ/U6PGMmuicR2EQQp9bKG8zLMCl7I+PtIoOOPp8Gg==} + + icss-utils@5.1.0: + resolution: {integrity: sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==} + engines: {node: ^10 || ^12 || >= 14} + peerDependencies: + postcss: ^8.1.0 + + immutable@4.3.7: + resolution: {integrity: sha512-1hqclzwYwjRDFLjcFxOM5AYkkG0rpFPpr1RLPMEuGczoS7YA8gLhy8SWXYRAA/XwfEHpfo3cw5JGioS32fnMRw==} + + import-cwd@3.0.0: + resolution: {integrity: sha512-4pnzH16plW+hgvRECbDWpQl3cqtvSofHWh44met7ESfZ8UZOWWddm8hEyDTqREJ9RbYHY8gi8DqmaelApoOGMg==} + engines: {node: '>=8'} + + import-fresh@3.3.1: + resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==} + engines: {node: '>=6'} + + import-from@3.0.0: + resolution: {integrity: sha512-CiuXOFFSzkU5x/CR0+z7T91Iht4CXgfCxVOFRhh2Zyhg5wOpWvvDLQUsWl+gcN+QscYBjez8hDCt85O7RLDttQ==} + engines: {node: '>=8'} + + import-meta-resolve@4.2.0: + resolution: {integrity: sha512-Iqv2fzaTQN28s/FwZAoFq0ZSs/7hMAHJVX+w8PZl3cY19Pxk6jFFalxQoIfW2826i/fDLXv8IiEZRIT0lDuWcg==} + + inflight@1.0.6: + resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} + deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. + + inherits@2.0.4: + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + + internal-slot@1.1.0: + resolution: {integrity: sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==} + engines: {node: '>= 0.4'} + + interpret@1.4.0: + resolution: {integrity: sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==} + engines: {node: '>= 0.10'} + + iron-webcrypto@1.2.1: + resolution: {integrity: sha512-feOM6FaSr6rEABp/eDfVseKyTMDt+KGpeB35SkVn9Tyn0CqvVsY3EwI0v5i8nMHyJnzCIQf7nsy3p41TPkJZhg==} + + is-alphabetical@2.0.1: + resolution: {integrity: sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==} + + is-alphanumerical@2.0.1: + resolution: {integrity: sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==} + + is-array-buffer@3.0.5: + resolution: {integrity: sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==} + engines: {node: '>= 0.4'} + + is-arrayish@0.2.1: + resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} + + is-async-function@2.1.1: + resolution: {integrity: sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==} + engines: {node: '>= 0.4'} + + is-bigint@1.1.0: + resolution: {integrity: sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==} + engines: {node: '>= 0.4'} + + is-binary-path@2.1.0: + resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} + engines: {node: '>=8'} + + is-boolean-object@1.2.2: + resolution: {integrity: sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==} + engines: {node: '>= 0.4'} + + is-callable@1.2.7: + resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} + engines: {node: '>= 0.4'} + + is-core-module@2.16.1: + resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==} + engines: {node: '>= 0.4'} + + is-data-view@1.0.2: + resolution: {integrity: sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==} + engines: {node: '>= 0.4'} + + is-date-object@1.1.0: + resolution: {integrity: sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==} + engines: {node: '>= 0.4'} + + is-decimal@2.0.1: + resolution: {integrity: sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==} + + is-docker@2.2.1: + resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==} + engines: {node: '>=8'} + hasBin: true + + is-docker@3.0.0: + resolution: {integrity: sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + hasBin: true + + is-extglob@2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + + is-finalizationregistry@1.1.1: + resolution: {integrity: sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==} + engines: {node: '>= 0.4'} + + is-fullwidth-code-point@3.0.0: + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + engines: {node: '>=8'} + + is-generator-function@1.1.0: + resolution: {integrity: sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ==} + engines: {node: '>= 0.4'} + + is-glob@4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + + is-hexadecimal@2.0.1: + resolution: {integrity: sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==} + + is-inside-container@1.0.0: + resolution: {integrity: sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==} + engines: {node: '>=14.16'} + hasBin: true + + is-map@2.0.3: + resolution: {integrity: sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==} + engines: {node: '>= 0.4'} + + is-module@1.0.0: + resolution: {integrity: sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==} + + is-negative-zero@2.0.3: + resolution: {integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==} + engines: {node: '>= 0.4'} + + is-number-object@1.1.1: + resolution: {integrity: sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==} + engines: {node: '>= 0.4'} + + is-number@7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + + is-plain-obj@4.1.0: + resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==} + engines: {node: '>=12'} + + is-plain-object@5.0.0: + resolution: {integrity: sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==} + engines: {node: '>=0.10.0'} + + is-reference@1.2.1: + resolution: {integrity: sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==} + + is-reference@3.0.3: + resolution: {integrity: sha512-ixkJoqQvAP88E6wLydLGGqCJsrFUnqoH6HnaczB8XmDH1oaWU+xxdptvikTgaEhtZ53Ky6YXiBuUI2WXLMCwjw==} + + is-regex@1.2.1: + resolution: {integrity: sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==} + engines: {node: '>= 0.4'} + + is-set@2.0.3: + resolution: {integrity: sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==} + engines: {node: '>= 0.4'} + + is-shared-array-buffer@1.0.4: + resolution: {integrity: sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==} + engines: {node: '>= 0.4'} + + is-string@1.1.1: + resolution: {integrity: sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==} + engines: {node: '>= 0.4'} + + is-symbol@1.1.1: + resolution: {integrity: sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==} + engines: {node: '>= 0.4'} + + is-typed-array@1.1.15: + resolution: {integrity: sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==} + engines: {node: '>= 0.4'} + + is-weakmap@2.0.2: + resolution: {integrity: sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==} + engines: {node: '>= 0.4'} + + is-weakref@1.1.1: + resolution: {integrity: sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==} + engines: {node: '>= 0.4'} + + is-weakset@2.0.4: + resolution: {integrity: sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==} + engines: {node: '>= 0.4'} + + is-wsl@2.2.0: + resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} + engines: {node: '>=8'} + + is-wsl@3.1.0: + resolution: {integrity: sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==} + engines: {node: '>=16'} + + isarray@2.0.5: + resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} + + isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + + jackspeak@3.4.3: + resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} + + jake@10.9.2: + resolution: {integrity: sha512-2P4SQ0HrLQ+fw6llpLnOaGAvN2Zu6778SJMrCUwns4fOoG9ayrTiZk3VV8sCPkVZF8ab0zksVpS8FDY5pRCNBA==} + engines: {node: '>=10'} + hasBin: true + + jest-worker@26.6.2: + resolution: {integrity: sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==} + engines: {node: '>= 10.13.0'} + + jiti@1.21.7: + resolution: {integrity: sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==} + hasBin: true + + js-tokens@4.0.0: + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + + js-yaml@4.1.0: + resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} + hasBin: true + + jsesc@3.0.2: + resolution: {integrity: sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==} + engines: {node: '>=6'} + hasBin: true + + jsesc@3.1.0: + resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==} + engines: {node: '>=6'} + hasBin: true + + json-parse-even-better-errors@2.3.1: + resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} + + json-schema-traverse@1.0.0: + resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} + + json5@2.2.3: + resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} + engines: {node: '>=6'} + hasBin: true + + jsonc-parser@2.3.1: + resolution: {integrity: sha512-H8jvkz1O50L3dMZCsLqiuB2tA7muqbSg1AtGEkN0leAqGjsUzDJir3Zwr02BhqdcITPg3ei3mZ+HjMocAknhhg==} + + jsonc-parser@3.3.1: + resolution: {integrity: sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==} + + jsonfile@6.1.0: + resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} + + katex@0.16.27: + resolution: {integrity: sha512-aeQoDkuRWSqQN6nSvVCEFvfXdqo1OQiCmmW1kc9xSdjutPv7BGO7pqY9sQRJpMOGrEdfDgF2TfRXe5eUAD2Waw==} + hasBin: true + + kleur@3.0.3: + resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} + engines: {node: '>=6'} + + kleur@4.1.5: + resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==} + engines: {node: '>=6'} + + kolorist@1.8.0: + resolution: {integrity: sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ==} + + lightningcss-darwin-arm64@1.29.3: + resolution: {integrity: sha512-fb7raKO3pXtlNbQbiMeEu8RbBVHnpyqAoxTyTRMEWFQWmscGC2wZxoHzZ+YKAepUuKT9uIW5vL2QbFivTgprZg==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [darwin] + + lightningcss-darwin-x64@1.29.3: + resolution: {integrity: sha512-KF2XZ4ZdmDGGtEYmx5wpzn6u8vg7AdBHaEOvDKu8GOs7xDL/vcU2vMKtTeNe1d4dogkDdi3B9zC77jkatWBwEQ==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [darwin] + + lightningcss-freebsd-x64@1.29.3: + resolution: {integrity: sha512-VUWeVf+V1UM54jv9M4wen9vMlIAyT69Krl9XjI8SsRxz4tdNV/7QEPlW6JASev/pYdiynUCW0pwaFquDRYdxMw==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [freebsd] + + lightningcss-linux-arm-gnueabihf@1.29.3: + resolution: {integrity: sha512-UhgZ/XVNfXQVEJrMIWeK1Laj8KbhjbIz7F4znUk7G4zeGw7TRoJxhb66uWrEsonn1+O45w//0i0Fu0wIovYdYg==} + engines: {node: '>= 12.0.0'} + cpu: [arm] + os: [linux] + + lightningcss-linux-arm64-gnu@1.29.3: + resolution: {integrity: sha512-Pqau7jtgJNmQ/esugfmAT1aCFy/Gxc92FOxI+3n+LbMHBheBnk41xHDhc0HeYlx9G0xP5tK4t0Koy3QGGNqypw==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [linux] + + lightningcss-linux-arm64-musl@1.29.3: + resolution: {integrity: sha512-dxakOk66pf7KLS7VRYFO7B8WOJLecE5OPL2YOk52eriFd/yeyxt2Km5H0BjLfElokIaR+qWi33gB8MQLrdAY3A==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [linux] + + lightningcss-linux-x64-gnu@1.29.3: + resolution: {integrity: sha512-ySZTNCpbfbK8rqpKJeJR2S0g/8UqqV3QnzcuWvpI60LWxnFN91nxpSSwCbzfOXkzKfar9j5eOuOplf+klKtINg==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [linux] + + lightningcss-linux-x64-musl@1.29.3: + resolution: {integrity: sha512-3pVZhIzW09nzi10usAXfIGTTSTYQ141dk88vGFNCgawIzayiIzZQxEcxVtIkdvlEq2YuFsL9Wcj/h61JHHzuFQ==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [linux] + + lightningcss-win32-arm64-msvc@1.29.3: + resolution: {integrity: sha512-VRnkAvtIkeWuoBJeGOTrZxsNp4HogXtcaaLm8agmbYtLDOhQdpgxW6NjZZjDXbvGF+eOehGulXZ3C1TiwHY4QQ==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [win32] + + lightningcss-win32-x64-msvc@1.29.3: + resolution: {integrity: sha512-IszwRPu2cPnDQsZpd7/EAr0x2W7jkaWqQ1SwCVIZ/tSbZVXPLt6k8s6FkcyBjViCzvB5CW0We0QbbP7zp2aBjQ==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [win32] + + lightningcss@1.29.3: + resolution: {integrity: sha512-GlOJwTIP6TMIlrTFsxTerwC0W6OpQpCGuX1ECRLBUVRh6fpJH3xTqjCjRgQHTb4ZXexH9rtHou1Lf03GKzmhhQ==} + engines: {node: '>= 12.0.0'} + + lilconfig@2.1.0: + resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==} + engines: {node: '>=10'} + + lilconfig@3.1.3: + resolution: {integrity: sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==} + engines: {node: '>=14'} + + lines-and-columns@1.2.4: + resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} + + linkify-it@5.0.0: + resolution: {integrity: sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==} + + loader-utils@3.3.1: + resolution: {integrity: sha512-FMJTLMXfCLMLfJxcX9PFqX5qD88Z5MRGaZCVzfuqeZSPsyiBzs+pahDQjbIWz2QIzPZz0NX9Zy4FX3lmK6YHIg==} + engines: {node: '>= 12.13.0'} + + local-pkg@0.5.1: + resolution: {integrity: sha512-9rrA30MRRP3gBD3HTGnC6cDFpaE1kVDWxWgqWJUN0RvDNAo+Nz/9GxB+nHOH0ifbVFy0hSA1V6vFDvnx54lTEQ==} + engines: {node: '>=14'} + + local-pkg@1.1.1: + resolution: {integrity: sha512-WunYko2W1NcdfAFpuLUoucsgULmgDBRkdxHxWQ7mK0cQqwPiy8E1enjuRBrhLtZkB5iScJ1XIPdhVEFK8aOLSg==} + engines: {node: '>=14'} + + locate-character@3.0.0: + resolution: {integrity: sha512-SW13ws7BjaeJ6p7Q6CO2nchbYEc3X3J6WrmTTDto7yMPqVSZTUyY5Tjbid+Ab8gLnATtygYtiDIJGQRRn2ZOiA==} + + locate-path@5.0.0: + resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} + engines: {node: '>=8'} + + lodash.camelcase@4.3.0: + resolution: {integrity: sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==} + + lodash.debounce@4.0.8: + resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==} + + lodash.memoize@4.1.2: + resolution: {integrity: sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==} + + lodash.merge@4.6.2: + resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} + + lodash.uniq@4.5.0: + resolution: {integrity: sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==} + + lodash@4.17.21: + resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} + + longest-streak@3.1.0: + resolution: {integrity: sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==} + + lru-cache@10.4.3: + resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} + + lru-cache@5.1.1: + resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} + + magic-string@0.25.9: + resolution: {integrity: sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==} + + magic-string@0.30.19: + resolution: {integrity: sha512-2N21sPY9Ws53PZvsEpVtNuSW+ScYbQdp4b9qUaL+9QkHUrGFKo56Lg9Emg5s9V/qrtNBmiR01sYhUOwu3H+VOw==} + + magic-string@0.30.21: + resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==} + + magicast@0.3.5: + resolution: {integrity: sha512-L0WhttDl+2BOsybvEOLK7fW3UA0OQ0IQ2d6Zl2x/a6vVRs3bAY0ECOSHHeL5jD+SbOpOCUEi0y1DgHEn9Qn1AQ==} + + make-dir@3.1.0: + resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==} + engines: {node: '>=8'} + + markdown-it@14.1.0: + resolution: {integrity: sha512-a54IwgWPaeBCAAsv13YgmALOF1elABB08FxO9i+r4VFk5Vl4pKokRPeX8u5TCgSsPi6ec1otfLjdOpVcgbpshg==} + hasBin: true + + markdown-table@3.0.4: + resolution: {integrity: sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw==} + + math-intrinsics@1.1.0: + resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} + engines: {node: '>= 0.4'} + + maxmin@2.1.0: + resolution: {integrity: sha512-NWlApBjW9az9qRPaeg7CX4sQBWwytqz32bIEo1PW9pRW+kBP9KLRfJO3UC+TV31EcQZEUq7eMzikC7zt3zPJcw==} + engines: {node: '>=0.12'} + + mdast-util-definitions@6.0.0: + resolution: {integrity: sha512-scTllyX6pnYNZH/AIp/0ePz6s4cZtARxImwoPJ7kS42n+MnVsI4XbnG6d4ibehRIldYMWM2LD7ImQblVhUejVQ==} + + mdast-util-directive@3.1.0: + resolution: {integrity: sha512-I3fNFt+DHmpWCYAT7quoM6lHf9wuqtI+oCOfvILnoicNIqjh5E3dEJWiXuYME2gNe8vl1iMQwyUHa7bgFmak6Q==} + + mdast-util-find-and-replace@3.0.2: + resolution: {integrity: sha512-Tmd1Vg/m3Xz43afeNxDIhWRtFZgM2VLyaf4vSTYwudTyeuTneoL3qtWMA5jeLyz/O1vDJmmV4QuScFCA2tBPwg==} + + mdast-util-from-markdown@2.0.2: + resolution: {integrity: sha512-uZhTV/8NBuw0WHkPTrCqDOl0zVe1BIng5ZtHoDk49ME1qqcjYmmLmOf0gELgcRMxN4w2iuIeVso5/6QymSrgmA==} + + mdast-util-gfm-autolink-literal@2.0.1: + resolution: {integrity: sha512-5HVP2MKaP6L+G6YaxPNjuL0BPrq9orG3TsrZ9YXbA3vDw/ACI4MEsnoDpn6ZNm7GnZgtAcONJyPhOP8tNJQavQ==} + + mdast-util-gfm-footnote@2.1.0: + resolution: {integrity: sha512-sqpDWlsHn7Ac9GNZQMeUzPQSMzR6Wv0WKRNvQRg0KqHh02fpTz69Qc1QSseNX29bhz1ROIyNyxExfawVKTm1GQ==} + + mdast-util-gfm-strikethrough@2.0.0: + resolution: {integrity: sha512-mKKb915TF+OC5ptj5bJ7WFRPdYtuHv0yTRxK2tJvi+BDqbkiG7h7u/9SI89nRAYcmap2xHQL9D+QG/6wSrTtXg==} + + mdast-util-gfm-table@2.0.0: + resolution: {integrity: sha512-78UEvebzz/rJIxLvE7ZtDd/vIQ0RHv+3Mh5DR96p7cS7HsBhYIICDBCu8csTNWNO6tBWfqXPWekRuj2FNOGOZg==} + + mdast-util-gfm-task-list-item@2.0.0: + resolution: {integrity: sha512-IrtvNvjxC1o06taBAVJznEnkiHxLFTzgonUdy8hzFVeDun0uTjxxrRGVaNFqkU1wJR3RBPEfsxmU6jDWPofrTQ==} + + mdast-util-gfm@3.1.0: + resolution: {integrity: sha512-0ulfdQOM3ysHhCJ1p06l0b0VKlhU0wuQs3thxZQagjcjPrlFRqY215uZGHHJan9GEAXd9MbfPjFJz+qMkVR6zQ==} + + mdast-util-math@3.0.0: + resolution: {integrity: sha512-Tl9GBNeG/AhJnQM221bJR2HPvLOSnLE/T9cJI9tlc6zwQk2nPk/4f0cHkOdEixQPC/j8UtKDdITswvLAy1OZ1w==} + + mdast-util-phrasing@4.1.0: + resolution: {integrity: sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==} + + mdast-util-to-hast@13.2.1: + resolution: {integrity: sha512-cctsq2wp5vTsLIcaymblUriiTcZd0CwWtCbLvrOzYCDZoWyMNV8sZ7krj09FSnsiJi3WVsHLM4k6Dq/yaPyCXA==} + + mdast-util-to-markdown@2.1.2: + resolution: {integrity: sha512-xj68wMTvGXVOKonmog6LwyJKrYXZPvlwabaryTjLh9LuvovB/KAH+kvi8Gjj+7rJjsFi23nkUxRQv1KqSroMqA==} + + mdast-util-to-string@4.0.0: + resolution: {integrity: sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==} + + mdn-data@2.0.14: + resolution: {integrity: sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==} + + mdn-data@2.0.28: + resolution: {integrity: sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==} + + mdn-data@2.0.30: + resolution: {integrity: sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==} + + mdn-data@2.12.2: + resolution: {integrity: sha512-IEn+pegP1aManZuckezWCO+XZQDplx1366JoVhTpMpBB1sPey/SbveZQUosKiKiGYjg1wH4pMlNgXbCiYgihQA==} + + mdurl@2.0.0: + resolution: {integrity: sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==} + + merge-stream@2.0.0: + resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} + + merge2@1.4.1: + resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} + engines: {node: '>= 8'} + + microbundle@0.15.1: + resolution: {integrity: sha512-aAF+nwFbkSIJGfrJk+HyzmJOq3KFaimH6OIFBU6J2DPjQeg1jXIYlIyEv81Gyisb9moUkudn+wj7zLNYMOv75Q==} + hasBin: true + + micromark-core-commonmark@2.0.3: + resolution: {integrity: sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg==} + + micromark-extension-directive@3.0.2: + resolution: {integrity: sha512-wjcXHgk+PPdmvR58Le9d7zQYWy+vKEU9Se44p2CrCDPiLr2FMyiT4Fyb5UFKFC66wGB3kPlgD7q3TnoqPS7SZA==} + + micromark-extension-gfm-autolink-literal@2.1.0: + resolution: {integrity: sha512-oOg7knzhicgQ3t4QCjCWgTmfNhvQbDDnJeVu9v81r7NltNCVmhPy1fJRX27pISafdjL+SVc4d3l48Gb6pbRypw==} + + micromark-extension-gfm-footnote@2.1.0: + resolution: {integrity: sha512-/yPhxI1ntnDNsiHtzLKYnE3vf9JZ6cAisqVDauhp4CEHxlb4uoOTxOCJ+9s51bIB8U1N1FJ1RXOKTIlD5B/gqw==} + + micromark-extension-gfm-strikethrough@2.1.0: + resolution: {integrity: sha512-ADVjpOOkjz1hhkZLlBiYA9cR2Anf8F4HqZUO6e5eDcPQd0Txw5fxLzzxnEkSkfnD0wziSGiv7sYhk/ktvbf1uw==} + + micromark-extension-gfm-table@2.1.1: + resolution: {integrity: sha512-t2OU/dXXioARrC6yWfJ4hqB7rct14e8f7m0cbI5hUmDyyIlwv5vEtooptH8INkbLzOatzKuVbQmAYcbWoyz6Dg==} + + micromark-extension-gfm-tagfilter@2.0.0: + resolution: {integrity: sha512-xHlTOmuCSotIA8TW1mDIM6X2O1SiX5P9IuDtqGonFhEK0qgRI4yeC6vMxEV2dgyr2TiD+2PQ10o+cOhdVAcwfg==} + + micromark-extension-gfm-task-list-item@2.1.0: + resolution: {integrity: sha512-qIBZhqxqI6fjLDYFTBIa4eivDMnP+OZqsNwmQ3xNLE4Cxwc+zfQEfbs6tzAo2Hjq+bh6q5F+Z8/cksrLFYWQQw==} + + micromark-extension-gfm@3.0.0: + resolution: {integrity: sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w==} + + micromark-extension-math@3.1.0: + resolution: {integrity: sha512-lvEqd+fHjATVs+2v/8kg9i5Q0AP2k85H0WUOwpIVvUML8BapsMvh1XAogmQjOCsLpoKRCVQqEkQBB3NhVBcsOg==} + + micromark-factory-destination@2.0.1: + resolution: {integrity: sha512-Xe6rDdJlkmbFRExpTOmRj9N3MaWmbAgdpSrBQvCFqhezUn4AHqJHbaEnfbVYYiexVSs//tqOdY/DxhjdCiJnIA==} + + micromark-factory-label@2.0.1: + resolution: {integrity: sha512-VFMekyQExqIW7xIChcXn4ok29YE3rnuyveW3wZQWWqF4Nv9Wk5rgJ99KzPvHjkmPXF93FXIbBp6YdW3t71/7Vg==} + + micromark-factory-space@2.0.1: + resolution: {integrity: sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==} + + micromark-factory-title@2.0.1: + resolution: {integrity: sha512-5bZ+3CjhAd9eChYTHsjy6TGxpOFSKgKKJPJxr293jTbfry2KDoWkhBb6TcPVB4NmzaPhMs1Frm9AZH7OD4Cjzw==} + + micromark-factory-whitespace@2.0.1: + resolution: {integrity: sha512-Ob0nuZ3PKt/n0hORHyvoD9uZhr+Za8sFoP+OnMcnWK5lngSzALgQYKMr9RJVOWLqQYuyn6ulqGWSXdwf6F80lQ==} + + micromark-util-character@2.1.1: + resolution: {integrity: sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==} + + micromark-util-chunked@2.0.1: + resolution: {integrity: sha512-QUNFEOPELfmvv+4xiNg2sRYeS/P84pTW0TCgP5zc9FpXetHY0ab7SxKyAQCNCc1eK0459uoLI1y5oO5Vc1dbhA==} + + micromark-util-classify-character@2.0.1: + resolution: {integrity: sha512-K0kHzM6afW/MbeWYWLjoHQv1sgg2Q9EccHEDzSkxiP/EaagNzCm7T/WMKZ3rjMbvIpvBiZgwR3dKMygtA4mG1Q==} + + micromark-util-combine-extensions@2.0.1: + resolution: {integrity: sha512-OnAnH8Ujmy59JcyZw8JSbK9cGpdVY44NKgSM7E9Eh7DiLS2E9RNQf0dONaGDzEG9yjEl5hcqeIsj4hfRkLH/Bg==} + + micromark-util-decode-numeric-character-reference@2.0.2: + resolution: {integrity: sha512-ccUbYk6CwVdkmCQMyr64dXz42EfHGkPQlBj5p7YVGzq8I7CtjXZJrubAYezf7Rp+bjPseiROqe7G6foFd+lEuw==} + + micromark-util-decode-string@2.0.1: + resolution: {integrity: sha512-nDV/77Fj6eH1ynwscYTOsbK7rR//Uj0bZXBwJZRfaLEJ1iGBR6kIfNmlNqaqJf649EP0F3NWNdeJi03elllNUQ==} + + micromark-util-encode@2.0.1: + resolution: {integrity: sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==} + + micromark-util-html-tag-name@2.0.1: + resolution: {integrity: sha512-2cNEiYDhCWKI+Gs9T0Tiysk136SnR13hhO8yW6BGNyhOC4qYFnwF1nKfD3HFAIXA5c45RrIG1ub11GiXeYd1xA==} + + micromark-util-normalize-identifier@2.0.1: + resolution: {integrity: sha512-sxPqmo70LyARJs0w2UclACPUUEqltCkJ6PhKdMIDuJ3gSf/Q+/GIe3WKl0Ijb/GyH9lOpUkRAO2wp0GVkLvS9Q==} + + micromark-util-resolve-all@2.0.1: + resolution: {integrity: sha512-VdQyxFWFT2/FGJgwQnJYbe1jjQoNTS4RjglmSjTUlpUMa95Htx9NHeYW4rGDJzbjvCsl9eLjMQwGeElsqmzcHg==} + + micromark-util-sanitize-uri@2.0.1: + resolution: {integrity: sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==} + + micromark-util-subtokenize@2.1.0: + resolution: {integrity: sha512-XQLu552iSctvnEcgXw6+Sx75GflAPNED1qx7eBJ+wydBb2KCbRZe+NwvIEEMM83uml1+2WSXpBAcp9IUCgCYWA==} + + micromark-util-symbol@2.0.1: + resolution: {integrity: sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==} + + micromark-util-types@2.0.2: + resolution: {integrity: sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==} + + micromark@4.0.2: + resolution: {integrity: sha512-zpe98Q6kvavpCr1NPVSCMebCKfD7CA2NqZ+rykeNhONIJBpc1tFKt9hucLGwha3jNTNI8lHpctWJWoimVF4PfA==} + + micromatch@4.0.8: + resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} + engines: {node: '>=8.6'} + + mime-db@1.52.0: + resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} + engines: {node: '>= 0.6'} + + mime-types@2.1.35: + resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} + engines: {node: '>= 0.6'} + + minimatch@3.1.2: + resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + + minimatch@5.1.6: + resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==} + engines: {node: '>=10'} + + minimatch@9.0.5: + resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} + engines: {node: '>=16 || 14 >=14.17'} + + minipass@3.3.6: + resolution: {integrity: sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==} + engines: {node: '>=8'} + + minipass@4.2.8: + resolution: {integrity: sha512-fNzuVyifolSLFL4NzpF+wEF4qrgqaaKX0haXPQEdQ7NKAN+WecoKMHV09YcuL/DHxrUsYQOK3MiuDf7Ip2OXfQ==} + engines: {node: '>=8'} + + minipass@5.0.0: + resolution: {integrity: sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==} + engines: {node: '>=8'} + + minipass@7.1.2: + resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} + engines: {node: '>=16 || 14 >=14.17'} + + minizlib@2.1.2: + resolution: {integrity: sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==} + engines: {node: '>= 8'} + + mkdirp@1.0.4: + resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==} + engines: {node: '>=10'} + hasBin: true + + mlly@1.7.4: + resolution: {integrity: sha512-qmdSIPC4bDJXgZTCR7XosJiNKySV7O215tsPtDN9iEO/7q/76b/ijtgRu/+epFXSJhijtTCCGp3DWS549P3xKw==} + + morphdom@2.7.5: + resolution: {integrity: sha512-z6bfWFMra7kBqDjQGHud1LSXtq5JJC060viEkQFMBX6baIecpkNr2Ywrn2OQfWP3rXiNFQRPoFjD8/TvJcWcDg==} + + mri@1.2.0: + resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==} + engines: {node: '>=4'} + + mrmime@2.0.1: + resolution: {integrity: sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==} + engines: {node: '>=10'} + + ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + + muggle-string@0.4.1: + resolution: {integrity: sha512-VNTrAak/KhO2i8dqqnqnAHOa3cYBwXEZe9h+D5h/1ZqFSTEFHdM65lR7RoIqq3tBBYavsOXV84NoHXZ0AkPyqQ==} + + mz@2.7.0: + resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} + + nanoid@3.3.11: + resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + + neotraverse@0.6.18: + resolution: {integrity: sha512-Z4SmBUweYa09+o6pG+eASabEpP6QkQ70yHj351pQoEXIs8uHbaU2DWVmzBANKgflPa47A50PtB2+NgRpQvr7vA==} + engines: {node: '>= 10'} + + nlcst-to-string@4.0.0: + resolution: {integrity: sha512-YKLBCcUYKAg0FNlOBT6aI91qFmSiFKiluk655WzPF+DDMA02qIyy8uiRqI8QXtcFpEvll12LpL5MXqEmAZ+dcA==} + + node-addon-api@7.1.1: + resolution: {integrity: sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==} + + node-fetch-native@1.6.7: + resolution: {integrity: sha512-g9yhqoedzIUm0nTnTqAQvueMPVOuIY16bqgAJJC8XOOubYFNwz6IER9qs0Gq2Xd0+CecCKFjtdDTMA4u4xG06Q==} + + node-fetch@2.7.0: + resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} + engines: {node: 4.x || >=6.0.0} + peerDependencies: + encoding: ^0.1.0 + peerDependenciesMeta: + encoding: + optional: true + + node-mock-http@1.0.3: + resolution: {integrity: sha512-jN8dK25fsfnMrVsEhluUTPkBFY+6ybu7jSB1n+ri/vOGjJxU8J9CZhpSGkHXSkFjtUhbmoncG/YG9ta5Ludqog==} + + node-releases@2.0.19: + resolution: {integrity: sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==} + + normalize-path@3.0.0: + resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} + engines: {node: '>=0.10.0'} + + normalize-range@0.1.2: + resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==} + engines: {node: '>=0.10.0'} + + normalize-url@6.1.0: + resolution: {integrity: sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==} + engines: {node: '>=10'} + + nth-check@2.1.1: + resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==} + + number-is-nan@1.0.1: + resolution: {integrity: sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ==} + engines: {node: '>=0.10.0'} + + object-assign@4.1.1: + resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} + engines: {node: '>=0.10.0'} + + object-hash@3.0.0: + resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==} + engines: {node: '>= 6'} + + object-inspect@1.13.4: + resolution: {integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==} + engines: {node: '>= 0.4'} + + object-keys@1.1.1: + resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} + engines: {node: '>= 0.4'} + + object.assign@4.1.7: + resolution: {integrity: sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==} + engines: {node: '>= 0.4'} + + ofetch@1.4.1: + resolution: {integrity: sha512-QZj2DfGplQAr2oj9KzceK9Hwz6Whxazmn85yYeVuS3u9XTMOGMRx0kO95MQ+vLsj/S/NwBDMMLU5hpxvI6Tklw==} + + ohash@2.0.11: + resolution: {integrity: sha512-RdR9FQrFwNBNXAr4GixM8YaRZRJ5PUWbKYbE5eOsrwAjJW0q2REGcf79oYPsLyskQCZG1PLN+S/K1V00joZAoQ==} + + once@1.4.0: + resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + + oniguruma-parser@0.12.1: + resolution: {integrity: sha512-8Unqkvk1RYc6yq2WBYRj4hdnsAxVze8i7iPfQr8e4uSP3tRv0rpZcbGUDvxfQQcdwHt/e9PrMvGCsa8OqG9X3w==} + + oniguruma-to-es@4.3.3: + resolution: {integrity: sha512-rPiZhzC3wXwE59YQMRDodUwwT9FZ9nNBwQQfsd1wfdtlKEyCdRV0avrTcSZ5xlIvGRVPd/cx6ZN45ECmS39xvg==} + + oniguruma-to-es@4.3.4: + resolution: {integrity: sha512-3VhUGN3w2eYxnTzHn+ikMI+fp/96KoRSVK9/kMTcFqj1NRDh2IhQCKvYxDnWePKRXY/AqH+Fuiyb7VHSzBjHfA==} + + open@8.4.2: + resolution: {integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==} + engines: {node: '>=12'} + + opencollective-postinstall@2.0.3: + resolution: {integrity: sha512-8AV/sCtuzUeTo8gQK5qDZzARrulB3egtLzFgteqB2tcT4Mw7B8Kt7JcDHmltjz6FOAHsvTevk70gZEbhM4ZS9Q==} + hasBin: true + + overlayscrollbars@2.12.0: + resolution: {integrity: sha512-mWJ5MOkcZ/ljHwfLw8+bN0V9ziGCoNoqULcp994j5DTGNQvnkWKWkA7rnO29Kyew5AoHxUnJ4Ndqfcl0HSQjXg==} + + own-keys@1.0.1: + resolution: {integrity: sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==} + engines: {node: '>= 0.4'} + + p-finally@1.0.0: + resolution: {integrity: sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==} + engines: {node: '>=4'} + + p-limit@2.3.0: + resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} + engines: {node: '>=6'} + + p-limit@6.2.0: + resolution: {integrity: sha512-kuUqqHNUqoIWp/c467RI4X6mmyuojY5jGutNU0wVTmEOOfcuwLqyMVoAi9MKi2Ak+5i9+nhmrK4ufZE8069kHA==} + engines: {node: '>=18'} + + p-locate@4.1.0: + resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} + engines: {node: '>=8'} + + p-queue@6.6.2: + resolution: {integrity: sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ==} + engines: {node: '>=8'} + + p-queue@8.1.1: + resolution: {integrity: sha512-aNZ+VfjobsWryoiPnEApGGmf5WmNsCo9xu8dfaYamG5qaLP7ClhLN6NgsFe6SwJ2UbLEBK5dv9x8Mn5+RVhMWQ==} + engines: {node: '>=18'} + + p-timeout@3.2.0: + resolution: {integrity: sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==} + engines: {node: '>=8'} + + p-timeout@6.1.4: + resolution: {integrity: sha512-MyIV3ZA/PmyBN/ud8vV9XzwTrNtR4jFrObymZYnZqMmW0zA8Z17vnT0rBgFE/TlohB+YCHqXMgZzb3Csp49vqg==} + engines: {node: '>=14.16'} + + p-try@2.2.0: + resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} + engines: {node: '>=6'} + + package-json-from-dist@1.0.1: + resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} + + package-manager-detector@0.2.11: + resolution: {integrity: sha512-BEnLolu+yuz22S56CU1SUKq3XC3PkwD5wv4ikR4MfGvnRVcmzXR9DwSlW2fEamyTPyXHomBJRzgapeuBvRNzJQ==} + + package-manager-detector@1.3.0: + resolution: {integrity: sha512-ZsEbbZORsyHuO00lY1kV3/t72yp6Ysay6Pd17ZAlNGuGwmWDLCJxFpRs0IzfXfj1o4icJOkUEioexFHzyPurSQ==} + + pagefind@1.4.0: + resolution: {integrity: sha512-z2kY1mQlL4J8q5EIsQkLzQjilovKzfNVhX8De6oyE6uHpfFtyBaqUpcl/XzJC/4fjD8vBDyh1zolimIcVrCn9g==} + hasBin: true + + pako@0.2.9: + resolution: {integrity: sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA==} + + parent-module@1.0.1: + resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} + engines: {node: '>=6'} + + parse-entities@4.0.2: + resolution: {integrity: sha512-GG2AQYWoLgL877gQIKeRPGO1xF9+eG1ujIb5soS5gPvLQ1y2o8FL90w2QWNdf9I361Mpp7726c+lj3U0qK1uGw==} + + parse-json@5.2.0: + resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} + engines: {node: '>=8'} + + parse-latin@7.0.0: + resolution: {integrity: sha512-mhHgobPPua5kZ98EF4HWiH167JWBfl4pvAIXXdbaVohtK7a6YBOy56kvhCqduqyo/f3yrHFWmqmiMg/BkBkYYQ==} + + parse-srcset@1.0.2: + resolution: {integrity: sha512-/2qh0lav6CmI15FzA3i/2Bzk2zCgQhGMkvhOhKNcBVQ1ldgpbfiNTVslmooUmWJcADi1f1kIeynbDRVzNlfR6Q==} + + parse5-htmlparser2-tree-adapter@7.1.0: + resolution: {integrity: sha512-ruw5xyKs6lrpo9x9rCZqZZnIUntICjQAd0Wsmp396Ul9lN/h+ifgVV1x1gZHi8euej6wTfpqX8j+BFQxF0NS/g==} + + parse5-parser-stream@7.1.2: + resolution: {integrity: sha512-JyeQc9iwFLn5TbvvqACIF/VXG6abODeB3Fwmv/TGdLk2LfbWkaySGY72at4+Ty7EkPZj854u4CrICqNk2qIbow==} + + parse5@7.2.1: + resolution: {integrity: sha512-BuBYQYlv1ckiPdQi/ohiivi9Sagc9JG+Ozs0r7b/0iK3sKmrb0b9FdWdBbOdx6hBCM/F9Ir82ofnBhtZOjCRPQ==} + + parse5@7.3.0: + resolution: {integrity: sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==} + + path-browserify@1.0.1: + resolution: {integrity: sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==} + + path-exists@4.0.0: + resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} + engines: {node: '>=8'} + + path-is-absolute@1.0.1: + resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} + engines: {node: '>=0.10.0'} + + path-key@3.1.1: + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + engines: {node: '>=8'} + + path-parse@1.0.7: + resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} + + path-scurry@1.11.1: + resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} + engines: {node: '>=16 || 14 >=14.18'} + + path-to-regexp@6.3.0: + resolution: {integrity: sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ==} + + path-type@4.0.0: + resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} + engines: {node: '>=8'} + + pathe@1.1.2: + resolution: {integrity: sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==} + + pathe@2.0.3: + resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==} + + pend@1.2.0: + resolution: {integrity: sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==} + + photoswipe@5.4.4: + resolution: {integrity: sha512-WNFHoKrkZNnvFFhbHL93WDkW3ifwVOXSW3w1UuZZelSmgXpIGiZSNlZJq37rR8YejqME2rHs9EhH9ZvlvFH2NA==} + engines: {node: '>= 0.12.0'} + + piccolore@0.1.3: + resolution: {integrity: sha512-o8bTeDWjE086iwKrROaDf31K0qC/BENdm15/uH9usSC/uZjJOKb2YGiVHfLY4GhwsERiPI1jmwI2XrA7ACOxVw==} + + picocolors@1.1.1: + resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} + + picomatch@2.3.1: + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} + + picomatch@4.0.3: + resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==} + engines: {node: '>=12'} + + pify@2.3.0: + resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} + engines: {node: '>=0.10.0'} + + pify@5.0.0: + resolution: {integrity: sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA==} + engines: {node: '>=10'} + + pirates@4.0.7: + resolution: {integrity: sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==} + engines: {node: '>= 6'} + + pkg-dir@4.2.0: + resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} + engines: {node: '>=8'} + + pkg-types@1.3.1: + resolution: {integrity: sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==} + + pkg-types@2.1.0: + resolution: {integrity: sha512-wmJwA+8ihJixSoHKxZJRBQG1oY8Yr9pGLzRmSsNms0iNWyHHAlZCa7mmKiFR10YPZuz/2k169JiS/inOjBCZ2A==} + + possible-typed-array-names@1.1.0: + resolution: {integrity: sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==} + engines: {node: '>= 0.4'} + + postcss-calc@8.2.4: + resolution: {integrity: sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q==} + peerDependencies: + postcss: ^8.2.2 + + postcss-colormin@5.3.1: + resolution: {integrity: sha512-UsWQG0AqTFQmpBegeLLc1+c3jIqBNB0zlDGRWR+dQ3pRKJL1oeMzyqmH3o2PIfn9MBdNrVPWhDbT769LxCTLJQ==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + + postcss-convert-values@5.1.3: + resolution: {integrity: sha512-82pC1xkJZtcJEfiLw6UXnXVXScgtBrjlO5CBmuDQc+dlb88ZYheFsjTn40+zBVi3DkfF7iezO0nJUPLcJK3pvA==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + + postcss-discard-comments@5.1.2: + resolution: {integrity: sha512-+L8208OVbHVF2UQf1iDmRcbdjJkuBF6IS29yBDSiWUIzpYaAhtNl6JYnYm12FnkeCwQqF5LeklOu6rAqgfBZqQ==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + + postcss-discard-duplicates@5.1.0: + resolution: {integrity: sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + + postcss-discard-empty@5.1.1: + resolution: {integrity: sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + + postcss-discard-overridden@5.1.0: + resolution: {integrity: sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + + postcss-import@15.1.0: + resolution: {integrity: sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==} + engines: {node: '>=14.0.0'} + peerDependencies: + postcss: ^8.0.0 + + postcss-import@16.1.1: + resolution: {integrity: sha512-2xVS1NCZAfjtVdvXiyegxzJ447GyqCeEI5V7ApgQVOWnros1p5lGNovJNapwPpMombyFBfqDwt7AD3n2l0KOfQ==} + engines: {node: '>=18.0.0'} + peerDependencies: + postcss: ^8.0.0 + + postcss-js@4.1.0: + resolution: {integrity: sha512-oIAOTqgIo7q2EOwbhb8UalYePMvYoIeRY2YKntdpFQXNosSu3vLrniGgmH9OKs/qAkfoj5oB3le/7mINW1LCfw==} + engines: {node: ^12 || ^14 || >= 16} + peerDependencies: + postcss: ^8.4.21 + + postcss-load-config@3.1.4: + resolution: {integrity: sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==} + engines: {node: '>= 10'} + peerDependencies: + postcss: '>=8.0.9' + ts-node: '>=9.0.0' + peerDependenciesMeta: + postcss: + optional: true + ts-node: + optional: true + + postcss-load-config@4.0.2: + resolution: {integrity: sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==} + engines: {node: '>= 14'} + peerDependencies: + postcss: '>=8.0.9' + ts-node: '>=9.0.0' + peerDependenciesMeta: + postcss: + optional: true + ts-node: + optional: true + + postcss-load-config@6.0.1: + resolution: {integrity: sha512-oPtTM4oerL+UXmx+93ytZVN82RrlY/wPUV8IeDxFrzIjXOLF1pN+EmKPLbubvKHT2HC20xXsCAH2Z+CKV6Oz/g==} + engines: {node: '>= 18'} + peerDependencies: + jiti: '>=1.21.0' + postcss: '>=8.0.9' + tsx: ^4.8.1 + yaml: ^2.4.2 + peerDependenciesMeta: + jiti: + optional: true + postcss: + optional: true + tsx: + optional: true + yaml: + optional: true + + postcss-merge-longhand@5.1.7: + resolution: {integrity: sha512-YCI9gZB+PLNskrK0BB3/2OzPnGhPkBEwmwhfYk1ilBHYVAZB7/tkTHFBAnCrvBBOmeYyMYw3DMjT55SyxMBzjQ==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + + postcss-merge-rules@5.1.4: + resolution: {integrity: sha512-0R2IuYpgU93y9lhVbO/OylTtKMVcHb67zjWIfCiKR9rWL3GUk1677LAqD/BcHizukdZEjT8Ru3oHRoAYoJy44g==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + + postcss-minify-font-values@5.1.0: + resolution: {integrity: sha512-el3mYTgx13ZAPPirSVsHqFzl+BBBDrXvbySvPGFnQcTI4iNslrPaFq4muTkLZmKlGk4gyFAYUBMH30+HurREyA==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + + postcss-minify-gradients@5.1.1: + resolution: {integrity: sha512-VGvXMTpCEo4qHTNSa9A0a3D+dxGFZCYwR6Jokk+/3oB6flu2/PnPXAh2x7x52EkY5xlIHLm+Le8tJxe/7TNhzw==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + + postcss-minify-params@5.1.4: + resolution: {integrity: sha512-+mePA3MgdmVmv6g+30rn57USjOGSAyuxUmkfiWpzalZ8aiBkdPYjXWtHuwJGm1v5Ojy0Z0LaSYhHaLJQB0P8Jw==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + + postcss-minify-selectors@5.2.1: + resolution: {integrity: sha512-nPJu7OjZJTsVUmPdm2TcaiohIwxP+v8ha9NehQ2ye9szv4orirRU3SDdtUmKH+10nzn0bAyOXZ0UEr7OpvLehg==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + + postcss-modules-extract-imports@3.1.0: + resolution: {integrity: sha512-k3kNe0aNFQDAZGbin48pL2VNidTF0w4/eASDsxlyspobzU3wZQLOGj7L9gfRe0Jo9/4uud09DsjFNH7winGv8Q==} + engines: {node: ^10 || ^12 || >= 14} + peerDependencies: + postcss: ^8.1.0 + + postcss-modules-local-by-default@4.2.0: + resolution: {integrity: sha512-5kcJm/zk+GJDSfw+V/42fJ5fhjL5YbFDl8nVdXkJPLLW+Vf9mTD5Xe0wqIaDnLuL2U6cDNpTr+UQ+v2HWIBhzw==} + engines: {node: ^10 || ^12 || >= 14} + peerDependencies: + postcss: ^8.1.0 + + postcss-modules-scope@3.2.1: + resolution: {integrity: sha512-m9jZstCVaqGjTAuny8MdgE88scJnCiQSlSrOWcTQgM2t32UBe+MUmFSO5t7VMSfAf/FJKImAxBav8ooCHJXCJA==} + engines: {node: ^10 || ^12 || >= 14} + peerDependencies: + postcss: ^8.1.0 + + postcss-modules-values@4.0.0: + resolution: {integrity: sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==} + engines: {node: ^10 || ^12 || >= 14} + peerDependencies: + postcss: ^8.1.0 + + postcss-modules@4.3.1: + resolution: {integrity: sha512-ItUhSUxBBdNamkT3KzIZwYNNRFKmkJrofvC2nWab3CPKhYBQ1f27XXh1PAPE27Psx58jeelPsxWB/+og+KEH0Q==} + peerDependencies: + postcss: ^8.0.0 + + postcss-nested@6.2.0: + resolution: {integrity: sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==} + engines: {node: '>=12.0'} + peerDependencies: + postcss: ^8.2.14 + + postcss-nesting@13.0.2: + resolution: {integrity: sha512-1YCI290TX+VP0U/K/aFxzHzQWHWURL+CtHMSbex1lCdpXD1SoR2sYuxDu5aNI9lPoXpKTCggFZiDJbwylU0LEQ==} + engines: {node: '>=18'} + peerDependencies: + postcss: ^8.4 + + postcss-normalize-charset@5.1.0: + resolution: {integrity: sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + + postcss-normalize-display-values@5.1.0: + resolution: {integrity: sha512-WP4KIM4o2dazQXWmFaqMmcvsKmhdINFblgSeRgn8BJ6vxaMyaJkwAzpPpuvSIoG/rmX3M+IrRZEz2H0glrQNEA==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + + postcss-normalize-positions@5.1.1: + resolution: {integrity: sha512-6UpCb0G4eofTCQLFVuI3EVNZzBNPiIKcA1AKVka+31fTVySphr3VUgAIULBhxZkKgwLImhzMR2Bw1ORK+37INg==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + + postcss-normalize-repeat-style@5.1.1: + resolution: {integrity: sha512-mFpLspGWkQtBcWIRFLmewo8aC3ImN2i/J3v8YCFUwDnPu3Xz4rLohDO26lGjwNsQxB3YF0KKRwspGzE2JEuS0g==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + + postcss-normalize-string@5.1.0: + resolution: {integrity: sha512-oYiIJOf4T9T1N4i+abeIc7Vgm/xPCGih4bZz5Nm0/ARVJ7K6xrDlLwvwqOydvyL3RHNf8qZk6vo3aatiw/go3w==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + + postcss-normalize-timing-functions@5.1.0: + resolution: {integrity: sha512-DOEkzJ4SAXv5xkHl0Wa9cZLF3WCBhF3o1SKVxKQAa+0pYKlueTpCgvkFAHfk+Y64ezX9+nITGrDZeVGgITJXjg==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + + postcss-normalize-unicode@5.1.1: + resolution: {integrity: sha512-qnCL5jzkNUmKVhZoENp1mJiGNPcsJCs1aaRmURmeJGES23Z/ajaln+EPTD+rBeNkSryI+2WTdW+lwcVdOikrpA==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + + postcss-normalize-url@5.1.0: + resolution: {integrity: sha512-5upGeDO+PVthOxSmds43ZeMeZfKH+/DKgGRD7TElkkyS46JXAUhMzIKiCa7BabPeIy3AQcTkXwVVN7DbqsiCew==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + + postcss-normalize-whitespace@5.1.1: + resolution: {integrity: sha512-83ZJ4t3NUDETIHTa3uEg6asWjSBYL5EdkVB0sDncx9ERzOKBVJIUeDO9RyA9Zwtig8El1d79HBp0JEi8wvGQnA==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + + postcss-ordered-values@5.1.3: + resolution: {integrity: sha512-9UO79VUhPwEkzbb3RNpqqghc6lcYej1aveQteWY+4POIwlqkYE21HKWaLDF6lWNuqCobEAyTovVhtI32Rbv2RQ==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + + postcss-reduce-initial@5.1.2: + resolution: {integrity: sha512-dE/y2XRaqAi6OvjzD22pjTUQ8eOfc6m/natGHgKFBK9DxFmIm69YmaRVQrGgFlEfc1HePIurY0TmDeROK05rIg==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + + postcss-reduce-transforms@5.1.0: + resolution: {integrity: sha512-2fbdbmgir5AvpW9RLtdONx1QoYG2/EtqpNQbFASDlixBbAYuTcJ0dECwlqNqH7VbaUnEnh8SrxOe2sRIn24XyQ==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + + postcss-selector-parser@6.0.10: + resolution: {integrity: sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==} + engines: {node: '>=4'} + + postcss-selector-parser@6.1.2: + resolution: {integrity: sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==} + engines: {node: '>=4'} + + postcss-selector-parser@7.1.0: + resolution: {integrity: sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==} + engines: {node: '>=4'} + + postcss-selector-parser@7.1.1: + resolution: {integrity: sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg==} + engines: {node: '>=4'} + + postcss-svgo@5.1.0: + resolution: {integrity: sha512-D75KsH1zm5ZrHyxPakAxJWtkyXew5qwS70v56exwvw542d9CRtTo78K0WeFxZB4G7JXKKMbEZtZayTGdIky/eA==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + + postcss-unique-selectors@5.1.1: + resolution: {integrity: sha512-5JiODlELrz8L2HwxfPnhOWZYWDxVHWL83ufOv84NrcgipI7TaeRsatAhK4Tr2/ZiYldpK/wBvw5BD3qfaK96GA==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + + postcss-value-parser@4.2.0: + resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} + + postcss@8.5.3: + resolution: {integrity: sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==} + engines: {node: ^10 || ^12 || >=14} + + postcss@8.5.6: + resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==} + engines: {node: ^10 || ^12 || >=14} + + prettier@2.8.8: + resolution: {integrity: sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==} + engines: {node: '>=10.13.0'} + hasBin: true + + prettier@3.7.4: + resolution: {integrity: sha512-v6UNi1+3hSlVvv8fSaoUbggEM5VErKmmpGA7Pl3HF8V6uKY7rvClBOJlH6yNwQtfTueNkGVpOv/mtWL9L4bgRA==} + engines: {node: '>=14'} + hasBin: true + + pretty-bytes@3.0.1: + resolution: {integrity: sha512-eb7ZAeUTgfh294cElcu51w+OTRp/6ItW758LjwJSK72LDevcuJn0P4eD71PLMDGPwwatXmAmYHTkzvpKlJE3ow==} + engines: {node: '>=0.10.0'} + + pretty-bytes@5.6.0: + resolution: {integrity: sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==} + engines: {node: '>=6'} + + prismjs@1.30.0: + resolution: {integrity: sha512-DEvV2ZF2r2/63V+tK8hQvrR2ZGn10srHbXviTlcv7Kpzw8jWiNTqbVgjO3IY8RxrrOUF8VPMQQFysYYYv0YZxw==} + engines: {node: '>=6'} + + promise.series@0.2.0: + resolution: {integrity: sha512-VWQJyU2bcDTgZw8kpfBpB/ejZASlCrzwz5f2hjb/zlujOEB4oeiAhHygAWq8ubsX2GVkD4kCU5V2dwOTaCY5EQ==} + engines: {node: '>=0.12'} + + prompts@2.4.2: + resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} + engines: {node: '>= 6'} + + property-information@6.5.0: + resolution: {integrity: sha512-PgTgs/BlvHxOu8QuEN7wi5A0OmXaBcHpmCSTehcs6Uuu9IkDIEo13Hy7n898RHfrQ49vKCoGeWZSaAK01nwVig==} + + property-information@7.0.0: + resolution: {integrity: sha512-7D/qOz/+Y4X/rzSB6jKxKUsQnphO046ei8qxG59mtM3RG3DHgTK81HrxrmoDVINJb8NKT5ZsRbwHvQ6B68Iyhg==} + + property-information@7.1.0: + resolution: {integrity: sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ==} + + proxy-from-env@1.1.0: + resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} + + pump@3.0.2: + resolution: {integrity: sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw==} + + punycode.js@2.3.1: + resolution: {integrity: sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==} + engines: {node: '>=6'} + + quansync@0.2.10: + resolution: {integrity: sha512-t41VRkMYbkHyCYmOvx/6URnN80H7k4X0lLdBMGsz+maAwrJQYB1djpV6vHrQIBE0WBSGqhtEHrK9U3DWWH8v7A==} + + queue-microtask@1.2.3: + resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + + radix3@1.1.2: + resolution: {integrity: sha512-b484I/7b8rDEdSDKckSSBA8knMpcdsXudlE/LNL639wFoHKwLbEkQFZHWEYwDC0wa0FKUcCY+GAF73Z7wxNVFA==} + + randombytes@2.1.0: + resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} + + read-cache@1.0.0: + resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==} + + readdirp@3.6.0: + resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} + engines: {node: '>=8.10.0'} + + readdirp@4.1.2: + resolution: {integrity: sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==} + engines: {node: '>= 14.18.0'} + + reading-time@1.5.0: + resolution: {integrity: sha512-onYyVhBNr4CmAxFsKS7bz+uTLRakypIe4R+5A824vBSkQy/hB3fZepoVEf8OVAxzLvK+H/jm9TzpI3ETSm64Kg==} + + rechoir@0.6.2: + resolution: {integrity: sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==} + engines: {node: '>= 0.10'} + + reflect.getprototypeof@1.0.10: + resolution: {integrity: sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==} + engines: {node: '>= 0.4'} + + regenerate-unicode-properties@10.2.0: + resolution: {integrity: sha512-DqHn3DwbmmPVzeKj9woBadqmXxLvQoQIwu7nopMc72ztvxVmVk2SBhSnx67zuye5TP+lJsb/TBQsjLKhnDf3MA==} + engines: {node: '>=4'} + + regenerate@1.4.2: + resolution: {integrity: sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==} + + regex-recursion@6.0.2: + resolution: {integrity: sha512-0YCaSCq2VRIebiaUviZNs0cBz1kg5kVS2UKUfNIx8YVs1cN3AV7NTctO5FOKBA+UT2BPJIWZauYHPqJODG50cg==} + + regex-utilities@2.3.0: + resolution: {integrity: sha512-8VhliFJAWRaUiVvREIiW2NXXTmHs4vMNnSzuJVhscgmGav3g9VDxLrQndI3dZZVVdp0ZO/5v0xmX516/7M9cng==} + + regex@6.0.1: + resolution: {integrity: sha512-uorlqlzAKjKQZ5P+kTJr3eeJGSVroLKoHmquUj4zHWuR+hEyNqlXsSKlYYF5F4NI6nl7tWCs0apKJ0lmfsXAPA==} + + regex@6.1.0: + resolution: {integrity: sha512-6VwtthbV4o/7+OaAF9I5L5V3llLEsoPyq9P1JVXkedTP33c7MfCG0/5NOPcSJn0TzXcG9YUrR0gQSWioew3LDg==} + + regexp.prototype.flags@1.5.4: + resolution: {integrity: sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==} + engines: {node: '>= 0.4'} + + regexpu-core@6.2.0: + resolution: {integrity: sha512-H66BPQMrv+V16t8xtmq+UC0CBpiTBA60V8ibS1QVReIp8T1z8hwFxqcGzm9K6lgsN7sB5edVH8a+ze6Fqm4weA==} + engines: {node: '>=4'} + + regjsgen@0.8.0: + resolution: {integrity: sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q==} + + regjsparser@0.12.0: + resolution: {integrity: sha512-cnE+y8bz4NhMjISKbgeVJtqNbtf5QpjZP+Bslo+UqkIt9QPnX9q095eiRRASJG1/tz6dlNr6Z5NsBiWYokp6EQ==} + hasBin: true + + rehype-autolink-headings@7.1.0: + resolution: {integrity: sha512-rItO/pSdvnvsP4QRB1pmPiNHUskikqtPojZKJPPPAVx9Hj8i8TwMBhofrrAYRhYOOBZH9tgmG5lPqDLuIWPWmw==} + + rehype-components@0.3.0: + resolution: {integrity: sha512-yl2bUkZi+sU0gxwVCun7IkjiDLPczSs1SKMKHmjlSLkk4mMryBd/aYba5J8suhJdquBEKSw6ZNxU3MvVQ9xqoQ==} + + rehype-expressive-code@0.41.4: + resolution: {integrity: sha512-qEUKfh/Aw9VZSUCXnJef41o7lpfnhXmQdXTkP2ZWGibSk4SoJVJ4ra1xN1t+hL1rp0d0GPKZ1CpM3q6bjV0xbg==} + + rehype-katex@7.0.1: + resolution: {integrity: sha512-OiM2wrZ/wuhKkigASodFoo8wimG3H12LWQaH8qSPVJn9apWKFSH3YOCtbKpBorTVw/eI7cuT21XBbvwEswbIOA==} + + rehype-parse@9.0.1: + resolution: {integrity: sha512-ksCzCD0Fgfh7trPDxr2rSylbwq9iYDkSn8TCDmEJ49ljEUBxDVCzCHv7QNzZOfODanX4+bWQ4WZqLCRWYLfhag==} + + rehype-raw@7.0.0: + resolution: {integrity: sha512-/aE8hCfKlQeA8LmyeyQvQF3eBiLRGNlfBJEvWH7ivp9sBqs7TNqBL5X3v157rM4IFETqDnIOO+z5M/biZbo9Ww==} + + rehype-slug@6.0.0: + resolution: {integrity: sha512-lWyvf/jwu+oS5+hL5eClVd3hNdmwM1kAC0BUvEGD19pajQMIzcNUd/k9GsfQ+FfECvX+JE+e9/btsKH0EjJT6A==} + + rehype-stringify@10.0.1: + resolution: {integrity: sha512-k9ecfXHmIPuFVI61B9DeLPN0qFHfawM6RsuX48hoqlaKSF61RskNjSm1lI8PhBEM0MRdLxVVm4WmTqJQccH9mA==} + + rehype@13.0.2: + resolution: {integrity: sha512-j31mdaRFrwFRUIlxGeuPXXKWQxet52RBQRvCmzl5eCefn/KGbomK5GMHNMsOJf55fgo3qw5tST5neDuarDYR2A==} + + remark-directive-rehype@0.4.2: + resolution: {integrity: sha512-T6e+IG+BwqU4++MK54vFb+KDFjs3a+tHeK6E0T0ctR1FSyngolfDtAEzqxHWlRzQZqGi2sB4DFXry6oqH87D/g==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + remark-directive@3.0.1: + resolution: {integrity: sha512-gwglrEQEZcZYgVyG1tQuA+h58EZfq5CSULw7J90AFuCTyib1thgHPoqQ+h9iFvU6R+vnZ5oNFQR5QKgGpk741A==} + + remark-gfm@4.0.1: + resolution: {integrity: sha512-1quofZ2RQ9EWdeN34S79+KExV1764+wCUGop5CPL1WGdD0ocPpu91lzPGbwWMECpEpd42kJGQwzRfyov9j4yNg==} + + remark-github-admonitions-to-directives@1.0.5: + resolution: {integrity: sha512-MSRzDs51HGbUrHJ0es8POuxwJiUycWw4aYCTN2RZhdOm5UvyqdB8ApWoGBj9QAiPSHKw2HWl1hd5rRzWxVfNew==} + + remark-math@6.0.0: + resolution: {integrity: sha512-MMqgnP74Igy+S3WwnhQ7kqGlEerTETXMvJhrUzDikVZ2/uogJCb+WHUg97hK9/jcfc0dkD73s3LN8zU49cTEtA==} + + remark-parse@11.0.0: + resolution: {integrity: sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==} + + remark-rehype@11.1.2: + resolution: {integrity: sha512-Dh7l57ianaEoIpzbp0PC9UKAdCSVklD8E5Rpw7ETfbTl3FqcOOgq5q2LVDhgGCkaBv7p24JXikPdvhhmHvKMsw==} + + remark-sectionize@2.1.0: + resolution: {integrity: sha512-R/pHt1RLYrEqrbwOVXx8HnvvwOg+mxg8pE4kIWpIYE3/CuZhU8/PAx/0y1BbHWUA0jmTLTeWpUlDrS/B0pyd0g==} + + remark-smartypants@3.0.2: + resolution: {integrity: sha512-ILTWeOriIluwEvPjv67v7Blgrcx+LZOkAUVtKI3putuhlZm84FnqDORNXPPm+HY3NdZOMhyDwZ1E+eZB/Df5dA==} + engines: {node: '>=16.0.0'} + + remark-stringify@11.0.0: + resolution: {integrity: sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==} + + request-light@0.5.8: + resolution: {integrity: sha512-3Zjgh+8b5fhRJBQZoy+zbVKpAQGLyka0MPgW3zruTF4dFFJ8Fqcfu9YsAvi/rvdcaTeWG3MkbZv4WKxAn/84Lg==} + + request-light@0.7.0: + resolution: {integrity: sha512-lMbBMrDoxgsyO+yB3sDcrDuX85yYt7sS8BfQd11jtbW/z5ZWgLZRcEGLsLoYw7I0WSUGQBs8CC8ScIxkTX1+6Q==} + + require-directory@2.1.1: + resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} + engines: {node: '>=0.10.0'} + + require-from-string@2.0.2: + resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} + engines: {node: '>=0.10.0'} + + resolve-from@4.0.0: + resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} + engines: {node: '>=4'} + + resolve-from@5.0.0: + resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} + engines: {node: '>=8'} + + resolve@1.22.10: + resolution: {integrity: sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==} + engines: {node: '>= 0.4'} + hasBin: true + + resolve@1.22.11: + resolution: {integrity: sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==} + engines: {node: '>= 0.4'} + hasBin: true + + restructure@3.0.2: + resolution: {integrity: sha512-gSfoiOEA0VPE6Tukkrr7I0RBdE0s7H1eFCDBk05l1KIQT1UIKNc5JZy6jdyW6eYH3aR3g5b3PuL77rq0hvwtAw==} + + retext-latin@4.0.0: + resolution: {integrity: sha512-hv9woG7Fy0M9IlRQloq/N6atV82NxLGveq+3H2WOi79dtIYWN8OaxogDm77f8YnVXJL2VD3bbqowu5E3EMhBYA==} + + retext-smartypants@6.2.0: + resolution: {integrity: sha512-kk0jOU7+zGv//kfjXEBjdIryL1Acl4i9XNkHxtM7Tm5lFiCog576fjNC9hjoR7LTKQ0DsPWy09JummSsH1uqfQ==} + + retext-stringify@4.0.0: + resolution: {integrity: sha512-rtfN/0o8kL1e+78+uxPTqu1Klt0yPzKuQ2BfWwwfgIUSayyzxpM1PJzkKt4V8803uB9qSy32MvI7Xep9khTpiA==} + + retext@9.0.0: + resolution: {integrity: sha512-sbMDcpHCNjvlheSgMfEcVrZko3cDzdbe1x/e7G66dFp0Ff7Mldvi2uv6JkJQzdRcvLYE8CA8Oe8siQx8ZOgTcA==} + + reusify@1.1.0: + resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==} + engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + + rollup-plugin-bundle-size@1.0.3: + resolution: {integrity: sha512-aWj0Pvzq90fqbI5vN1IvUrlf4utOqy+AERYxwWjegH1G8PzheMnrRIgQ5tkwKVtQMDP0bHZEACW/zLDF+XgfXQ==} + + rollup-plugin-postcss@4.0.2: + resolution: {integrity: sha512-05EaY6zvZdmvPUDi3uCcAQoESDcYnv8ogJJQRp6V5kZ6J6P7uAVJlrTZcaaA20wTH527YTnKfkAoPxWI/jPp4w==} + engines: {node: '>=10'} + peerDependencies: + postcss: 8.x + + rollup-plugin-terser@7.0.2: + resolution: {integrity: sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ==} + deprecated: This package has been deprecated and is no longer maintained. Please use @rollup/plugin-terser + peerDependencies: + rollup: ^2.0.0 + + rollup-plugin-typescript2@0.32.1: + resolution: {integrity: sha512-RanO8bp1WbeMv0bVlgcbsFNCn+Y3rX7wF97SQLDxf0fMLsg0B/QFF005t4AsGUcDgF3aKJHoqt4JF2xVaABeKw==} + peerDependencies: + rollup: '>=1.26.3' + typescript: '>=2.4.0' + + rollup-plugin-visualizer@5.14.0: + resolution: {integrity: sha512-VlDXneTDaKsHIw8yzJAFWtrzguoJ/LnQ+lMpoVfYJ3jJF4Ihe5oYLAqLklIK/35lgUY+1yEzCkHyZ1j4A5w5fA==} + engines: {node: '>=18'} + hasBin: true + peerDependencies: + rolldown: 1.x + rollup: 2.x || 3.x || 4.x + peerDependenciesMeta: + rolldown: + optional: true + rollup: + optional: true + + rollup-pluginutils@2.8.2: + resolution: {integrity: sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==} + + rollup@2.79.2: + resolution: {integrity: sha512-fS6iqSPZDs3dr/y7Od6y5nha8dW1YnbgtsyotCVvoFGKbERG++CVRFv1meyGDE1SNItQA8BrnCw7ScdAhRJ3XQ==} + engines: {node: '>=10.0.0'} + hasBin: true + + rollup@4.52.2: + resolution: {integrity: sha512-I25/2QgoROE1vYV+NQ1En9T9UFB9Cmfm2CJ83zZOlaDpvz29wGQSZXWKw7MiNXau7wYgB/T9fVIdIuEQ+KbiiA==} + engines: {node: '>=18.0.0', npm: '>=8.0.0'} + hasBin: true + + rollup@4.53.3: + resolution: {integrity: sha512-w8GmOxZfBmKknvdXU1sdM9NHcoQejwF/4mNgj2JuEEdRaHwwF12K7e9eXn1nLZ07ad+du76mkVsyeb2rKGllsA==} + engines: {node: '>=18.0.0', npm: '>=8.0.0'} + hasBin: true + + run-parallel@1.2.0: + resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + + sade@1.8.1: + resolution: {integrity: sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==} + engines: {node: '>=6'} + + safe-array-concat@1.1.3: + resolution: {integrity: sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==} + engines: {node: '>=0.4'} + + safe-buffer@5.2.1: + resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + + safe-identifier@0.4.2: + resolution: {integrity: sha512-6pNbSMW6OhAi9j+N8V+U715yBQsaWJ7eyEUaOrawX+isg5ZxhUlV1NipNtgaKHmFGiABwt+ZF04Ii+3Xjkg+8w==} + + safe-push-apply@1.0.0: + resolution: {integrity: sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==} + engines: {node: '>= 0.4'} + + safe-regex-test@1.1.0: + resolution: {integrity: sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==} + engines: {node: '>= 0.4'} + + safer-buffer@2.1.2: + resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} + + sanitize-html@2.17.0: + resolution: {integrity: sha512-dLAADUSS8rBwhaevT12yCezvioCA+bmUTPH/u57xKPT8d++voeYE6HeluA/bPbQ15TwDBG2ii+QZIEmYx8VdxA==} + + sass@1.80.4: + resolution: {integrity: sha512-rhMQ2tSF5CsuuspvC94nPM9rToiAFw2h3JTrLlgmNw1MH79v8Cr3DH6KF6o6r+8oofY3iYVPUf66KzC8yuVN1w==} + engines: {node: '>=14.0.0'} + hasBin: true + + sax@1.4.1: + resolution: {integrity: sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==} + + scrl@2.0.0: + resolution: {integrity: sha512-BbbVXxrOn58Ge4wjOORIRVZamssQu08ISLL/AC2z9aATIsKqZLESwZVW5YR0Yz0C7qqDRHb4yNXJlQ8yW0SGHw==} + + scule@1.3.0: + resolution: {integrity: sha512-6FtHJEvt+pVMIB9IBY+IcCJ6Z5f1iQnytgyfKMhDKgmzYG+TeH/wx1y3l27rshSbLiSanrR9ffZDrEsmjlQF2g==} + + semver@6.3.1: + resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} + hasBin: true + + semver@7.7.2: + resolution: {integrity: sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==} + engines: {node: '>=10'} + hasBin: true + + semver@7.7.3: + resolution: {integrity: sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==} + engines: {node: '>=10'} + hasBin: true + + serialize-javascript@4.0.0: + resolution: {integrity: sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==} + + set-function-length@1.2.2: + resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} + engines: {node: '>= 0.4'} + + set-function-name@2.0.2: + resolution: {integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==} + engines: {node: '>= 0.4'} + + set-proto@1.0.0: + resolution: {integrity: sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==} + engines: {node: '>= 0.4'} + + sharp@0.34.5: + resolution: {integrity: sha512-Ou9I5Ft9WNcCbXrU9cMgPBcCK8LiwLqcbywW3t4oDV37n1pzpuNLsYiAV8eODnjbtQlSDwZ2cUEeQz4E54Hltg==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + + shebang-command@2.0.0: + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} + engines: {node: '>=8'} + + shebang-regex@3.0.0: + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} + engines: {node: '>=8'} + + shelljs-live@0.0.5: + resolution: {integrity: sha512-IR5+gA7f+v/V8ao7ZKE4TQpbG6ABeGxQhwL0seIbOXvHdoFAHw3MEiUICrhUfuroRREKL0n7HDA5b/R5it8KHg==} + peerDependencies: + shelljs: ^0.8.4 + + shelljs@0.8.5: + resolution: {integrity: sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==} + engines: {node: '>=4'} + hasBin: true + + shiki@3.13.0: + resolution: {integrity: sha512-aZW4l8Og16CokuCLf8CF8kq+KK2yOygapU5m3+hoGw0Mdosc6fPitjM+ujYarppj5ZIKGyPDPP1vqmQhr+5/0g==} + + shiki@3.19.0: + resolution: {integrity: sha512-77VJr3OR/VUZzPiStyRhADmO2jApMM0V2b1qf0RpfWya8Zr1PeZev5AEpPGAAKWdiYUtcZGBE4F5QvJml1PvWA==} + + side-channel-list@1.0.0: + resolution: {integrity: sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==} + engines: {node: '>= 0.4'} + + side-channel-map@1.0.1: + resolution: {integrity: sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==} + engines: {node: '>= 0.4'} + + side-channel-weakmap@1.0.2: + resolution: {integrity: sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==} + engines: {node: '>= 0.4'} + + side-channel@1.1.0: + resolution: {integrity: sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==} + engines: {node: '>= 0.4'} + + signal-exit@4.1.0: + resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} + engines: {node: '>=14'} + + sisteransi@1.0.5: + resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} + + sitemap@8.0.0: + resolution: {integrity: sha512-+AbdxhM9kJsHtruUF39bwS/B0Fytw6Fr1o4ZAIAEqA6cke2xcoO2GleBw9Zw7nRzILVEgz7zBM5GiTJjie1G9A==} + engines: {node: '>=14.0.0', npm: '>=6.0.0'} + deprecated: 'SECURITY: Multiple vulnerabilities fixed in 8.0.1 (XML injection, path traversal, command injection, protocol injection). Upgrade immediately: npm install sitemap@8.0.1' + hasBin: true + + slash@3.0.0: + resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} + engines: {node: '>=8'} + + smol-toml@1.4.2: + resolution: {integrity: sha512-rInDH6lCNiEyn3+hH8KVGFdbjc099j47+OSgbMrfDYX1CmXLfdKd7qi6IfcWj2wFxvSVkuI46M+wPGYfEOEj6g==} + engines: {node: '>= 18'} + + source-map-js@1.2.1: + resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} + engines: {node: '>=0.10.0'} + + source-map-support@0.5.21: + resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} + + source-map@0.6.1: + resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} + engines: {node: '>=0.10.0'} + + source-map@0.7.4: + resolution: {integrity: sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==} + engines: {node: '>= 8'} + + sourcemap-codec@1.4.8: + resolution: {integrity: sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==} + deprecated: Please use @jridgewell/sourcemap-codec instead + + space-separated-tokens@2.0.2: + resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==} + + stable@0.1.8: + resolution: {integrity: sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==} + deprecated: 'Modern JS already guarantees Array#sort() is a stable sort, so this library is deprecated. See the compatibility table on MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#browser_compatibility' + + stop-iteration-iterator@1.1.0: + resolution: {integrity: sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==} + engines: {node: '>= 0.4'} + + stream-replace-string@2.0.0: + resolution: {integrity: sha512-TlnjJ1C0QrmxRNrON00JvaFFlNh5TTG00APw23j74ET7gkQpTASi6/L2fuiav8pzK715HXtUeClpBTw2NPSn6w==} + + string-hash@1.1.3: + resolution: {integrity: sha512-kJUvRUFK49aub+a7T1nNE66EJbZBMnBgoC1UbCZ5n6bsZKBRga4KgBRTMn/pFkeCZSYtNeSyMxPDM0AXWELk2A==} + + string-width@4.2.3: + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} + engines: {node: '>=8'} + + string-width@5.1.2: + resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} + engines: {node: '>=12'} + + string-width@7.2.0: + resolution: {integrity: sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==} + engines: {node: '>=18'} + + string.prototype.matchall@4.0.12: + resolution: {integrity: sha512-6CC9uyBL+/48dYizRf7H7VAYCMCNTBeM78x/VTUe9bFEaxBepPJDa1Ow99LqI/1yF7kuy7Q3cQsYMrcjGUcskA==} + engines: {node: '>= 0.4'} + + string.prototype.trim@1.2.10: + resolution: {integrity: sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==} + engines: {node: '>= 0.4'} + + string.prototype.trimend@1.0.9: + resolution: {integrity: sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==} + engines: {node: '>= 0.4'} + + string.prototype.trimstart@1.0.8: + resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==} + engines: {node: '>= 0.4'} + + stringify-entities@4.0.4: + resolution: {integrity: sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==} + + strip-ansi@3.0.1: + resolution: {integrity: sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==} + engines: {node: '>=0.10.0'} + + strip-ansi@6.0.1: + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} + + strip-ansi@7.1.2: + resolution: {integrity: sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==} + engines: {node: '>=12'} + + strnum@2.1.1: + resolution: {integrity: sha512-7ZvoFTiCnGxBtDqJ//Cu6fWtZtc7Y3x+QOirG15wztbdngGSkht27o2pyGWrVy0b4WAy3jbKmnoK6g5VlVNUUw==} + + style-inject@0.3.0: + resolution: {integrity: sha512-IezA2qp+vcdlhJaVm5SOdPPTUu0FCEqfNSli2vRuSIBbu5Nq5UvygTk/VzeCqfLz2Atj3dVII5QBKGZRZ0edzw==} + + stylehacks@5.1.1: + resolution: {integrity: sha512-sBpcd5Hx7G6seo7b1LkpttvTz7ikD0LlH5RmdcBNb6fFR0Fl7LQwHDFr300q4cwUqi+IYrFGmsIHieMBfnN/Bw==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + + stylus@0.64.0: + resolution: {integrity: sha512-ZIdT8eUv8tegmqy1tTIdJv9We2DumkNZFdCF5mz/Kpq3OcTaxSuCAYZge6HKK2CmNC02G1eJig2RV7XTw5hQrA==} + engines: {node: '>=16'} + hasBin: true + + sucrase@3.35.1: + resolution: {integrity: sha512-DhuTmvZWux4H1UOnWMB3sk0sbaCVOoQZjv8u1rDoTV0HTdGem9hkAZtl4JZy8P2z4Bg0nT+YMeOFyVr4zcG5Tw==} + engines: {node: '>=16 || 14 >=14.17'} + hasBin: true + + supports-color@2.0.0: + resolution: {integrity: sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==} + engines: {node: '>=0.8.0'} + + supports-color@7.2.0: + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} + + supports-preserve-symlinks-flag@1.0.0: + resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} + engines: {node: '>= 0.4'} + + svelte2tsx@0.7.45: + resolution: {integrity: sha512-cSci+mYGygYBHIZLHlm/jYlEc1acjAHqaQaDFHdEBpUueM9kSTnPpvPtSl5VkJOU1qSJ7h1K+6F/LIUYiqC8VA==} + peerDependencies: + svelte: ^3.55 || ^4.0.0-next.0 || ^4.0 || ^5.0.0-next.0 + typescript: ^4.9.4 || ^5.0.0 + + svelte@5.39.8: + resolution: {integrity: sha512-KfZ3hCITdxIXTOvrea4nFZX2o+47HPTChKeocgj9BwJQYqWrviVCcPj4boXHF5yf8+eBKqhHY8xii//XaakKXA==} + engines: {node: '>=18'} + + svgo@2.8.0: + resolution: {integrity: sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==} + engines: {node: '>=10.13.0'} + hasBin: true + + svgo@3.3.2: + resolution: {integrity: sha512-OoohrmuUlBs8B8o6MB2Aevn+pRIH9zDALSR+6hhqVfa6fRwG/Qw9VUMSMW9VNg2CFc/MTIfabtdOVl9ODIJjpw==} + engines: {node: '>=14.0.0'} + hasBin: true + + swup-morph-plugin@1.3.0: + resolution: {integrity: sha512-vTqWYA5ZFkWMo54K8jlol5OCvboqRsELLfM1PUkS2IiL+1dDDChzMHa4ZBI5+yfl7bZUCWgd8EmuhMd/i/o+Qg==} + peerDependencies: + swup: ^4.6.0 + + swup@4.8.2: + resolution: {integrity: sha512-Art2vB4idZ7EFZQhhA47ZifkmZMPgcAwE6z28BhorbTYCO8jcovcc5MasX49GGdXYJWO43DTut7iZb5yrQdEfA==} + + tailwindcss@3.4.19: + resolution: {integrity: sha512-3ofp+LL8E+pK/JuPLPggVAIaEuhvIz4qNcf3nA1Xn2o/7fb7s/TYpHhwGDv1ZU3PkBluUVaF8PyCHcm48cKLWQ==} + engines: {node: '>=14.0.0'} + hasBin: true + + tar@6.2.1: + resolution: {integrity: sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==} + engines: {node: '>=10'} + + terser@5.43.1: + resolution: {integrity: sha512-+6erLbBm0+LROX2sPXlUYx/ux5PyE9K/a92Wrt6oA+WDAoFTdpHE5tCYCI5PNzq2y8df4rA+QgHLJuR4jNymsg==} + engines: {node: '>=10'} + hasBin: true + + thenify-all@1.6.0: + resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} + engines: {node: '>=0.8'} + + thenify@3.3.1: + resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} + + tiny-glob@0.2.9: + resolution: {integrity: sha512-g/55ssRPUjShh+xkfx9UPDXqhckHEsHr4Vd9zX55oSdGZc/MD0m3sferOkwWtp98bv+kcVfEHtRJgBVJzelrzg==} + + tiny-inflate@1.0.3: + resolution: {integrity: sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw==} + + tinyexec@0.3.2: + resolution: {integrity: sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==} + + tinyglobby@0.2.15: + resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==} + engines: {node: '>=12.0.0'} + + to-regex-range@5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} + + tosource@2.0.0-alpha.3: + resolution: {integrity: sha512-KAB2lrSS48y91MzFPFuDg4hLbvDiyTjOVgaK7Erw+5AmZXNq4sFRVn8r6yxSLuNs15PaokrDRpS61ERY9uZOug==} + engines: {node: '>=10'} + + tr46@0.0.3: + resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} + + trim-lines@3.0.1: + resolution: {integrity: sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==} + + trough@2.2.0: + resolution: {integrity: sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==} + + ts-interface-checker@0.1.13: + resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} + + tsconfck@3.1.6: + resolution: {integrity: sha512-ks6Vjr/jEw0P1gmOVwutM3B7fWxoWBL2KRDb1JfqGVawBmO5UsvmWOQFGHBPl5yxYz4eERr19E6L7NMv+Fej4w==} + engines: {node: ^18 || >=20} + hasBin: true + peerDependencies: + typescript: ^5.0.0 + peerDependenciesMeta: + typescript: + optional: true + + tslib@2.8.1: + resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} + + type-fest@4.41.0: + resolution: {integrity: sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==} + engines: {node: '>=16'} + + typed-array-buffer@1.0.3: + resolution: {integrity: sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==} + engines: {node: '>= 0.4'} + + typed-array-byte-length@1.0.3: + resolution: {integrity: sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==} + engines: {node: '>= 0.4'} + + typed-array-byte-offset@1.0.4: + resolution: {integrity: sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==} + engines: {node: '>= 0.4'} + + typed-array-length@1.0.7: + resolution: {integrity: sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==} + engines: {node: '>= 0.4'} + + typed-query-selector@2.12.0: + resolution: {integrity: sha512-SbklCd1F0EiZOyPiW192rrHZzZ5sBijB6xM+cpmrwDqObvdtunOHHIk9fCGsoK5JVIYXoyEp4iEdE3upFH3PAg==} + + typesafe-path@0.2.2: + resolution: {integrity: sha512-OJabfkAg1WLZSqJAJ0Z6Sdt3utnbzr/jh+NAHoyWHJe8CMSy79Gm085094M9nvTPy22KzTVn5Zq5mbapCI/hPA==} + + typescript-auto-import-cache@0.3.6: + resolution: {integrity: sha512-RpuHXrknHdVdK7wv/8ug3Fr0WNsNi5l5aB8MYYuXhq2UH5lnEB1htJ1smhtD5VeCsGr2p8mUDtd83LCQDFVgjQ==} + + typescript@4.9.5: + resolution: {integrity: sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==} + engines: {node: '>=4.2.0'} + hasBin: true + + typescript@5.9.3: + resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==} + engines: {node: '>=14.17'} + hasBin: true + + uc.micro@2.1.0: + resolution: {integrity: sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==} + + ufo@1.6.1: + resolution: {integrity: sha512-9a4/uxlTWJ4+a5i0ooc1rU7C7YOw3wT+UGqdeNNHWnOF9qcMBgLRS+4IYUqbczewFx4mLEig6gawh7X6mFlEkA==} + + ultrahtml@1.6.0: + resolution: {integrity: sha512-R9fBn90VTJrqqLDwyMph+HGne8eqY1iPfYhPzZrvKpIfwkWZbcYlfpsb8B9dTvBfpy1/hqAD7Wi8EKfP9e8zdw==} + + unbox-primitive@1.1.0: + resolution: {integrity: sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==} + engines: {node: '>= 0.4'} + + uncrypto@0.1.3: + resolution: {integrity: sha512-Ql87qFHB3s/De2ClA9e0gsnS6zXG27SkTiSJwjCc9MebbfapQfuPzumMIUMi38ezPZVNFcHI9sUIepeQfw8J8Q==} + + undici-types@7.12.0: + resolution: {integrity: sha512-goOacqME2GYyOZZfb5Lgtu+1IDmAlAEu5xnD3+xTzS10hT0vzpf0SPjkXwAw9Jm+4n/mQGDP3LO8CPbYROeBfQ==} + + undici@6.21.2: + resolution: {integrity: sha512-uROZWze0R0itiAKVPsYhFov9LxrPMHLMEQFszeI2gCN6bnIIZ8twzBCJcN2LJrBBLfrP0t1FW0g+JmKVl8Vk1g==} + engines: {node: '>=18.17'} + + unicode-canonical-property-names-ecmascript@2.0.1: + resolution: {integrity: sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg==} + engines: {node: '>=4'} + + unicode-match-property-ecmascript@2.0.0: + resolution: {integrity: sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==} + engines: {node: '>=4'} + + unicode-match-property-value-ecmascript@2.2.0: + resolution: {integrity: sha512-4IehN3V/+kkr5YeSSDDQG8QLqO26XpL2XP3GQtqwlT/QYSECAwFztxVHjlbh0+gjJ3XmNLS0zDsbgs9jWKExLg==} + engines: {node: '>=4'} + + unicode-properties@1.4.1: + resolution: {integrity: sha512-CLjCCLQ6UuMxWnbIylkisbRj31qxHPAurvena/0iwSVbQ2G1VY5/HjV0IRabOEbDHlzZlRdCrD4NhB0JtU40Pg==} + + unicode-property-aliases-ecmascript@2.1.0: + resolution: {integrity: sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==} + engines: {node: '>=4'} + + unicode-trie@2.0.0: + resolution: {integrity: sha512-x7bc76x0bm4prf1VLg79uhAzKw8DVboClSN5VxJuQ+LKDOVEW9CdH+VY7SP+vX7xCYQqzzgQpFqz15zeLvAtZQ==} + + unified@11.0.5: + resolution: {integrity: sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==} + + unifont@0.5.2: + resolution: {integrity: sha512-LzR4WUqzH9ILFvjLAUU7dK3Lnou/qd5kD+IakBtBK4S15/+x2y9VX+DcWQv6s551R6W+vzwgVS6tFg3XggGBgg==} + + unist-util-find-after@4.0.1: + resolution: {integrity: sha512-QO/PuPMm2ERxC6vFXEPtmAutOopy5PknD+Oq64gGwxKtk4xwo9Z97t9Av1obPmGU0IyTa6EKYUfTrK2QJS3Ozw==} + + unist-util-find-after@5.0.0: + resolution: {integrity: sha512-amQa0Ep2m6hE2g72AugUItjbuM8X8cGQnFoHk0pGfrFeT9GZhzN5SW8nRsiGKK7Aif4CrACPENkA6P/Lw6fHGQ==} + + unist-util-is@5.2.1: + resolution: {integrity: sha512-u9njyyfEh43npf1M+yGKDGVPbY/JWEemg5nH05ncKPfi+kBbKBJoTdsogMu33uhytuLlv9y0O7GH7fEdwLdLQw==} + + unist-util-is@6.0.0: + resolution: {integrity: sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==} + + unist-util-is@6.0.1: + resolution: {integrity: sha512-LsiILbtBETkDz8I9p1dQ0uyRUWuaQzd/cuEeS1hoRSyW5E5XGmTzlwY1OrNzzakGowI9Dr/I8HVaw4hTtnxy8g==} + + unist-util-map@3.1.3: + resolution: {integrity: sha512-4/mDauoxqZ6geK97lJ6n2kDk6JK88Vh+hWMSJqyaaP/7eqN1dDhjcjnNxKNm3YU6Sw7PVJtcFMUbnmHvYzb6Vg==} + + unist-util-modify-children@4.0.0: + resolution: {integrity: sha512-+tdN5fGNddvsQdIzUF3Xx82CU9sMM+fA0dLgR9vOmT0oPT2jH+P1nd5lSqfCfXAw+93NhcXNY2qqvTUtE4cQkw==} + + unist-util-position@5.0.0: + resolution: {integrity: sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==} + + unist-util-remove-position@5.0.0: + resolution: {integrity: sha512-Hp5Kh3wLxv0PHj9m2yZhhLt58KzPtEYKQQ4yxfYFEO7EvHwzyDYnduhHnY1mDxoqr7VUwVuHXk9RXKIiYS1N8Q==} + + unist-util-stringify-position@4.0.0: + resolution: {integrity: sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==} + + unist-util-visit-children@3.0.0: + resolution: {integrity: sha512-RgmdTfSBOg04sdPcpTSD1jzoNBjt9a80/ZCzp5cI9n1qPzLZWF9YdvWGN2zmTumP1HWhXKdUWexjy/Wy/lJ7tA==} + + unist-util-visit-parents@5.1.3: + resolution: {integrity: sha512-x6+y8g7wWMyQhL1iZfhIPhDAs7Xwbn9nRosDXl7qoPTSCy0yNxnKc+hWokFifWQIDGi154rdUqKvbCa4+1kLhg==} + + unist-util-visit-parents@6.0.1: + resolution: {integrity: sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==} + + unist-util-visit-parents@6.0.2: + resolution: {integrity: sha512-goh1s1TBrqSqukSc8wrjwWhL0hiJxgA8m4kFxGlQ+8FYQ3C/m11FcTs4YYem7V664AhHVvgoQLk890Ssdsr2IQ==} + + unist-util-visit@4.1.2: + resolution: {integrity: sha512-MSd8OUGISqHdVvfY9TPhyK2VdUrPgxkUtWSuMHF6XAAFuL4LokseigBnZtPnJMu+FbynTkFNnFlyjxpVKujMRg==} + + unist-util-visit@5.0.0: + resolution: {integrity: sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==} + + universalify@2.0.1: + resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} + engines: {node: '>= 10.0.0'} + + unstorage@1.17.1: + resolution: {integrity: sha512-KKGwRTT0iVBCErKemkJCLs7JdxNVfqTPc/85ae1XES0+bsHbc/sFBfVi5kJp156cc51BHinIH2l3k0EZ24vOBQ==} + peerDependencies: + '@azure/app-configuration': ^1.8.0 + '@azure/cosmos': ^4.2.0 + '@azure/data-tables': ^13.3.0 + '@azure/identity': ^4.6.0 + '@azure/keyvault-secrets': ^4.9.0 + '@azure/storage-blob': ^12.26.0 + '@capacitor/preferences': ^6.0.3 || ^7.0.0 + '@deno/kv': '>=0.9.0' + '@netlify/blobs': ^6.5.0 || ^7.0.0 || ^8.1.0 || ^9.0.0 || ^10.0.0 + '@planetscale/database': ^1.19.0 + '@upstash/redis': ^1.34.3 + '@vercel/blob': '>=0.27.1' + '@vercel/functions': ^2.2.12 || ^3.0.0 + '@vercel/kv': ^1.0.1 + aws4fetch: ^1.0.20 + db0: '>=0.2.1' + idb-keyval: ^6.2.1 + ioredis: ^5.4.2 + uploadthing: ^7.4.4 + peerDependenciesMeta: + '@azure/app-configuration': + optional: true + '@azure/cosmos': + optional: true + '@azure/data-tables': + optional: true + '@azure/identity': + optional: true + '@azure/keyvault-secrets': + optional: true + '@azure/storage-blob': + optional: true + '@capacitor/preferences': + optional: true + '@deno/kv': + optional: true + '@netlify/blobs': + optional: true + '@planetscale/database': + optional: true + '@upstash/redis': + optional: true + '@vercel/blob': + optional: true + '@vercel/functions': + optional: true + '@vercel/kv': + optional: true + aws4fetch: + optional: true + db0: + optional: true + idb-keyval: + optional: true + ioredis: + optional: true + uploadthing: + optional: true + + update-browserslist-db@1.1.3: + resolution: {integrity: sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==} + hasBin: true + peerDependencies: + browserslist: '>= 4.21.0' + + util-deprecate@1.0.2: + resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + + vfile-location@5.0.3: + resolution: {integrity: sha512-5yXvWDEgqeiYiBe1lbxYF7UMAIm/IcopxMHrMQDq3nvKcjPKIhZklUKL+AE7J7uApI4kwe2snsK+eI6UTj9EHg==} + + vfile-message@4.0.3: + resolution: {integrity: sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw==} + + vfile@6.0.3: + resolution: {integrity: sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==} + + vite@6.3.6: + resolution: {integrity: sha512-0msEVHJEScQbhkbVTb/4iHZdJ6SXp/AvxL2sjwYQFfBqleHtnCqv1J3sa9zbWz/6kW1m9Tfzn92vW+kZ1WV6QA==} + engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} + hasBin: true + peerDependencies: + '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0 + jiti: '>=1.21.0' + less: '*' + lightningcss: ^1.21.0 + sass: '*' + sass-embedded: '*' + stylus: '*' + sugarss: '*' + terser: ^5.16.0 + tsx: ^4.8.1 + yaml: ^2.4.2 + peerDependenciesMeta: + '@types/node': + optional: true + jiti: + optional: true + less: + optional: true + lightningcss: + optional: true + sass: + optional: true + sass-embedded: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + tsx: + optional: true + yaml: + optional: true + + vite@6.4.1: + resolution: {integrity: sha512-+Oxm7q9hDoLMyJOYfUYBuHQo+dkAloi33apOPP56pzj+vsdJDzr+j1NISE5pyaAuKL4A3UD34qd0lx5+kfKp2g==} + engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} + hasBin: true + peerDependencies: + '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0 + jiti: '>=1.21.0' + less: '*' + lightningcss: ^1.21.0 + sass: '*' + sass-embedded: '*' + stylus: '*' + sugarss: '*' + terser: ^5.16.0 + tsx: ^4.8.1 + yaml: ^2.4.2 + peerDependenciesMeta: + '@types/node': + optional: true + jiti: + optional: true + less: + optional: true + lightningcss: + optional: true + sass: + optional: true + sass-embedded: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + tsx: + optional: true + yaml: + optional: true + + vitefu@1.1.1: + resolution: {integrity: sha512-B/Fegf3i8zh0yFbpzZ21amWzHmuNlLlmJT6n7bu5e+pCHUKQIfXSYokrqOBGEMMe9UG2sostKQF9mml/vYaWJQ==} + peerDependencies: + vite: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0-beta.0 + peerDependenciesMeta: + vite: + optional: true + + volar-service-css@0.0.67: + resolution: {integrity: sha512-zV7C6enn9T9tuvQ6iSUyYEs34iPXR69Pf9YYWpbFYPWzVs22w96BtE8p04XYXbmjU6unt5oFt+iLL77bMB5fhA==} + peerDependencies: + '@volar/language-service': ~2.4.0 + peerDependenciesMeta: + '@volar/language-service': + optional: true + + volar-service-emmet@0.0.67: + resolution: {integrity: sha512-UDBL5x7KptmuJZNCCXMlCndMhFult/tj+9jXq3FH1ZGS1E4M/1U5hC06pg1c6e4kn+vnR6bqmvX0vIhL4f98+A==} + peerDependencies: + '@volar/language-service': ~2.4.0 + peerDependenciesMeta: + '@volar/language-service': + optional: true + + volar-service-html@0.0.67: + resolution: {integrity: sha512-ljREMF79JbcjNvObiv69HK2HCl5UT7WTD10zi6CRFUHMbPfiF2UZ42HGLsEGSzaHGZz6H4IFjSS/qfENRLUviQ==} + peerDependencies: + '@volar/language-service': ~2.4.0 + peerDependenciesMeta: + '@volar/language-service': + optional: true + + volar-service-prettier@0.0.67: + resolution: {integrity: sha512-B4KnPJPNWFTkEDa6Fn08i5PpO6T1CecmLLTFZoXz2eI4Fxwba/3nDaaVSsEP7e/vEe+U5YqV9fBzayJT71G5xg==} + peerDependencies: + '@volar/language-service': ~2.4.0 + prettier: ^2.2 || ^3.0 + peerDependenciesMeta: + '@volar/language-service': + optional: true + prettier: + optional: true + + volar-service-typescript-twoslash-queries@0.0.67: + resolution: {integrity: sha512-LD2R7WivDYp1SPgZrxx/0222xVTitDjm36oKo5+bfYG5kEgnw+BOPVHdwmvpJKg/RfssfxDI1ouwD4XkEDEfbA==} + peerDependencies: + '@volar/language-service': ~2.4.0 + peerDependenciesMeta: + '@volar/language-service': + optional: true + + volar-service-typescript@0.0.67: + resolution: {integrity: sha512-rfQBy36Rm1PU9vLWHk8BYJ4r2j/CI024vocJcH4Nb6K2RTc2Irmw6UOVY5DdGiPRV5r+e10wLMK5njj/EcL8sA==} + peerDependencies: + '@volar/language-service': ~2.4.0 + peerDependenciesMeta: + '@volar/language-service': + optional: true + + volar-service-yaml@0.0.67: + resolution: {integrity: sha512-jkdP/RF6wPIXEE3Ktnd81oJPn7aAvnVSiaqQHThC2Hrvo6xd9pEcqtbBUI+YfqVgvcMtXAkbtNO61K2GPhAiuA==} + peerDependencies: + '@volar/language-service': ~2.4.0 + peerDependenciesMeta: + '@volar/language-service': + optional: true + + vscode-css-languageservice@6.3.9: + resolution: {integrity: sha512-1tLWfp+TDM5ZuVWht3jmaY5y7O6aZmpeXLoHl5bv1QtRsRKt4xYGRMmdJa5Pqx/FTkgRbsna9R+Gn2xE+evVuA==} + + vscode-html-languageservice@5.6.1: + resolution: {integrity: sha512-5Mrqy5CLfFZUgkyhNZLA1Ye5g12Cb/v6VM7SxUzZUaRKWMDz4md+y26PrfRTSU0/eQAl3XpO9m2og+GGtDMuaA==} + + vscode-json-languageservice@4.1.8: + resolution: {integrity: sha512-0vSpg6Xd9hfV+eZAaYN63xVVMOTmJ4GgHxXnkLCh+9RsQBkWKIghzLhW2B9ebfG+LQQg8uLtsQ2aUKjTgE+QOg==} + engines: {npm: '>=7.0.0'} + + vscode-jsonrpc@8.2.0: + resolution: {integrity: sha512-C+r0eKJUIfiDIfwJhria30+TYWPtuHJXHtI7J0YlOmKAo7ogxP20T0zxB7HZQIFhIyvoBPwWskjxrvAtfjyZfA==} + engines: {node: '>=14.0.0'} + + vscode-languageserver-protocol@3.17.5: + resolution: {integrity: sha512-mb1bvRJN8SVznADSGWM9u/b07H7Ecg0I3OgXDuLdn307rl/J3A9YD6/eYOssqhecL27hK1IPZAsaqh00i/Jljg==} + + vscode-languageserver-textdocument@1.0.12: + resolution: {integrity: sha512-cxWNPesCnQCcMPeenjKKsOCKQZ/L6Tv19DTRIGuLWe32lyzWhihGVJ/rcckZXJxfdKCFvRLS3fpBIsV/ZGX4zA==} + + vscode-languageserver-types@3.17.5: + resolution: {integrity: sha512-Ld1VelNuX9pdF39h2Hgaeb5hEZM2Z3jUrrMgWQAu82jMtZp7p3vJT3BzToKtZI7NgQssZje5o0zryOrhQvzQAg==} + + vscode-languageserver@9.0.1: + resolution: {integrity: sha512-woByF3PDpkHFUreUa7Hos7+pUWdeWMXRd26+ZX2A8cFx6v/JPTtd4/uN0/jB6XQHYaOlHbio03NTHCqrgG5n7g==} + hasBin: true + + vscode-nls@5.2.0: + resolution: {integrity: sha512-RAaHx7B14ZU04EU31pT+rKz2/zSl7xMsfIZuo8pd+KZO6PXtQmpevpq3vxvWNcrGbdmhM/rr5Uw5Mz+NBfhVng==} + + vscode-uri@3.1.0: + resolution: {integrity: sha512-/BpdSx+yCQGnCvecbyXdxHDkuk55/G3xwnC0GqY4gmQ3j+A+g8kzzgB4Nk/SINjqn6+waqw3EgbVF2QKExkRxQ==} + + web-namespaces@2.0.1: + resolution: {integrity: sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==} + + webidl-conversions@3.0.1: + resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} + + whatwg-encoding@3.1.1: + resolution: {integrity: sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==} + engines: {node: '>=18'} + + whatwg-mimetype@4.0.0: + resolution: {integrity: sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==} + engines: {node: '>=18'} + + whatwg-url@5.0.0: + resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} + + which-boxed-primitive@1.1.1: + resolution: {integrity: sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==} + engines: {node: '>= 0.4'} + + which-builtin-type@1.2.1: + resolution: {integrity: sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==} + engines: {node: '>= 0.4'} + + which-collection@1.0.2: + resolution: {integrity: sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==} + engines: {node: '>= 0.4'} + + which-pm-runs@1.1.0: + resolution: {integrity: sha512-n1brCuqClxfFfq/Rb0ICg9giSZqCS+pLtccdag6C2HyufBrh3fBOiy9nb6ggRMvWOVH5GrdJskj5iGTZNxd7SA==} + engines: {node: '>=4'} + + which-typed-array@1.1.19: + resolution: {integrity: sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==} + engines: {node: '>= 0.4'} + + which@2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} + hasBin: true + + widest-line@5.0.0: + resolution: {integrity: sha512-c9bZp7b5YtRj2wOe6dlj32MK+Bx/M/d+9VB2SHM1OtsUHR0aV0tdP6DWh/iMt0kWi1t5g1Iudu6hQRNd1A4PVA==} + engines: {node: '>=18'} + + wrap-ansi@7.0.0: + resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} + engines: {node: '>=10'} + + wrap-ansi@8.1.0: + resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} + engines: {node: '>=12'} + + wrap-ansi@9.0.2: + resolution: {integrity: sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==} + engines: {node: '>=18'} + + wrappy@1.0.2: + resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + + xxhash-wasm@1.1.0: + resolution: {integrity: sha512-147y/6YNh+tlp6nd/2pWq38i9h6mz/EuQ6njIrmW8D1BS5nCqs0P6DG+m6zTGnNz5I+uhZ0SHxBs9BsPrwcKDA==} + + y18n@5.0.8: + resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} + engines: {node: '>=10'} + + yallist@3.1.1: + resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} + + yallist@4.0.0: + resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} + + yaml-language-server@1.19.2: + resolution: {integrity: sha512-9F3myNmJzUN/679jycdMxqtydPSDRAarSj3wPiF7pchEPnO9Dg07Oc+gIYLqXR4L+g+FSEVXXv2+mr54StLFOg==} + hasBin: true + + yaml@1.10.2: + resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} + engines: {node: '>= 6'} + + yaml@2.7.0: + resolution: {integrity: sha512-+hSoy/QHluxmC9kCIJyL/uyFmLmc+e5CFR5Wa+bpIhIj85LVb9ZH2nVnqrHoSvKogwODv0ClqZkmiSSaIH5LTA==} + engines: {node: '>= 14'} + hasBin: true + + yaml@2.7.1: + resolution: {integrity: sha512-10ULxpnOCQXxJvBgxsn9ptjq6uviG/htZKk9veJGhlqn3w/DxQ631zFF+nlQXLwmImeS5amR2dl2U8sg6U9jsQ==} + engines: {node: '>= 14'} + hasBin: true + + yaml@2.8.2: + resolution: {integrity: sha512-mplynKqc1C2hTVYxd0PU2xQAc22TI1vShAYGksCCfxbn/dFwnHTNi1bvYsBTkhdUNtGIf5xNOg938rrSSYvS9A==} + engines: {node: '>= 14.6'} + hasBin: true + + yargs-parser@21.1.1: + resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} + engines: {node: '>=12'} + + yargs@17.7.2: + resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} + engines: {node: '>=12'} + + yauzl@2.10.0: + resolution: {integrity: sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==} + + yocto-queue@1.2.1: + resolution: {integrity: sha512-AyeEbWOu/TAXdxlV9wmGcR0+yh2j3vYPGOECcIj2S7MkrLyC7ne+oye2BKTItt0ii2PHk4cDy+95+LshzbXnGg==} + engines: {node: '>=12.20'} + + yocto-spinner@0.2.3: + resolution: {integrity: sha512-sqBChb33loEnkoXte1bLg45bEBsOP9N1kzQh5JZNKj/0rik4zAPTNSAVPj3uQAdc6slYJ0Ksc403G2XgxsJQFQ==} + engines: {node: '>=18.19'} + + yoctocolors@2.1.2: + resolution: {integrity: sha512-CzhO+pFNo8ajLM2d2IW/R93ipy99LWjtwblvC1RsoSUMZgyLbYFr221TnSNT7GjGdYui6P459mw9JH/g/zW2ug==} + engines: {node: '>=18'} + + zimmerframe@1.1.4: + resolution: {integrity: sha512-B58NGBEoc8Y9MWWCQGl/gq9xBCe4IiKM0a2x7GZdQKOW5Exr8S1W24J6OgM1njK8xCRGvAJIL/MxXHf6SkmQKQ==} + + zod-to-json-schema@3.24.6: + resolution: {integrity: sha512-h/z3PKvcTcTetyjl1fkj79MHNEjm+HpD6NXheWjzOekY7kV+lwDYnHw+ivHkijnCSMz1yJaWBD9vu/Fcmk+vEg==} + peerDependencies: + zod: ^3.24.1 + + zod-to-ts@1.2.0: + resolution: {integrity: sha512-x30XE43V+InwGpvTySRNz9kB7qFU8DlyEy7BsSTCHPH1R0QasMmHWZDCzYm6bVXtj/9NNJAZF3jW8rzFvH5OFA==} + peerDependencies: + typescript: ^4.9.4 || ^5.0.2 + zod: ^3 + + zod@3.25.76: + resolution: {integrity: sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==} + + zwitch@2.0.4: + resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==} + +snapshots: + + '@adobe/css-tools@4.3.3': {} + + '@alloc/quick-lru@5.2.0': {} + + '@ampproject/remapping@2.3.0': + dependencies: + '@jridgewell/gen-mapping': 0.3.13 + '@jridgewell/trace-mapping': 0.3.31 + + '@antfu/install-pkg@1.0.0': + dependencies: + package-manager-detector: 0.2.11 + tinyexec: 0.3.2 + + '@antfu/utils@8.1.1': {} + + '@astrojs/check@0.9.6(prettier@3.7.4)(typescript@5.9.3)': + dependencies: + '@astrojs/language-server': 2.16.2(prettier@3.7.4)(typescript@5.9.3) + chokidar: 4.0.3 + kleur: 4.1.5 + typescript: 5.9.3 + yargs: 17.7.2 + transitivePeerDependencies: + - prettier + - prettier-plugin-astro + + '@astrojs/compiler@2.13.0': {} + + '@astrojs/internal-helpers@0.7.3': {} + + '@astrojs/language-server@2.16.2(prettier@3.7.4)(typescript@5.9.3)': + dependencies: + '@astrojs/compiler': 2.13.0 + '@astrojs/yaml2ts': 0.2.2 + '@jridgewell/sourcemap-codec': 1.5.5 + '@volar/kit': 2.4.27(typescript@5.9.3) + '@volar/language-core': 2.4.27 + '@volar/language-server': 2.4.27 + '@volar/language-service': 2.4.27 + fast-glob: 3.3.3 + muggle-string: 0.4.1 + volar-service-css: 0.0.67(@volar/language-service@2.4.27) + volar-service-emmet: 0.0.67(@volar/language-service@2.4.27) + volar-service-html: 0.0.67(@volar/language-service@2.4.27) + volar-service-prettier: 0.0.67(@volar/language-service@2.4.27)(prettier@3.7.4) + volar-service-typescript: 0.0.67(@volar/language-service@2.4.27) + volar-service-typescript-twoslash-queries: 0.0.67(@volar/language-service@2.4.27) + volar-service-yaml: 0.0.67(@volar/language-service@2.4.27) + vscode-html-languageservice: 5.6.1 + vscode-uri: 3.1.0 + optionalDependencies: + prettier: 3.7.4 + transitivePeerDependencies: + - typescript + + '@astrojs/markdown-remark@6.3.7': + dependencies: + '@astrojs/internal-helpers': 0.7.3 + '@astrojs/prism': 3.3.0 + github-slugger: 2.0.0 + hast-util-from-html: 2.0.3 + hast-util-to-text: 4.0.2 + import-meta-resolve: 4.2.0 + js-yaml: 4.1.0 + mdast-util-definitions: 6.0.0 + rehype-raw: 7.0.0 + rehype-stringify: 10.0.1 + remark-gfm: 4.0.1 + remark-parse: 11.0.0 + remark-rehype: 11.1.2 + remark-smartypants: 3.0.2 + shiki: 3.13.0 + smol-toml: 1.4.2 + unified: 11.0.5 + unist-util-remove-position: 5.0.0 + unist-util-visit: 5.0.0 + unist-util-visit-parents: 6.0.2 + vfile: 6.0.3 + transitivePeerDependencies: + - supports-color + + '@astrojs/prism@3.3.0': + dependencies: + prismjs: 1.30.0 + + '@astrojs/rss@4.0.14': + dependencies: + fast-xml-parser: 5.3.2 + piccolore: 0.1.3 + + '@astrojs/sitemap@3.6.0': + dependencies: + sitemap: 8.0.0 + stream-replace-string: 2.0.0 + zod: 3.25.76 + + '@astrojs/svelte@7.2.3(@types/node@24.5.2)(astro@5.13.10(@types/node@24.5.2)(jiti@1.21.7)(lightningcss@1.29.3)(rollup@2.79.2)(sass@1.80.4)(stylus@0.64.0)(terser@5.43.1)(typescript@5.9.3)(yaml@2.8.2))(jiti@1.21.7)(lightningcss@1.29.3)(sass@1.80.4)(stylus@0.64.0)(svelte@5.39.8)(terser@5.43.1)(typescript@5.9.3)(yaml@2.8.2)': + dependencies: + '@sveltejs/vite-plugin-svelte': 5.1.1(svelte@5.39.8)(vite@6.3.6(@types/node@24.5.2)(jiti@1.21.7)(lightningcss@1.29.3)(sass@1.80.4)(stylus@0.64.0)(terser@5.43.1)(yaml@2.8.2)) + astro: 5.13.10(@types/node@24.5.2)(jiti@1.21.7)(lightningcss@1.29.3)(rollup@2.79.2)(sass@1.80.4)(stylus@0.64.0)(terser@5.43.1)(typescript@5.9.3)(yaml@2.8.2) + svelte: 5.39.8 + svelte2tsx: 0.7.45(svelte@5.39.8)(typescript@5.9.3) + typescript: 5.9.3 + vite: 6.4.1(@types/node@24.5.2)(jiti@1.21.7)(lightningcss@1.29.3)(sass@1.80.4)(stylus@0.64.0)(terser@5.43.1)(yaml@2.8.2) + transitivePeerDependencies: + - '@types/node' + - jiti + - less + - lightningcss + - sass + - sass-embedded + - stylus + - sugarss + - supports-color + - terser + - tsx + - yaml + + '@astrojs/tailwind@6.0.2(astro@5.13.10(@types/node@24.5.2)(jiti@1.21.7)(lightningcss@1.29.3)(rollup@2.79.2)(sass@1.80.4)(stylus@0.64.0)(terser@5.43.1)(typescript@5.9.3)(yaml@2.8.2))(tailwindcss@3.4.19(yaml@2.8.2))': + dependencies: + astro: 5.13.10(@types/node@24.5.2)(jiti@1.21.7)(lightningcss@1.29.3)(rollup@2.79.2)(sass@1.80.4)(stylus@0.64.0)(terser@5.43.1)(typescript@5.9.3)(yaml@2.8.2) + autoprefixer: 10.4.21(postcss@8.5.3) + postcss: 8.5.3 + postcss-load-config: 4.0.2(postcss@8.5.3) + tailwindcss: 3.4.19(yaml@2.8.2) + transitivePeerDependencies: + - ts-node + + '@astrojs/telemetry@3.3.0': + dependencies: + ci-info: 4.3.0 + debug: 4.4.3 + dlv: 1.1.3 + dset: 3.1.4 + is-docker: 3.0.0 + is-wsl: 3.1.0 + which-pm-runs: 1.1.0 + transitivePeerDependencies: + - supports-color + + '@astrojs/ts-plugin@1.10.6': + dependencies: + '@astrojs/compiler': 2.13.0 + '@astrojs/yaml2ts': 0.2.2 + '@jridgewell/sourcemap-codec': 1.5.5 + '@volar/language-core': 2.4.27 + '@volar/typescript': 2.4.27 + semver: 7.7.3 + vscode-languageserver-textdocument: 1.0.12 + + '@astrojs/yaml2ts@0.2.2': + dependencies: + yaml: 2.8.2 + + '@babel/code-frame@7.27.1': + dependencies: + '@babel/helper-validator-identifier': 7.27.1 + js-tokens: 4.0.0 + picocolors: 1.1.1 + + '@babel/compat-data@7.28.0': {} + + '@babel/core@7.28.0': + dependencies: + '@ampproject/remapping': 2.3.0 + '@babel/code-frame': 7.27.1 + '@babel/generator': 7.28.0 + '@babel/helper-compilation-targets': 7.27.2 + '@babel/helper-module-transforms': 7.27.3(@babel/core@7.28.0) + '@babel/helpers': 7.27.6 + '@babel/parser': 7.28.4 + '@babel/template': 7.27.2 + '@babel/traverse': 7.28.0 + '@babel/types': 7.28.4 + convert-source-map: 2.0.0 + debug: 4.4.3 + gensync: 1.0.0-beta.2 + json5: 2.2.3 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + '@babel/generator@7.28.0': + dependencies: + '@babel/parser': 7.28.4 + '@babel/types': 7.28.4 + '@jridgewell/gen-mapping': 0.3.13 + '@jridgewell/trace-mapping': 0.3.31 + jsesc: 3.1.0 + + '@babel/helper-annotate-as-pure@7.27.3': + dependencies: + '@babel/types': 7.28.4 + + '@babel/helper-compilation-targets@7.27.2': + dependencies: + '@babel/compat-data': 7.28.0 + '@babel/helper-validator-option': 7.27.1 + browserslist: 4.25.1 + lru-cache: 5.1.1 + semver: 6.3.1 + + '@babel/helper-create-class-features-plugin@7.27.1(@babel/core@7.28.0)': + dependencies: + '@babel/core': 7.28.0 + '@babel/helper-annotate-as-pure': 7.27.3 + '@babel/helper-member-expression-to-functions': 7.27.1 + '@babel/helper-optimise-call-expression': 7.27.1 + '@babel/helper-replace-supers': 7.27.1(@babel/core@7.28.0) + '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 + '@babel/traverse': 7.28.0 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + '@babel/helper-create-regexp-features-plugin@7.27.1(@babel/core@7.28.0)': + dependencies: + '@babel/core': 7.28.0 + '@babel/helper-annotate-as-pure': 7.27.3 + regexpu-core: 6.2.0 + semver: 6.3.1 + + '@babel/helper-define-polyfill-provider@0.6.5(@babel/core@7.28.0)': + dependencies: + '@babel/core': 7.28.0 + '@babel/helper-compilation-targets': 7.27.2 + '@babel/helper-plugin-utils': 7.27.1 + debug: 4.4.3 + lodash.debounce: 4.0.8 + resolve: 1.22.11 + transitivePeerDependencies: + - supports-color + + '@babel/helper-globals@7.28.0': {} + + '@babel/helper-member-expression-to-functions@7.27.1': + dependencies: + '@babel/traverse': 7.28.0 + '@babel/types': 7.28.4 + transitivePeerDependencies: + - supports-color + + '@babel/helper-module-imports@7.27.1': + dependencies: + '@babel/traverse': 7.28.0 + '@babel/types': 7.28.4 + transitivePeerDependencies: + - supports-color + + '@babel/helper-module-transforms@7.27.3(@babel/core@7.28.0)': + dependencies: + '@babel/core': 7.28.0 + '@babel/helper-module-imports': 7.27.1 + '@babel/helper-validator-identifier': 7.27.1 + '@babel/traverse': 7.28.0 + transitivePeerDependencies: + - supports-color + + '@babel/helper-optimise-call-expression@7.27.1': + dependencies: + '@babel/types': 7.28.4 + + '@babel/helper-plugin-utils@7.27.1': {} + + '@babel/helper-remap-async-to-generator@7.27.1(@babel/core@7.28.0)': + dependencies: + '@babel/core': 7.28.0 + '@babel/helper-annotate-as-pure': 7.27.3 + '@babel/helper-wrap-function': 7.27.1 + '@babel/traverse': 7.28.0 + transitivePeerDependencies: + - supports-color + + '@babel/helper-replace-supers@7.27.1(@babel/core@7.28.0)': + dependencies: + '@babel/core': 7.28.0 + '@babel/helper-member-expression-to-functions': 7.27.1 + '@babel/helper-optimise-call-expression': 7.27.1 + '@babel/traverse': 7.28.0 + transitivePeerDependencies: + - supports-color + + '@babel/helper-skip-transparent-expression-wrappers@7.27.1': + dependencies: + '@babel/traverse': 7.28.0 + '@babel/types': 7.28.4 + transitivePeerDependencies: + - supports-color + + '@babel/helper-string-parser@7.27.1': {} + + '@babel/helper-validator-identifier@7.27.1': {} + + '@babel/helper-validator-identifier@7.28.5': + optional: true + + '@babel/helper-validator-option@7.27.1': {} + + '@babel/helper-wrap-function@7.27.1': + dependencies: + '@babel/template': 7.27.2 + '@babel/traverse': 7.28.0 + '@babel/types': 7.28.4 + transitivePeerDependencies: + - supports-color + + '@babel/helpers@7.27.6': + dependencies: + '@babel/template': 7.27.2 + '@babel/types': 7.28.4 + + '@babel/parser@7.28.4': + dependencies: + '@babel/types': 7.28.4 + + '@babel/parser@7.28.5': + dependencies: + '@babel/types': 7.28.5 + optional: true + + '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.27.1(@babel/core@7.28.0)': + dependencies: + '@babel/core': 7.28.0 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/traverse': 7.28.0 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-bugfix-safari-class-field-initializer-scope@7.27.1(@babel/core@7.28.0)': + dependencies: + '@babel/core': 7.28.0 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.27.1(@babel/core@7.28.0)': + dependencies: + '@babel/core': 7.28.0 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.27.1(@babel/core@7.28.0)': + dependencies: + '@babel/core': 7.28.0 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 + '@babel/plugin-transform-optional-chaining': 7.27.1(@babel/core@7.28.0) + transitivePeerDependencies: + - supports-color + + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.27.1(@babel/core@7.28.0)': + dependencies: + '@babel/core': 7.28.0 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/traverse': 7.28.0 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-proposal-class-properties@7.12.1(@babel/core@7.28.0)': + dependencies: + '@babel/core': 7.28.0 + '@babel/helper-create-class-features-plugin': 7.27.1(@babel/core@7.28.0) + '@babel/helper-plugin-utils': 7.27.1 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.28.0)': + dependencies: + '@babel/core': 7.28.0 + + '@babel/plugin-syntax-flow@7.27.1(@babel/core@7.28.0)': + dependencies: + '@babel/core': 7.28.0 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-syntax-import-assertions@7.27.1(@babel/core@7.28.0)': + dependencies: + '@babel/core': 7.28.0 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-syntax-import-attributes@7.27.1(@babel/core@7.28.0)': + dependencies: + '@babel/core': 7.28.0 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.28.0)': + dependencies: + '@babel/core': 7.28.0 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-syntax-jsx@7.27.1(@babel/core@7.28.0)': + dependencies: + '@babel/core': 7.28.0 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.28.0)': + dependencies: + '@babel/core': 7.28.0 + '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.28.0) + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-arrow-functions@7.27.1(@babel/core@7.28.0)': + dependencies: + '@babel/core': 7.28.0 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-async-generator-functions@7.28.0(@babel/core@7.28.0)': + dependencies: + '@babel/core': 7.28.0 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-remap-async-to-generator': 7.27.1(@babel/core@7.28.0) + '@babel/traverse': 7.28.0 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-async-to-generator@7.27.1(@babel/core@7.28.0)': + dependencies: + '@babel/core': 7.28.0 + '@babel/helper-module-imports': 7.27.1 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-remap-async-to-generator': 7.27.1(@babel/core@7.28.0) + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-block-scoped-functions@7.27.1(@babel/core@7.28.0)': + dependencies: + '@babel/core': 7.28.0 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-block-scoping@7.28.0(@babel/core@7.28.0)': + dependencies: + '@babel/core': 7.28.0 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-class-properties@7.27.1(@babel/core@7.28.0)': + dependencies: + '@babel/core': 7.28.0 + '@babel/helper-create-class-features-plugin': 7.27.1(@babel/core@7.28.0) + '@babel/helper-plugin-utils': 7.27.1 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-class-static-block@7.27.1(@babel/core@7.28.0)': + dependencies: + '@babel/core': 7.28.0 + '@babel/helper-create-class-features-plugin': 7.27.1(@babel/core@7.28.0) + '@babel/helper-plugin-utils': 7.27.1 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-classes@7.28.0(@babel/core@7.28.0)': + dependencies: + '@babel/core': 7.28.0 + '@babel/helper-annotate-as-pure': 7.27.3 + '@babel/helper-compilation-targets': 7.27.2 + '@babel/helper-globals': 7.28.0 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-replace-supers': 7.27.1(@babel/core@7.28.0) + '@babel/traverse': 7.28.0 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-computed-properties@7.27.1(@babel/core@7.28.0)': + dependencies: + '@babel/core': 7.28.0 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/template': 7.27.2 + + '@babel/plugin-transform-destructuring@7.28.0(@babel/core@7.28.0)': + dependencies: + '@babel/core': 7.28.0 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/traverse': 7.28.0 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-dotall-regex@7.27.1(@babel/core@7.28.0)': + dependencies: + '@babel/core': 7.28.0 + '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.28.0) + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-duplicate-keys@7.27.1(@babel/core@7.28.0)': + dependencies: + '@babel/core': 7.28.0 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.27.1(@babel/core@7.28.0)': + dependencies: + '@babel/core': 7.28.0 + '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.28.0) + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-dynamic-import@7.27.1(@babel/core@7.28.0)': + dependencies: + '@babel/core': 7.28.0 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-explicit-resource-management@7.28.0(@babel/core@7.28.0)': + dependencies: + '@babel/core': 7.28.0 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-transform-destructuring': 7.28.0(@babel/core@7.28.0) + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-exponentiation-operator@7.27.1(@babel/core@7.28.0)': + dependencies: + '@babel/core': 7.28.0 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-export-namespace-from@7.27.1(@babel/core@7.28.0)': + dependencies: + '@babel/core': 7.28.0 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-flow-strip-types@7.27.1(@babel/core@7.28.0)': + dependencies: + '@babel/core': 7.28.0 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-syntax-flow': 7.27.1(@babel/core@7.28.0) + + '@babel/plugin-transform-for-of@7.27.1(@babel/core@7.28.0)': + dependencies: + '@babel/core': 7.28.0 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-function-name@7.27.1(@babel/core@7.28.0)': + dependencies: + '@babel/core': 7.28.0 + '@babel/helper-compilation-targets': 7.27.2 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/traverse': 7.28.0 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-json-strings@7.27.1(@babel/core@7.28.0)': + dependencies: + '@babel/core': 7.28.0 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-literals@7.27.1(@babel/core@7.28.0)': + dependencies: + '@babel/core': 7.28.0 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-logical-assignment-operators@7.27.1(@babel/core@7.28.0)': + dependencies: + '@babel/core': 7.28.0 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-member-expression-literals@7.27.1(@babel/core@7.28.0)': + dependencies: + '@babel/core': 7.28.0 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-modules-amd@7.27.1(@babel/core@7.28.0)': + dependencies: + '@babel/core': 7.28.0 + '@babel/helper-module-transforms': 7.27.3(@babel/core@7.28.0) + '@babel/helper-plugin-utils': 7.27.1 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-modules-commonjs@7.27.1(@babel/core@7.28.0)': + dependencies: + '@babel/core': 7.28.0 + '@babel/helper-module-transforms': 7.27.3(@babel/core@7.28.0) + '@babel/helper-plugin-utils': 7.27.1 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-modules-systemjs@7.27.1(@babel/core@7.28.0)': + dependencies: + '@babel/core': 7.28.0 + '@babel/helper-module-transforms': 7.27.3(@babel/core@7.28.0) + '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-validator-identifier': 7.27.1 + '@babel/traverse': 7.28.0 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-modules-umd@7.27.1(@babel/core@7.28.0)': + dependencies: + '@babel/core': 7.28.0 + '@babel/helper-module-transforms': 7.27.3(@babel/core@7.28.0) + '@babel/helper-plugin-utils': 7.27.1 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-named-capturing-groups-regex@7.27.1(@babel/core@7.28.0)': + dependencies: + '@babel/core': 7.28.0 + '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.28.0) + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-new-target@7.27.1(@babel/core@7.28.0)': + dependencies: + '@babel/core': 7.28.0 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-nullish-coalescing-operator@7.27.1(@babel/core@7.28.0)': + dependencies: + '@babel/core': 7.28.0 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-numeric-separator@7.27.1(@babel/core@7.28.0)': + dependencies: + '@babel/core': 7.28.0 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-object-rest-spread@7.28.0(@babel/core@7.28.0)': + dependencies: + '@babel/core': 7.28.0 + '@babel/helper-compilation-targets': 7.27.2 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-transform-destructuring': 7.28.0(@babel/core@7.28.0) + '@babel/plugin-transform-parameters': 7.27.7(@babel/core@7.28.0) + '@babel/traverse': 7.28.0 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-object-super@7.27.1(@babel/core@7.28.0)': + dependencies: + '@babel/core': 7.28.0 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-replace-supers': 7.27.1(@babel/core@7.28.0) + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-optional-catch-binding@7.27.1(@babel/core@7.28.0)': + dependencies: + '@babel/core': 7.28.0 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-optional-chaining@7.27.1(@babel/core@7.28.0)': + dependencies: + '@babel/core': 7.28.0 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-parameters@7.27.7(@babel/core@7.28.0)': + dependencies: + '@babel/core': 7.28.0 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-private-methods@7.27.1(@babel/core@7.28.0)': + dependencies: + '@babel/core': 7.28.0 + '@babel/helper-create-class-features-plugin': 7.27.1(@babel/core@7.28.0) + '@babel/helper-plugin-utils': 7.27.1 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-private-property-in-object@7.27.1(@babel/core@7.28.0)': + dependencies: + '@babel/core': 7.28.0 + '@babel/helper-annotate-as-pure': 7.27.3 + '@babel/helper-create-class-features-plugin': 7.27.1(@babel/core@7.28.0) + '@babel/helper-plugin-utils': 7.27.1 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-property-literals@7.27.1(@babel/core@7.28.0)': + dependencies: + '@babel/core': 7.28.0 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-react-display-name@7.28.0(@babel/core@7.28.0)': + dependencies: + '@babel/core': 7.28.0 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-react-jsx-development@7.27.1(@babel/core@7.28.0)': + dependencies: + '@babel/core': 7.28.0 + '@babel/plugin-transform-react-jsx': 7.27.1(@babel/core@7.28.0) + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-react-jsx@7.27.1(@babel/core@7.28.0)': + dependencies: + '@babel/core': 7.28.0 + '@babel/helper-annotate-as-pure': 7.27.3 + '@babel/helper-module-imports': 7.27.1 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.28.0) + '@babel/types': 7.28.4 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-react-pure-annotations@7.27.1(@babel/core@7.28.0)': + dependencies: + '@babel/core': 7.28.0 + '@babel/helper-annotate-as-pure': 7.27.3 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-regenerator@7.28.1(@babel/core@7.28.0)': + dependencies: + '@babel/core': 7.28.0 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-regexp-modifiers@7.27.1(@babel/core@7.28.0)': + dependencies: + '@babel/core': 7.28.0 + '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.28.0) + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-reserved-words@7.27.1(@babel/core@7.28.0)': + dependencies: + '@babel/core': 7.28.0 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-shorthand-properties@7.27.1(@babel/core@7.28.0)': + dependencies: + '@babel/core': 7.28.0 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-spread@7.27.1(@babel/core@7.28.0)': + dependencies: + '@babel/core': 7.28.0 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-sticky-regex@7.27.1(@babel/core@7.28.0)': + dependencies: + '@babel/core': 7.28.0 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-template-literals@7.27.1(@babel/core@7.28.0)': + dependencies: + '@babel/core': 7.28.0 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-typeof-symbol@7.27.1(@babel/core@7.28.0)': + dependencies: + '@babel/core': 7.28.0 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-unicode-escapes@7.27.1(@babel/core@7.28.0)': + dependencies: + '@babel/core': 7.28.0 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-unicode-property-regex@7.27.1(@babel/core@7.28.0)': + dependencies: + '@babel/core': 7.28.0 + '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.28.0) + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-unicode-regex@7.27.1(@babel/core@7.28.0)': + dependencies: + '@babel/core': 7.28.0 + '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.28.0) + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-unicode-sets-regex@7.27.1(@babel/core@7.28.0)': + dependencies: + '@babel/core': 7.28.0 + '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.28.0) + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/preset-env@7.28.0(@babel/core@7.28.0)': + dependencies: + '@babel/compat-data': 7.28.0 + '@babel/core': 7.28.0 + '@babel/helper-compilation-targets': 7.27.2 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-validator-option': 7.27.1 + '@babel/plugin-bugfix-firefox-class-in-computed-class-key': 7.27.1(@babel/core@7.28.0) + '@babel/plugin-bugfix-safari-class-field-initializer-scope': 7.27.1(@babel/core@7.28.0) + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.27.1(@babel/core@7.28.0) + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.27.1(@babel/core@7.28.0) + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.27.1(@babel/core@7.28.0) + '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.28.0) + '@babel/plugin-syntax-import-assertions': 7.27.1(@babel/core@7.28.0) + '@babel/plugin-syntax-import-attributes': 7.27.1(@babel/core@7.28.0) + '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.28.0) + '@babel/plugin-transform-arrow-functions': 7.27.1(@babel/core@7.28.0) + '@babel/plugin-transform-async-generator-functions': 7.28.0(@babel/core@7.28.0) + '@babel/plugin-transform-async-to-generator': 7.27.1(@babel/core@7.28.0) + '@babel/plugin-transform-block-scoped-functions': 7.27.1(@babel/core@7.28.0) + '@babel/plugin-transform-block-scoping': 7.28.0(@babel/core@7.28.0) + '@babel/plugin-transform-class-properties': 7.27.1(@babel/core@7.28.0) + '@babel/plugin-transform-class-static-block': 7.27.1(@babel/core@7.28.0) + '@babel/plugin-transform-classes': 7.28.0(@babel/core@7.28.0) + '@babel/plugin-transform-computed-properties': 7.27.1(@babel/core@7.28.0) + '@babel/plugin-transform-destructuring': 7.28.0(@babel/core@7.28.0) + '@babel/plugin-transform-dotall-regex': 7.27.1(@babel/core@7.28.0) + '@babel/plugin-transform-duplicate-keys': 7.27.1(@babel/core@7.28.0) + '@babel/plugin-transform-duplicate-named-capturing-groups-regex': 7.27.1(@babel/core@7.28.0) + '@babel/plugin-transform-dynamic-import': 7.27.1(@babel/core@7.28.0) + '@babel/plugin-transform-explicit-resource-management': 7.28.0(@babel/core@7.28.0) + '@babel/plugin-transform-exponentiation-operator': 7.27.1(@babel/core@7.28.0) + '@babel/plugin-transform-export-namespace-from': 7.27.1(@babel/core@7.28.0) + '@babel/plugin-transform-for-of': 7.27.1(@babel/core@7.28.0) + '@babel/plugin-transform-function-name': 7.27.1(@babel/core@7.28.0) + '@babel/plugin-transform-json-strings': 7.27.1(@babel/core@7.28.0) + '@babel/plugin-transform-literals': 7.27.1(@babel/core@7.28.0) + '@babel/plugin-transform-logical-assignment-operators': 7.27.1(@babel/core@7.28.0) + '@babel/plugin-transform-member-expression-literals': 7.27.1(@babel/core@7.28.0) + '@babel/plugin-transform-modules-amd': 7.27.1(@babel/core@7.28.0) + '@babel/plugin-transform-modules-commonjs': 7.27.1(@babel/core@7.28.0) + '@babel/plugin-transform-modules-systemjs': 7.27.1(@babel/core@7.28.0) + '@babel/plugin-transform-modules-umd': 7.27.1(@babel/core@7.28.0) + '@babel/plugin-transform-named-capturing-groups-regex': 7.27.1(@babel/core@7.28.0) + '@babel/plugin-transform-new-target': 7.27.1(@babel/core@7.28.0) + '@babel/plugin-transform-nullish-coalescing-operator': 7.27.1(@babel/core@7.28.0) + '@babel/plugin-transform-numeric-separator': 7.27.1(@babel/core@7.28.0) + '@babel/plugin-transform-object-rest-spread': 7.28.0(@babel/core@7.28.0) + '@babel/plugin-transform-object-super': 7.27.1(@babel/core@7.28.0) + '@babel/plugin-transform-optional-catch-binding': 7.27.1(@babel/core@7.28.0) + '@babel/plugin-transform-optional-chaining': 7.27.1(@babel/core@7.28.0) + '@babel/plugin-transform-parameters': 7.27.7(@babel/core@7.28.0) + '@babel/plugin-transform-private-methods': 7.27.1(@babel/core@7.28.0) + '@babel/plugin-transform-private-property-in-object': 7.27.1(@babel/core@7.28.0) + '@babel/plugin-transform-property-literals': 7.27.1(@babel/core@7.28.0) + '@babel/plugin-transform-regenerator': 7.28.1(@babel/core@7.28.0) + '@babel/plugin-transform-regexp-modifiers': 7.27.1(@babel/core@7.28.0) + '@babel/plugin-transform-reserved-words': 7.27.1(@babel/core@7.28.0) + '@babel/plugin-transform-shorthand-properties': 7.27.1(@babel/core@7.28.0) + '@babel/plugin-transform-spread': 7.27.1(@babel/core@7.28.0) + '@babel/plugin-transform-sticky-regex': 7.27.1(@babel/core@7.28.0) + '@babel/plugin-transform-template-literals': 7.27.1(@babel/core@7.28.0) + '@babel/plugin-transform-typeof-symbol': 7.27.1(@babel/core@7.28.0) + '@babel/plugin-transform-unicode-escapes': 7.27.1(@babel/core@7.28.0) + '@babel/plugin-transform-unicode-property-regex': 7.27.1(@babel/core@7.28.0) + '@babel/plugin-transform-unicode-regex': 7.27.1(@babel/core@7.28.0) + '@babel/plugin-transform-unicode-sets-regex': 7.27.1(@babel/core@7.28.0) + '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.28.0) + babel-plugin-polyfill-corejs2: 0.4.14(@babel/core@7.28.0) + babel-plugin-polyfill-corejs3: 0.13.0(@babel/core@7.28.0) + babel-plugin-polyfill-regenerator: 0.6.5(@babel/core@7.28.0) + core-js-compat: 3.44.0 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + '@babel/preset-flow@7.27.1(@babel/core@7.28.0)': + dependencies: + '@babel/core': 7.28.0 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-validator-option': 7.27.1 + '@babel/plugin-transform-flow-strip-types': 7.27.1(@babel/core@7.28.0) + + '@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.28.0)': + dependencies: + '@babel/core': 7.28.0 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/types': 7.28.4 + esutils: 2.0.3 + + '@babel/preset-react@7.27.1(@babel/core@7.28.0)': + dependencies: + '@babel/core': 7.28.0 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-validator-option': 7.27.1 + '@babel/plugin-transform-react-display-name': 7.28.0(@babel/core@7.28.0) + '@babel/plugin-transform-react-jsx': 7.27.1(@babel/core@7.28.0) + '@babel/plugin-transform-react-jsx-development': 7.27.1(@babel/core@7.28.0) + '@babel/plugin-transform-react-pure-annotations': 7.27.1(@babel/core@7.28.0) + transitivePeerDependencies: + - supports-color + + '@babel/runtime@7.27.6': {} + + '@babel/template@7.27.2': + dependencies: + '@babel/code-frame': 7.27.1 + '@babel/parser': 7.28.4 + '@babel/types': 7.28.4 + + '@babel/traverse@7.28.0': + dependencies: + '@babel/code-frame': 7.27.1 + '@babel/generator': 7.28.0 + '@babel/helper-globals': 7.28.0 + '@babel/parser': 7.28.4 + '@babel/template': 7.27.2 + '@babel/types': 7.28.4 + debug: 4.4.3 + transitivePeerDependencies: + - supports-color + + '@babel/types@7.28.4': + dependencies: + '@babel/helper-string-parser': 7.27.1 + '@babel/helper-validator-identifier': 7.27.1 + + '@babel/types@7.28.5': + dependencies: + '@babel/helper-string-parser': 7.27.1 + '@babel/helper-validator-identifier': 7.28.5 + optional: true + + '@biomejs/biome@2.2.5': + optionalDependencies: + '@biomejs/cli-darwin-arm64': 2.2.5 + '@biomejs/cli-darwin-x64': 2.2.5 + '@biomejs/cli-linux-arm64': 2.2.5 + '@biomejs/cli-linux-arm64-musl': 2.2.5 + '@biomejs/cli-linux-x64': 2.2.5 + '@biomejs/cli-linux-x64-musl': 2.2.5 + '@biomejs/cli-win32-arm64': 2.2.5 + '@biomejs/cli-win32-x64': 2.2.5 + + '@biomejs/cli-darwin-arm64@2.2.5': + optional: true + + '@biomejs/cli-darwin-x64@2.2.5': + optional: true + + '@biomejs/cli-linux-arm64-musl@2.2.5': + optional: true + + '@biomejs/cli-linux-arm64@2.2.5': + optional: true + + '@biomejs/cli-linux-x64-musl@2.2.5': + optional: true + + '@biomejs/cli-linux-x64@2.2.5': + optional: true + + '@biomejs/cli-win32-arm64@2.2.5': + optional: true + + '@biomejs/cli-win32-x64@2.2.5': + optional: true + + '@capsizecss/unpack@2.4.0': + dependencies: + blob-to-buffer: 1.2.9 + cross-fetch: 3.2.0 + fontkit: 2.0.4 + transitivePeerDependencies: + - encoding + + '@csstools/selector-resolve-nested@3.1.0(postcss-selector-parser@7.1.0)': + dependencies: + postcss-selector-parser: 7.1.0 + + '@csstools/selector-specificity@5.0.0(postcss-selector-parser@7.1.0)': + dependencies: + postcss-selector-parser: 7.1.0 + + '@ctrl/tinycolor@4.2.0': {} + + '@emmetio/abbreviation@2.3.3': + dependencies: + '@emmetio/scanner': 1.0.4 + + '@emmetio/css-abbreviation@2.1.8': + dependencies: + '@emmetio/scanner': 1.0.4 + + '@emmetio/css-parser@0.4.1': + dependencies: + '@emmetio/stream-reader': 2.2.0 + '@emmetio/stream-reader-utils': 0.1.0 + + '@emmetio/html-matcher@1.3.0': + dependencies: + '@emmetio/scanner': 1.0.4 + + '@emmetio/scanner@1.0.4': {} + + '@emmetio/stream-reader-utils@0.1.0': {} + + '@emmetio/stream-reader@2.2.0': {} + + '@emnapi/runtime@1.7.1': + dependencies: + tslib: 2.8.1 + optional: true + + '@esbuild/aix-ppc64@0.25.10': + optional: true + + '@esbuild/aix-ppc64@0.25.12': + optional: true + + '@esbuild/android-arm64@0.25.10': + optional: true + + '@esbuild/android-arm64@0.25.12': + optional: true + + '@esbuild/android-arm@0.25.10': + optional: true + + '@esbuild/android-arm@0.25.12': + optional: true + + '@esbuild/android-x64@0.25.10': + optional: true + + '@esbuild/android-x64@0.25.12': + optional: true + + '@esbuild/darwin-arm64@0.25.10': + optional: true + + '@esbuild/darwin-arm64@0.25.12': + optional: true + + '@esbuild/darwin-x64@0.25.10': + optional: true + + '@esbuild/darwin-x64@0.25.12': + optional: true + + '@esbuild/freebsd-arm64@0.25.10': + optional: true + + '@esbuild/freebsd-arm64@0.25.12': + optional: true + + '@esbuild/freebsd-x64@0.25.10': + optional: true + + '@esbuild/freebsd-x64@0.25.12': + optional: true + + '@esbuild/linux-arm64@0.25.10': + optional: true + + '@esbuild/linux-arm64@0.25.12': + optional: true + + '@esbuild/linux-arm@0.25.10': + optional: true + + '@esbuild/linux-arm@0.25.12': + optional: true + + '@esbuild/linux-ia32@0.25.10': + optional: true + + '@esbuild/linux-ia32@0.25.12': + optional: true + + '@esbuild/linux-loong64@0.25.10': + optional: true + + '@esbuild/linux-loong64@0.25.12': + optional: true + + '@esbuild/linux-mips64el@0.25.10': + optional: true + + '@esbuild/linux-mips64el@0.25.12': + optional: true + + '@esbuild/linux-ppc64@0.25.10': + optional: true + + '@esbuild/linux-ppc64@0.25.12': + optional: true + + '@esbuild/linux-riscv64@0.25.10': + optional: true + + '@esbuild/linux-riscv64@0.25.12': + optional: true + + '@esbuild/linux-s390x@0.25.10': + optional: true + + '@esbuild/linux-s390x@0.25.12': + optional: true + + '@esbuild/linux-x64@0.25.10': + optional: true + + '@esbuild/linux-x64@0.25.12': + optional: true + + '@esbuild/netbsd-arm64@0.25.10': + optional: true + + '@esbuild/netbsd-arm64@0.25.12': + optional: true + + '@esbuild/netbsd-x64@0.25.10': + optional: true + + '@esbuild/netbsd-x64@0.25.12': + optional: true + + '@esbuild/openbsd-arm64@0.25.10': + optional: true + + '@esbuild/openbsd-arm64@0.25.12': + optional: true + + '@esbuild/openbsd-x64@0.25.10': + optional: true + + '@esbuild/openbsd-x64@0.25.12': + optional: true + + '@esbuild/openharmony-arm64@0.25.10': + optional: true + + '@esbuild/openharmony-arm64@0.25.12': + optional: true + + '@esbuild/sunos-x64@0.25.10': + optional: true + + '@esbuild/sunos-x64@0.25.12': + optional: true + + '@esbuild/win32-arm64@0.25.10': + optional: true + + '@esbuild/win32-arm64@0.25.12': + optional: true + + '@esbuild/win32-ia32@0.25.10': + optional: true + + '@esbuild/win32-ia32@0.25.12': + optional: true + + '@esbuild/win32-x64@0.25.10': + optional: true + + '@esbuild/win32-x64@0.25.12': + optional: true + + '@expressive-code/core@0.41.4': + dependencies: + '@ctrl/tinycolor': 4.2.0 + hast-util-select: 6.0.4 + hast-util-to-html: 9.0.5 + hast-util-to-text: 4.0.2 + hastscript: 9.0.1 + postcss: 8.5.6 + postcss-nested: 6.2.0(postcss@8.5.6) + unist-util-visit: 5.0.0 + unist-util-visit-parents: 6.0.2 + + '@expressive-code/plugin-collapsible-sections@0.41.4': + dependencies: + '@expressive-code/core': 0.41.4 + + '@expressive-code/plugin-frames@0.41.4': + dependencies: + '@expressive-code/core': 0.41.4 + + '@expressive-code/plugin-line-numbers@0.41.4': + dependencies: + '@expressive-code/core': 0.41.4 + + '@expressive-code/plugin-shiki@0.41.4': + dependencies: + '@expressive-code/core': 0.41.4 + shiki: 3.19.0 + + '@expressive-code/plugin-text-markers@0.41.4': + dependencies: + '@expressive-code/core': 0.41.4 + + '@fontsource-variable/jetbrains-mono@5.2.8': {} + + '@fontsource/roboto@5.2.9': {} + + '@iconify-json/fa6-brands@1.2.6': + dependencies: + '@iconify/types': 2.0.0 + + '@iconify-json/fa6-regular@1.2.4': + dependencies: + '@iconify/types': 2.0.0 + + '@iconify-json/fa6-solid@1.2.4': + dependencies: + '@iconify/types': 2.0.0 + + '@iconify-json/material-symbols@1.2.50': + dependencies: + '@iconify/types': 2.0.0 + + '@iconify/svelte@4.2.0(svelte@5.39.8)': + dependencies: + '@iconify/types': 2.0.0 + svelte: 5.39.8 + + '@iconify/tools@4.1.2': + dependencies: + '@iconify/types': 2.0.0 + '@iconify/utils': 2.3.0 + '@types/tar': 6.1.13 + axios: 1.8.4 + cheerio: 1.0.0 + domhandler: 5.0.3 + extract-zip: 2.0.1 + local-pkg: 0.5.1 + pathe: 1.1.2 + svgo: 3.3.2 + tar: 6.2.1 + transitivePeerDependencies: + - debug + - supports-color + + '@iconify/types@2.0.0': {} + + '@iconify/utils@2.3.0': + dependencies: + '@antfu/install-pkg': 1.0.0 + '@antfu/utils': 8.1.1 + '@iconify/types': 2.0.0 + debug: 4.4.3 + globals: 15.15.0 + kolorist: 1.8.0 + local-pkg: 1.1.1 + mlly: 1.7.4 + transitivePeerDependencies: + - supports-color + + '@img/colour@1.0.0': {} + + '@img/sharp-darwin-arm64@0.34.5': + optionalDependencies: + '@img/sharp-libvips-darwin-arm64': 1.2.4 + optional: true + + '@img/sharp-darwin-x64@0.34.5': + optionalDependencies: + '@img/sharp-libvips-darwin-x64': 1.2.4 + optional: true + + '@img/sharp-libvips-darwin-arm64@1.2.4': + optional: true + + '@img/sharp-libvips-darwin-x64@1.2.4': + optional: true + + '@img/sharp-libvips-linux-arm64@1.2.4': + optional: true + + '@img/sharp-libvips-linux-arm@1.2.4': + optional: true + + '@img/sharp-libvips-linux-ppc64@1.2.4': + optional: true + + '@img/sharp-libvips-linux-riscv64@1.2.4': + optional: true + + '@img/sharp-libvips-linux-s390x@1.2.4': + optional: true + + '@img/sharp-libvips-linux-x64@1.2.4': + optional: true + + '@img/sharp-libvips-linuxmusl-arm64@1.2.4': + optional: true + + '@img/sharp-libvips-linuxmusl-x64@1.2.4': + optional: true + + '@img/sharp-linux-arm64@0.34.5': + optionalDependencies: + '@img/sharp-libvips-linux-arm64': 1.2.4 + optional: true + + '@img/sharp-linux-arm@0.34.5': + optionalDependencies: + '@img/sharp-libvips-linux-arm': 1.2.4 + optional: true + + '@img/sharp-linux-ppc64@0.34.5': + optionalDependencies: + '@img/sharp-libvips-linux-ppc64': 1.2.4 + optional: true + + '@img/sharp-linux-riscv64@0.34.5': + optionalDependencies: + '@img/sharp-libvips-linux-riscv64': 1.2.4 + optional: true + + '@img/sharp-linux-s390x@0.34.5': + optionalDependencies: + '@img/sharp-libvips-linux-s390x': 1.2.4 + optional: true + + '@img/sharp-linux-x64@0.34.5': + optionalDependencies: + '@img/sharp-libvips-linux-x64': 1.2.4 + optional: true + + '@img/sharp-linuxmusl-arm64@0.34.5': + optionalDependencies: + '@img/sharp-libvips-linuxmusl-arm64': 1.2.4 + optional: true + + '@img/sharp-linuxmusl-x64@0.34.5': + optionalDependencies: + '@img/sharp-libvips-linuxmusl-x64': 1.2.4 + optional: true + + '@img/sharp-wasm32@0.34.5': + dependencies: + '@emnapi/runtime': 1.7.1 + optional: true + + '@img/sharp-win32-arm64@0.34.5': + optional: true + + '@img/sharp-win32-ia32@0.34.5': + optional: true + + '@img/sharp-win32-x64@0.34.5': + optional: true + + '@isaacs/cliui@8.0.2': + dependencies: + string-width: 5.1.2 + string-width-cjs: string-width@4.2.3 + strip-ansi: 7.1.2 + strip-ansi-cjs: strip-ansi@6.0.1 + wrap-ansi: 8.1.0 + wrap-ansi-cjs: wrap-ansi@7.0.0 + + '@jridgewell/gen-mapping@0.3.13': + dependencies: + '@jridgewell/sourcemap-codec': 1.5.5 + '@jridgewell/trace-mapping': 0.3.31 + + '@jridgewell/remapping@2.3.5': + dependencies: + '@jridgewell/gen-mapping': 0.3.13 + '@jridgewell/trace-mapping': 0.3.31 + + '@jridgewell/resolve-uri@3.1.2': {} + + '@jridgewell/source-map@0.3.10': + dependencies: + '@jridgewell/gen-mapping': 0.3.13 + '@jridgewell/trace-mapping': 0.3.31 + + '@jridgewell/sourcemap-codec@1.5.5': {} + + '@jridgewell/trace-mapping@0.3.31': + dependencies: + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.5.5 + + '@nodelib/fs.scandir@2.1.5': + dependencies: + '@nodelib/fs.stat': 2.0.5 + run-parallel: 1.2.0 + + '@nodelib/fs.stat@2.0.5': {} + + '@nodelib/fs.walk@1.2.8': + dependencies: + '@nodelib/fs.scandir': 2.1.5 + fastq: 1.19.1 + + '@oslojs/encoding@1.1.0': {} + + '@pagefind/darwin-arm64@1.4.0': + optional: true + + '@pagefind/darwin-x64@1.4.0': + optional: true + + '@pagefind/freebsd-x64@1.4.0': + optional: true + + '@pagefind/linux-arm64@1.4.0': + optional: true + + '@pagefind/linux-x64@1.4.0': + optional: true + + '@pagefind/windows-x64@1.4.0': + optional: true + + '@parcel/watcher-android-arm64@2.5.1': + optional: true + + '@parcel/watcher-darwin-arm64@2.5.1': + optional: true + + '@parcel/watcher-darwin-x64@2.5.1': + optional: true + + '@parcel/watcher-freebsd-x64@2.5.1': + optional: true + + '@parcel/watcher-linux-arm-glibc@2.5.1': + optional: true + + '@parcel/watcher-linux-arm-musl@2.5.1': + optional: true + + '@parcel/watcher-linux-arm64-glibc@2.5.1': + optional: true + + '@parcel/watcher-linux-arm64-musl@2.5.1': + optional: true + + '@parcel/watcher-linux-x64-glibc@2.5.1': + optional: true + + '@parcel/watcher-linux-x64-musl@2.5.1': + optional: true + + '@parcel/watcher-win32-arm64@2.5.1': + optional: true + + '@parcel/watcher-win32-ia32@2.5.1': + optional: true + + '@parcel/watcher-win32-x64@2.5.1': + optional: true + + '@parcel/watcher@2.5.1': + dependencies: + detect-libc: 1.0.3 + is-glob: 4.0.3 + micromatch: 4.0.8 + node-addon-api: 7.1.1 + optionalDependencies: + '@parcel/watcher-android-arm64': 2.5.1 + '@parcel/watcher-darwin-arm64': 2.5.1 + '@parcel/watcher-darwin-x64': 2.5.1 + '@parcel/watcher-freebsd-x64': 2.5.1 + '@parcel/watcher-linux-arm-glibc': 2.5.1 + '@parcel/watcher-linux-arm-musl': 2.5.1 + '@parcel/watcher-linux-arm64-glibc': 2.5.1 + '@parcel/watcher-linux-arm64-musl': 2.5.1 + '@parcel/watcher-linux-x64-glibc': 2.5.1 + '@parcel/watcher-linux-x64-musl': 2.5.1 + '@parcel/watcher-win32-arm64': 2.5.1 + '@parcel/watcher-win32-ia32': 2.5.1 + '@parcel/watcher-win32-x64': 2.5.1 + optional: true + + '@pkgjs/parseargs@0.11.0': + optional: true + + '@rollup/plugin-alias@3.1.9(rollup@2.79.2)': + dependencies: + rollup: 2.79.2 + slash: 3.0.0 + + '@rollup/plugin-babel@5.3.1(@babel/core@7.28.0)(@types/babel__core@7.20.5)(rollup@2.79.2)': + dependencies: + '@babel/core': 7.28.0 + '@babel/helper-module-imports': 7.27.1 + '@rollup/pluginutils': 3.1.0(rollup@2.79.2) + rollup: 2.79.2 + optionalDependencies: + '@types/babel__core': 7.20.5 + transitivePeerDependencies: + - supports-color + + '@rollup/plugin-commonjs@17.1.0(rollup@2.79.2)': + dependencies: + '@rollup/pluginutils': 3.1.0(rollup@2.79.2) + commondir: 1.0.1 + estree-walker: 2.0.2 + glob: 7.2.3 + is-reference: 1.2.1 + magic-string: 0.25.9 + resolve: 1.22.11 + rollup: 2.79.2 + + '@rollup/plugin-json@4.1.0(rollup@2.79.2)': + dependencies: + '@rollup/pluginutils': 3.1.0(rollup@2.79.2) + rollup: 2.79.2 + + '@rollup/plugin-node-resolve@11.2.1(rollup@2.79.2)': + dependencies: + '@rollup/pluginutils': 3.1.0(rollup@2.79.2) + '@types/resolve': 1.17.1 + builtin-modules: 3.3.0 + deepmerge: 4.3.1 + is-module: 1.0.0 + resolve: 1.22.11 + rollup: 2.79.2 + + '@rollup/plugin-yaml@4.1.2(rollup@2.79.2)': + dependencies: + '@rollup/pluginutils': 5.1.4(rollup@2.79.2) + js-yaml: 4.1.0 + tosource: 2.0.0-alpha.3 + optionalDependencies: + rollup: 2.79.2 + + '@rollup/pluginutils@3.1.0(rollup@2.79.2)': + dependencies: + '@types/estree': 0.0.39 + estree-walker: 1.0.1 + picomatch: 2.3.1 + rollup: 2.79.2 + + '@rollup/pluginutils@4.2.1': + dependencies: + estree-walker: 2.0.2 + picomatch: 2.3.1 + + '@rollup/pluginutils@5.1.4(rollup@2.79.2)': + dependencies: + '@types/estree': 1.0.8 + estree-walker: 2.0.2 + picomatch: 4.0.3 + optionalDependencies: + rollup: 2.79.2 + + '@rollup/pluginutils@5.3.0(rollup@2.79.2)': + dependencies: + '@types/estree': 1.0.8 + estree-walker: 2.0.2 + picomatch: 4.0.3 + optionalDependencies: + rollup: 2.79.2 + + '@rollup/rollup-android-arm-eabi@4.52.2': + optional: true + + '@rollup/rollup-android-arm-eabi@4.53.3': + optional: true + + '@rollup/rollup-android-arm64@4.52.2': + optional: true + + '@rollup/rollup-android-arm64@4.53.3': + optional: true + + '@rollup/rollup-darwin-arm64@4.52.2': + optional: true + + '@rollup/rollup-darwin-arm64@4.53.3': + optional: true + + '@rollup/rollup-darwin-x64@4.52.2': + optional: true + + '@rollup/rollup-darwin-x64@4.53.3': + optional: true + + '@rollup/rollup-freebsd-arm64@4.52.2': + optional: true + + '@rollup/rollup-freebsd-arm64@4.53.3': + optional: true + + '@rollup/rollup-freebsd-x64@4.52.2': + optional: true + + '@rollup/rollup-freebsd-x64@4.53.3': + optional: true + + '@rollup/rollup-linux-arm-gnueabihf@4.52.2': + optional: true + + '@rollup/rollup-linux-arm-gnueabihf@4.53.3': + optional: true + + '@rollup/rollup-linux-arm-musleabihf@4.52.2': + optional: true + + '@rollup/rollup-linux-arm-musleabihf@4.53.3': + optional: true + + '@rollup/rollup-linux-arm64-gnu@4.52.2': + optional: true + + '@rollup/rollup-linux-arm64-gnu@4.53.3': + optional: true + + '@rollup/rollup-linux-arm64-musl@4.52.2': + optional: true + + '@rollup/rollup-linux-arm64-musl@4.53.3': + optional: true + + '@rollup/rollup-linux-loong64-gnu@4.52.2': + optional: true + + '@rollup/rollup-linux-loong64-gnu@4.53.3': + optional: true + + '@rollup/rollup-linux-ppc64-gnu@4.52.2': + optional: true + + '@rollup/rollup-linux-ppc64-gnu@4.53.3': + optional: true + + '@rollup/rollup-linux-riscv64-gnu@4.52.2': + optional: true + + '@rollup/rollup-linux-riscv64-gnu@4.53.3': + optional: true + + '@rollup/rollup-linux-riscv64-musl@4.52.2': + optional: true + + '@rollup/rollup-linux-riscv64-musl@4.53.3': + optional: true + + '@rollup/rollup-linux-s390x-gnu@4.52.2': + optional: true + + '@rollup/rollup-linux-s390x-gnu@4.53.3': + optional: true + + '@rollup/rollup-linux-x64-gnu@4.52.2': + optional: true + + '@rollup/rollup-linux-x64-gnu@4.53.3': + optional: true + + '@rollup/rollup-linux-x64-musl@4.52.2': + optional: true + + '@rollup/rollup-linux-x64-musl@4.53.3': + optional: true + + '@rollup/rollup-openharmony-arm64@4.52.2': + optional: true + + '@rollup/rollup-openharmony-arm64@4.53.3': + optional: true + + '@rollup/rollup-win32-arm64-msvc@4.52.2': + optional: true + + '@rollup/rollup-win32-arm64-msvc@4.53.3': + optional: true + + '@rollup/rollup-win32-ia32-msvc@4.52.2': + optional: true + + '@rollup/rollup-win32-ia32-msvc@4.53.3': + optional: true + + '@rollup/rollup-win32-x64-gnu@4.52.2': + optional: true + + '@rollup/rollup-win32-x64-gnu@4.53.3': + optional: true + + '@rollup/rollup-win32-x64-msvc@4.52.2': + optional: true + + '@rollup/rollup-win32-x64-msvc@4.53.3': + optional: true + + '@shikijs/core@3.13.0': + dependencies: + '@shikijs/types': 3.13.0 + '@shikijs/vscode-textmate': 10.0.2 + '@types/hast': 3.0.4 + hast-util-to-html: 9.0.5 + + '@shikijs/core@3.19.0': + dependencies: + '@shikijs/types': 3.19.0 + '@shikijs/vscode-textmate': 10.0.2 + '@types/hast': 3.0.4 + hast-util-to-html: 9.0.5 + + '@shikijs/engine-javascript@3.13.0': + dependencies: + '@shikijs/types': 3.13.0 + '@shikijs/vscode-textmate': 10.0.2 + oniguruma-to-es: 4.3.3 + + '@shikijs/engine-javascript@3.19.0': + dependencies: + '@shikijs/types': 3.19.0 + '@shikijs/vscode-textmate': 10.0.2 + oniguruma-to-es: 4.3.4 + + '@shikijs/engine-oniguruma@3.13.0': + dependencies: + '@shikijs/types': 3.13.0 + '@shikijs/vscode-textmate': 10.0.2 + + '@shikijs/engine-oniguruma@3.19.0': + dependencies: + '@shikijs/types': 3.19.0 + '@shikijs/vscode-textmate': 10.0.2 + + '@shikijs/langs@3.13.0': + dependencies: + '@shikijs/types': 3.13.0 + + '@shikijs/langs@3.19.0': + dependencies: + '@shikijs/types': 3.19.0 + + '@shikijs/themes@3.13.0': + dependencies: + '@shikijs/types': 3.13.0 + + '@shikijs/themes@3.19.0': + dependencies: + '@shikijs/types': 3.19.0 + + '@shikijs/types@3.13.0': + dependencies: + '@shikijs/vscode-textmate': 10.0.2 + '@types/hast': 3.0.4 + + '@shikijs/types@3.19.0': + dependencies: + '@shikijs/vscode-textmate': 10.0.2 + '@types/hast': 3.0.4 + + '@shikijs/vscode-textmate@10.0.2': {} + + '@surma/rollup-plugin-off-main-thread@2.2.3': + dependencies: + ejs: 3.1.10 + json5: 2.2.3 + magic-string: 0.25.9 + string.prototype.matchall: 4.0.12 + + '@sveltejs/acorn-typescript@1.0.6(acorn@8.15.0)': + dependencies: + acorn: 8.15.0 + + '@sveltejs/vite-plugin-svelte-inspector@4.0.1(@sveltejs/vite-plugin-svelte@5.1.1(svelte@5.39.8)(vite@6.4.1(@types/node@24.5.2)(jiti@1.21.7)(lightningcss@1.29.3)(sass@1.80.4)(stylus@0.64.0)(terser@5.43.1)(yaml@2.8.2)))(svelte@5.39.8)(vite@6.4.1(@types/node@24.5.2)(jiti@1.21.7)(lightningcss@1.29.3)(sass@1.80.4)(stylus@0.64.0)(terser@5.43.1)(yaml@2.8.2))': + dependencies: + '@sveltejs/vite-plugin-svelte': 5.1.1(svelte@5.39.8)(vite@6.3.6(@types/node@24.5.2)(jiti@1.21.7)(lightningcss@1.29.3)(sass@1.80.4)(stylus@0.64.0)(terser@5.43.1)(yaml@2.8.2)) + debug: 4.4.3 + svelte: 5.39.8 + vite: 6.4.1(@types/node@24.5.2)(jiti@1.21.7)(lightningcss@1.29.3)(sass@1.80.4)(stylus@0.64.0)(terser@5.43.1)(yaml@2.8.2) + transitivePeerDependencies: + - supports-color + + '@sveltejs/vite-plugin-svelte@5.1.1(svelte@5.39.8)(vite@6.3.6(@types/node@24.5.2)(jiti@1.21.7)(lightningcss@1.29.3)(sass@1.80.4)(stylus@0.64.0)(terser@5.43.1)(yaml@2.8.2))': + dependencies: + '@sveltejs/vite-plugin-svelte-inspector': 4.0.1(@sveltejs/vite-plugin-svelte@5.1.1(svelte@5.39.8)(vite@6.4.1(@types/node@24.5.2)(jiti@1.21.7)(lightningcss@1.29.3)(sass@1.80.4)(stylus@0.64.0)(terser@5.43.1)(yaml@2.8.2)))(svelte@5.39.8)(vite@6.4.1(@types/node@24.5.2)(jiti@1.21.7)(lightningcss@1.29.3)(sass@1.80.4)(stylus@0.64.0)(terser@5.43.1)(yaml@2.8.2)) + debug: 4.4.3 + deepmerge: 4.3.1 + kleur: 4.1.5 + magic-string: 0.30.21 + svelte: 5.39.8 + vite: 6.3.6(@types/node@24.5.2)(jiti@1.21.7)(lightningcss@1.29.3)(sass@1.80.4)(stylus@0.64.0)(terser@5.43.1)(yaml@2.8.2) + vitefu: 1.1.1(vite@6.4.1(@types/node@24.5.2)(jiti@1.21.7)(lightningcss@1.29.3)(sass@1.80.4)(stylus@0.64.0)(terser@5.43.1)(yaml@2.8.2)) + transitivePeerDependencies: + - supports-color + + '@swc/helpers@0.5.17': + dependencies: + tslib: 2.8.1 + + '@swup/a11y-plugin@5.0.0(swup@4.8.2)': + dependencies: + '@swup/plugin': 4.0.0 + focus-options-polyfill: 1.6.0 + swup: 4.8.2 + + '@swup/astro@1.7.0(@types/babel__core@7.20.5)': + dependencies: + '@swup/a11y-plugin': 5.0.0(swup@4.8.2) + '@swup/body-class-plugin': 3.3.0(swup@4.8.2) + '@swup/debug-plugin': 4.1.0(swup@4.8.2) + '@swup/fade-theme': 2.0.1(swup@4.8.2) + '@swup/forms-plugin': 3.6.0(swup@4.8.2) + '@swup/fragment-plugin': 1.1.2(swup@4.8.2) + '@swup/head-plugin': 2.3.1(swup@4.8.2) + '@swup/overlay-theme': 2.0.1(swup@4.8.2) + '@swup/parallel-plugin': 0.4.0(@types/babel__core@7.20.5)(swup@4.8.2) + '@swup/preload-plugin': 3.2.11(swup@4.8.2) + '@swup/progress-plugin': 3.2.0(swup@4.8.2) + '@swup/route-name-plugin': 4.1.0(@types/babel__core@7.20.5)(swup@4.8.2) + '@swup/scripts-plugin': 2.1.0(swup@4.8.2) + '@swup/scroll-plugin': 3.3.2(swup@4.8.2) + '@swup/slide-theme': 2.0.1(swup@4.8.2) + swup: 4.8.2 + swup-morph-plugin: 1.3.0(swup@4.8.2) + transitivePeerDependencies: + - '@types/babel__core' + - rolldown + - supports-color + - ts-node + + '@swup/body-class-plugin@3.3.0(swup@4.8.2)': + dependencies: + '@swup/plugin': 4.0.0 + swup: 4.8.2 + + '@swup/browserslist-config@1.0.1': {} + + '@swup/debug-plugin@4.1.0(swup@4.8.2)': + dependencies: + '@swup/plugin': 4.0.0 + swup: 4.8.2 + + '@swup/fade-theme@2.0.1(swup@4.8.2)': + dependencies: + '@swup/theme': 2.1.0(swup@4.8.2) + swup: 4.8.2 + + '@swup/forms-plugin@3.6.0(swup@4.8.2)': + dependencies: + '@swup/plugin': 4.0.0 + swup: 4.8.2 + + '@swup/fragment-plugin@1.1.2(swup@4.8.2)': + dependencies: + '@swup/plugin': 4.0.0 + swup: 4.8.2 + + '@swup/head-plugin@2.3.1(swup@4.8.2)': + dependencies: + '@swup/plugin': 4.0.0 + swup: 4.8.2 + + '@swup/overlay-theme@2.0.1(swup@4.8.2)': + dependencies: + '@swup/theme': 2.1.0(swup@4.8.2) + swup: 4.8.2 + + '@swup/parallel-plugin@0.4.0(@types/babel__core@7.20.5)(swup@4.8.2)': + dependencies: + '@swup/plugin': 3.0.1(@types/babel__core@7.20.5) + swup: 4.8.2 + transitivePeerDependencies: + - '@types/babel__core' + - rolldown + - supports-color + - ts-node + + '@swup/plugin@3.0.1(@types/babel__core@7.20.5)': + dependencies: + '@swup/browserslist-config': 1.0.1 + '@swup/prettier-config': 1.1.0 + chalk: 5.6.2 + microbundle: 0.15.1(@types/babel__core@7.20.5) + prettier: 2.8.8 + shelljs: 0.8.5 + shelljs-live: 0.0.5(shelljs@0.8.5) + swup: 4.8.2 + transitivePeerDependencies: + - '@types/babel__core' + - rolldown + - supports-color + - ts-node + + '@swup/plugin@4.0.0': + dependencies: + swup: 4.8.2 + + '@swup/preload-plugin@3.2.11(swup@4.8.2)': + dependencies: + '@swup/plugin': 4.0.0 + swup: 4.8.2 + + '@swup/prettier-config@1.1.0': {} + + '@swup/progress-plugin@3.2.0(swup@4.8.2)': + dependencies: + '@swup/plugin': 4.0.0 + swup: 4.8.2 + + '@swup/route-name-plugin@4.1.0(@types/babel__core@7.20.5)(swup@4.8.2)': + dependencies: + '@swup/plugin': 3.0.1(@types/babel__core@7.20.5) + swup: 4.8.2 + transitivePeerDependencies: + - '@types/babel__core' + - rolldown + - supports-color + - ts-node + + '@swup/scripts-plugin@2.1.0(swup@4.8.2)': + dependencies: + '@swup/plugin': 4.0.0 + swup: 4.8.2 + + '@swup/scroll-plugin@3.3.2(swup@4.8.2)': + dependencies: + '@swup/plugin': 4.0.0 + scrl: 2.0.0 + swup: 4.8.2 + + '@swup/slide-theme@2.0.1(swup@4.8.2)': + dependencies: + '@swup/theme': 2.1.0(swup@4.8.2) + swup: 4.8.2 + + '@swup/theme@2.1.0(swup@4.8.2)': + dependencies: + '@swup/plugin': 4.0.0 + swup: 4.8.2 + + '@tailwindcss/typography@0.5.19(tailwindcss@3.4.19(yaml@2.8.2))': + dependencies: + postcss-selector-parser: 6.0.10 + tailwindcss: 3.4.19(yaml@2.8.2) + + '@trysound/sax@0.2.0': {} + + '@types/babel__core@7.20.5': + dependencies: + '@babel/parser': 7.28.5 + '@babel/types': 7.28.5 + '@types/babel__generator': 7.27.0 + '@types/babel__template': 7.4.4 + '@types/babel__traverse': 7.28.0 + optional: true + + '@types/babel__generator@7.27.0': + dependencies: + '@babel/types': 7.28.5 + optional: true + + '@types/babel__template@7.4.4': + dependencies: + '@babel/parser': 7.28.5 + '@babel/types': 7.28.5 + optional: true + + '@types/babel__traverse@7.28.0': + dependencies: + '@babel/types': 7.28.5 + optional: true + + '@types/debug@4.1.12': + dependencies: + '@types/ms': 2.1.0 + + '@types/estree@0.0.39': {} + + '@types/estree@1.0.8': {} + + '@types/fontkit@2.0.8': + dependencies: + '@types/node': 24.5.2 + + '@types/hast@2.3.10': + dependencies: + '@types/unist': 2.0.11 + + '@types/hast@3.0.4': + dependencies: + '@types/unist': 3.0.3 + + '@types/katex@0.16.7': {} + + '@types/linkify-it@5.0.0': {} + + '@types/markdown-it@14.1.2': + dependencies: + '@types/linkify-it': 5.0.0 + '@types/mdurl': 2.0.0 + + '@types/mdast@4.0.4': + dependencies: + '@types/unist': 3.0.3 + + '@types/mdurl@2.0.0': {} + + '@types/ms@2.1.0': {} + + '@types/nlcst@2.0.3': + dependencies: + '@types/unist': 3.0.3 + + '@types/node@17.0.45': {} + + '@types/node@24.5.1': + dependencies: + undici-types: 7.12.0 + + '@types/node@24.5.2': + dependencies: + undici-types: 7.12.0 + + '@types/parse-json@4.0.2': {} + + '@types/resolve@1.17.1': + dependencies: + '@types/node': 24.5.2 + + '@types/sanitize-html@2.16.0': + dependencies: + htmlparser2: 8.0.2 + + '@types/sax@1.2.7': + dependencies: + '@types/node': 17.0.45 + + '@types/tar@6.1.13': + dependencies: + '@types/node': 24.5.1 + minipass: 4.2.8 + + '@types/unist@2.0.11': {} + + '@types/unist@3.0.3': {} + + '@types/yauzl@2.10.3': + dependencies: + '@types/node': 24.5.2 + optional: true + + '@ungap/structured-clone@1.3.0': {} + + '@volar/kit@2.4.27(typescript@5.9.3)': + dependencies: + '@volar/language-service': 2.4.27 + '@volar/typescript': 2.4.27 + typesafe-path: 0.2.2 + typescript: 5.9.3 + vscode-languageserver-textdocument: 1.0.12 + vscode-uri: 3.1.0 + + '@volar/language-core@2.4.27': + dependencies: + '@volar/source-map': 2.4.27 + + '@volar/language-server@2.4.27': + dependencies: + '@volar/language-core': 2.4.27 + '@volar/language-service': 2.4.27 + '@volar/typescript': 2.4.27 + path-browserify: 1.0.1 + request-light: 0.7.0 + vscode-languageserver: 9.0.1 + vscode-languageserver-protocol: 3.17.5 + vscode-languageserver-textdocument: 1.0.12 + vscode-uri: 3.1.0 + + '@volar/language-service@2.4.27': + dependencies: + '@volar/language-core': 2.4.27 + vscode-languageserver-protocol: 3.17.5 + vscode-languageserver-textdocument: 1.0.12 + vscode-uri: 3.1.0 + + '@volar/source-map@2.4.27': {} + + '@volar/typescript@2.4.27': + dependencies: + '@volar/language-core': 2.4.27 + path-browserify: 1.0.1 + vscode-uri: 3.1.0 + + '@vscode/emmet-helper@2.11.0': + dependencies: + emmet: 2.4.11 + jsonc-parser: 2.3.1 + vscode-languageserver-textdocument: 1.0.12 + vscode-languageserver-types: 3.17.5 + vscode-uri: 3.1.0 + + '@vscode/l10n@0.0.18': {} + + acorn@8.15.0: {} + + ajv-draft-04@1.0.0(ajv@8.17.1): + optionalDependencies: + ajv: 8.17.1 + + ajv@8.17.1: + dependencies: + fast-deep-equal: 3.1.3 + fast-uri: 3.1.0 + json-schema-traverse: 1.0.0 + require-from-string: 2.0.2 + + ansi-align@3.0.1: + dependencies: + string-width: 4.2.3 + + ansi-regex@2.1.1: {} + + ansi-regex@5.0.1: {} + + ansi-regex@6.2.2: {} + + ansi-styles@2.2.1: {} + + ansi-styles@4.3.0: + dependencies: + color-convert: 2.0.1 + + ansi-styles@6.2.3: {} + + any-promise@1.3.0: {} + + anymatch@3.1.3: + dependencies: + normalize-path: 3.0.0 + picomatch: 2.3.1 + + arg@5.0.2: {} + + argparse@2.0.1: {} + + aria-query@5.3.2: {} + + array-buffer-byte-length@1.0.2: + dependencies: + call-bound: 1.0.4 + is-array-buffer: 3.0.5 + + array-iterate@2.0.1: {} + + arraybuffer.prototype.slice@1.0.4: + dependencies: + array-buffer-byte-length: 1.0.2 + call-bind: 1.0.8 + define-properties: 1.2.1 + es-abstract: 1.24.0 + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + is-array-buffer: 3.0.5 + + astro-expressive-code@0.41.4(astro@5.13.10(@types/node@24.5.2)(jiti@1.21.7)(lightningcss@1.29.3)(rollup@2.79.2)(sass@1.80.4)(stylus@0.64.0)(terser@5.43.1)(typescript@5.9.3)(yaml@2.8.2)): + dependencies: + astro: 5.13.10(@types/node@24.5.2)(jiti@1.21.7)(lightningcss@1.29.3)(rollup@2.79.2)(sass@1.80.4)(stylus@0.64.0)(terser@5.43.1)(typescript@5.9.3)(yaml@2.8.2) + rehype-expressive-code: 0.41.4 + + astro-icon@1.1.5: + dependencies: + '@iconify/tools': 4.1.2 + '@iconify/types': 2.0.0 + '@iconify/utils': 2.3.0 + transitivePeerDependencies: + - debug + - supports-color + + astro@5.13.10(@types/node@24.5.2)(jiti@1.21.7)(lightningcss@1.29.3)(rollup@2.79.2)(sass@1.80.4)(stylus@0.64.0)(terser@5.43.1)(typescript@5.9.3)(yaml@2.8.2): + dependencies: + '@astrojs/compiler': 2.13.0 + '@astrojs/internal-helpers': 0.7.3 + '@astrojs/markdown-remark': 6.3.7 + '@astrojs/telemetry': 3.3.0 + '@capsizecss/unpack': 2.4.0 + '@oslojs/encoding': 1.1.0 + '@rollup/pluginutils': 5.3.0(rollup@2.79.2) + acorn: 8.15.0 + aria-query: 5.3.2 + axobject-query: 4.1.0 + boxen: 8.0.1 + ci-info: 4.3.0 + clsx: 2.1.1 + common-ancestor-path: 1.0.1 + cookie: 1.0.2 + cssesc: 3.0.0 + debug: 4.4.3 + deterministic-object-hash: 2.0.2 + devalue: 5.3.2 + diff: 5.2.0 + dlv: 1.1.3 + dset: 3.1.4 + es-module-lexer: 1.7.0 + esbuild: 0.25.10 + estree-walker: 3.0.3 + flattie: 1.1.1 + fontace: 0.3.0 + github-slugger: 2.0.0 + html-escaper: 3.0.3 + http-cache-semantics: 4.2.0 + import-meta-resolve: 4.2.0 + js-yaml: 4.1.0 + kleur: 4.1.5 + magic-string: 0.30.19 + magicast: 0.3.5 + mrmime: 2.0.1 + neotraverse: 0.6.18 + p-limit: 6.2.0 + p-queue: 8.1.1 + package-manager-detector: 1.3.0 + picomatch: 4.0.3 + prompts: 2.4.2 + rehype: 13.0.2 + semver: 7.7.2 + shiki: 3.13.0 + smol-toml: 1.4.2 + tinyexec: 0.3.2 + tinyglobby: 0.2.15 + tsconfck: 3.1.6(typescript@5.9.3) + ultrahtml: 1.6.0 + unifont: 0.5.2 + unist-util-visit: 5.0.0 + unstorage: 1.17.1 + vfile: 6.0.3 + vite: 6.3.6(@types/node@24.5.2)(jiti@1.21.7)(lightningcss@1.29.3)(sass@1.80.4)(stylus@0.64.0)(terser@5.43.1)(yaml@2.8.2) + vitefu: 1.1.1(vite@6.3.6(@types/node@24.5.2)(jiti@1.21.7)(lightningcss@1.29.3)(sass@1.80.4)(stylus@0.64.0)(terser@5.43.1)(yaml@2.8.2)) + xxhash-wasm: 1.1.0 + yargs-parser: 21.1.1 + yocto-spinner: 0.2.3 + zod: 3.25.76 + zod-to-json-schema: 3.24.6(zod@3.25.76) + zod-to-ts: 1.2.0(typescript@5.9.3)(zod@3.25.76) + optionalDependencies: + sharp: 0.34.5 + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@deno/kv' + - '@netlify/blobs' + - '@planetscale/database' + - '@types/node' + - '@upstash/redis' + - '@vercel/blob' + - '@vercel/functions' + - '@vercel/kv' + - aws4fetch + - db0 + - encoding + - idb-keyval + - ioredis + - jiti + - less + - lightningcss + - rollup + - sass + - sass-embedded + - stylus + - sugarss + - supports-color + - terser + - tsx + - typescript + - uploadthing + - yaml + + async-function@1.0.0: {} + + async@3.2.6: {} + + asynckit@0.4.0: {} + + asyncro@3.0.0: {} + + autoprefixer@10.4.21(postcss@8.5.3): + dependencies: + browserslist: 4.24.4 + caniuse-lite: 1.0.30001707 + fraction.js: 4.3.7 + normalize-range: 0.1.2 + picocolors: 1.1.1 + postcss: 8.5.3 + postcss-value-parser: 4.2.0 + + autoprefixer@10.4.21(postcss@8.5.6): + dependencies: + browserslist: 4.24.4 + caniuse-lite: 1.0.30001707 + fraction.js: 4.3.7 + normalize-range: 0.1.2 + picocolors: 1.1.1 + postcss: 8.5.6 + postcss-value-parser: 4.2.0 + + available-typed-arrays@1.0.7: + dependencies: + possible-typed-array-names: 1.1.0 + + axios@1.8.4: + dependencies: + follow-redirects: 1.15.9 + form-data: 4.0.2 + proxy-from-env: 1.1.0 + transitivePeerDependencies: + - debug + + axobject-query@4.1.0: {} + + babel-plugin-macros@3.1.0: + dependencies: + '@babel/runtime': 7.27.6 + cosmiconfig: 7.1.0 + resolve: 1.22.11 + + babel-plugin-polyfill-corejs2@0.4.14(@babel/core@7.28.0): + dependencies: + '@babel/compat-data': 7.28.0 + '@babel/core': 7.28.0 + '@babel/helper-define-polyfill-provider': 0.6.5(@babel/core@7.28.0) + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + babel-plugin-polyfill-corejs3@0.13.0(@babel/core@7.28.0): + dependencies: + '@babel/core': 7.28.0 + '@babel/helper-define-polyfill-provider': 0.6.5(@babel/core@7.28.0) + core-js-compat: 3.44.0 + transitivePeerDependencies: + - supports-color + + babel-plugin-polyfill-regenerator@0.6.5(@babel/core@7.28.0): + dependencies: + '@babel/core': 7.28.0 + '@babel/helper-define-polyfill-provider': 0.6.5(@babel/core@7.28.0) + transitivePeerDependencies: + - supports-color + + babel-plugin-transform-async-to-promises@0.8.18: {} + + babel-plugin-transform-replace-expressions@0.2.0(@babel/core@7.28.0): + dependencies: + '@babel/core': 7.28.0 + '@babel/parser': 7.28.4 + + bail@2.0.2: {} + + balanced-match@1.0.2: {} + + base-64@1.0.0: {} + + base64-js@1.5.1: {} + + bcp-47-match@2.0.3: {} + + binary-extensions@2.3.0: {} + + blob-to-buffer@1.2.9: {} + + boolbase@1.0.0: {} + + boxen@8.0.1: + dependencies: + ansi-align: 3.0.1 + camelcase: 8.0.0 + chalk: 5.6.2 + cli-boxes: 3.0.0 + string-width: 7.2.0 + type-fest: 4.41.0 + widest-line: 5.0.0 + wrap-ansi: 9.0.2 + + brace-expansion@1.1.12: + dependencies: + balanced-match: 1.0.2 + concat-map: 0.0.1 + + brace-expansion@2.0.1: + dependencies: + balanced-match: 1.0.2 + + brace-expansion@2.0.2: + dependencies: + balanced-match: 1.0.2 + + braces@3.0.3: + dependencies: + fill-range: 7.1.1 + + brotli-size@4.0.0: + dependencies: + duplexer: 0.1.1 + + brotli@1.3.3: + dependencies: + base64-js: 1.5.1 + + browserslist@4.24.4: + dependencies: + caniuse-lite: 1.0.30001707 + electron-to-chromium: 1.5.126 + node-releases: 2.0.19 + update-browserslist-db: 1.1.3(browserslist@4.24.4) + + browserslist@4.25.1: + dependencies: + caniuse-lite: 1.0.30001727 + electron-to-chromium: 1.5.190 + node-releases: 2.0.19 + update-browserslist-db: 1.1.3(browserslist@4.25.1) + + buffer-crc32@0.2.13: {} + + buffer-from@1.1.2: {} + + builtin-modules@3.3.0: {} + + call-bind-apply-helpers@1.0.2: + dependencies: + es-errors: 1.3.0 + function-bind: 1.1.2 + + call-bind@1.0.8: + dependencies: + call-bind-apply-helpers: 1.0.2 + es-define-property: 1.0.1 + get-intrinsic: 1.3.0 + set-function-length: 1.2.2 + + call-bound@1.0.4: + dependencies: + call-bind-apply-helpers: 1.0.2 + get-intrinsic: 1.3.0 + + callsites@3.1.0: {} + + camelcase-css@2.0.1: {} + + camelcase@6.3.0: {} + + camelcase@8.0.0: {} + + caniuse-api@3.0.0: + dependencies: + browserslist: 4.25.1 + caniuse-lite: 1.0.30001727 + lodash.memoize: 4.1.2 + lodash.uniq: 4.5.0 + + caniuse-lite@1.0.30001707: {} + + caniuse-lite@1.0.30001727: {} + + ccount@2.0.1: {} + + chalk@1.1.3: + dependencies: + ansi-styles: 2.2.1 + escape-string-regexp: 1.0.5 + has-ansi: 2.0.0 + strip-ansi: 3.0.1 + supports-color: 2.0.0 + + chalk@4.1.2: + dependencies: + ansi-styles: 4.3.0 + supports-color: 7.2.0 + + chalk@5.6.2: {} + + character-entities-html4@2.1.0: {} + + character-entities-legacy@3.0.0: {} + + character-entities@2.0.2: {} + + character-reference-invalid@2.0.1: {} + + cheerio-select@2.1.0: + dependencies: + boolbase: 1.0.0 + css-select: 5.1.0 + css-what: 6.1.0 + domelementtype: 2.3.0 + domhandler: 5.0.3 + domutils: 3.2.2 + + cheerio@1.0.0: + dependencies: + cheerio-select: 2.1.0 + dom-serializer: 2.0.0 + domhandler: 5.0.3 + domutils: 3.2.2 + encoding-sniffer: 0.2.0 + htmlparser2: 9.1.0 + parse5: 7.2.1 + parse5-htmlparser2-tree-adapter: 7.1.0 + parse5-parser-stream: 7.1.2 + undici: 6.21.2 + whatwg-mimetype: 4.0.0 + + chokidar@3.6.0: + dependencies: + anymatch: 3.1.3 + braces: 3.0.3 + glob-parent: 5.1.2 + is-binary-path: 2.1.0 + is-glob: 4.0.3 + normalize-path: 3.0.0 + readdirp: 3.6.0 + optionalDependencies: + fsevents: 2.3.3 + + chokidar@4.0.3: + dependencies: + readdirp: 4.1.2 + + chownr@2.0.0: {} + + ci-info@4.3.0: {} + + cli-boxes@3.0.0: {} + + cliui@8.0.1: + dependencies: + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 7.0.0 + + clone@2.1.2: {} + + clsx@2.1.1: {} + + color-convert@2.0.1: + dependencies: + color-name: 1.1.4 + + color-name@1.1.4: {} + + colord@2.9.3: {} + + combined-stream@1.0.8: + dependencies: + delayed-stream: 1.0.0 + + comma-separated-tokens@2.0.3: {} + + commander@2.20.3: {} + + commander@4.1.1: {} + + commander@7.2.0: {} + + commander@8.3.0: {} + + common-ancestor-path@1.0.1: {} + + commondir@1.0.1: {} + + concat-map@0.0.1: {} + + concat-with-sourcemaps@1.1.0: + dependencies: + source-map: 0.6.1 + + confbox@0.1.8: {} + + confbox@0.2.1: {} + + convert-source-map@2.0.0: {} + + cookie-es@1.2.2: {} + + cookie@1.0.2: {} + + core-js-compat@3.44.0: + dependencies: + browserslist: 4.25.1 + + cosmiconfig@7.1.0: + dependencies: + '@types/parse-json': 4.0.2 + import-fresh: 3.3.1 + parse-json: 5.2.0 + path-type: 4.0.0 + yaml: 1.10.2 + + cross-fetch@3.2.0: + dependencies: + node-fetch: 2.7.0 + transitivePeerDependencies: + - encoding + + cross-spawn@7.0.6: + dependencies: + path-key: 3.1.1 + shebang-command: 2.0.0 + which: 2.0.2 + + crossws@0.3.5: + dependencies: + uncrypto: 0.1.3 + + css-declaration-sorter@6.4.1(postcss@8.5.6): + dependencies: + postcss: 8.5.6 + + css-select@4.3.0: + dependencies: + boolbase: 1.0.0 + css-what: 6.2.2 + domhandler: 4.3.1 + domutils: 2.8.0 + nth-check: 2.1.1 + + css-select@5.1.0: + dependencies: + boolbase: 1.0.0 + css-what: 6.1.0 + domhandler: 5.0.3 + domutils: 3.2.2 + nth-check: 2.1.1 + + css-selector-parser@3.2.0: {} + + css-tree@1.1.3: + dependencies: + mdn-data: 2.0.14 + source-map: 0.6.1 + + css-tree@2.2.1: + dependencies: + mdn-data: 2.0.28 + source-map-js: 1.2.1 + + css-tree@2.3.1: + dependencies: + mdn-data: 2.0.30 + source-map-js: 1.2.1 + + css-tree@3.1.0: + dependencies: + mdn-data: 2.12.2 + source-map-js: 1.2.1 + + css-what@6.1.0: {} + + css-what@6.2.2: {} + + cssesc@3.0.0: {} + + cssnano-preset-default@5.2.14(postcss@8.5.6): + dependencies: + css-declaration-sorter: 6.4.1(postcss@8.5.6) + cssnano-utils: 3.1.0(postcss@8.5.6) + postcss: 8.5.6 + postcss-calc: 8.2.4(postcss@8.5.6) + postcss-colormin: 5.3.1(postcss@8.5.6) + postcss-convert-values: 5.1.3(postcss@8.5.6) + postcss-discard-comments: 5.1.2(postcss@8.5.6) + postcss-discard-duplicates: 5.1.0(postcss@8.5.6) + postcss-discard-empty: 5.1.1(postcss@8.5.6) + postcss-discard-overridden: 5.1.0(postcss@8.5.6) + postcss-merge-longhand: 5.1.7(postcss@8.5.6) + postcss-merge-rules: 5.1.4(postcss@8.5.6) + postcss-minify-font-values: 5.1.0(postcss@8.5.6) + postcss-minify-gradients: 5.1.1(postcss@8.5.6) + postcss-minify-params: 5.1.4(postcss@8.5.6) + postcss-minify-selectors: 5.2.1(postcss@8.5.6) + postcss-normalize-charset: 5.1.0(postcss@8.5.6) + postcss-normalize-display-values: 5.1.0(postcss@8.5.6) + postcss-normalize-positions: 5.1.1(postcss@8.5.6) + postcss-normalize-repeat-style: 5.1.1(postcss@8.5.6) + postcss-normalize-string: 5.1.0(postcss@8.5.6) + postcss-normalize-timing-functions: 5.1.0(postcss@8.5.6) + postcss-normalize-unicode: 5.1.1(postcss@8.5.6) + postcss-normalize-url: 5.1.0(postcss@8.5.6) + postcss-normalize-whitespace: 5.1.1(postcss@8.5.6) + postcss-ordered-values: 5.1.3(postcss@8.5.6) + postcss-reduce-initial: 5.1.2(postcss@8.5.6) + postcss-reduce-transforms: 5.1.0(postcss@8.5.6) + postcss-svgo: 5.1.0(postcss@8.5.6) + postcss-unique-selectors: 5.1.1(postcss@8.5.6) + + cssnano-utils@3.1.0(postcss@8.5.6): + dependencies: + postcss: 8.5.6 + + cssnano@5.1.15(postcss@8.5.6): + dependencies: + cssnano-preset-default: 5.2.14(postcss@8.5.6) + lilconfig: 2.1.0 + postcss: 8.5.6 + yaml: 1.10.2 + + csso@4.2.0: + dependencies: + css-tree: 1.1.3 + + csso@5.0.5: + dependencies: + css-tree: 2.2.1 + + data-view-buffer@1.0.2: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + is-data-view: 1.0.2 + + data-view-byte-length@1.0.2: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + is-data-view: 1.0.2 + + data-view-byte-offset@1.0.1: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + is-data-view: 1.0.2 + + debug@4.4.0: + dependencies: + ms: 2.1.3 + + debug@4.4.3: + dependencies: + ms: 2.1.3 + + decode-named-character-reference@1.1.0: + dependencies: + character-entities: 2.0.2 + + dedent-js@1.0.1: {} + + deepmerge@4.3.1: {} + + define-data-property@1.1.4: + dependencies: + es-define-property: 1.0.1 + es-errors: 1.3.0 + gopd: 1.2.0 + + define-lazy-prop@2.0.0: {} + + define-properties@1.2.1: + dependencies: + define-data-property: 1.1.4 + has-property-descriptors: 1.0.2 + object-keys: 1.1.1 + + defu@6.1.4: {} + + delayed-stream@1.0.0: {} + + delegate-it@6.2.1: + dependencies: + typed-query-selector: 2.12.0 + + dequal@2.0.3: {} + + destr@2.0.5: {} + + detect-libc@1.0.3: + optional: true + + detect-libc@2.1.2: {} + + deterministic-object-hash@2.0.2: + dependencies: + base-64: 1.0.0 + + devalue@5.3.2: {} + + devlop@1.1.0: + dependencies: + dequal: 2.0.3 + + dfa@1.2.0: {} + + didyoumean@1.2.2: {} + + diff@5.2.0: {} + + direction@2.0.1: {} + + dlv@1.1.3: {} + + dom-serializer@1.4.1: + dependencies: + domelementtype: 2.3.0 + domhandler: 4.3.1 + entities: 2.2.0 + + dom-serializer@2.0.0: + dependencies: + domelementtype: 2.3.0 + domhandler: 5.0.3 + entities: 4.5.0 + + domelementtype@2.3.0: {} + + domhandler@4.3.1: + dependencies: + domelementtype: 2.3.0 + + domhandler@5.0.3: + dependencies: + domelementtype: 2.3.0 + + domutils@2.8.0: + dependencies: + dom-serializer: 1.4.1 + domelementtype: 2.3.0 + domhandler: 4.3.1 + + domutils@3.2.2: + dependencies: + dom-serializer: 2.0.0 + domelementtype: 2.3.0 + domhandler: 5.0.3 + + dset@3.1.4: {} + + dunder-proto@1.0.1: + dependencies: + call-bind-apply-helpers: 1.0.2 + es-errors: 1.3.0 + gopd: 1.2.0 + + duplexer@0.1.1: {} + + duplexer@0.1.2: {} + + eastasianwidth@0.2.0: {} + + ejs@3.1.10: + dependencies: + jake: 10.9.2 + + electron-to-chromium@1.5.126: {} + + electron-to-chromium@1.5.190: {} + + emmet@2.4.11: + dependencies: + '@emmetio/abbreviation': 2.3.3 + '@emmetio/css-abbreviation': 2.1.8 + + emoji-regex@10.5.0: {} + + emoji-regex@8.0.0: {} + + emoji-regex@9.2.2: {} + + encoding-sniffer@0.2.0: + dependencies: + iconv-lite: 0.6.3 + whatwg-encoding: 3.1.1 + + end-of-stream@1.4.4: + dependencies: + once: 1.4.0 + + entities@2.2.0: {} + + entities@4.5.0: {} + + entities@6.0.1: {} + + error-ex@1.3.2: + dependencies: + is-arrayish: 0.2.1 + + es-abstract@1.24.0: + dependencies: + array-buffer-byte-length: 1.0.2 + arraybuffer.prototype.slice: 1.0.4 + available-typed-arrays: 1.0.7 + call-bind: 1.0.8 + call-bound: 1.0.4 + data-view-buffer: 1.0.2 + data-view-byte-length: 1.0.2 + data-view-byte-offset: 1.0.1 + es-define-property: 1.0.1 + es-errors: 1.3.0 + es-object-atoms: 1.1.1 + es-set-tostringtag: 2.1.0 + es-to-primitive: 1.3.0 + function.prototype.name: 1.1.8 + get-intrinsic: 1.3.0 + get-proto: 1.0.1 + get-symbol-description: 1.1.0 + globalthis: 1.0.4 + gopd: 1.2.0 + has-property-descriptors: 1.0.2 + has-proto: 1.2.0 + has-symbols: 1.1.0 + hasown: 2.0.2 + internal-slot: 1.1.0 + is-array-buffer: 3.0.5 + is-callable: 1.2.7 + is-data-view: 1.0.2 + is-negative-zero: 2.0.3 + is-regex: 1.2.1 + is-set: 2.0.3 + is-shared-array-buffer: 1.0.4 + is-string: 1.1.1 + is-typed-array: 1.1.15 + is-weakref: 1.1.1 + math-intrinsics: 1.1.0 + object-inspect: 1.13.4 + object-keys: 1.1.1 + object.assign: 4.1.7 + own-keys: 1.0.1 + regexp.prototype.flags: 1.5.4 + safe-array-concat: 1.1.3 + safe-push-apply: 1.0.0 + safe-regex-test: 1.1.0 + set-proto: 1.0.0 + stop-iteration-iterator: 1.1.0 + string.prototype.trim: 1.2.10 + string.prototype.trimend: 1.0.9 + string.prototype.trimstart: 1.0.8 + typed-array-buffer: 1.0.3 + typed-array-byte-length: 1.0.3 + typed-array-byte-offset: 1.0.4 + typed-array-length: 1.0.7 + unbox-primitive: 1.1.0 + which-typed-array: 1.1.19 + + es-define-property@1.0.1: {} + + es-errors@1.3.0: {} + + es-module-lexer@1.7.0: {} + + es-object-atoms@1.1.1: + dependencies: + es-errors: 1.3.0 + + es-set-tostringtag@2.1.0: + dependencies: + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + has-tostringtag: 1.0.2 + hasown: 2.0.2 + + es-to-primitive@1.3.0: + dependencies: + is-callable: 1.2.7 + is-date-object: 1.1.0 + is-symbol: 1.1.1 + + esbuild@0.25.10: + optionalDependencies: + '@esbuild/aix-ppc64': 0.25.10 + '@esbuild/android-arm': 0.25.10 + '@esbuild/android-arm64': 0.25.10 + '@esbuild/android-x64': 0.25.10 + '@esbuild/darwin-arm64': 0.25.10 + '@esbuild/darwin-x64': 0.25.10 + '@esbuild/freebsd-arm64': 0.25.10 + '@esbuild/freebsd-x64': 0.25.10 + '@esbuild/linux-arm': 0.25.10 + '@esbuild/linux-arm64': 0.25.10 + '@esbuild/linux-ia32': 0.25.10 + '@esbuild/linux-loong64': 0.25.10 + '@esbuild/linux-mips64el': 0.25.10 + '@esbuild/linux-ppc64': 0.25.10 + '@esbuild/linux-riscv64': 0.25.10 + '@esbuild/linux-s390x': 0.25.10 + '@esbuild/linux-x64': 0.25.10 + '@esbuild/netbsd-arm64': 0.25.10 + '@esbuild/netbsd-x64': 0.25.10 + '@esbuild/openbsd-arm64': 0.25.10 + '@esbuild/openbsd-x64': 0.25.10 + '@esbuild/openharmony-arm64': 0.25.10 + '@esbuild/sunos-x64': 0.25.10 + '@esbuild/win32-arm64': 0.25.10 + '@esbuild/win32-ia32': 0.25.10 + '@esbuild/win32-x64': 0.25.10 + + esbuild@0.25.12: + optionalDependencies: + '@esbuild/aix-ppc64': 0.25.12 + '@esbuild/android-arm': 0.25.12 + '@esbuild/android-arm64': 0.25.12 + '@esbuild/android-x64': 0.25.12 + '@esbuild/darwin-arm64': 0.25.12 + '@esbuild/darwin-x64': 0.25.12 + '@esbuild/freebsd-arm64': 0.25.12 + '@esbuild/freebsd-x64': 0.25.12 + '@esbuild/linux-arm': 0.25.12 + '@esbuild/linux-arm64': 0.25.12 + '@esbuild/linux-ia32': 0.25.12 + '@esbuild/linux-loong64': 0.25.12 + '@esbuild/linux-mips64el': 0.25.12 + '@esbuild/linux-ppc64': 0.25.12 + '@esbuild/linux-riscv64': 0.25.12 + '@esbuild/linux-s390x': 0.25.12 + '@esbuild/linux-x64': 0.25.12 + '@esbuild/netbsd-arm64': 0.25.12 + '@esbuild/netbsd-x64': 0.25.12 + '@esbuild/openbsd-arm64': 0.25.12 + '@esbuild/openbsd-x64': 0.25.12 + '@esbuild/openharmony-arm64': 0.25.12 + '@esbuild/sunos-x64': 0.25.12 + '@esbuild/win32-arm64': 0.25.12 + '@esbuild/win32-ia32': 0.25.12 + '@esbuild/win32-x64': 0.25.12 + + escalade@3.2.0: {} + + escape-string-regexp@1.0.5: {} + + escape-string-regexp@4.0.0: {} + + escape-string-regexp@5.0.0: {} + + esm-env@1.2.2: {} + + esrap@2.1.0: + dependencies: + '@jridgewell/sourcemap-codec': 1.5.5 + + estree-walker@0.6.1: {} + + estree-walker@1.0.1: {} + + estree-walker@2.0.2: {} + + estree-walker@3.0.3: + dependencies: + '@types/estree': 1.0.8 + + esutils@2.0.3: {} + + eventemitter3@4.0.7: {} + + eventemitter3@5.0.1: {} + + expressive-code@0.41.4: + dependencies: + '@expressive-code/core': 0.41.4 + '@expressive-code/plugin-frames': 0.41.4 + '@expressive-code/plugin-shiki': 0.41.4 + '@expressive-code/plugin-text-markers': 0.41.4 + + exsolve@1.0.4: {} + + extend@3.0.2: {} + + extract-zip@2.0.1: + dependencies: + debug: 4.4.3 + get-stream: 5.2.0 + yauzl: 2.10.0 + optionalDependencies: + '@types/yauzl': 2.10.3 + transitivePeerDependencies: + - supports-color + + fast-deep-equal@3.1.3: {} + + fast-glob@3.3.3: + dependencies: + '@nodelib/fs.stat': 2.0.5 + '@nodelib/fs.walk': 1.2.8 + glob-parent: 5.1.2 + merge2: 1.4.1 + micromatch: 4.0.8 + + fast-uri@3.1.0: {} + + fast-xml-parser@5.3.2: + dependencies: + strnum: 2.1.1 + + fastq@1.19.1: + dependencies: + reusify: 1.1.0 + + fd-slicer@1.1.0: + dependencies: + pend: 1.2.0 + + fdir@6.5.0(picomatch@4.0.3): + optionalDependencies: + picomatch: 4.0.3 + + figures@1.7.0: + dependencies: + escape-string-regexp: 1.0.5 + object-assign: 4.1.1 + + filelist@1.0.4: + dependencies: + minimatch: 5.1.6 + + filesize@6.4.0: {} + + fill-range@7.1.1: + dependencies: + to-regex-range: 5.0.1 + + find-cache-dir@3.3.2: + dependencies: + commondir: 1.0.1 + make-dir: 3.1.0 + pkg-dir: 4.2.0 + + find-up@4.1.0: + dependencies: + locate-path: 5.0.0 + path-exists: 4.0.0 + + flattie@1.1.1: {} + + focus-options-polyfill@1.6.0: {} + + follow-redirects@1.15.9: {} + + fontace@0.3.0: + dependencies: + '@types/fontkit': 2.0.8 + fontkit: 2.0.4 + + fontkit@2.0.4: + dependencies: + '@swc/helpers': 0.5.17 + brotli: 1.3.3 + clone: 2.1.2 + dfa: 1.2.0 + fast-deep-equal: 3.1.3 + restructure: 3.0.2 + tiny-inflate: 1.0.3 + unicode-properties: 1.4.1 + unicode-trie: 2.0.0 + + for-each@0.3.5: + dependencies: + is-callable: 1.2.7 + + foreground-child@3.3.1: + dependencies: + cross-spawn: 7.0.6 + signal-exit: 4.1.0 + + form-data@4.0.2: + dependencies: + asynckit: 0.4.0 + combined-stream: 1.0.8 + es-set-tostringtag: 2.1.0 + mime-types: 2.1.35 + + fraction.js@4.3.7: {} + + fs-extra@10.1.0: + dependencies: + graceful-fs: 4.2.11 + jsonfile: 6.1.0 + universalify: 2.0.1 + + fs-minipass@2.1.0: + dependencies: + minipass: 3.3.6 + + fs.realpath@1.0.0: {} + + fsevents@2.3.3: + optional: true + + function-bind@1.1.2: {} + + function.prototype.name@1.1.8: + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.4 + define-properties: 1.2.1 + functions-have-names: 1.2.3 + hasown: 2.0.2 + is-callable: 1.2.7 + + functions-have-names@1.2.3: {} + + generic-names@4.0.0: + dependencies: + loader-utils: 3.3.1 + + gensync@1.0.0-beta.2: {} + + get-caller-file@2.0.5: {} + + get-east-asian-width@1.4.0: {} + + get-intrinsic@1.3.0: + dependencies: + call-bind-apply-helpers: 1.0.2 + es-define-property: 1.0.1 + es-errors: 1.3.0 + es-object-atoms: 1.1.1 + function-bind: 1.1.2 + get-proto: 1.0.1 + gopd: 1.2.0 + has-symbols: 1.1.0 + hasown: 2.0.2 + math-intrinsics: 1.1.0 + + get-proto@1.0.1: + dependencies: + dunder-proto: 1.0.1 + es-object-atoms: 1.1.1 + + get-stream@5.2.0: + dependencies: + pump: 3.0.2 + + get-symbol-description@1.1.0: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + + github-slugger@2.0.0: {} + + glob-parent@5.1.2: + dependencies: + is-glob: 4.0.3 + + glob-parent@6.0.2: + dependencies: + is-glob: 4.0.3 + + glob@10.4.5: + dependencies: + foreground-child: 3.3.1 + jackspeak: 3.4.3 + minimatch: 9.0.5 + minipass: 7.1.2 + package-json-from-dist: 1.0.1 + path-scurry: 1.11.1 + + glob@7.2.3: + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 3.1.2 + once: 1.4.0 + path-is-absolute: 1.0.1 + + globals@15.15.0: {} + + globalthis@1.0.4: + dependencies: + define-properties: 1.2.1 + gopd: 1.2.0 + + globalyzer@0.1.0: {} + + globrex@0.1.2: {} + + gopd@1.2.0: {} + + graceful-fs@4.2.11: {} + + gzip-size@3.0.0: + dependencies: + duplexer: 0.1.2 + + gzip-size@6.0.0: + dependencies: + duplexer: 0.1.2 + + h3@1.15.4: + dependencies: + cookie-es: 1.2.2 + crossws: 0.3.5 + defu: 6.1.4 + destr: 2.0.5 + iron-webcrypto: 1.2.1 + node-mock-http: 1.0.3 + radix3: 1.1.2 + ufo: 1.6.1 + uncrypto: 0.1.3 + + has-ansi@2.0.0: + dependencies: + ansi-regex: 2.1.1 + + has-bigints@1.1.0: {} + + has-flag@4.0.0: {} + + has-property-descriptors@1.0.2: + dependencies: + es-define-property: 1.0.1 + + has-proto@1.2.0: + dependencies: + dunder-proto: 1.0.1 + + has-symbols@1.1.0: {} + + has-tostringtag@1.0.2: + dependencies: + has-symbols: 1.1.0 + + hasown@2.0.2: + dependencies: + function-bind: 1.1.2 + + hast-util-from-dom@5.0.1: + dependencies: + '@types/hast': 3.0.4 + hastscript: 9.0.1 + web-namespaces: 2.0.1 + + hast-util-from-html-isomorphic@2.0.0: + dependencies: + '@types/hast': 3.0.4 + hast-util-from-dom: 5.0.1 + hast-util-from-html: 2.0.3 + unist-util-remove-position: 5.0.0 + + hast-util-from-html@2.0.3: + dependencies: + '@types/hast': 3.0.4 + devlop: 1.1.0 + hast-util-from-parse5: 8.0.3 + parse5: 7.3.0 + vfile: 6.0.3 + vfile-message: 4.0.3 + + hast-util-from-parse5@8.0.3: + dependencies: + '@types/hast': 3.0.4 + '@types/unist': 3.0.3 + devlop: 1.1.0 + hastscript: 9.0.1 + property-information: 7.1.0 + vfile: 6.0.3 + vfile-location: 5.0.3 + web-namespaces: 2.0.1 + + hast-util-has-property@3.0.0: + dependencies: + '@types/hast': 3.0.4 + + hast-util-heading-rank@3.0.0: + dependencies: + '@types/hast': 3.0.4 + + hast-util-is-element@3.0.0: + dependencies: + '@types/hast': 3.0.4 + + hast-util-parse-selector@3.1.1: + dependencies: + '@types/hast': 2.3.10 + + hast-util-parse-selector@4.0.0: + dependencies: + '@types/hast': 3.0.4 + + hast-util-raw@9.1.0: + dependencies: + '@types/hast': 3.0.4 + '@types/unist': 3.0.3 + '@ungap/structured-clone': 1.3.0 + hast-util-from-parse5: 8.0.3 + hast-util-to-parse5: 8.0.0 + html-void-elements: 3.0.0 + mdast-util-to-hast: 13.2.1 + parse5: 7.3.0 + unist-util-position: 5.0.0 + unist-util-visit: 5.0.0 + vfile: 6.0.3 + web-namespaces: 2.0.1 + zwitch: 2.0.4 + + hast-util-select@6.0.4: + dependencies: + '@types/hast': 3.0.4 + '@types/unist': 3.0.3 + bcp-47-match: 2.0.3 + comma-separated-tokens: 2.0.3 + css-selector-parser: 3.2.0 + devlop: 1.1.0 + direction: 2.0.1 + hast-util-has-property: 3.0.0 + hast-util-to-string: 3.0.1 + hast-util-whitespace: 3.0.0 + nth-check: 2.1.1 + property-information: 7.1.0 + space-separated-tokens: 2.0.2 + unist-util-visit: 5.0.0 + zwitch: 2.0.4 + + hast-util-to-html@9.0.5: + dependencies: + '@types/hast': 3.0.4 + '@types/unist': 3.0.3 + ccount: 2.0.1 + comma-separated-tokens: 2.0.3 + hast-util-whitespace: 3.0.0 + html-void-elements: 3.0.0 + mdast-util-to-hast: 13.2.1 + property-information: 7.1.0 + space-separated-tokens: 2.0.2 + stringify-entities: 4.0.4 + zwitch: 2.0.4 + + hast-util-to-parse5@8.0.0: + dependencies: + '@types/hast': 3.0.4 + comma-separated-tokens: 2.0.3 + devlop: 1.1.0 + property-information: 6.5.0 + space-separated-tokens: 2.0.2 + web-namespaces: 2.0.1 + zwitch: 2.0.4 + + hast-util-to-string@3.0.1: + dependencies: + '@types/hast': 3.0.4 + + hast-util-to-text@4.0.2: + dependencies: + '@types/hast': 3.0.4 + '@types/unist': 3.0.3 + hast-util-is-element: 3.0.0 + unist-util-find-after: 5.0.0 + + hast-util-whitespace@3.0.0: + dependencies: + '@types/hast': 3.0.4 + + hastscript@7.2.0: + dependencies: + '@types/hast': 2.3.10 + comma-separated-tokens: 2.0.3 + hast-util-parse-selector: 3.1.1 + property-information: 6.5.0 + space-separated-tokens: 2.0.2 + + hastscript@9.0.1: + dependencies: + '@types/hast': 3.0.4 + comma-separated-tokens: 2.0.3 + hast-util-parse-selector: 4.0.0 + property-information: 7.0.0 + space-separated-tokens: 2.0.2 + + html-escaper@3.0.3: {} + + html-void-elements@3.0.0: {} + + htmlparser2@8.0.2: + dependencies: + domelementtype: 2.3.0 + domhandler: 5.0.3 + domutils: 3.2.2 + entities: 4.5.0 + + htmlparser2@9.1.0: + dependencies: + domelementtype: 2.3.0 + domhandler: 5.0.3 + domutils: 3.2.2 + entities: 4.5.0 + + http-cache-semantics@4.2.0: {} + + iconv-lite@0.6.3: + dependencies: + safer-buffer: 2.1.2 + + icss-replace-symbols@1.1.0: {} + + icss-utils@5.1.0(postcss@8.5.6): + dependencies: + postcss: 8.5.6 + + immutable@4.3.7: + optional: true + + import-cwd@3.0.0: + dependencies: + import-from: 3.0.0 + + import-fresh@3.3.1: + dependencies: + parent-module: 1.0.1 + resolve-from: 4.0.0 + + import-from@3.0.0: + dependencies: + resolve-from: 5.0.0 + + import-meta-resolve@4.2.0: {} + + inflight@1.0.6: + dependencies: + once: 1.4.0 + wrappy: 1.0.2 + + inherits@2.0.4: {} + + internal-slot@1.1.0: + dependencies: + es-errors: 1.3.0 + hasown: 2.0.2 + side-channel: 1.1.0 + + interpret@1.4.0: {} + + iron-webcrypto@1.2.1: {} + + is-alphabetical@2.0.1: {} + + is-alphanumerical@2.0.1: + dependencies: + is-alphabetical: 2.0.1 + is-decimal: 2.0.1 + + is-array-buffer@3.0.5: + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.4 + get-intrinsic: 1.3.0 + + is-arrayish@0.2.1: {} + + is-async-function@2.1.1: + dependencies: + async-function: 1.0.0 + call-bound: 1.0.4 + get-proto: 1.0.1 + has-tostringtag: 1.0.2 + safe-regex-test: 1.1.0 + + is-bigint@1.1.0: + dependencies: + has-bigints: 1.1.0 + + is-binary-path@2.1.0: + dependencies: + binary-extensions: 2.3.0 + + is-boolean-object@1.2.2: + dependencies: + call-bound: 1.0.4 + has-tostringtag: 1.0.2 + + is-callable@1.2.7: {} + + is-core-module@2.16.1: + dependencies: + hasown: 2.0.2 + + is-data-view@1.0.2: + dependencies: + call-bound: 1.0.4 + get-intrinsic: 1.3.0 + is-typed-array: 1.1.15 + + is-date-object@1.1.0: + dependencies: + call-bound: 1.0.4 + has-tostringtag: 1.0.2 + + is-decimal@2.0.1: {} + + is-docker@2.2.1: {} + + is-docker@3.0.0: {} + + is-extglob@2.1.1: {} + + is-finalizationregistry@1.1.1: + dependencies: + call-bound: 1.0.4 + + is-fullwidth-code-point@3.0.0: {} + + is-generator-function@1.1.0: + dependencies: + call-bound: 1.0.4 + get-proto: 1.0.1 + has-tostringtag: 1.0.2 + safe-regex-test: 1.1.0 + + is-glob@4.0.3: + dependencies: + is-extglob: 2.1.1 + + is-hexadecimal@2.0.1: {} + + is-inside-container@1.0.0: + dependencies: + is-docker: 3.0.0 + + is-map@2.0.3: {} + + is-module@1.0.0: {} + + is-negative-zero@2.0.3: {} + + is-number-object@1.1.1: + dependencies: + call-bound: 1.0.4 + has-tostringtag: 1.0.2 + + is-number@7.0.0: {} + + is-plain-obj@4.1.0: {} + + is-plain-object@5.0.0: {} + + is-reference@1.2.1: + dependencies: + '@types/estree': 1.0.8 + + is-reference@3.0.3: + dependencies: + '@types/estree': 1.0.8 + + is-regex@1.2.1: + dependencies: + call-bound: 1.0.4 + gopd: 1.2.0 + has-tostringtag: 1.0.2 + hasown: 2.0.2 + + is-set@2.0.3: {} + + is-shared-array-buffer@1.0.4: + dependencies: + call-bound: 1.0.4 + + is-string@1.1.1: + dependencies: + call-bound: 1.0.4 + has-tostringtag: 1.0.2 + + is-symbol@1.1.1: + dependencies: + call-bound: 1.0.4 + has-symbols: 1.1.0 + safe-regex-test: 1.1.0 + + is-typed-array@1.1.15: + dependencies: + which-typed-array: 1.1.19 + + is-weakmap@2.0.2: {} + + is-weakref@1.1.1: + dependencies: + call-bound: 1.0.4 + + is-weakset@2.0.4: + dependencies: + call-bound: 1.0.4 + get-intrinsic: 1.3.0 + + is-wsl@2.2.0: + dependencies: + is-docker: 2.2.1 + + is-wsl@3.1.0: + dependencies: + is-inside-container: 1.0.0 + + isarray@2.0.5: {} + + isexe@2.0.0: {} + + jackspeak@3.4.3: + dependencies: + '@isaacs/cliui': 8.0.2 + optionalDependencies: + '@pkgjs/parseargs': 0.11.0 + + jake@10.9.2: + dependencies: + async: 3.2.6 + chalk: 4.1.2 + filelist: 1.0.4 + minimatch: 3.1.2 + + jest-worker@26.6.2: + dependencies: + '@types/node': 24.5.2 + merge-stream: 2.0.0 + supports-color: 7.2.0 + + jiti@1.21.7: {} + + js-tokens@4.0.0: {} + + js-yaml@4.1.0: + dependencies: + argparse: 2.0.1 + + jsesc@3.0.2: {} + + jsesc@3.1.0: {} + + json-parse-even-better-errors@2.3.1: {} + + json-schema-traverse@1.0.0: {} + + json5@2.2.3: {} + + jsonc-parser@2.3.1: {} + + jsonc-parser@3.3.1: {} + + jsonfile@6.1.0: + dependencies: + universalify: 2.0.1 + optionalDependencies: + graceful-fs: 4.2.11 + + katex@0.16.27: + dependencies: + commander: 8.3.0 + + kleur@3.0.3: {} + + kleur@4.1.5: {} + + kolorist@1.8.0: {} + + lightningcss-darwin-arm64@1.29.3: + optional: true + + lightningcss-darwin-x64@1.29.3: + optional: true + + lightningcss-freebsd-x64@1.29.3: + optional: true + + lightningcss-linux-arm-gnueabihf@1.29.3: + optional: true + + lightningcss-linux-arm64-gnu@1.29.3: + optional: true + + lightningcss-linux-arm64-musl@1.29.3: + optional: true + + lightningcss-linux-x64-gnu@1.29.3: + optional: true + + lightningcss-linux-x64-musl@1.29.3: + optional: true + + lightningcss-win32-arm64-msvc@1.29.3: + optional: true + + lightningcss-win32-x64-msvc@1.29.3: + optional: true + + lightningcss@1.29.3: + dependencies: + detect-libc: 2.1.2 + optionalDependencies: + lightningcss-darwin-arm64: 1.29.3 + lightningcss-darwin-x64: 1.29.3 + lightningcss-freebsd-x64: 1.29.3 + lightningcss-linux-arm-gnueabihf: 1.29.3 + lightningcss-linux-arm64-gnu: 1.29.3 + lightningcss-linux-arm64-musl: 1.29.3 + lightningcss-linux-x64-gnu: 1.29.3 + lightningcss-linux-x64-musl: 1.29.3 + lightningcss-win32-arm64-msvc: 1.29.3 + lightningcss-win32-x64-msvc: 1.29.3 + optional: true + + lilconfig@2.1.0: {} + + lilconfig@3.1.3: {} + + lines-and-columns@1.2.4: {} + + linkify-it@5.0.0: + dependencies: + uc.micro: 2.1.0 + + loader-utils@3.3.1: {} + + local-pkg@0.5.1: + dependencies: + mlly: 1.7.4 + pkg-types: 1.3.1 + + local-pkg@1.1.1: + dependencies: + mlly: 1.7.4 + pkg-types: 2.1.0 + quansync: 0.2.10 + + locate-character@3.0.0: {} + + locate-path@5.0.0: + dependencies: + p-locate: 4.1.0 + + lodash.camelcase@4.3.0: {} + + lodash.debounce@4.0.8: {} + + lodash.memoize@4.1.2: {} + + lodash.merge@4.6.2: {} + + lodash.uniq@4.5.0: {} + + lodash@4.17.21: {} + + longest-streak@3.1.0: {} + + lru-cache@10.4.3: {} + + lru-cache@5.1.1: + dependencies: + yallist: 3.1.1 + + magic-string@0.25.9: + dependencies: + sourcemap-codec: 1.4.8 + + magic-string@0.30.19: + dependencies: + '@jridgewell/sourcemap-codec': 1.5.5 + + magic-string@0.30.21: + dependencies: + '@jridgewell/sourcemap-codec': 1.5.5 + + magicast@0.3.5: + dependencies: + '@babel/parser': 7.28.4 + '@babel/types': 7.28.4 + source-map-js: 1.2.1 + + make-dir@3.1.0: + dependencies: + semver: 6.3.1 + + markdown-it@14.1.0: + dependencies: + argparse: 2.0.1 + entities: 4.5.0 + linkify-it: 5.0.0 + mdurl: 2.0.0 + punycode.js: 2.3.1 + uc.micro: 2.1.0 + + markdown-table@3.0.4: {} + + math-intrinsics@1.1.0: {} + + maxmin@2.1.0: + dependencies: + chalk: 1.1.3 + figures: 1.7.0 + gzip-size: 3.0.0 + pretty-bytes: 3.0.1 + + mdast-util-definitions@6.0.0: + dependencies: + '@types/mdast': 4.0.4 + '@types/unist': 3.0.3 + unist-util-visit: 5.0.0 + + mdast-util-directive@3.1.0: + dependencies: + '@types/mdast': 4.0.4 + '@types/unist': 3.0.3 + ccount: 2.0.1 + devlop: 1.1.0 + mdast-util-from-markdown: 2.0.2 + mdast-util-to-markdown: 2.1.2 + parse-entities: 4.0.2 + stringify-entities: 4.0.4 + unist-util-visit-parents: 6.0.2 + transitivePeerDependencies: + - supports-color + + mdast-util-find-and-replace@3.0.2: + dependencies: + '@types/mdast': 4.0.4 + escape-string-regexp: 5.0.0 + unist-util-is: 6.0.1 + unist-util-visit-parents: 6.0.2 + + mdast-util-from-markdown@2.0.2: + dependencies: + '@types/mdast': 4.0.4 + '@types/unist': 3.0.3 + decode-named-character-reference: 1.1.0 + devlop: 1.1.0 + mdast-util-to-string: 4.0.0 + micromark: 4.0.2 + micromark-util-decode-numeric-character-reference: 2.0.2 + micromark-util-decode-string: 2.0.1 + micromark-util-normalize-identifier: 2.0.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + unist-util-stringify-position: 4.0.0 + transitivePeerDependencies: + - supports-color + + mdast-util-gfm-autolink-literal@2.0.1: + dependencies: + '@types/mdast': 4.0.4 + ccount: 2.0.1 + devlop: 1.1.0 + mdast-util-find-and-replace: 3.0.2 + micromark-util-character: 2.1.1 + + mdast-util-gfm-footnote@2.1.0: + dependencies: + '@types/mdast': 4.0.4 + devlop: 1.1.0 + mdast-util-from-markdown: 2.0.2 + mdast-util-to-markdown: 2.1.2 + micromark-util-normalize-identifier: 2.0.1 + transitivePeerDependencies: + - supports-color + + mdast-util-gfm-strikethrough@2.0.0: + dependencies: + '@types/mdast': 4.0.4 + mdast-util-from-markdown: 2.0.2 + mdast-util-to-markdown: 2.1.2 + transitivePeerDependencies: + - supports-color + + mdast-util-gfm-table@2.0.0: + dependencies: + '@types/mdast': 4.0.4 + devlop: 1.1.0 + markdown-table: 3.0.4 + mdast-util-from-markdown: 2.0.2 + mdast-util-to-markdown: 2.1.2 + transitivePeerDependencies: + - supports-color + + mdast-util-gfm-task-list-item@2.0.0: + dependencies: + '@types/mdast': 4.0.4 + devlop: 1.1.0 + mdast-util-from-markdown: 2.0.2 + mdast-util-to-markdown: 2.1.2 + transitivePeerDependencies: + - supports-color + + mdast-util-gfm@3.1.0: + dependencies: + mdast-util-from-markdown: 2.0.2 + mdast-util-gfm-autolink-literal: 2.0.1 + mdast-util-gfm-footnote: 2.1.0 + mdast-util-gfm-strikethrough: 2.0.0 + mdast-util-gfm-table: 2.0.0 + mdast-util-gfm-task-list-item: 2.0.0 + mdast-util-to-markdown: 2.1.2 + transitivePeerDependencies: + - supports-color + + mdast-util-math@3.0.0: + dependencies: + '@types/hast': 3.0.4 + '@types/mdast': 4.0.4 + devlop: 1.1.0 + longest-streak: 3.1.0 + mdast-util-from-markdown: 2.0.2 + mdast-util-to-markdown: 2.1.2 + unist-util-remove-position: 5.0.0 + transitivePeerDependencies: + - supports-color + + mdast-util-phrasing@4.1.0: + dependencies: + '@types/mdast': 4.0.4 + unist-util-is: 6.0.1 + + mdast-util-to-hast@13.2.1: + dependencies: + '@types/hast': 3.0.4 + '@types/mdast': 4.0.4 + '@ungap/structured-clone': 1.3.0 + devlop: 1.1.0 + micromark-util-sanitize-uri: 2.0.1 + trim-lines: 3.0.1 + unist-util-position: 5.0.0 + unist-util-visit: 5.0.0 + vfile: 6.0.3 + + mdast-util-to-markdown@2.1.2: + dependencies: + '@types/mdast': 4.0.4 + '@types/unist': 3.0.3 + longest-streak: 3.1.0 + mdast-util-phrasing: 4.1.0 + mdast-util-to-string: 4.0.0 + micromark-util-classify-character: 2.0.1 + micromark-util-decode-string: 2.0.1 + unist-util-visit: 5.0.0 + zwitch: 2.0.4 + + mdast-util-to-string@4.0.0: + dependencies: + '@types/mdast': 4.0.4 + + mdn-data@2.0.14: {} + + mdn-data@2.0.28: {} + + mdn-data@2.0.30: {} + + mdn-data@2.12.2: {} + + mdurl@2.0.0: {} + + merge-stream@2.0.0: {} + + merge2@1.4.1: {} + + microbundle@0.15.1(@types/babel__core@7.20.5): + dependencies: + '@babel/core': 7.28.0 + '@babel/plugin-proposal-class-properties': 7.12.1(@babel/core@7.28.0) + '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.28.0) + '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.28.0) + '@babel/plugin-transform-flow-strip-types': 7.27.1(@babel/core@7.28.0) + '@babel/plugin-transform-react-jsx': 7.27.1(@babel/core@7.28.0) + '@babel/plugin-transform-regenerator': 7.28.1(@babel/core@7.28.0) + '@babel/preset-env': 7.28.0(@babel/core@7.28.0) + '@babel/preset-flow': 7.27.1(@babel/core@7.28.0) + '@babel/preset-react': 7.27.1(@babel/core@7.28.0) + '@rollup/plugin-alias': 3.1.9(rollup@2.79.2) + '@rollup/plugin-babel': 5.3.1(@babel/core@7.28.0)(@types/babel__core@7.20.5)(rollup@2.79.2) + '@rollup/plugin-commonjs': 17.1.0(rollup@2.79.2) + '@rollup/plugin-json': 4.1.0(rollup@2.79.2) + '@rollup/plugin-node-resolve': 11.2.1(rollup@2.79.2) + '@surma/rollup-plugin-off-main-thread': 2.2.3 + asyncro: 3.0.0 + autoprefixer: 10.4.21(postcss@8.5.6) + babel-plugin-macros: 3.1.0 + babel-plugin-transform-async-to-promises: 0.8.18 + babel-plugin-transform-replace-expressions: 0.2.0(@babel/core@7.28.0) + brotli-size: 4.0.0 + builtin-modules: 3.3.0 + camelcase: 6.3.0 + escape-string-regexp: 4.0.0 + filesize: 6.4.0 + gzip-size: 6.0.0 + kleur: 4.1.5 + lodash.merge: 4.6.2 + postcss: 8.5.6 + pretty-bytes: 5.6.0 + rollup: 2.79.2 + rollup-plugin-bundle-size: 1.0.3 + rollup-plugin-postcss: 4.0.2(postcss@8.5.6) + rollup-plugin-terser: 7.0.2(rollup@2.79.2) + rollup-plugin-typescript2: 0.32.1(rollup@2.79.2)(typescript@4.9.5) + rollup-plugin-visualizer: 5.14.0(rollup@2.79.2) + sade: 1.8.1 + terser: 5.43.1 + tiny-glob: 0.2.9 + tslib: 2.8.1 + typescript: 4.9.5 + transitivePeerDependencies: + - '@types/babel__core' + - rolldown + - supports-color + - ts-node + + micromark-core-commonmark@2.0.3: + dependencies: + decode-named-character-reference: 1.1.0 + devlop: 1.1.0 + micromark-factory-destination: 2.0.1 + micromark-factory-label: 2.0.1 + micromark-factory-space: 2.0.1 + micromark-factory-title: 2.0.1 + micromark-factory-whitespace: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-chunked: 2.0.1 + micromark-util-classify-character: 2.0.1 + micromark-util-html-tag-name: 2.0.1 + micromark-util-normalize-identifier: 2.0.1 + micromark-util-resolve-all: 2.0.1 + micromark-util-subtokenize: 2.1.0 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-extension-directive@3.0.2: + dependencies: + devlop: 1.1.0 + micromark-factory-space: 2.0.1 + micromark-factory-whitespace: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + parse-entities: 4.0.2 + + micromark-extension-gfm-autolink-literal@2.1.0: + dependencies: + micromark-util-character: 2.1.1 + micromark-util-sanitize-uri: 2.0.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-extension-gfm-footnote@2.1.0: + dependencies: + devlop: 1.1.0 + micromark-core-commonmark: 2.0.3 + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-normalize-identifier: 2.0.1 + micromark-util-sanitize-uri: 2.0.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-extension-gfm-strikethrough@2.1.0: + dependencies: + devlop: 1.1.0 + micromark-util-chunked: 2.0.1 + micromark-util-classify-character: 2.0.1 + micromark-util-resolve-all: 2.0.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-extension-gfm-table@2.1.1: + dependencies: + devlop: 1.1.0 + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-extension-gfm-tagfilter@2.0.0: + dependencies: + micromark-util-types: 2.0.2 + + micromark-extension-gfm-task-list-item@2.1.0: + dependencies: + devlop: 1.1.0 + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-extension-gfm@3.0.0: + dependencies: + micromark-extension-gfm-autolink-literal: 2.1.0 + micromark-extension-gfm-footnote: 2.1.0 + micromark-extension-gfm-strikethrough: 2.1.0 + micromark-extension-gfm-table: 2.1.1 + micromark-extension-gfm-tagfilter: 2.0.0 + micromark-extension-gfm-task-list-item: 2.1.0 + micromark-util-combine-extensions: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-extension-math@3.1.0: + dependencies: + '@types/katex': 0.16.7 + devlop: 1.1.0 + katex: 0.16.27 + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-factory-destination@2.0.1: + dependencies: + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-factory-label@2.0.1: + dependencies: + devlop: 1.1.0 + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-factory-space@2.0.1: + dependencies: + micromark-util-character: 2.1.1 + micromark-util-types: 2.0.2 + + micromark-factory-title@2.0.1: + dependencies: + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-factory-whitespace@2.0.1: + dependencies: + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-util-character@2.1.1: + dependencies: + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-util-chunked@2.0.1: + dependencies: + micromark-util-symbol: 2.0.1 + + micromark-util-classify-character@2.0.1: + dependencies: + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-util-combine-extensions@2.0.1: + dependencies: + micromark-util-chunked: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-util-decode-numeric-character-reference@2.0.2: + dependencies: + micromark-util-symbol: 2.0.1 + + micromark-util-decode-string@2.0.1: + dependencies: + decode-named-character-reference: 1.1.0 + micromark-util-character: 2.1.1 + micromark-util-decode-numeric-character-reference: 2.0.2 + micromark-util-symbol: 2.0.1 + + micromark-util-encode@2.0.1: {} + + micromark-util-html-tag-name@2.0.1: {} + + micromark-util-normalize-identifier@2.0.1: + dependencies: + micromark-util-symbol: 2.0.1 + + micromark-util-resolve-all@2.0.1: + dependencies: + micromark-util-types: 2.0.2 + + micromark-util-sanitize-uri@2.0.1: + dependencies: + micromark-util-character: 2.1.1 + micromark-util-encode: 2.0.1 + micromark-util-symbol: 2.0.1 + + micromark-util-subtokenize@2.1.0: + dependencies: + devlop: 1.1.0 + micromark-util-chunked: 2.0.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-util-symbol@2.0.1: {} + + micromark-util-types@2.0.2: {} + + micromark@4.0.2: + dependencies: + '@types/debug': 4.1.12 + debug: 4.4.3 + decode-named-character-reference: 1.1.0 + devlop: 1.1.0 + micromark-core-commonmark: 2.0.3 + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-chunked: 2.0.1 + micromark-util-combine-extensions: 2.0.1 + micromark-util-decode-numeric-character-reference: 2.0.2 + micromark-util-encode: 2.0.1 + micromark-util-normalize-identifier: 2.0.1 + micromark-util-resolve-all: 2.0.1 + micromark-util-sanitize-uri: 2.0.1 + micromark-util-subtokenize: 2.1.0 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + transitivePeerDependencies: + - supports-color + + micromatch@4.0.8: + dependencies: + braces: 3.0.3 + picomatch: 2.3.1 + + mime-db@1.52.0: {} + + mime-types@2.1.35: + dependencies: + mime-db: 1.52.0 + + minimatch@3.1.2: + dependencies: + brace-expansion: 1.1.12 + + minimatch@5.1.6: + dependencies: + brace-expansion: 2.0.2 + + minimatch@9.0.5: + dependencies: + brace-expansion: 2.0.1 + + minipass@3.3.6: + dependencies: + yallist: 4.0.0 + + minipass@4.2.8: {} + + minipass@5.0.0: {} + + minipass@7.1.2: {} + + minizlib@2.1.2: + dependencies: + minipass: 3.3.6 + yallist: 4.0.0 + + mkdirp@1.0.4: {} + + mlly@1.7.4: + dependencies: + acorn: 8.15.0 + pathe: 2.0.3 + pkg-types: 1.3.1 + ufo: 1.6.1 + + morphdom@2.7.5: {} + + mri@1.2.0: {} + + mrmime@2.0.1: {} + + ms@2.1.3: {} + + muggle-string@0.4.1: {} + + mz@2.7.0: + dependencies: + any-promise: 1.3.0 + object-assign: 4.1.1 + thenify-all: 1.6.0 + + nanoid@3.3.11: {} + + neotraverse@0.6.18: {} + + nlcst-to-string@4.0.0: + dependencies: + '@types/nlcst': 2.0.3 + + node-addon-api@7.1.1: + optional: true + + node-fetch-native@1.6.7: {} + + node-fetch@2.7.0: + dependencies: + whatwg-url: 5.0.0 + + node-mock-http@1.0.3: {} + + node-releases@2.0.19: {} + + normalize-path@3.0.0: {} + + normalize-range@0.1.2: {} + + normalize-url@6.1.0: {} + + nth-check@2.1.1: + dependencies: + boolbase: 1.0.0 + + number-is-nan@1.0.1: {} + + object-assign@4.1.1: {} + + object-hash@3.0.0: {} + + object-inspect@1.13.4: {} + + object-keys@1.1.1: {} + + object.assign@4.1.7: + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.4 + define-properties: 1.2.1 + es-object-atoms: 1.1.1 + has-symbols: 1.1.0 + object-keys: 1.1.1 + + ofetch@1.4.1: + dependencies: + destr: 2.0.5 + node-fetch-native: 1.6.7 + ufo: 1.6.1 + + ohash@2.0.11: {} + + once@1.4.0: + dependencies: + wrappy: 1.0.2 + + oniguruma-parser@0.12.1: {} + + oniguruma-to-es@4.3.3: + dependencies: + oniguruma-parser: 0.12.1 + regex: 6.0.1 + regex-recursion: 6.0.2 + + oniguruma-to-es@4.3.4: + dependencies: + oniguruma-parser: 0.12.1 + regex: 6.1.0 + regex-recursion: 6.0.2 + + open@8.4.2: + dependencies: + define-lazy-prop: 2.0.0 + is-docker: 2.2.1 + is-wsl: 2.2.0 + + opencollective-postinstall@2.0.3: {} + + overlayscrollbars@2.12.0: {} + + own-keys@1.0.1: + dependencies: + get-intrinsic: 1.3.0 + object-keys: 1.1.1 + safe-push-apply: 1.0.0 + + p-finally@1.0.0: {} + + p-limit@2.3.0: + dependencies: + p-try: 2.2.0 + + p-limit@6.2.0: + dependencies: + yocto-queue: 1.2.1 + + p-locate@4.1.0: + dependencies: + p-limit: 2.3.0 + + p-queue@6.6.2: + dependencies: + eventemitter3: 4.0.7 + p-timeout: 3.2.0 + + p-queue@8.1.1: + dependencies: + eventemitter3: 5.0.1 + p-timeout: 6.1.4 + + p-timeout@3.2.0: + dependencies: + p-finally: 1.0.0 + + p-timeout@6.1.4: {} + + p-try@2.2.0: {} + + package-json-from-dist@1.0.1: {} + + package-manager-detector@0.2.11: + dependencies: + quansync: 0.2.10 + + package-manager-detector@1.3.0: {} + + pagefind@1.4.0: + optionalDependencies: + '@pagefind/darwin-arm64': 1.4.0 + '@pagefind/darwin-x64': 1.4.0 + '@pagefind/freebsd-x64': 1.4.0 + '@pagefind/linux-arm64': 1.4.0 + '@pagefind/linux-x64': 1.4.0 + '@pagefind/windows-x64': 1.4.0 + + pako@0.2.9: {} + + parent-module@1.0.1: + dependencies: + callsites: 3.1.0 + + parse-entities@4.0.2: + dependencies: + '@types/unist': 2.0.11 + character-entities-legacy: 3.0.0 + character-reference-invalid: 2.0.1 + decode-named-character-reference: 1.1.0 + is-alphanumerical: 2.0.1 + is-decimal: 2.0.1 + is-hexadecimal: 2.0.1 + + parse-json@5.2.0: + dependencies: + '@babel/code-frame': 7.27.1 + error-ex: 1.3.2 + json-parse-even-better-errors: 2.3.1 + lines-and-columns: 1.2.4 + + parse-latin@7.0.0: + dependencies: + '@types/nlcst': 2.0.3 + '@types/unist': 3.0.3 + nlcst-to-string: 4.0.0 + unist-util-modify-children: 4.0.0 + unist-util-visit-children: 3.0.0 + vfile: 6.0.3 + + parse-srcset@1.0.2: {} + + parse5-htmlparser2-tree-adapter@7.1.0: + dependencies: + domhandler: 5.0.3 + parse5: 7.2.1 + + parse5-parser-stream@7.1.2: + dependencies: + parse5: 7.2.1 + + parse5@7.2.1: + dependencies: + entities: 4.5.0 + + parse5@7.3.0: + dependencies: + entities: 6.0.1 + + path-browserify@1.0.1: {} + + path-exists@4.0.0: {} + + path-is-absolute@1.0.1: {} + + path-key@3.1.1: {} + + path-parse@1.0.7: {} + + path-scurry@1.11.1: + dependencies: + lru-cache: 10.4.3 + minipass: 7.1.2 + + path-to-regexp@6.3.0: {} + + path-type@4.0.0: {} + + pathe@1.1.2: {} + + pathe@2.0.3: {} + + pend@1.2.0: {} + + photoswipe@5.4.4: {} + + piccolore@0.1.3: {} + + picocolors@1.1.1: {} + + picomatch@2.3.1: {} + + picomatch@4.0.3: {} + + pify@2.3.0: {} + + pify@5.0.0: {} + + pirates@4.0.7: {} + + pkg-dir@4.2.0: + dependencies: + find-up: 4.1.0 + + pkg-types@1.3.1: + dependencies: + confbox: 0.1.8 + mlly: 1.7.4 + pathe: 2.0.3 + + pkg-types@2.1.0: + dependencies: + confbox: 0.2.1 + exsolve: 1.0.4 + pathe: 2.0.3 + + possible-typed-array-names@1.1.0: {} + + postcss-calc@8.2.4(postcss@8.5.6): + dependencies: + postcss: 8.5.6 + postcss-selector-parser: 6.1.2 + postcss-value-parser: 4.2.0 + + postcss-colormin@5.3.1(postcss@8.5.6): + dependencies: + browserslist: 4.25.1 + caniuse-api: 3.0.0 + colord: 2.9.3 + postcss: 8.5.6 + postcss-value-parser: 4.2.0 + + postcss-convert-values@5.1.3(postcss@8.5.6): + dependencies: + browserslist: 4.25.1 + postcss: 8.5.6 + postcss-value-parser: 4.2.0 + + postcss-discard-comments@5.1.2(postcss@8.5.6): + dependencies: + postcss: 8.5.6 + + postcss-discard-duplicates@5.1.0(postcss@8.5.6): + dependencies: + postcss: 8.5.6 + + postcss-discard-empty@5.1.1(postcss@8.5.6): + dependencies: + postcss: 8.5.6 + + postcss-discard-overridden@5.1.0(postcss@8.5.6): + dependencies: + postcss: 8.5.6 + + postcss-import@15.1.0(postcss@8.5.6): + dependencies: + postcss: 8.5.6 + postcss-value-parser: 4.2.0 + read-cache: 1.0.0 + resolve: 1.22.11 + + postcss-import@16.1.1(postcss@8.5.6): + dependencies: + postcss: 8.5.6 + postcss-value-parser: 4.2.0 + read-cache: 1.0.0 + resolve: 1.22.10 + + postcss-js@4.1.0(postcss@8.5.6): + dependencies: + camelcase-css: 2.0.1 + postcss: 8.5.6 + + postcss-load-config@3.1.4(postcss@8.5.6): + dependencies: + lilconfig: 2.1.0 + yaml: 1.10.2 + optionalDependencies: + postcss: 8.5.6 + + postcss-load-config@4.0.2(postcss@8.5.3): + dependencies: + lilconfig: 3.1.3 + yaml: 2.7.0 + optionalDependencies: + postcss: 8.5.3 + + postcss-load-config@6.0.1(jiti@1.21.7)(postcss@8.5.6)(yaml@2.8.2): + dependencies: + lilconfig: 3.1.3 + optionalDependencies: + jiti: 1.21.7 + postcss: 8.5.6 + yaml: 2.8.2 + + postcss-merge-longhand@5.1.7(postcss@8.5.6): + dependencies: + postcss: 8.5.6 + postcss-value-parser: 4.2.0 + stylehacks: 5.1.1(postcss@8.5.6) + + postcss-merge-rules@5.1.4(postcss@8.5.6): + dependencies: + browserslist: 4.25.1 + caniuse-api: 3.0.0 + cssnano-utils: 3.1.0(postcss@8.5.6) + postcss: 8.5.6 + postcss-selector-parser: 6.1.2 + + postcss-minify-font-values@5.1.0(postcss@8.5.6): + dependencies: + postcss: 8.5.6 + postcss-value-parser: 4.2.0 + + postcss-minify-gradients@5.1.1(postcss@8.5.6): + dependencies: + colord: 2.9.3 + cssnano-utils: 3.1.0(postcss@8.5.6) + postcss: 8.5.6 + postcss-value-parser: 4.2.0 + + postcss-minify-params@5.1.4(postcss@8.5.6): + dependencies: + browserslist: 4.25.1 + cssnano-utils: 3.1.0(postcss@8.5.6) + postcss: 8.5.6 + postcss-value-parser: 4.2.0 + + postcss-minify-selectors@5.2.1(postcss@8.5.6): + dependencies: + postcss: 8.5.6 + postcss-selector-parser: 6.1.2 + + postcss-modules-extract-imports@3.1.0(postcss@8.5.6): + dependencies: + postcss: 8.5.6 + + postcss-modules-local-by-default@4.2.0(postcss@8.5.6): + dependencies: + icss-utils: 5.1.0(postcss@8.5.6) + postcss: 8.5.6 + postcss-selector-parser: 7.1.1 + postcss-value-parser: 4.2.0 + + postcss-modules-scope@3.2.1(postcss@8.5.6): + dependencies: + postcss: 8.5.6 + postcss-selector-parser: 7.1.1 + + postcss-modules-values@4.0.0(postcss@8.5.6): + dependencies: + icss-utils: 5.1.0(postcss@8.5.6) + postcss: 8.5.6 + + postcss-modules@4.3.1(postcss@8.5.6): + dependencies: + generic-names: 4.0.0 + icss-replace-symbols: 1.1.0 + lodash.camelcase: 4.3.0 + postcss: 8.5.6 + postcss-modules-extract-imports: 3.1.0(postcss@8.5.6) + postcss-modules-local-by-default: 4.2.0(postcss@8.5.6) + postcss-modules-scope: 3.2.1(postcss@8.5.6) + postcss-modules-values: 4.0.0(postcss@8.5.6) + string-hash: 1.1.3 + + postcss-nested@6.2.0(postcss@8.5.6): + dependencies: + postcss: 8.5.6 + postcss-selector-parser: 6.1.2 + + postcss-nesting@13.0.2(postcss@8.5.6): + dependencies: + '@csstools/selector-resolve-nested': 3.1.0(postcss-selector-parser@7.1.0) + '@csstools/selector-specificity': 5.0.0(postcss-selector-parser@7.1.0) + postcss: 8.5.6 + postcss-selector-parser: 7.1.0 + + postcss-normalize-charset@5.1.0(postcss@8.5.6): + dependencies: + postcss: 8.5.6 + + postcss-normalize-display-values@5.1.0(postcss@8.5.6): + dependencies: + postcss: 8.5.6 + postcss-value-parser: 4.2.0 + + postcss-normalize-positions@5.1.1(postcss@8.5.6): + dependencies: + postcss: 8.5.6 + postcss-value-parser: 4.2.0 + + postcss-normalize-repeat-style@5.1.1(postcss@8.5.6): + dependencies: + postcss: 8.5.6 + postcss-value-parser: 4.2.0 + + postcss-normalize-string@5.1.0(postcss@8.5.6): + dependencies: + postcss: 8.5.6 + postcss-value-parser: 4.2.0 + + postcss-normalize-timing-functions@5.1.0(postcss@8.5.6): + dependencies: + postcss: 8.5.6 + postcss-value-parser: 4.2.0 + + postcss-normalize-unicode@5.1.1(postcss@8.5.6): + dependencies: + browserslist: 4.25.1 + postcss: 8.5.6 + postcss-value-parser: 4.2.0 + + postcss-normalize-url@5.1.0(postcss@8.5.6): + dependencies: + normalize-url: 6.1.0 + postcss: 8.5.6 + postcss-value-parser: 4.2.0 + + postcss-normalize-whitespace@5.1.1(postcss@8.5.6): + dependencies: + postcss: 8.5.6 + postcss-value-parser: 4.2.0 + + postcss-ordered-values@5.1.3(postcss@8.5.6): + dependencies: + cssnano-utils: 3.1.0(postcss@8.5.6) + postcss: 8.5.6 + postcss-value-parser: 4.2.0 + + postcss-reduce-initial@5.1.2(postcss@8.5.6): + dependencies: + browserslist: 4.25.1 + caniuse-api: 3.0.0 + postcss: 8.5.6 + + postcss-reduce-transforms@5.1.0(postcss@8.5.6): + dependencies: + postcss: 8.5.6 + postcss-value-parser: 4.2.0 + + postcss-selector-parser@6.0.10: + dependencies: + cssesc: 3.0.0 + util-deprecate: 1.0.2 + + postcss-selector-parser@6.1.2: + dependencies: + cssesc: 3.0.0 + util-deprecate: 1.0.2 + + postcss-selector-parser@7.1.0: + dependencies: + cssesc: 3.0.0 + util-deprecate: 1.0.2 + + postcss-selector-parser@7.1.1: + dependencies: + cssesc: 3.0.0 + util-deprecate: 1.0.2 + + postcss-svgo@5.1.0(postcss@8.5.6): + dependencies: + postcss: 8.5.6 + postcss-value-parser: 4.2.0 + svgo: 2.8.0 + + postcss-unique-selectors@5.1.1(postcss@8.5.6): + dependencies: + postcss: 8.5.6 + postcss-selector-parser: 6.1.2 + + postcss-value-parser@4.2.0: {} + + postcss@8.5.3: + dependencies: + nanoid: 3.3.11 + picocolors: 1.1.1 + source-map-js: 1.2.1 + + postcss@8.5.6: + dependencies: + nanoid: 3.3.11 + picocolors: 1.1.1 + source-map-js: 1.2.1 + + prettier@2.8.8: {} + + prettier@3.7.4: {} + + pretty-bytes@3.0.1: + dependencies: + number-is-nan: 1.0.1 + + pretty-bytes@5.6.0: {} + + prismjs@1.30.0: {} + + promise.series@0.2.0: {} + + prompts@2.4.2: + dependencies: + kleur: 3.0.3 + sisteransi: 1.0.5 + + property-information@6.5.0: {} + + property-information@7.0.0: {} + + property-information@7.1.0: {} + + proxy-from-env@1.1.0: {} + + pump@3.0.2: + dependencies: + end-of-stream: 1.4.4 + once: 1.4.0 + + punycode.js@2.3.1: {} + + quansync@0.2.10: {} + + queue-microtask@1.2.3: {} + + radix3@1.1.2: {} + + randombytes@2.1.0: + dependencies: + safe-buffer: 5.2.1 + + read-cache@1.0.0: + dependencies: + pify: 2.3.0 + + readdirp@3.6.0: + dependencies: + picomatch: 2.3.1 + + readdirp@4.1.2: {} + + reading-time@1.5.0: {} + + rechoir@0.6.2: + dependencies: + resolve: 1.22.11 + + reflect.getprototypeof@1.0.10: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-abstract: 1.24.0 + es-errors: 1.3.0 + es-object-atoms: 1.1.1 + get-intrinsic: 1.3.0 + get-proto: 1.0.1 + which-builtin-type: 1.2.1 + + regenerate-unicode-properties@10.2.0: + dependencies: + regenerate: 1.4.2 + + regenerate@1.4.2: {} + + regex-recursion@6.0.2: + dependencies: + regex-utilities: 2.3.0 + + regex-utilities@2.3.0: {} + + regex@6.0.1: + dependencies: + regex-utilities: 2.3.0 + + regex@6.1.0: + dependencies: + regex-utilities: 2.3.0 + + regexp.prototype.flags@1.5.4: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-errors: 1.3.0 + get-proto: 1.0.1 + gopd: 1.2.0 + set-function-name: 2.0.2 + + regexpu-core@6.2.0: + dependencies: + regenerate: 1.4.2 + regenerate-unicode-properties: 10.2.0 + regjsgen: 0.8.0 + regjsparser: 0.12.0 + unicode-match-property-ecmascript: 2.0.0 + unicode-match-property-value-ecmascript: 2.2.0 + + regjsgen@0.8.0: {} + + regjsparser@0.12.0: + dependencies: + jsesc: 3.0.2 + + rehype-autolink-headings@7.1.0: + dependencies: + '@types/hast': 3.0.4 + '@ungap/structured-clone': 1.3.0 + hast-util-heading-rank: 3.0.0 + hast-util-is-element: 3.0.0 + unified: 11.0.5 + unist-util-visit: 5.0.0 + + rehype-components@0.3.0: + dependencies: + hast-util-is-element: 3.0.0 + unist-util-visit: 5.0.0 + + rehype-expressive-code@0.41.4: + dependencies: + expressive-code: 0.41.4 + + rehype-katex@7.0.1: + dependencies: + '@types/hast': 3.0.4 + '@types/katex': 0.16.7 + hast-util-from-html-isomorphic: 2.0.0 + hast-util-to-text: 4.0.2 + katex: 0.16.27 + unist-util-visit-parents: 6.0.1 + vfile: 6.0.3 + + rehype-parse@9.0.1: + dependencies: + '@types/hast': 3.0.4 + hast-util-from-html: 2.0.3 + unified: 11.0.5 + + rehype-raw@7.0.0: + dependencies: + '@types/hast': 3.0.4 + hast-util-raw: 9.1.0 + vfile: 6.0.3 + + rehype-slug@6.0.0: + dependencies: + '@types/hast': 3.0.4 + github-slugger: 2.0.0 + hast-util-heading-rank: 3.0.0 + hast-util-to-string: 3.0.1 + unist-util-visit: 5.0.0 + + rehype-stringify@10.0.1: + dependencies: + '@types/hast': 3.0.4 + hast-util-to-html: 9.0.5 + unified: 11.0.5 + + rehype@13.0.2: + dependencies: + '@types/hast': 3.0.4 + rehype-parse: 9.0.1 + rehype-stringify: 10.0.1 + unified: 11.0.5 + + remark-directive-rehype@0.4.2: + dependencies: + hastscript: 7.2.0 + unist-util-map: 3.1.3 + + remark-directive@3.0.1: + dependencies: + '@types/mdast': 4.0.4 + mdast-util-directive: 3.1.0 + micromark-extension-directive: 3.0.2 + unified: 11.0.5 + transitivePeerDependencies: + - supports-color + + remark-gfm@4.0.1: + dependencies: + '@types/mdast': 4.0.4 + mdast-util-gfm: 3.1.0 + micromark-extension-gfm: 3.0.0 + remark-parse: 11.0.0 + remark-stringify: 11.0.0 + unified: 11.0.5 + transitivePeerDependencies: + - supports-color + + remark-github-admonitions-to-directives@1.0.5: + dependencies: + '@types/mdast': 4.0.4 + mdast-util-directive: 3.1.0 + unified: 11.0.5 + unist-util-visit: 5.0.0 + transitivePeerDependencies: + - supports-color + + remark-math@6.0.0: + dependencies: + '@types/mdast': 4.0.4 + mdast-util-math: 3.0.0 + micromark-extension-math: 3.1.0 + unified: 11.0.5 + transitivePeerDependencies: + - supports-color + + remark-parse@11.0.0: + dependencies: + '@types/mdast': 4.0.4 + mdast-util-from-markdown: 2.0.2 + micromark-util-types: 2.0.2 + unified: 11.0.5 + transitivePeerDependencies: + - supports-color + + remark-rehype@11.1.2: + dependencies: + '@types/hast': 3.0.4 + '@types/mdast': 4.0.4 + mdast-util-to-hast: 13.2.1 + unified: 11.0.5 + vfile: 6.0.3 + + remark-sectionize@2.1.0: + dependencies: + unist-util-find-after: 4.0.1 + unist-util-visit: 4.1.2 + + remark-smartypants@3.0.2: + dependencies: + retext: 9.0.0 + retext-smartypants: 6.2.0 + unified: 11.0.5 + unist-util-visit: 5.0.0 + + remark-stringify@11.0.0: + dependencies: + '@types/mdast': 4.0.4 + mdast-util-to-markdown: 2.1.2 + unified: 11.0.5 + + request-light@0.5.8: {} + + request-light@0.7.0: {} + + require-directory@2.1.1: {} + + require-from-string@2.0.2: {} + + resolve-from@4.0.0: {} + + resolve-from@5.0.0: {} + + resolve@1.22.10: + dependencies: + is-core-module: 2.16.1 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 + + resolve@1.22.11: + dependencies: + is-core-module: 2.16.1 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 + + restructure@3.0.2: {} + + retext-latin@4.0.0: + dependencies: + '@types/nlcst': 2.0.3 + parse-latin: 7.0.0 + unified: 11.0.5 + + retext-smartypants@6.2.0: + dependencies: + '@types/nlcst': 2.0.3 + nlcst-to-string: 4.0.0 + unist-util-visit: 5.0.0 + + retext-stringify@4.0.0: + dependencies: + '@types/nlcst': 2.0.3 + nlcst-to-string: 4.0.0 + unified: 11.0.5 + + retext@9.0.0: + dependencies: + '@types/nlcst': 2.0.3 + retext-latin: 4.0.0 + retext-stringify: 4.0.0 + unified: 11.0.5 + + reusify@1.1.0: {} + + rollup-plugin-bundle-size@1.0.3: + dependencies: + chalk: 1.1.3 + maxmin: 2.1.0 + + rollup-plugin-postcss@4.0.2(postcss@8.5.6): + dependencies: + chalk: 4.1.2 + concat-with-sourcemaps: 1.1.0 + cssnano: 5.1.15(postcss@8.5.6) + import-cwd: 3.0.0 + p-queue: 6.6.2 + pify: 5.0.0 + postcss: 8.5.6 + postcss-load-config: 3.1.4(postcss@8.5.6) + postcss-modules: 4.3.1(postcss@8.5.6) + promise.series: 0.2.0 + resolve: 1.22.11 + rollup-pluginutils: 2.8.2 + safe-identifier: 0.4.2 + style-inject: 0.3.0 + transitivePeerDependencies: + - ts-node + + rollup-plugin-terser@7.0.2(rollup@2.79.2): + dependencies: + '@babel/code-frame': 7.27.1 + jest-worker: 26.6.2 + rollup: 2.79.2 + serialize-javascript: 4.0.0 + terser: 5.43.1 + + rollup-plugin-typescript2@0.32.1(rollup@2.79.2)(typescript@4.9.5): + dependencies: + '@rollup/pluginutils': 4.2.1 + find-cache-dir: 3.3.2 + fs-extra: 10.1.0 + resolve: 1.22.11 + rollup: 2.79.2 + tslib: 2.8.1 + typescript: 4.9.5 + + rollup-plugin-visualizer@5.14.0(rollup@2.79.2): + dependencies: + open: 8.4.2 + picomatch: 4.0.3 + source-map: 0.7.4 + yargs: 17.7.2 + optionalDependencies: + rollup: 2.79.2 + + rollup-pluginutils@2.8.2: + dependencies: + estree-walker: 0.6.1 + + rollup@2.79.2: + optionalDependencies: + fsevents: 2.3.3 + + rollup@4.52.2: + dependencies: + '@types/estree': 1.0.8 + optionalDependencies: + '@rollup/rollup-android-arm-eabi': 4.52.2 + '@rollup/rollup-android-arm64': 4.52.2 + '@rollup/rollup-darwin-arm64': 4.52.2 + '@rollup/rollup-darwin-x64': 4.52.2 + '@rollup/rollup-freebsd-arm64': 4.52.2 + '@rollup/rollup-freebsd-x64': 4.52.2 + '@rollup/rollup-linux-arm-gnueabihf': 4.52.2 + '@rollup/rollup-linux-arm-musleabihf': 4.52.2 + '@rollup/rollup-linux-arm64-gnu': 4.52.2 + '@rollup/rollup-linux-arm64-musl': 4.52.2 + '@rollup/rollup-linux-loong64-gnu': 4.52.2 + '@rollup/rollup-linux-ppc64-gnu': 4.52.2 + '@rollup/rollup-linux-riscv64-gnu': 4.52.2 + '@rollup/rollup-linux-riscv64-musl': 4.52.2 + '@rollup/rollup-linux-s390x-gnu': 4.52.2 + '@rollup/rollup-linux-x64-gnu': 4.52.2 + '@rollup/rollup-linux-x64-musl': 4.52.2 + '@rollup/rollup-openharmony-arm64': 4.52.2 + '@rollup/rollup-win32-arm64-msvc': 4.52.2 + '@rollup/rollup-win32-ia32-msvc': 4.52.2 + '@rollup/rollup-win32-x64-gnu': 4.52.2 + '@rollup/rollup-win32-x64-msvc': 4.52.2 + fsevents: 2.3.3 + + rollup@4.53.3: + dependencies: + '@types/estree': 1.0.8 + optionalDependencies: + '@rollup/rollup-android-arm-eabi': 4.53.3 + '@rollup/rollup-android-arm64': 4.53.3 + '@rollup/rollup-darwin-arm64': 4.53.3 + '@rollup/rollup-darwin-x64': 4.53.3 + '@rollup/rollup-freebsd-arm64': 4.53.3 + '@rollup/rollup-freebsd-x64': 4.53.3 + '@rollup/rollup-linux-arm-gnueabihf': 4.53.3 + '@rollup/rollup-linux-arm-musleabihf': 4.53.3 + '@rollup/rollup-linux-arm64-gnu': 4.53.3 + '@rollup/rollup-linux-arm64-musl': 4.53.3 + '@rollup/rollup-linux-loong64-gnu': 4.53.3 + '@rollup/rollup-linux-ppc64-gnu': 4.53.3 + '@rollup/rollup-linux-riscv64-gnu': 4.53.3 + '@rollup/rollup-linux-riscv64-musl': 4.53.3 + '@rollup/rollup-linux-s390x-gnu': 4.53.3 + '@rollup/rollup-linux-x64-gnu': 4.53.3 + '@rollup/rollup-linux-x64-musl': 4.53.3 + '@rollup/rollup-openharmony-arm64': 4.53.3 + '@rollup/rollup-win32-arm64-msvc': 4.53.3 + '@rollup/rollup-win32-ia32-msvc': 4.53.3 + '@rollup/rollup-win32-x64-gnu': 4.53.3 + '@rollup/rollup-win32-x64-msvc': 4.53.3 + fsevents: 2.3.3 + + run-parallel@1.2.0: + dependencies: + queue-microtask: 1.2.3 + + sade@1.8.1: + dependencies: + mri: 1.2.0 + + safe-array-concat@1.1.3: + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.4 + get-intrinsic: 1.3.0 + has-symbols: 1.1.0 + isarray: 2.0.5 + + safe-buffer@5.2.1: {} + + safe-identifier@0.4.2: {} + + safe-push-apply@1.0.0: + dependencies: + es-errors: 1.3.0 + isarray: 2.0.5 + + safe-regex-test@1.1.0: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + is-regex: 1.2.1 + + safer-buffer@2.1.2: {} + + sanitize-html@2.17.0: + dependencies: + deepmerge: 4.3.1 + escape-string-regexp: 4.0.0 + htmlparser2: 8.0.2 + is-plain-object: 5.0.0 + parse-srcset: 1.0.2 + postcss: 8.5.3 + + sass@1.80.4: + dependencies: + '@parcel/watcher': 2.5.1 + chokidar: 4.0.3 + immutable: 4.3.7 + source-map-js: 1.2.1 + optional: true + + sax@1.4.1: {} + + scrl@2.0.0: {} + + scule@1.3.0: {} + + semver@6.3.1: {} + + semver@7.7.2: {} + + semver@7.7.3: {} + + serialize-javascript@4.0.0: + dependencies: + randombytes: 2.1.0 + + set-function-length@1.2.2: + dependencies: + define-data-property: 1.1.4 + es-errors: 1.3.0 + function-bind: 1.1.2 + get-intrinsic: 1.3.0 + gopd: 1.2.0 + has-property-descriptors: 1.0.2 + + set-function-name@2.0.2: + dependencies: + define-data-property: 1.1.4 + es-errors: 1.3.0 + functions-have-names: 1.2.3 + has-property-descriptors: 1.0.2 + + set-proto@1.0.0: + dependencies: + dunder-proto: 1.0.1 + es-errors: 1.3.0 + es-object-atoms: 1.1.1 + + sharp@0.34.5: + dependencies: + '@img/colour': 1.0.0 + detect-libc: 2.1.2 + semver: 7.7.3 + optionalDependencies: + '@img/sharp-darwin-arm64': 0.34.5 + '@img/sharp-darwin-x64': 0.34.5 + '@img/sharp-libvips-darwin-arm64': 1.2.4 + '@img/sharp-libvips-darwin-x64': 1.2.4 + '@img/sharp-libvips-linux-arm': 1.2.4 + '@img/sharp-libvips-linux-arm64': 1.2.4 + '@img/sharp-libvips-linux-ppc64': 1.2.4 + '@img/sharp-libvips-linux-riscv64': 1.2.4 + '@img/sharp-libvips-linux-s390x': 1.2.4 + '@img/sharp-libvips-linux-x64': 1.2.4 + '@img/sharp-libvips-linuxmusl-arm64': 1.2.4 + '@img/sharp-libvips-linuxmusl-x64': 1.2.4 + '@img/sharp-linux-arm': 0.34.5 + '@img/sharp-linux-arm64': 0.34.5 + '@img/sharp-linux-ppc64': 0.34.5 + '@img/sharp-linux-riscv64': 0.34.5 + '@img/sharp-linux-s390x': 0.34.5 + '@img/sharp-linux-x64': 0.34.5 + '@img/sharp-linuxmusl-arm64': 0.34.5 + '@img/sharp-linuxmusl-x64': 0.34.5 + '@img/sharp-wasm32': 0.34.5 + '@img/sharp-win32-arm64': 0.34.5 + '@img/sharp-win32-ia32': 0.34.5 + '@img/sharp-win32-x64': 0.34.5 + + shebang-command@2.0.0: + dependencies: + shebang-regex: 3.0.0 + + shebang-regex@3.0.0: {} + + shelljs-live@0.0.5(shelljs@0.8.5): + dependencies: + cross-spawn: 7.0.6 + shelljs: 0.8.5 + + shelljs@0.8.5: + dependencies: + glob: 7.2.3 + interpret: 1.4.0 + rechoir: 0.6.2 + + shiki@3.13.0: + dependencies: + '@shikijs/core': 3.13.0 + '@shikijs/engine-javascript': 3.13.0 + '@shikijs/engine-oniguruma': 3.13.0 + '@shikijs/langs': 3.13.0 + '@shikijs/themes': 3.13.0 + '@shikijs/types': 3.13.0 + '@shikijs/vscode-textmate': 10.0.2 + '@types/hast': 3.0.4 + + shiki@3.19.0: + dependencies: + '@shikijs/core': 3.19.0 + '@shikijs/engine-javascript': 3.19.0 + '@shikijs/engine-oniguruma': 3.19.0 + '@shikijs/langs': 3.19.0 + '@shikijs/themes': 3.19.0 + '@shikijs/types': 3.19.0 + '@shikijs/vscode-textmate': 10.0.2 + '@types/hast': 3.0.4 + + side-channel-list@1.0.0: + dependencies: + es-errors: 1.3.0 + object-inspect: 1.13.4 + + side-channel-map@1.0.1: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + object-inspect: 1.13.4 + + side-channel-weakmap@1.0.2: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + object-inspect: 1.13.4 + side-channel-map: 1.0.1 + + side-channel@1.1.0: + dependencies: + es-errors: 1.3.0 + object-inspect: 1.13.4 + side-channel-list: 1.0.0 + side-channel-map: 1.0.1 + side-channel-weakmap: 1.0.2 + + signal-exit@4.1.0: {} + + sisteransi@1.0.5: {} + + sitemap@8.0.0: + dependencies: + '@types/node': 17.0.45 + '@types/sax': 1.2.7 + arg: 5.0.2 + sax: 1.4.1 + + slash@3.0.0: {} + + smol-toml@1.4.2: {} + + source-map-js@1.2.1: {} + + source-map-support@0.5.21: + dependencies: + buffer-from: 1.1.2 + source-map: 0.6.1 + + source-map@0.6.1: {} + + source-map@0.7.4: {} + + sourcemap-codec@1.4.8: {} + + space-separated-tokens@2.0.2: {} + + stable@0.1.8: {} + + stop-iteration-iterator@1.1.0: + dependencies: + es-errors: 1.3.0 + internal-slot: 1.1.0 + + stream-replace-string@2.0.0: {} + + string-hash@1.1.3: {} + + string-width@4.2.3: + dependencies: + emoji-regex: 8.0.0 + is-fullwidth-code-point: 3.0.0 + strip-ansi: 6.0.1 + + string-width@5.1.2: + dependencies: + eastasianwidth: 0.2.0 + emoji-regex: 9.2.2 + strip-ansi: 7.1.2 + + string-width@7.2.0: + dependencies: + emoji-regex: 10.5.0 + get-east-asian-width: 1.4.0 + strip-ansi: 7.1.2 + + string.prototype.matchall@4.0.12: + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.4 + define-properties: 1.2.1 + es-abstract: 1.24.0 + es-errors: 1.3.0 + es-object-atoms: 1.1.1 + get-intrinsic: 1.3.0 + gopd: 1.2.0 + has-symbols: 1.1.0 + internal-slot: 1.1.0 + regexp.prototype.flags: 1.5.4 + set-function-name: 2.0.2 + side-channel: 1.1.0 + + string.prototype.trim@1.2.10: + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.4 + define-data-property: 1.1.4 + define-properties: 1.2.1 + es-abstract: 1.24.0 + es-object-atoms: 1.1.1 + has-property-descriptors: 1.0.2 + + string.prototype.trimend@1.0.9: + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.4 + define-properties: 1.2.1 + es-object-atoms: 1.1.1 + + string.prototype.trimstart@1.0.8: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-object-atoms: 1.1.1 + + stringify-entities@4.0.4: + dependencies: + character-entities-html4: 2.1.0 + character-entities-legacy: 3.0.0 + + strip-ansi@3.0.1: + dependencies: + ansi-regex: 2.1.1 + + strip-ansi@6.0.1: + dependencies: + ansi-regex: 5.0.1 + + strip-ansi@7.1.2: + dependencies: + ansi-regex: 6.2.2 + + strnum@2.1.1: {} + + style-inject@0.3.0: {} + + stylehacks@5.1.1(postcss@8.5.6): + dependencies: + browserslist: 4.25.1 + postcss: 8.5.6 + postcss-selector-parser: 6.1.2 + + stylus@0.64.0: + dependencies: + '@adobe/css-tools': 4.3.3 + debug: 4.4.0 + glob: 10.4.5 + sax: 1.4.1 + source-map: 0.7.4 + transitivePeerDependencies: + - supports-color + + sucrase@3.35.1: + dependencies: + '@jridgewell/gen-mapping': 0.3.13 + commander: 4.1.1 + lines-and-columns: 1.2.4 + mz: 2.7.0 + pirates: 4.0.7 + tinyglobby: 0.2.15 + ts-interface-checker: 0.1.13 + + supports-color@2.0.0: {} + + supports-color@7.2.0: + dependencies: + has-flag: 4.0.0 + + supports-preserve-symlinks-flag@1.0.0: {} + + svelte2tsx@0.7.45(svelte@5.39.8)(typescript@5.9.3): + dependencies: + dedent-js: 1.0.1 + scule: 1.3.0 + svelte: 5.39.8 + typescript: 5.9.3 + + svelte@5.39.8: + dependencies: + '@jridgewell/remapping': 2.3.5 + '@jridgewell/sourcemap-codec': 1.5.5 + '@sveltejs/acorn-typescript': 1.0.6(acorn@8.15.0) + '@types/estree': 1.0.8 + acorn: 8.15.0 + aria-query: 5.3.2 + axobject-query: 4.1.0 + clsx: 2.1.1 + esm-env: 1.2.2 + esrap: 2.1.0 + is-reference: 3.0.3 + locate-character: 3.0.0 + magic-string: 0.30.19 + zimmerframe: 1.1.4 + + svgo@2.8.0: + dependencies: + '@trysound/sax': 0.2.0 + commander: 7.2.0 + css-select: 4.3.0 + css-tree: 1.1.3 + csso: 4.2.0 + picocolors: 1.1.1 + stable: 0.1.8 + + svgo@3.3.2: + dependencies: + '@trysound/sax': 0.2.0 + commander: 7.2.0 + css-select: 5.1.0 + css-tree: 2.3.1 + css-what: 6.1.0 + csso: 5.0.5 + picocolors: 1.1.1 + + swup-morph-plugin@1.3.0(swup@4.8.2): + dependencies: + '@swup/plugin': 4.0.0 + morphdom: 2.7.5 + swup: 4.8.2 + + swup@4.8.2: + dependencies: + delegate-it: 6.2.1 + opencollective-postinstall: 2.0.3 + path-to-regexp: 6.3.0 + + tailwindcss@3.4.19(yaml@2.8.2): + dependencies: + '@alloc/quick-lru': 5.2.0 + arg: 5.0.2 + chokidar: 3.6.0 + didyoumean: 1.2.2 + dlv: 1.1.3 + fast-glob: 3.3.3 + glob-parent: 6.0.2 + is-glob: 4.0.3 + jiti: 1.21.7 + lilconfig: 3.1.3 + micromatch: 4.0.8 + normalize-path: 3.0.0 + object-hash: 3.0.0 + picocolors: 1.1.1 + postcss: 8.5.6 + postcss-import: 15.1.0(postcss@8.5.6) + postcss-js: 4.1.0(postcss@8.5.6) + postcss-load-config: 6.0.1(jiti@1.21.7)(postcss@8.5.6)(yaml@2.8.2) + postcss-nested: 6.2.0(postcss@8.5.6) + postcss-selector-parser: 6.1.2 + resolve: 1.22.11 + sucrase: 3.35.1 + transitivePeerDependencies: + - tsx + - yaml + + tar@6.2.1: + dependencies: + chownr: 2.0.0 + fs-minipass: 2.1.0 + minipass: 5.0.0 + minizlib: 2.1.2 + mkdirp: 1.0.4 + yallist: 4.0.0 + + terser@5.43.1: + dependencies: + '@jridgewell/source-map': 0.3.10 + acorn: 8.15.0 + commander: 2.20.3 + source-map-support: 0.5.21 + + thenify-all@1.6.0: + dependencies: + thenify: 3.3.1 + + thenify@3.3.1: + dependencies: + any-promise: 1.3.0 + + tiny-glob@0.2.9: + dependencies: + globalyzer: 0.1.0 + globrex: 0.1.2 + + tiny-inflate@1.0.3: {} + + tinyexec@0.3.2: {} + + tinyglobby@0.2.15: + dependencies: + fdir: 6.5.0(picomatch@4.0.3) + picomatch: 4.0.3 + + to-regex-range@5.0.1: + dependencies: + is-number: 7.0.0 + + tosource@2.0.0-alpha.3: {} + + tr46@0.0.3: {} + + trim-lines@3.0.1: {} + + trough@2.2.0: {} + + ts-interface-checker@0.1.13: {} + + tsconfck@3.1.6(typescript@5.9.3): + optionalDependencies: + typescript: 5.9.3 + + tslib@2.8.1: {} + + type-fest@4.41.0: {} + + typed-array-buffer@1.0.3: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + is-typed-array: 1.1.15 + + typed-array-byte-length@1.0.3: + dependencies: + call-bind: 1.0.8 + for-each: 0.3.5 + gopd: 1.2.0 + has-proto: 1.2.0 + is-typed-array: 1.1.15 + + typed-array-byte-offset@1.0.4: + dependencies: + available-typed-arrays: 1.0.7 + call-bind: 1.0.8 + for-each: 0.3.5 + gopd: 1.2.0 + has-proto: 1.2.0 + is-typed-array: 1.1.15 + reflect.getprototypeof: 1.0.10 + + typed-array-length@1.0.7: + dependencies: + call-bind: 1.0.8 + for-each: 0.3.5 + gopd: 1.2.0 + is-typed-array: 1.1.15 + possible-typed-array-names: 1.1.0 + reflect.getprototypeof: 1.0.10 + + typed-query-selector@2.12.0: {} + + typesafe-path@0.2.2: {} + + typescript-auto-import-cache@0.3.6: + dependencies: + semver: 7.7.3 + + typescript@4.9.5: {} + + typescript@5.9.3: {} + + uc.micro@2.1.0: {} + + ufo@1.6.1: {} + + ultrahtml@1.6.0: {} + + unbox-primitive@1.1.0: + dependencies: + call-bound: 1.0.4 + has-bigints: 1.1.0 + has-symbols: 1.1.0 + which-boxed-primitive: 1.1.1 + + uncrypto@0.1.3: {} + + undici-types@7.12.0: {} + + undici@6.21.2: {} + + unicode-canonical-property-names-ecmascript@2.0.1: {} + + unicode-match-property-ecmascript@2.0.0: + dependencies: + unicode-canonical-property-names-ecmascript: 2.0.1 + unicode-property-aliases-ecmascript: 2.1.0 + + unicode-match-property-value-ecmascript@2.2.0: {} + + unicode-properties@1.4.1: + dependencies: + base64-js: 1.5.1 + unicode-trie: 2.0.0 + + unicode-property-aliases-ecmascript@2.1.0: {} + + unicode-trie@2.0.0: + dependencies: + pako: 0.2.9 + tiny-inflate: 1.0.3 + + unified@11.0.5: + dependencies: + '@types/unist': 3.0.3 + bail: 2.0.2 + devlop: 1.1.0 + extend: 3.0.2 + is-plain-obj: 4.1.0 + trough: 2.2.0 + vfile: 6.0.3 + + unifont@0.5.2: + dependencies: + css-tree: 3.1.0 + ofetch: 1.4.1 + ohash: 2.0.11 + + unist-util-find-after@4.0.1: + dependencies: + '@types/unist': 2.0.11 + unist-util-is: 5.2.1 + + unist-util-find-after@5.0.0: + dependencies: + '@types/unist': 3.0.3 + unist-util-is: 6.0.1 + + unist-util-is@5.2.1: + dependencies: + '@types/unist': 2.0.11 + + unist-util-is@6.0.0: + dependencies: + '@types/unist': 3.0.3 + + unist-util-is@6.0.1: + dependencies: + '@types/unist': 3.0.3 + + unist-util-map@3.1.3: + dependencies: + '@types/unist': 2.0.11 + + unist-util-modify-children@4.0.0: + dependencies: + '@types/unist': 3.0.3 + array-iterate: 2.0.1 + + unist-util-position@5.0.0: + dependencies: + '@types/unist': 3.0.3 + + unist-util-remove-position@5.0.0: + dependencies: + '@types/unist': 3.0.3 + unist-util-visit: 5.0.0 + + unist-util-stringify-position@4.0.0: + dependencies: + '@types/unist': 3.0.3 + + unist-util-visit-children@3.0.0: + dependencies: + '@types/unist': 3.0.3 + + unist-util-visit-parents@5.1.3: + dependencies: + '@types/unist': 2.0.11 + unist-util-is: 5.2.1 + + unist-util-visit-parents@6.0.1: + dependencies: + '@types/unist': 3.0.3 + unist-util-is: 6.0.0 + + unist-util-visit-parents@6.0.2: + dependencies: + '@types/unist': 3.0.3 + unist-util-is: 6.0.1 + + unist-util-visit@4.1.2: + dependencies: + '@types/unist': 2.0.11 + unist-util-is: 5.2.1 + unist-util-visit-parents: 5.1.3 + + unist-util-visit@5.0.0: + dependencies: + '@types/unist': 3.0.3 + unist-util-is: 6.0.0 + unist-util-visit-parents: 6.0.1 + + universalify@2.0.1: {} + + unstorage@1.17.1: + dependencies: + anymatch: 3.1.3 + chokidar: 4.0.3 + destr: 2.0.5 + h3: 1.15.4 + lru-cache: 10.4.3 + node-fetch-native: 1.6.7 + ofetch: 1.4.1 + ufo: 1.6.1 + + update-browserslist-db@1.1.3(browserslist@4.24.4): + dependencies: + browserslist: 4.24.4 + escalade: 3.2.0 + picocolors: 1.1.1 + + update-browserslist-db@1.1.3(browserslist@4.25.1): + dependencies: + browserslist: 4.25.1 + escalade: 3.2.0 + picocolors: 1.1.1 + + util-deprecate@1.0.2: {} + + vfile-location@5.0.3: + dependencies: + '@types/unist': 3.0.3 + vfile: 6.0.3 + + vfile-message@4.0.3: + dependencies: + '@types/unist': 3.0.3 + unist-util-stringify-position: 4.0.0 + + vfile@6.0.3: + dependencies: + '@types/unist': 3.0.3 + vfile-message: 4.0.3 + + vite@6.3.6(@types/node@24.5.2)(jiti@1.21.7)(lightningcss@1.29.3)(sass@1.80.4)(stylus@0.64.0)(terser@5.43.1)(yaml@2.8.2): + dependencies: + esbuild: 0.25.10 + fdir: 6.5.0(picomatch@4.0.3) + picomatch: 4.0.3 + postcss: 8.5.6 + rollup: 4.52.2 + tinyglobby: 0.2.15 + optionalDependencies: + '@types/node': 24.5.2 + fsevents: 2.3.3 + jiti: 1.21.7 + lightningcss: 1.29.3 + sass: 1.80.4 + stylus: 0.64.0 + terser: 5.43.1 + yaml: 2.8.2 + + vite@6.4.1(@types/node@24.5.2)(jiti@1.21.7)(lightningcss@1.29.3)(sass@1.80.4)(stylus@0.64.0)(terser@5.43.1)(yaml@2.8.2): + dependencies: + esbuild: 0.25.12 + fdir: 6.5.0(picomatch@4.0.3) + picomatch: 4.0.3 + postcss: 8.5.6 + rollup: 4.53.3 + tinyglobby: 0.2.15 + optionalDependencies: + '@types/node': 24.5.2 + fsevents: 2.3.3 + jiti: 1.21.7 + lightningcss: 1.29.3 + sass: 1.80.4 + stylus: 0.64.0 + terser: 5.43.1 + yaml: 2.8.2 + + vitefu@1.1.1(vite@6.3.6(@types/node@24.5.2)(jiti@1.21.7)(lightningcss@1.29.3)(sass@1.80.4)(stylus@0.64.0)(terser@5.43.1)(yaml@2.8.2)): + optionalDependencies: + vite: 6.3.6(@types/node@24.5.2)(jiti@1.21.7)(lightningcss@1.29.3)(sass@1.80.4)(stylus@0.64.0)(terser@5.43.1)(yaml@2.8.2) + + vitefu@1.1.1(vite@6.4.1(@types/node@24.5.2)(jiti@1.21.7)(lightningcss@1.29.3)(sass@1.80.4)(stylus@0.64.0)(terser@5.43.1)(yaml@2.8.2)): + optionalDependencies: + vite: 6.4.1(@types/node@24.5.2)(jiti@1.21.7)(lightningcss@1.29.3)(sass@1.80.4)(stylus@0.64.0)(terser@5.43.1)(yaml@2.8.2) + + volar-service-css@0.0.67(@volar/language-service@2.4.27): + dependencies: + vscode-css-languageservice: 6.3.9 + vscode-languageserver-textdocument: 1.0.12 + vscode-uri: 3.1.0 + optionalDependencies: + '@volar/language-service': 2.4.27 + + volar-service-emmet@0.0.67(@volar/language-service@2.4.27): + dependencies: + '@emmetio/css-parser': 0.4.1 + '@emmetio/html-matcher': 1.3.0 + '@vscode/emmet-helper': 2.11.0 + vscode-uri: 3.1.0 + optionalDependencies: + '@volar/language-service': 2.4.27 + + volar-service-html@0.0.67(@volar/language-service@2.4.27): + dependencies: + vscode-html-languageservice: 5.6.1 + vscode-languageserver-textdocument: 1.0.12 + vscode-uri: 3.1.0 + optionalDependencies: + '@volar/language-service': 2.4.27 + + volar-service-prettier@0.0.67(@volar/language-service@2.4.27)(prettier@3.7.4): + dependencies: + vscode-uri: 3.1.0 + optionalDependencies: + '@volar/language-service': 2.4.27 + prettier: 3.7.4 + + volar-service-typescript-twoslash-queries@0.0.67(@volar/language-service@2.4.27): + dependencies: + vscode-uri: 3.1.0 + optionalDependencies: + '@volar/language-service': 2.4.27 + + volar-service-typescript@0.0.67(@volar/language-service@2.4.27): + dependencies: + path-browserify: 1.0.1 + semver: 7.7.3 + typescript-auto-import-cache: 0.3.6 + vscode-languageserver-textdocument: 1.0.12 + vscode-nls: 5.2.0 + vscode-uri: 3.1.0 + optionalDependencies: + '@volar/language-service': 2.4.27 + + volar-service-yaml@0.0.67(@volar/language-service@2.4.27): + dependencies: + vscode-uri: 3.1.0 + yaml-language-server: 1.19.2 + optionalDependencies: + '@volar/language-service': 2.4.27 + + vscode-css-languageservice@6.3.9: + dependencies: + '@vscode/l10n': 0.0.18 + vscode-languageserver-textdocument: 1.0.12 + vscode-languageserver-types: 3.17.5 + vscode-uri: 3.1.0 + + vscode-html-languageservice@5.6.1: + dependencies: + '@vscode/l10n': 0.0.18 + vscode-languageserver-textdocument: 1.0.12 + vscode-languageserver-types: 3.17.5 + vscode-uri: 3.1.0 + + vscode-json-languageservice@4.1.8: + dependencies: + jsonc-parser: 3.3.1 + vscode-languageserver-textdocument: 1.0.12 + vscode-languageserver-types: 3.17.5 + vscode-nls: 5.2.0 + vscode-uri: 3.1.0 + + vscode-jsonrpc@8.2.0: {} + + vscode-languageserver-protocol@3.17.5: + dependencies: + vscode-jsonrpc: 8.2.0 + vscode-languageserver-types: 3.17.5 + + vscode-languageserver-textdocument@1.0.12: {} + + vscode-languageserver-types@3.17.5: {} + + vscode-languageserver@9.0.1: + dependencies: + vscode-languageserver-protocol: 3.17.5 + + vscode-nls@5.2.0: {} + + vscode-uri@3.1.0: {} + + web-namespaces@2.0.1: {} + + webidl-conversions@3.0.1: {} + + whatwg-encoding@3.1.1: + dependencies: + iconv-lite: 0.6.3 + + whatwg-mimetype@4.0.0: {} + + whatwg-url@5.0.0: + dependencies: + tr46: 0.0.3 + webidl-conversions: 3.0.1 + + which-boxed-primitive@1.1.1: + dependencies: + is-bigint: 1.1.0 + is-boolean-object: 1.2.2 + is-number-object: 1.1.1 + is-string: 1.1.1 + is-symbol: 1.1.1 + + which-builtin-type@1.2.1: + dependencies: + call-bound: 1.0.4 + function.prototype.name: 1.1.8 + has-tostringtag: 1.0.2 + is-async-function: 2.1.1 + is-date-object: 1.1.0 + is-finalizationregistry: 1.1.1 + is-generator-function: 1.1.0 + is-regex: 1.2.1 + is-weakref: 1.1.1 + isarray: 2.0.5 + which-boxed-primitive: 1.1.1 + which-collection: 1.0.2 + which-typed-array: 1.1.19 + + which-collection@1.0.2: + dependencies: + is-map: 2.0.3 + is-set: 2.0.3 + is-weakmap: 2.0.2 + is-weakset: 2.0.4 + + which-pm-runs@1.1.0: {} + + which-typed-array@1.1.19: + dependencies: + available-typed-arrays: 1.0.7 + call-bind: 1.0.8 + call-bound: 1.0.4 + for-each: 0.3.5 + get-proto: 1.0.1 + gopd: 1.2.0 + has-tostringtag: 1.0.2 + + which@2.0.2: + dependencies: + isexe: 2.0.0 + + widest-line@5.0.0: + dependencies: + string-width: 7.2.0 + + wrap-ansi@7.0.0: + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + + wrap-ansi@8.1.0: + dependencies: + ansi-styles: 6.2.3 + string-width: 5.1.2 + strip-ansi: 7.1.2 + + wrap-ansi@9.0.2: + dependencies: + ansi-styles: 6.2.3 + string-width: 7.2.0 + strip-ansi: 7.1.2 + + wrappy@1.0.2: {} + + xxhash-wasm@1.1.0: {} + + y18n@5.0.8: {} + + yallist@3.1.1: {} + + yallist@4.0.0: {} + + yaml-language-server@1.19.2: + dependencies: + '@vscode/l10n': 0.0.18 + ajv: 8.17.1 + ajv-draft-04: 1.0.0(ajv@8.17.1) + lodash: 4.17.21 + prettier: 3.7.4 + request-light: 0.5.8 + vscode-json-languageservice: 4.1.8 + vscode-languageserver: 9.0.1 + vscode-languageserver-textdocument: 1.0.12 + vscode-languageserver-types: 3.17.5 + vscode-uri: 3.1.0 + yaml: 2.7.1 + + yaml@1.10.2: {} + + yaml@2.7.0: {} + + yaml@2.7.1: {} + + yaml@2.8.2: {} + + yargs-parser@21.1.1: {} + + yargs@17.7.2: + dependencies: + cliui: 8.0.1 + escalade: 3.2.0 + get-caller-file: 2.0.5 + require-directory: 2.1.1 + string-width: 4.2.3 + y18n: 5.0.8 + yargs-parser: 21.1.1 + + yauzl@2.10.0: + dependencies: + buffer-crc32: 0.2.13 + fd-slicer: 1.1.0 + + yocto-queue@1.2.1: {} + + yocto-spinner@0.2.3: + dependencies: + yoctocolors: 2.1.2 + + yoctocolors@2.1.2: {} + + zimmerframe@1.1.4: {} + + zod-to-json-schema@3.24.6(zod@3.25.76): + dependencies: + zod: 3.25.76 + + zod-to-ts@1.2.0(typescript@5.9.3)(zod@3.25.76): + dependencies: + typescript: 5.9.3 + zod: 3.25.76 + + zod@3.25.76: {} + + zwitch@2.0.4: {} diff --git a/postcss.config.mjs b/postcss.config.mjs new file mode 100644 index 0000000..632eeda --- /dev/null +++ b/postcss.config.mjs @@ -0,0 +1,11 @@ +import postcssImport from 'postcss-import'; +import postcssNesting from 'tailwindcss/nesting/index.js'; +import tailwindcss from 'tailwindcss'; + +export default { + plugins: { + 'postcss-import': postcssImport, // to combine multiple css files + 'tailwindcss/nesting': postcssNesting, + tailwindcss: tailwindcss, + } +}; diff --git a/public/favicon/favicon-dark-128.png b/public/favicon/favicon-dark-128.png new file mode 100644 index 0000000000000000000000000000000000000000..7422ce8289ac84762cd53e9f52d25fb1cc7e99d6 GIT binary patch literal 1745 zcmc(g|3A}<9>+iXY`$$XY!frtY+?yVQqi&57tEqaj_6`U%DEcC*M|$>--h>@pwI7ugClS^ZW6Bm4qK=o5Stk z005YCf&(J9Qt%h1##{b~mN>W-W*NaTSpa~*`~?KKdd+rg3CW6JGXe3C{oK|7JHippLIT``MQDZ+RCgZ44t&{(Gc75~A zn-uGq-|PGJlUb_YbN3%SqKI_07FzhG$E0H>w2QbbnB?q(>i?dt8?R}Pbe)bUZlZub zv%a*vhx19y#@xr#QJSb^+(E3@4YO`WZM#<$u zNPOTd2SCYSGP-GAtaJkI#;5?%!NAecORNqJN+BBL(SrBc-t^erm0xN3DgWW?`~7V( zO&)WuP@R$N=2*1F2OAu^#*jbS3E1ax^f_Qrw_V5`^-PfrrdEdxsL-}f$>`MPVc~)2 zK=TZFy@>r>A$I2(sWB7IO$LVZnLqB=wA+KB9daho%xx*-sdvpGBhNLx*FsXE3r_ju zb?CjE!YEcZm8q*NR@_ac>ii+nwHdQr7dTEY(r*5gXzKYh_oAFdEK!Dg_Olo-bEndb z%O9#7%OjI1riQu1lwgfdvQm#Mf_5(owBLU&Y_u2EKKZ=#aj|IvZ#4{DnN)qeVf?E10VXu4v>P5n@BJiM zd>80I#2L%hm(f28&(^AiVgk~v6q~p2VoPk2;RO`jxI+@~TTdZ&B6nlgAC&^nKJt=| zN*T_X5R_=w$j5Wz%DvNLjnoQ+?kV-APr179+&qJn37P2Y!`dv|S{G9(0Uq7Mwl1fx zzpJ-A9i|1V8a{H>W_1Qz36&B}0jCgPY4=ccohfMGXu&4oR2Fi$r@qARzz=QfFk1qv z@NIy0lX=Xe{+3jFQSVo<8sH(wx^zWzLSqM;4bXz2zT~zM$f8dwINufyYrc*5;gMei zSdHR##U0(3J{EKySu_-FML$3HM3!5S=J+tN=qLYwnh!lA_pxuuuf--UyrDq8ipJ1; zr~XEW`!*8v?Tm$nnd|$$%<)Lo-&@;L5loz^$|A4ug&lD{E6V&XjfLv;Ch^*3l4R>v zCoyG!gTEn@j+d|8=ZC>*xc3#SMOLi<^BjK7U=ufwUw*SKBruzy*NL7t&7atcJmLH5oypceNCjDp%xGHO2kP;3vng)0?Y~ryTi?saT)A$f^CW4dlg>!&S=OVyMJ)}`lEQx?+U;K9y09^x>%(`fs+;ZFjc Wx9XjHgOIb;KmaH3aDbSZQ20Niy6&L> literal 0 HcmV?d00001 diff --git a/public/favicon/favicon-dark-180.png b/public/favicon/favicon-dark-180.png new file mode 100644 index 0000000000000000000000000000000000000000..de0f89b18b92a4eccf8c257b60d26902f0ca0d5a GIT binary patch literal 2382 zcmdUx>mw5iAIC>hES7s#VdXl?rMYHpq@y{bLkzQ&OQKvlwa7dhlS@t{dWPk)IT$wg zh9k$NIU%>kDVJp=%v{ECzvS{bf5!9T`}_Vr-#5P(-#5RcU!3e^q`}ev06+$H-OlCE z+5hUeYf1v9|?O^qrYK1c`e#jy3>5bt-Vz z=O_Shd=h16pP#o@ho+!Qk(Kcp= z<70LLE||E6ovTq>>4toJqUWqfehImv)-DBU9rLeI`{(DoaZ&flvXH@V%?j;7kiWdH zDYx66dI1@wqHQL~+MUnGWF~R_?=Ko~B~;-#ph;Wj_ZKy}kRI^VQAnroBG3;Kx08+@ zwmWh*76(jxQFFylESRCzUW&rZhnPUBp@vdE?cW3(59txh3koLT@h_WJJUy2vWanHE zWhXf~s0`VmJW2Fy(GXA82l|n6l>MiW9Y(jM3bb3N{7rr;v7gJIBmg$|s*DHyLPtMoZ!JIx zs{)n_@W}W4b9hM#e&j5373GsJw?LgABH%+TvwnZ}E01ty&TPJ)WjmjA#}SatUKe7E zXe@5E)wp77U4`2_uXyj1t<4o~J5*`MCqMb-u?BLL2u?A0Yxknd`mlM^S8skQ;Z_Pj zW>EZS9!ndEWg0hL5MAg%i4EYb5Bv+J>3k%|jQ0`~&)_4!A1n+S+ zo;809`(zX7!e5PTEpITIi==~o=G1)3>+CA8^y;{LJ5B>Z;;lCP*bL1i`h1pMc=ha< zx8@W{$k?8T<8_A|QOTGI)v`?M;>cJ|S^CgnlA2XX;Vmz1KC(F&S#c2I&mb<)*)V+`T>~ld@Mbo-T#M%Aj zrDNq?IQ9ecLI3HumD8IoCGvA?XZnLK|E&|p^Tq9aZ7PkkEUpAZ?{=#^f=3x#?@E^B zEx@0F1&F;pZrOYp7R8c+0%uTxhyAn6%ZT2*g)P!&blwN_pQ#N98c#Sy;0 z^=ARszT8lw5+jGAVdaBW-L7=g&J1jd6F7j$4q=EBi68cZWBU?s7Ku!hghAfcs+5Fn z-V*_%+(bc0F&fJ5`aE2$kF#NSq3LhE{%!$VFfUK|fFU4SOxt-$&y+V zH3r>EYFv$M$eilWO+r5S@Sx?u@F?Naxdmf6q2ds#s;*62flSKrc!J4MbE8 z%ebQ@2muj<%|$nb-RydC1+vp}fNLnd_9MDG4U60mX>paQQfu$`3>_RcmK^7o_|P7S zcN=Z^y6g_bqr^t1p|DUF3DjjQ->~jgQWhn|Fiyo0r0hzg&MlJ6%8! z-(Zcba0-2{EO)yfoh>Q+N7mz={aTc|ng9CxwZ-86*@pV)I{R=@+3|riJ33{otvJll z8DCNxJw)0bK8=$>JDZUE_Uy+8M3eUM5?+Q4sV#lNfkAH8 zjsdY;1E1EEk-e2$6Sc%;ZeXB0)g!@Uz(giMiY2ifuf&A8xDSCM=_*IBdp)ST2*Tfr zVc!}AQFi5sF!_x5jqO*Yfo6-@bU+YuhQ>a&Qv(R%>9$igDhI+fY)*?3=5QdQO$^(B zjS!Y`vAJQ=Zs1u9MJPT4@swek7$&sUI=rwP8kOZ%w5sYFq&fA=Jvyzi_!Tt84ktYE zmWhwjb_2KH_34QK;)fcW{U}#-VjO{dP8oEM1a+O$pD@yiIlF#RunG7Qs3%4O*ry}gR=0qqpR)=FSqCLP z7(das$`%W!;wmf9#oV=GK+#784m5=IzajeVfc0iT>&Y0U4t@q3eyQH7lG zty1AwK!%ypphp$|{EIUj3;mv3VM;fFk3#R0Lsd9%6llm zi!1W|BQ^0?kF2w(G)WJ`=R&o~brajsiZx`!Z!c)~YnnH(SG`kGS)ACC8W=AjA;MHG g)7~@8xo`=1Afou$f&tust=!UjI<$g#AmLOB)8-mhRmy3*M1}-^!WR%8}e3 zxgspe)iC+k$WhImR!W%Be0~0m?+?%Oyq@QIJ-z`07>f$=bZMH{x8Ht z_StDVSae?wgkEqD2LLYfFCd_(SYbbeggaSTfZE}sEBgjUFt;@a;O`vxE?#(l5NLhQ z+$9>qooNrh%$Do>9vOr5Hx_GGZXI>>C!hwDRfXro9aB(+DZ@Af*_`R)yR8LUuHSj5 zY6^sY@guUq|L zlK6;VE8W!IZY<-y*kgFC*Gu6!J^;@+Em`VseEW~i>!~*kvW)S;tZPjqYX@6tDY(Ew zfzac2|H*{ou?IK)>6s8q>{o?2OPZninNG5TC-i%<3ROA_+Lu(p<2Cu7w{aGuC85W& znh+^Rbnr58voV&SfjLX-_#-P9k)l_4Cmp6NyBE^^Hlse&G9;|f0nw{SnfUA_)67%2 zr0IXK8-h%B;JGWXd!`~E^G>y*v&J24*p1}@66Z~zDLyVcyHytL$)kf;C7!?P4+OaR zKW|uO;5=nb&tvZS>9YAx1U~!+C9d-+f(ODaA zac7Yl;O`G?&eMfgrC0IOxAhF`6QPJLZk@O`u1&KQ4OI-1L}cz&f)%%e#H3DQ!#D8y z1mQB}Cwim(L1P^_jfqZl!K5I9H~B-@ItZtBcvYyB)bXgK7dr&L)1mD~cuUPUmzWzG zjot)+jWU&?|9L5+h+DZTfoK-kI2Df`a2tzsoIVALIbg0)*kd_j@LbE`AWQXxi83Pl z=J03bXnec-nV%MszK%dCZ_r=}Li?2{-=*>4w1@J0CBuJ$k_Z2-d?Iq59?c-T z-xr^ZX*>BSnA^YPa|<(-)A`@Ht**R>1pfBkBk~A?C_2xp5?$B{IVwI^&!8F|H8EBX zJ*)Jl$)njU_Qf1CYO)B0;d?5PRksNv0jtmV29!@r5E3G?w0TTJb=OSxjtQbkGb@O>d9f-sLapGDOC8>*5l1P6e!w9ot^xC#TDjt)W|=l)k=I+jcfD3s9uE zpR#D_RU++1RbxgHZc@2}-@2xP8vp%uNI%$ z!xo2BOrb%0@#}RtDtctW)Lid3k+FA&=plQJ*j#GY5uD62RlPu8H*X1+lhLerBIIhM zz3eJv>aHZ^aAzv#T?y0Z2)#T2O7kSc8+jqW)=wtdT8o&q2%@?nS|3YIRV0{s;!*Mx-$R`jqH#x5M%IyX51WFLzgTMm*84|+#b|+Ln~g8Ijl0dHUDFmU9Z-mN1yv?7q>j#u>+$QsmQ-_EsGwOHnQP+DHA8)0f!(I;(+kSWhtHX z0c$Ow6&W8L-_S}-!S09it7)$*=jwFg-0w~A6)ecyJ_&mVPu^qS`h#3;%OF$;>2dBCh3P)#Tk*q`fnp&M^TWYNmVq&vM16vB;1Ye@> z*4!C(kSE`;@b&xwVQzAEjaNul$uXO8jV5xwez|A%SZ}SH6yF#9qOVC2Z}l;TH(jW# ze&^#=mP+@oeKzVOhhTGaKIa51O$O9;jZ^n_jq6e;mn&#S3}LgC)O8~HmhvIB2+;!_ z=ReJ?_pNN7><<7J=MsEzH_#jf(KZc61aO%%SLAE2O3m7Jpm%jm{|Mwu+eQ#ffU0ED z?Bi`#pZ)wSrR7R7Hqx!ZAjg4s+XV%N2DO6_5y7Sc)UC~#So4-OkB@3TrbqdFXm%BI zmWsVNYV0xqKnF)(Bs3e)^@IRh40s&}|EIJGt zG!uu&&zchS8ZDxFY*1z!^Y~R$_O5xm&3{Z0v?5mz(;x%rvY#6v5ecdEA7S}$3n3i8 zf+kQIST>W^^sDnh6VNE-vV0=jFoUX)O8nI>tuIF?cM4*oU;IuXRXxsQZ|?ZjjCDzn z91eS5hr|6Q?x)?T-KJlux*hdr=3b~fc;IRz*Y!D;_<9ZMn(7a&UrM&Cv44ib{?#Ya zC^rbZ;PYFr#dO&RM|*?5Y}4i9Q28^ZTKP}DeS78_R|L6;M-}Azp@37Fr+^x=F~;VO z&K+9h0jJ1kk2qK2O_h{2GbVLY{z3P>|6=2Vad^%=h&!lt1y*2!5mf0=5}`B;vAog+ zA*gS+rewo{mZThzlka7x;z|pud#M8naRS$~qGoTLQLI#iuTI!XSjO49^FQvqd$If`6a^lT=>RV!_4Wh6Ti`GxANMKe@~3K bOACRd7p*PeUZP&?KQLfzX?L#H!Z+!ElH!Qc literal 0 HcmV?d00001 diff --git a/public/favicon/favicon-dark-32.png b/public/favicon/favicon-dark-32.png new file mode 100644 index 0000000000000000000000000000000000000000..fce9b80ae011a32ac1c68988b4e784e34d14ada4 GIT binary patch literal 426 zcmV;b0agBqP)Y_4&I>Y$^vhIIx+zhW4bb>j2-wRU}zELxC;zz z+UsP;9rBaTvSdZyFSbunfC5Amb0u6E*(2q;-=x<-B>3 zj$|A9JC_W8I1G3=hd)kgJnU(!Zyyu%?%y$dnP4>j!R~g5qx}Y=#u_ZqmLni7{NnmG z51ytT8l0VOSd$2}g`0=Zxo~0hMftASLKS#?8mkWtpTFT;pdPAA`7SsY*lOx$ESJ%_ z!12NQ!d;L{D4k#nwF?C41i6fIA0&9QSwow}EVkitfiei-nM$A%s01p3l@J)fAAJ$% z!5@A37{xrfg&%eTW6T{-x+tG6XAklj`TjMVl1Rus$y|6rq{Vebc6TKE4~~m@zc;)? Un!qM4{r~^~07*qoM6N<$f(YHKTL1t6 literal 0 HcmV?d00001 diff --git a/public/favicon/favicon-light-128.png b/public/favicon/favicon-light-128.png new file mode 100644 index 0000000000000000000000000000000000000000..83dc7c7bd127f3d31ebb614abc6bcdf8fc06742b GIT binary patch literal 2054 zcmc(g_dnYUAH}~xMiF9EN$p*|TICj%8nGI+bFHEhJKUYvBMOAofcjAiq$OTY|!|S4;u&g!ES~@CBl6(E!k#Ch*f63;@sqD|58d z9ni*t{S9$vY3LTS0OW2(fL1y;Y0^zi`^&S9p)h2&Is6T*FvYZd702GzFRdMfQ2qa2SeiH1p)auyl*eyI z1x5-pQOv{T0t$~&>qaCBq@*Djfk{%~>2o>n@m~oy)hmacqVGgRb7p+snz5n=JO8C! z;V~k#xLU%MI^ozGV7-W1=`)CD!vh)UwX1^uF71F@d&rDbI8{E?kkm%|$uRL*;Z?TF zsSi}Y1T1cOBgo=Aqlv==SH49S2n(b@uh-P{! zs7Z*EvfGCOogR>=2YEFTrZ>pANfKvkGN@7Qu8>K%$A6mgOEw_|AI;ltqALuwFGnoW zr@VxMgHk=Q!ZP@*%0NZ{vn~cIwI@`1R&J4#RpVQ}ackrfUrj=2>z(}{ zpi;vaMl(*$<=K+#bG2Fkrhw{g^P#=hJ$me<(jj7VUh$>xX`k}_o}~1d>52XpjJU1! zTzS~kt!YiSLSkx4>hjZkN3D?MKfa-Z$fbB;n-&}y1-F|62E?XkuZFE1xvYYpZ% z=n31tb+S;VCJ!Y%F;hb0uYPnC*LpL~EQbV(xUY7dwXlNXkKTi1Cij`Wh6)QM z4PJQUbk@Ne@_DR+`lwy+!vZ^KIN<$y>6I1ej(C z5XR24vyM9=>>V%{YA>OfRg<@_9q*7$$aecrSdHsEKUC9!6nj>ryn4OfI-`tMVZvkL zdT){t62H0@4FnhGCJyCm!jQ3Qb3A){vLyerx(b5gm)+e1I=NK!{7*!7Rr^ak7XbGb zxOKnIE3M2lCMfrm&qc4$Z5w&H6<&waJ_?q%flK&m5Ewp(%cU{Ff=k`*yT$Uc ztMtIuzQ@_KkIgaVjrZJk0vt6sgt4`oJ^E!3Qe}HsPup46k8_O#?^@=XSO-VR_24+OmQWJ;Zl?b2J2qw6@9*M^C*KrFiL2gAYa@ zeew*W>44x?i67!(WK2dr;fW%Omcq4wvbQuZ{i=4JzG<4`p{ezser|?tcx3tnZM@rs zxJx+WmV6&iO!vX<*KU6qe!%02X-sB$jmJwzq*8)_tp(nj2Qnh3sD@Hp_Q8ZQ@izC6p zi|f}df_Um-(=J}flH4uAfQ&&^Fi+Wjiu(I8l~wf226LC#u?8TV#RjI=<&7LAXA{Pi z&p98|F&12htcrt4gY%KpB5_NK!4gEE=-ZC3swhflj`LbW0|*-5O}4ve_I?x%gI{L_ z=g&n078(TDox(Z+;%5(g*&MA}T>|$npvzE{5=qWlL);og@~Q(?I6djnL%tMsHmv*V zQj6Xe8#EX;(&B_`2mFG6P1cYdtTUtEK|4`*<6ZYSdM!tCWGn~pLo%fTqF~C?a>Y4_ z_I;NR(S-Z{SUB9Zh8ijQrCM%%GE_JD%sT(J9H^RLT&40D!<}uw%EHc^Y>H3#A5Sm8 AX8-^I literal 0 HcmV?d00001 diff --git a/public/favicon/favicon-light-180.png b/public/favicon/favicon-light-180.png new file mode 100644 index 0000000000000000000000000000000000000000..bbb666beb651f9db597333a100f9e073d553cff7 GIT binary patch literal 2786 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 literal 0 HcmV?d00001 diff --git a/scripts/new-post.js b/scripts/new-post.js new file mode 100644 index 0000000..2531390 --- /dev/null +++ b/scripts/new-post.js @@ -0,0 +1,59 @@ +/* This is a script to create a new post markdown file with front-matter */ + +import fs from "fs" +import path from "path" + +function getDate() { + const today = new Date() + const year = today.getFullYear() + const month = String(today.getMonth() + 1).padStart(2, "0") + const day = String(today.getDate()).padStart(2, "0") + + return `${year}-${month}-${day}` +} + +const args = process.argv.slice(2) + +if (args.length === 0) { + console.error(`Error: No filename argument provided +Usage: npm run new-post -- `) + process.exit(1) // Terminate the script and return error code 1 +} + +let fileName = args[0] + +// Add .md extension if not present +const fileExtensionRegex = /\.(md|mdx)$/i +if (!fileExtensionRegex.test(fileName)) { + fileName += ".md" +} + +const targetDir = "./src/content/posts/" +const fullPath = path.join(targetDir, fileName) + +if (fs.existsSync(fullPath)) { + console.error(`Error: File ${fullPath} already exists `) + process.exit(1) +} + +// recursive mode creates multi-level directories +const dirPath = path.dirname(fullPath) +if (!fs.existsSync(dirPath)) { + fs.mkdirSync(dirPath, { recursive: true }) +} + +const content = `--- +title: ${args[0]} +published: ${getDate()} +description: '' +image: '' +tags: [] +category: '' +draft: false +lang: '' +--- +` + +fs.writeFileSync(path.join(targetDir, fileName), content) + +console.log(`Post ${fullPath} created`) diff --git a/src/assets/images/demo-avatar.png b/src/assets/images/demo-avatar.png new file mode 100644 index 0000000000000000000000000000000000000000..84320d4c5a80f7d2b5f71bcd42df32332a4abd12 GIT binary patch literal 416179 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

!Fwr*7*2999Nun)=>1+%a?K}^as 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 ?g1ipMS!-e9mXv;lO;F`LzblWA?|?AA>jk}C zm8e|7Xz{0zsy&KI>p?Wa1FWiy950WbnM+%0t%+zqH$qg@hUUd3djSjkeml|8`3W9a zlK60~uCJCYE^L0Ygc$Ya;kW6t_tHfny!_~kxO8CwphZPwC&o!)F33$P;$}93+;9rF-7$rur%$0dw}#eU83A4=h@bO3V2pTu(Js!# zx?C>XI|4mKJ>U}i(^1R}Ch^28OZMDX-~3lfd$Jhp%*gN0dxpcvG>f>fR$=|vRZR{) zFJCaX!ghCU;Ti{74(W`3n&KrGAus&b?e6K_2T)r-i(Ef2x0b~7FD>H8fqoi0x}7Fc z{p>A<=N|te`pC1R?-?RA6{!d|F^Q*W}9K&X0(#Wm9#EbPCn!W`qSDxnvULX4q-Z=@cmla2b z^jlm987ks|R2(aFr_e}HsoLSyj#j){jXK+2I4NX-mquk>MihySS2?%CxbM#6_EW$P ziSoOsfrUK;$BJY%YglI_=rE>u1i$}i4Z9~&nCRC70u9(OR;o!9%W>?Qq=7a#j3yhr znNC}tF8&0+zk8vFjKIm#Ml!I4pcm)G+qkYoMtkCZdfN-6Td;?IN1UJszXby6J*2MB zcZS|nzx~=i>t(lhxp+wV*dimRoR(R>ANIXYZGHcGa5FU9L8p|hVBN7z@=iH=@h%>` zI_O}!OYelew(%fHBe1wGo(rZ2!v;p<2+dg49j@gy41VNO*chM2+7J8yqMS2s=kI~Y z*jGA^_k}i7 z=vk28@6j}ka2gW{x}*$pu4VcKK#a;A`c$yKZ$hoDUrgzaz{Z9%2IN<$__byzO)}|d zc6}sBJ27t5!r3H3q-~I0E6FiP8Wn5r1hF}k#hOT)lpuIfZAg@^yN!kQBv$9jh~&Z; z+>@}eZ51Gmg?DTN(QO6G&5JpU(*US1AXWWiHV-$twZ~D#16;xfnI=Iv8$Eh0ZBfdc z%d_hGJTQ?$+r{Ltn1Momtb^^w3v7&38mMnn+cK33RZQM8je*_z*m5f{yJg48K=lv^Gd_I) zh2@LbJ5j{d)eN3~X&s05q|w)(#%6v4FMRYD@#D9Y@Q%A@?1eTf%gXfmd2tz8dgCRz z8!hheLq+a(O{;t9Mx!#-Pvk>?I=+hW`pfu>*0+$%^_8X5g{Z^_r;cLj!ZRHFetzY3 zb7geU9n>MbRB2FJe=W+MUK5t9}S=lJ91N#)mpFJ z5%d-Go7Cs+!IqfvxqmNifev`-9oQ!BgMxv2Iq>3bv?s41fNO&V192a=qumyIdG*5f z`FpWlGOA8&dwZ!A&T%eQmx zttmU_=*4y7-Fbp^{wxr5F@Q*%)^}YMC_MP9s z^@KB5zaH|yx{PaEjD7RSZ+rmz7iMwmeRm>pG>`19Ahawe`W)l1$JcM>;fx` zfh}baOccVm?hWJo)g=_bN^|F^-=nwc6_-Dd&jsC8AJizW>&V>_21dp`{(ikoGV(IhRXAs7#|K{?oa+D{^@t`$H-tGX*pV@Ks9o0#P)*fAjh=jml3MS z01%pS-x<)?SP{?=_?2rvj)4>Jw0AhF`U0WJ?r3B26mnzxuypZR>q93wch=-JGBCiw zN_jj`T0EY_V74Di*Pi8o+(lB&F!EAEYkX)C5?DicgO%ZWdJ>71XK?ZIBHsJB5Wq?*bPOV1qOYFrOXSy|#hehd+h2Lx-{P z(0jR>P?>sn4~<^=xTeVf`0OwL7VfJQaLc_%ki0*Q_|Z2awEr&S)m{({+9d^m>8AK! z;tu@`l{I(lCI{!Bl>5M8D(d6Z0}RKwuGwq)K`>$$)It@~Zk~!g#|_6o6|DjdiCTi} zddk)v1L+s7f!^S0EpIpjASxY1dTU4l4S)#S#g-@fN)npN&ZjUAyeM9;g)w_2jO0)l z>0$2_P^LMa9<70&dn+hKqrmx|(}n9)Cr(b`1d_!su^Ox=Asi|oS$!0Z@SDvD(BlBn zvSsYrS7!5Uv``yoJ2Iie%?F2ZA$PHIyO7S;GyfKM|Nbe2s#rJ^!PqT(8HnKN&pgg{ zSVKwgDfDG+ZH)}wDFeW3DS6~xsW#mm6;{sf0k3Waykx{e;{om6&9&I6mupN%jjdqncQ8;k>Gf|wF$>9980Yb(i|7|6s>wscF}2ZaikK$WiT(ErG>qLjjJzV&(vY; znHl3;?Cea8$ZIdZe1Tsr4crL(@&EYUHGJ=Vb?h0HwW`I#82}4;j>7aHQne-I`Z$3D z?a_g)IK$}TyB=uwp%3j00k8)5!ojrdX#Mz(^n#u|7InB_+XV5~hXBnse-I_khk+v}*hg-m>#EZ>a5Iwa1UJgtm99v@^>)3W7Zr?mmf;TG`ML&EJL!V% za=PgRoj5~5VvF*^`4`$OAp4;|$J()D$iMrY2doajrqFxTzowI#F`rTnFD9NJhhVoNEPB3qjLG%XiS zX*t=*LrKj#H>=ecnh6>JIc*-e#)_er(W+q=pOJ&^m>_^@2Puofbn>;1+hc&*RYYoB zZzZTO;XI9i$Iy&^6Dj)j88tiKW*{0tyum!BCR)^Ox(lEt7s%`Ib^$*wFi&Y#rloR2 z$JlBGO>W{9*I6vFfdu;ZP2v1=uj0kWPoqYe!d&0OEL(gd!`>Z$wqZzadI?Y`x=GPn zgR!Nn`e|I?Wh+%~nG5r6Gf^bM4XjO$B37y4FpYqv1GG5wlAoB0b{lB3anUZ2@Gixg z!SkJ5IzjI4gS0#w4ZL`^V2UD@*2{seA$mb?G91XYaOY?UUq8KocqVIK^pg>grP8jI zOK8++hWYguc#O=`g~EoKHLP5_#BdDRemxQpzLQDkN%sv5vaM)w*Jp9`;3U3qX&i~Q zXK;LyBbE8pW>RPd%U?tI>Yp0UM!k2dzwP9i5fQ?du1w+2$A1|aJG`ht zRLG2g_4PtmRm3aZH)id#zDW7KSyQT3FwoaemSQS!zIr?!OCgs?U}@nsG}BWg*I-dL zUmk%Ft|VbveS6VbdJd;wc@5w3?r$biF9b4OiOMYSv-%(wOp8+aKlR!=KKy6_Kl|-j zGfdo1PuX7lyGCO=-Zy|~X%)l$dKl>C-vWUGjJFr=0uRZ=u4Ie!WC$?m)YSKSXcZT# zjdlUc*Mn<=MLW2yWIgoTf=6>*(i`#VG^j1gRQ@mh>TjZYZWbqg{vRWCU>6r+Z3^mU zFzb`p>f2C^bANgl%FQY^pZqjJ#dT!f_8#PBI2QbOTe`rPqa)9aB)cAT=iSO_XWr_2 zrivgy)Jq?X`{C_y0ymnRYmcmM&x3ZVK|34_Xxu5zc@Qd;(f6TGW9`Uc6yHIE%TxZ= zWkxFH&-Iy${^$PnZ{T~5jbq}Ws!Ryn4%k`a_j1w8TTr#XjXs7GRmr;?_JWUNF6@A$EY z9Y?=G97Frcn_^0%aP>@@%ygT=38r?`Nl<#z^gthJIp3G}Od_?mj@?hcgq33ltpm3M ztCClyz*RBmg4a$rsZ2MHo7g*^#EF?C&R;9z;#|YtzK_K{PL^3aVVC>%;ShGEYIxz& z29yw|Qm$YJ4Es^>)cFME&1I}EEFzxnvtJ1Ws=>mV z66Pct-UqE>7(+=k;KUZPTR~9vA zB!p+?hw;JGuVG+v4-s4tl!c(3TQV8P#%7TyzYGF{xsg4n6jo8#bVmbMYISUu%E+d( zh-$}2ob{`hC6&zB$C#EDFS=)YD%)79jk|fvNom*O!w4-sjRLLv2ktqJMpKKGitEs~ zgPt$LKNb(;U;W`cb`MwazB_WLvCfiT`E+;S!ZMK2!6BO~7#q?Z0GD@LPyuvK#%-K= zy11Z$#oI9l9*w{i=fyjjJYT?YFzQ9xVp_C|U|ZaE>30N=ZU^!%*}Gu-MzlvR&%T8G z@BSC$?mB_&-M4aBYm8|<=-hG+GuY&ux%l}{qWaQvnEd8%$Hd?M84T?^Vn%{S($-Ri z@v(k5*jKL~x^s2&xgJNC=F$6OrYA!%>cSq4=dK^t#X%?JpsT+00;CQt1*`?SR7KxM zK8y9;dr^G%+fDh~TA{A9e7bWMMPYptpZ|ql$B(?@R*bys2o-Du;fXuByYt`4a^4n@ zF|lz0Sa}Jkxm(t@8gN%!@ORQRC)_Poe1Hc11XI5g>mXq6-yf}8UkVam5Hl` zyS!2!&71_R?$_BA~%bk(xXQT7^94AiOO#fx^@`o?~K zX%>Zzb#`W)`TZj=C0WZRWp-eIMpVVV7w}4DKUU9u4aX+aY*P+&y|^QbN#(c72+e&2 z;gu(yz}~HIOKjf(5YT5Qe{Eq9AI$tm^i6T0)q-G^6eCBc7cBJxW1*-wZ`InJ{KJ!n z?JhvMoVR$DlWuu)6QxE78yzSUV*K zQQDlxmDA7Rjd#5ng9Eyi&w2(1vVrGo0_dc^ljoN4%U_7#Z$41MzVWOXmdVMf7jh+ekv3^CPlwirw(65-!5#v^ zHs!W4JLTB|0h%4i9s0(+{1#Q4q;!i=r?{=nW9fzGxG5}gCt3iwI5$_8(Og?YV|fL& zVi{BSyal88e-o0s_i)@tO!)^|fWAV$+X^?9?D}v$t~cV{n{KiS>A7GRSw7ua}I@DgXJ)*YK5p|6BOGKk|0; zKe(Hl`8*;A?nh)`#L+5GuK?=p;vzR4F9K!ywia=5(Mx@!cTn*UF|M`89~Fc^@b!TT zm%uJ&Yk?U7X&M3C?L)r`h?2eJlupt5r{X*Vz|UvC)&*-G*4@VipsdqWnalPa;zv|7 ziHdyy*YVsAs`@=V$F9$?L#0qp9uFls%y}rambNXrcd0w3vBr6X8&{a9`jEGTR=-B( zX>92iZEvx)&DPWk4Q5W8#z?}}#Q0_ziA%Fc&YneT`895msJzp;cA3&gDlfI#M7$V6 zw8_zta;@4}=@a$CXShul$sJEm_M)^lh40|WTlDH^q7$cm8b(3uq-=( zHw3l?^|PFelu=r|_aCB+Dee{*>bSO6M?4m$A|wZkrLvu`&1!}ku@AyJw}CL0NL=ke7!V0dBxH7cH|5#0fB<#mCW2EfD& zx^2K28NEQ9hxTe^*A9=KJUu+TQQkw=o2Px*3T^Zb>0J<@xgmLwV4LfYy!!V5snFQ(;Yy~{~o?pWM>5S!dCnZ zE3pM`l;e8oy=gAq!CFWcx?nf^H431140otIVDascS|hox=yjmPpFW04B7^mBe=o}p zv@Hd3zwwXZwP#<&sSo}Ue)^~1hxBcuC@-%ee%m*3Q4joTsa=j2sB?$C{0gvni6k|L z*9(1PcX2y8&ZxIA3U(SM-w3DyZ6n|dq#Zfen`{9!8kUh7cfVdz?;J8QEU!c9oyc&s zr+!t|MS4ujXoG7At5IvkQD}1gG9sU_15N6#R-PXGfb6*R)My1T-pYUvmqX831xDD8ik8?4mV&C~~)}7uRaZ9jz4*z49`m)fW*S zJBQHF0-LCe=t>^7+%C&&(lJYv`O*ti^sHxudG#q`6;WHOqE#oJdN0EIEfzLGwLzT{ zr)u$z;FtVfr6PT|{J_IjVGc0u`rR{XHZK1gjRu*9@rI*A_?|oZ5KlyKW=*9zCUQ~; z%cU^xnvPHqrm0`3DCTz0;NX`YL2+^ljXqi)M5`F*l-H5&3@%mV-O!y&%0PDmicSmFZTwB;cH9d@ET2_|I?=*s3yBx7+B$i4c!v$|(d>8t;*rhT# z#1cvNp*n$N?c3X|E(bufyot)%BJ#@%sB$3cGr(#~{gR+m<{(S;;l+(U9B96T;jENw z0pa;SK&Wz6mEho@ptt`B@aF#;p^eL&ptK%^XGc1q)faB!W91*f!nJcOzl7ZA46$y} zZi8o}WHU*YTjQLNvC*y_$50eQV|%%CILW-CW!+hJvr$L??i1L3^mdF*Ok;RtlxdVQ zUqCF*U3sO5qkD&NY*)r^+n37vWVEZlV=rEmhJ(C8BcgQeImB9Hxc$T~dofYqHM_Hv z*=Esj3;*d0Weg0(k)Sd4ZFlwA?q6d{#+I5yM#4*TVT{uNsM7%0brS}F$#f%-EWu0y z6VMAAc#$@48~Omag@e$A?#r3?0 z&j5uQR=)co(;5DF7awiX^dj;TfBrZsPd~YG;2W9itk?Vse_!bukdeJsm+(S}9D;Vjg5wKY0y6hVP zyr_In>ASe-=@B2%qh78H1|}z6QD+lSXH}?{qam&%QEWCcOc9|m=?3bybfOB~)Q*#0 zA7<;_+&Jd~x=O*vxo#y;N0JIZVM<>Q7ravlJtqi7bBLBd>(=$Q@|TO5ABvwwtC}YJ zBPM<;#J=hODnc_$z#!`q=eixCi?QD}6KF<9(ee({lSs)mZlFpmkE|tMgcgs^QEB9L z{4n)4*IYfOTPqh(q){2kNFOny#+Yj3)hqJ%|K2}&_{{7kcbB?#A!VXPT!}JFnm9Do zhi|@P2r-%&diPEr4LZ5Zg+UBFCq+9nlEg%`ZvCNW6HV@>H_~aG`0`ha5Kgd}(QIz2E=Kc3(asa4qL zaXSG}&)cgt4xHo|k{e&eq46?8OP>NN+}f%fy3k#J522$!hER1CIR80L%s080Z)$m3 zw{F5}EPdhfZj9aigShbg=dn0DkFni{*`#U{C$L{Fc`+^&8=LwHqr(}N|M5f`nf`Gs zUOVkFcrKdEqK~^fDd%`Bf|1bytQV@NmdZ46%GkYs5`EbOhI4W39!u+W1gtUL?n5vv z8SO4f#+?mt_T)vp@t%9oKcHikHNGUOQ~sJTkDN-NQeHwX8O6bgERJ#mVvp`fsQwXu zo%Hq0l^CX{b7*XAU}{*#ldEeRRJIRZIEZpF&q)X;Y=Fkcb--&)`*+Zt-b?QwNC1XF zdA~2{&C|YY4>wBhf&kskW_i8fHM2b5b%P2Hy6&q1gMru$;N~fPxKWPlrT3;?FTP#a zjUX2brVF~_j09=Bz(Yx)N%=<}e+AJqb6EV|cO#UhvCDS*?3!*2+u<_a)a&P$-gp<@}>ZNu^dCc{VkvS^pB+ zt({Hq>)@~79oQP9^X8dBAZXB5?kqoCLMyhx#e~XHiyZM*e2`ukWnr>@F=T6v(7JG= zquVB>b+%7J=bA>5uW#M?`&9~2uVqr)p>u693d*UM$+drXdO>=SO`~;?1@PF^G}<9$mA?K;K&){e>; zct9bvf7?i+nVvyYFYhs`4Qz5jzx5|f(csHa?xr^DQ9A>mUSgVO0Bn?tD5YcebzYOp za&=tf{XhCM58u6i0Qo{0*VZbg{Qb)5powq2cM6##8-#IX-ji-&dLV`um$W+&-nq3( z798rSS-q;V@S+h!uaKD*x0w<@=siQ4Ha5j4LfF6R07xFTG&mAQ*dn>rOc%e zbemthNZqp0dGk8SuEFi6zFAObd2%&6DOsIkP}ZY|YQtO#HB2V!IJc0u=VH+Ycz{OrB3IaKBY-O*UXM1y!bp`ePspjd)GZo zu+id_Kiy-eqIl)!3Z4D_cEr6Dvi6tVGO zz;ttM@G@G+PYe(Qf&!y4p*;k_<4g$R0|WxEj3D@Occ3?q=l9}$F!T;-TVN;N-x%ze z{TtxxvUnNkeFH3B7u*d0ooIUT-ElX9eAq7B!HKpzx4%c#ZyO5ZZQpVa!iUGOd3GKHZ~GSe*`|%&&H!eZ z>%l5_mJ2lW^`^fP6I@%yx$Dp99f4k{yv#u!9&Cf^f_7bl&If1>AfH6IhFH{5I0$il)~T)B1hLKH zRQ4%uc%|@TT+6f$wV`Y7`{5u?G5ygPDL+Ad%FUY&RWs$!HCm@8Mya%8+}tH5sr*Z{ zf%M`d4FtQbL0;O{`?okYh_A%Z9MU&qoPiQAG!QMaZ)2pr?*Op@=IFt8Hl|1dw%+1Ji|eR+`-T*S%b&V2(&>y)BE z9Ve*+_6^7JJdFVAT{8gmDcq@v1V(9p$pBDsa?4XQIPmx*i1+oQ#U1hy8U*=92-j$B z*;)I{zqV0Ap;Se=T&MD;tJdwa!E#kOD)n01Ifd_B!wdoEXbhNv;N+H$P^S+knixwo z@XFOZQX^wFfc(lESZg@v2Rnhb*9MobgJn_9cb+8$cc?lsLG_b`xw5u`?-=_8VyiEc zNR8|ubo9Fr9)Ex#PJpXSYjVKI;)_}aD{fj3$1scuP=t->D|b$F5uj& zm+aRV{llH}7bIuBUdP3=3sl;iRKB1-kRUfSiNg8{N~I0v3ZYT2pl|#D5;T&u+~`E( za*dNEn?}7#&$WWiLbQm5yCJ0^b9`z*alWP$lrRT?r#5+ulh%0M>mbGE;F3VVQsyIv1An^tfEy# zBDBGm$Hf%bF1Z&}P7s2<7WBF@Td+4Da8+vGNBFoKl-G)*q zbG-Qdz5}?FK)SMc!M`rJ8U8!b^y04<-!8nBz8e!9UY(#9@)7d6CbhUmWIz54mhL=+ z`mJ2lxoHqTjZr7P4T><@^ z&UA!F;lRbsS-K(HWw`3;;_}v4&LI){id)3&wtrChb7L2y0Tvl#U8%V3`zxN3_U{(R z$q=BPYc(_6P#tw;QdcLI+zua;Tnu;XV|>h~H{WyI=`XCKw(MSp3{fAJYE^7-15YB8 zQ%xs1jTePxb)B+oFvFo;IsC16?#6f@3+13`&|O~6vrNCjx>X{XS~$X8^-td(N16-2 zF{k(F1rD@0Eh+L;LH23fR2pA@@NF1>OurMZ*zYmJr8PD-Fn@6tMJj#qw8kSa=s_o> z;MVc!5W@RTI6cDXIF1R{P_maAdP%~n?v*5PVc)qxJLX+`VSB7VZRrK9d8VMmZKE+0Tf%^YH^S>EpDV7EIN-fLbp0rB?Q-~zcOsP;bc+b% zh2>fHhaN1ky+{zJB9C$~j?IkNT@2klaqm#Lr(QB+ST*dO7{FWa*n^=#8XMkN#>|~4 z#MbbKfBG0MU0t(J8~oOX)@W?T@N+*(gP;a{;LpnVvA1)*V`G?2&VTdh#Ny(74Y!>b z!kLRj^s^ZZMAHT@(uE@^?z@`+*A-rdu6(@=dgFvGsBLI=0+GHB@^2Kj77;Aig@f0v z&Vy}|{Gc0P-T42uaD559>GxL*H&JV~6TyDo#zC(2FY#y3BA-j6^1yK-bl=y_Pu=q0 z*jU4F{?mu?H*Y_HeL&xdJefazNO8}YU2ktmx1%oaWb!Qa&m@BnM`rlKfJex zUM)c9FGSmbN3kRL+^!2^V1(OHOLLkVL|A8TNT)_V z_Te+qd8AuF_);~-^*DlRJ%(B%#wO9m!y^}gWfrsp1h={eolEA0`L!-;;Z^glzWfXl z#ouFGXr*Gs}4j#eF zlY21p*e9@_9zmwCgk&O)Tz?W5zxo0;XO~E*jj|5V!y%0LsO1Txx@NgmfSDwC1%I=h8LhIa8uer^?h?K6o zJ5_AyT0CZ2k=j02NR3@2+GQ(pgzuSBCCX5(C2YvR6p zrg8f08V356ZjyW8*TZ>j=#96*PoS@|Jm^e|j_05&(v_zTTX2E+^>}T88>MdpuQSW` z7Pe{l+#jXE~o zd57&jwRG#Ka_#)joIZsQ{;OZW-+k~t%)I+PG?GQM(z}qo!#~>B*mc4Smw?N9(XUM9 zPeUR>CA0S)PEIKc5zyJ<*@aInTkM)FpcnlpXtU>S>q0O zEsF54p5OZ;lfcGp>xOMu=>cb{rp=X(gm(lTv3wr-53J=|z$;JfF2zq*UR}ld*Pg_9 z`f0?{G-PaTe?+(F*#{9R{sHFE&Yue3oRmLZn94sw#UEy$Mf$nylRhy*!!6En zv0%UR4;QFBB%*fEBcus}${SDHjRqM2+Nj0Y5ZnVhX%(g)Gz2sR+n`31ZtCZ*^?`#K z5;SpbDUYSRc9mN2jY^lc5ik*{;eWd=g3%Nc`Tx0dO*E-AB4lO-(AT-u*WUadEU#Qf zc6lC|Y8m>tTq>Kuo)f##SXjpL^QTeX^bUdGzm=j{BB6ZemF=#AtvDm|d?{Mp0no9u zm4-Tl333A8?}6>nsykC$1KbeQ*a90q6r{f|V+Ke{)@_w_bZDb8j`ac>RM0>BTjPko z@!#Qxf9(veE?3#fvK~2rWB{nEnzUAj?#4UzUP84N#tSFcu&`93HQT`8*bu(yO^4Xt z6}0uH6GjB=v!w7V0(aEL=7Gs^}#dMPhYS8xjy1x&`N z#5uTi&`+AeQ?dlRHPcC5T$Qa_&I-Xm~UoZPb@c1L2#tR?&2!8m%2Qha42^!*ggoY0yd+d0p z9N(9+zw`>QL<2xS@#V$<15?008VWHgAb-KRK@;BuNvDbm_-;E8-e=fmx(%_d^HN29 z)QwbxjhaK-Rp3JYt$$Ue&Yf_6mg~}ZnA*juv@LU4jHo9nJ_uN5;-6 zYPk%IudN$gmrU7nb3>>1GQ!+IRo2!}qM??!dI3ZIlqq_i3!2ti=F$4CUA-y)Av!Ae z5aV{+pUU5U`Jgbhc9_aPB*TDyM0Z1ED3Cr%T|BZ%n_-sgBKuZNHAH;OuYeDXM?;7n z)Xts;BxTeO|DtuZkjv(`l};k<;m2!*}9C zUwj#RlS|mMix!|PJ53Nx6lQ2um+{5L!`8uTYjqS#4WxA(GCTkH(Fts>tYTrgj4PK{ z5vPGRG?cOzBqfa6#5d+tzW?TG|KJEV)>lxh)=b&w`uowZn-46u?BDt)K1wrGC-;eg zDQYqiKW8MU4IO?cmqn8u-`tqT-@5ZCe&+9d2S!FyW{Bw4(+57cj9YirG0gGaJ~z&5 zNXH|Lr_XNUhkoKgy!_fazWNuJ@X#CdIK`iuqOpJnetzfl=fWQJL>&;Z6W#|)-$LME zTfB$sO4=#E=X(LwYX?dXdQz`Xye)KR`34vmY|SUkH_GiBg_|wUjfL$Yn9@ttoz{t6 zk4_Ok9>iNXkPy_=a; zi13~h$R0l2;o}XMR;7a0xt98>a$N`_4!wj3pJ3UArRGZ z!*ro|o&7uOHgGX2dENGp>X|>4w(a<-`*b*wDSy()H-o^#Nh#QKROvv^Ne9Hah7Xj1 zH05n@;T)q;K^Yx*l~fz$=7HC!nVZ~tmnvB0rm)UUxtiFjZH;IlM81UvKqu-zVLkiR zOJP@*%2>;naBT0Wox?Bd$Y?Bsn-)?nNpin;6nJqX1a3@m=U4<;y#v5BSsUu7=)f>u znVrRLv|>tRR34pR3Oj?AOoo*in#v(wU&ZXnmr*QKk)~4e4<~Y9g&MdJTaX6q4(?^#7HiLxw%bj6lo+Zu46FQvQIeIy-x%ClSvanGOCrw*dLeK zKUMDXM@Gjml4Q?v;1%lZB@IAkkkJ{}?{Jl06Qn&+9L^a7A=Ij6WR@=D{U;9MjSt?7 zW;E)KYv$xTeXW9Lp1q6*jwbB=f#CVv<`Fl$RKVTuz7vyE!}!zBTt6|q&6cQC-wA^8 zUiVi6uaDEsQeTfQnAS_THLZi$LMw!a^wXU05-cnt1vHhYR9erS#mM<(tiS6P%wM{M zm!EhB`T8#&?)k`enkR7b62VNcOh zkyDx1iY4UFpGNWdCsBR!&r$iz2a$gCW9U2coZI{!zso+WtMg$ZI%Lk2@>!-(3ER*8 zxa*INb6w_+UeEZo`)}|3J>_poUtz8Ba&E2VCEyF^;bjQKXb4c(VvrkiukHrQpV&mG z!19-9a5Ng&%&(!GP1vIVS6vZ1-Dw7ZPy(Na0VCu6NxXP|2^A^?SwVZpvrO(>eAH^O*x_>Ym|u3R@bWaxeFR1W{_mA`|D6K`P)=(dq+ zq8%~YDmQ`iIEp|0{Np$>P{rh=ZXw0+%OAhUzP+0kXBf$(tl5@*!g+0@fhA53y~LLr zNaFaB9M)IXv0kLboTs6%PD3EmL?)w00vhmY0kB`$LFc z*YO+#A_0;fA`gh$4!tdYTS5=LL)x~`L;HHNZUf4$_H(`iKODsQ&>R2jf$e7T_V9Y- zxgPEH>bZS*yAZ?eh(9X**7bogMS0PD0gdXuPd|UT~ACY(&v%7^c)h)myoO%5hLT`@NTs3eJ7XW5M}8{ zbY?f8pGa3;La6*jTc_4lnOeKjm? z6mY4S!RR>i8o0d5T+jd?zq}8^U%v15&P6R%=KWPvL0xqJ+cmKQoSh zdG@C;cH&KpI_Xt^vue#MVvGZ+Hh3%k_@x@ooH~m?eQE%aM#S0(63)l>TzD zh6na%P@s}tue!-1q9lzLO)4`8*q8P!%qCHoYsEVH^Q$p%ckxj=v zgFz{QzG(+cL=P13T>!e!T@eR?U{AyY;8icA2JwIJwQ%GxjG>XJuoT5T0;X`vT;Ez7? z8<@WRKFr+nZaYO&-#FRdpT+KxBx)0TF?{E(9)}K8ugxNK`!Q_({;y)_u@7SK^4HO~ehJw~ z1@UAAE%ujv(w%FZ-g&Bw?L+hahY(FAkeJ@bUB8Y{W+|1|XuN#L>1aLoPf+p81lUen7p26&WmgP^N|WS$Wyv%2>mNDowXg%@?_s3C^&;7S{>(|_SgPOUmat!Hq_1_rZ#Hq_G_}bbyjvO6n z%kB6FKt)=>CoqyWbb<1|B_$PmI7VDShaLZU2zx2iWDe5!;VxVt zqOeZ$ix;UdKk#|{@~KbZ`Q>x?mhb*aWXATRR?efJ%i5m)91iUn!A52P2j21q<)rh< zq*r+5RV0cE*=by!x^phTM%UJN7HaK?6+E_VX!N%lawBGO#;-k9|9i!1@`ixMygwWEj zGf$O{N;%1OEICaBKri*_1wSc&&j9chzxlrM7kAHB&|RFTb>4hBt$)5>A+KTf`zUpw zfz{YSnEhM+A{u|1!s=fv;mTMP8v|);cC}%X22F$IhJO8zUUOQ*8ry;O4f)I3(T@G; zm(Js{mzNREX7TNBI)w27?!(Gbq$}KkT&t;1oSsqsz5At=;P`%+DFy!5ewo?b0Nk?*8K3*h` z6nd0Sx0e#}h`s2i*A$HP{cb)TF>w0YY=!$ zRA0&K%O|`^?SdYAyBN+xxODoZ5_kJtZ0x7NZ2!sOFlMF`C|4V}HdjH3X{w8|4)iB6 zI+Q|6A5Y-IAmgA=u40{Q#70>^{ggq~1UKPUcl|ZF2=!NMm`LjT3U$ov8Nl9s)2^*p zzIe+LPbOnnSYE;Z{5ww~aeP0DXO}ViwNv=9x9q~-{u{Sr?C>-ukM1E~wSns3Rf6UG z{vVyi$3OZC9{$mO)bzn3wUY!k2^?7)7!F3eBfa1y-fRX{W(Sb8+ox}XyV>#x#@C>S z?)uqY2mF;WdY#az**5~ON9ya*YJLS_JKC){XVm*}Q(-TnwN!@gl}~*czw&#(gtb%{ zKlJ1OEAm{(o2@Fc@g{Z;WN>_D9G7Zg-0^MiRBk#?PR@(9r=LfLYh_Gdnrl({@8_<6 zWX93>lg@yCP>33L@A<3TnXP#&X}GUT>6g*W>$vcyDFl6ryUrb|PPli^)!jVPFT&hm zxm+7sHN;wFBw9s8D7X7uG#8mz8lkid04l%H-CU0+SZOM`HuUzpANPEdcOI?RPSF_B zvu$t96g6KXAo9Wl4cc!$dvERVk{ z&n{j4(FO@GuYGkdnWU0Yx`>7SVd%G$vRr=kYgkw>Avt*$UVHg#C_=vr)mi!8KnQlW z%g*w>Krl_<*m`2Rh@*5@;Z@g4rD2Bw*~gxkrZ@SAhT^82>-84$8x{JTPBffiG-L*I z3FOjx-XF%oX3Z3@jGJUkyMOX#yX80&NA&E0i^0@XKlUG(G{e9LwX+@-nDSp)!QcPQ zN6?ztkMdQ0G^xtPXC42)Z=J!v`1$WfBE?Ce#<4c_d>I4e@e_aVaojSxiTB={LETRI zQWa~T|3+KEr=f9*nM*Pipxsp|?o!wuJLgGeu5aZs%BwVbPQQYIE3eXUsiHOJ^EF-*j%^rW)n(MD;42Px;qw%hv;HG{r%asyUn}-mtUP5^F|7CHsO!T(C ze)FH+3p;Yze*4eezbSps0I+BN+WmV5fNEfhU%p?S@3$`wyfw15PWrK15E`5E6MB4s zUmoRtl1j;m$T#rhF+Z_NI04{@ya*+-rcNZXpljr8}$Ws>)$_(Ni z_w3eT0v-E$PPiCuOJ$JTxmfnDhH3-SpvQs>B5 z!!&3YN+#{#3mddE&Cn$k-g)%W&enV4`vsO)Md14?Us=%ONy(j zEYIHxoi=jybc4~0+4HANDuy(T0SzWsoiJ9ep2D>&7idLt@^S*5e)e%}ViYY|i^jom zX_u>viulF(ae)`Mfp0iRizj4>YI4zPREN-N*M~`T zH$b0N)+c)PjzWYpFw2QE!09)Xi(z~$hg~zH)?dD{zDAN4o3LZcTIb z*eQ?0Z%-49x5HkuXb9=fmVWO1rO$i{pZcX=#ms&8;9WodQ#kkP1vF|k#JO`kIGV=3 zscBrDui)MvelOw~Dol@u4*RI$mLA+VOQ2jEp%{i{Y zdPz`g2`QxX^xoFQF<|OA7yF!;iBSOj#-d+6g~n?uoaMn&Jr*PUoBHBD<%eK+5|Rm?nE#F!qgm62G!h~(U> zh|iuvtF(^l?mN(W&rc#XJmSi-b(7*XONcD}8-_O+(=&a_oTNdfZ@B2>Ki&G*;{X`| zG6d`nfRw*zX#nUhfH+xu_`VN{%aiZbPyB+25SM`i`OoQS=!2Nv}5 z>ni^GmO-H;W$O$ArPQkxY%E_!WbmNT4GxWB{pv|n8&bMSS8lNIoqT~8Zi{UubC94L zG+Fe4qPPzCp;EV7UCb=qYtPn|mx^DX>3!hX5UQ05me)2ZbAyh`pPl!X<6}5HGlo4g z6B?g_C9>qL$_jRhz1Ya zXnnP02Nf9?b%Glp)|a37^Yb`=eiPsIAa^GwAKTE%)0l9+IbQ}3{HR+BdcY^Qq;1lD z=;66Ncr@FR29OGN(QKPxTj-4b9=LfH|3ks+srL0~UvHWeT@Zpaz4XDjHZ+M$0w4dQ zkKj|k{u{XSJ>QH6-~W?1{pxvC$`wRgCF~i=VfW+&R=6`i^34w*JL+Nvvl4DYco%!tMHjReTWo{I-ose>5evf~X8?{EAJO2jDq~ecp&5)k(WmZ6k z&J~x|P*~dFS{k*N^demA^yS)?9uE-Lq<)ZVNioOc2qhBK&yt5qnSLvoLTzvgB^oQ` zgAXFK{|-d&`4+_c``z7lH5Q%9ZI!MdTKy^urn1+`eJSq9W7_$XxBaf)Q}Ej9n;{_O zugww=sDKOs^hSJ;dZ6Ze_4OJ3$V74#~*+3B^1L$c=H`IxNT3) zo{u{kFDt=rpUAhX2Z2a%GPwc7T|cd{+G~%ZK7A(z9#CHy*is+NyF<9UFadYAsNuoH zWmIU{{U481>=u_k98{y#S8K5H%=3mrW4L9{FxK*AtZi1g3#K%zs}z}g@pB7fLO_1I z`tbm*7nG+|-DSvTlbj1nxccf7i0*k86Z8x|jKaz+UOV*)N|9ki(}RXHj-6s$*k{%T zzdZI-7rvLwi*+GgM7Of^u7mOLu5~iYMQixc_w2*BzT-Hq%&%j4rGR}iBN!aa*hia| z=JQxzDPd#1gkn)&0&JP$*Y^hohf?_Pr_bQ&lS}v;@7a%cy>S<&ria_oUc0o3S6`aN z0{M=NWwHO@2o4+_b?K^zH?iOQ1CQam@2%p&6Kpqs_uu9cfHun2$;Gcn=Rjj?3+$A) z3tYODwk>H7atqCk_y-|SRxi9BHvfab>u_}$<9 z4LtEDe~fp2|NC*^E$_v-GZ#@Sl@YIQU=Md?2X{}QUaVv6_9NJJ7kA1YR0?Ih^0CKp zbnmDc;L&6SiS*Zi+#X=&y`*3%x??9OEdk4~Qo&xOHZGgOSt#`5LSD~^Inr%&q}$J3 ztFIF@AhWIA{MXuOaj)L)4uBV?^V_3MW9creM+3w4)97zpBHoivsqICI3v1sPFn$6U zVqFp$Do!d)ef4zp8Pu-IFo_s1WwSNA$c+lyGn^)!>Jk7wpD!(Mpq%H9Jj)Fv*CCap z;@S#Z&fZPx#N`{IE(#M=2N$=1d8tGknLfwYr+56Qqc>hgs{S|)Gs>PEp%KBl*jxTo z_`18GhK$Q7@E-wqhJcI!s|V9XV~kzt1~P``pQZso<=uEU4VE0q^==ytfD=a%8Xaa9 zPe_AcI0(dt&Y-dMSzLR#hL!PgZ02Z4Ft5H(6Z!V{|IEWyzFi!>FNcqI<+PAaCJ+zR zaDHwRi-i`B%na(=KMqJ|^j4q?cR@Sdi+JFN^jsx6xC@mFtaNsi%9qxe@_2IDRdI_s z@I`KeAGbQV$nGeuQ8x4o%RoV&eAMl1T2FfZCCgBsvK{4aHP`2yp5HfWbyITcWPO5I ze9b5jThAG|Bm%GGWoa(x!X}3cYkHI`4OENkoY<=f_q&%jlq;c6^H$eU*xax$F-D@a zO2tnZMdR~xQ9>Zrt}9)KAV}dr$v)B&yi|*;EDlBuNV*6IT9xM0V=u4Z@h4uycfI#^ z?AbMJxAa9Hjd6!Rki^(zA7=IqVrK6UhDZCT_|sJAIWAHu+8FaE(6$rt zC%zH6pr9S}0_FwM1wB!L>oE@$Y&X#Lz(%-(ZAp8OTWD^?zZV?+%@p-NI=r6h-iY?~ zrMn*Q&C`yz2ZY1vv1wEXsiBTvc=(^fsp-rQK|5kMwhLb;Jbu{D4em8Zn?Ytk0k?i%{AeLaP6xK4_N+R-+Ff!-1*Mn+K% z4ItHArOK)?T{Lpu9M+*lYZs~TFELEzsb}ad`h`52B|SD3kz0Rjc`l0Ft%oyiU3B1P zZ+$I~!s04-_%THE*o5o5()_w=-Sz7#Jw~HZaMykQGSa#itGO@zb_|mmtY!VjHYv6Z4e_u57Y##ehz7-cRLp-;ptUgWqp5 z{ba2#%l4p^Bo5U|4OLFS20K-t=Xu7$Vve067Wa`pw2Ax+jf+ivY==BD6M^IqvO^On zE}ciErUA!+W=4P~Z<|t4Q3o)cr0y`m^@_Xt;K$Tu3cCrSH)=W7yl|~t!Tymr-gbN# z@45FNmS*$z3kki@r}i-jl%=~HQsh~-Svo^&Ipbc0+*qsP$wwFP^pkVk^{ilIB8FkQ zY`=Ri!Y|!^E*Neh#k@NCv0AO-Z~n|H_@TG8a9}dJ<@SFEyl@buh|%@HwkXkBz`tAv z+Jp|akoTkuwxxMJa1->em*sz_@Or9wGqg9N*)Dwx&Rh2k7}VUB==#S^IP#HtLMMGPE zZIL^**)mENg!Lm6y_r#W*QNQB%+gG^4xFOzcBFbrjY3A=JZrSxXvk z4H{-`BS8GbR6^*bN!Giz$UbBnG}xzlbRcNbxGP;CE{{+{=N{}MQgx@UN~LKJxN}kr z#I7y0K#?F)Wpi9kT*Ug9DRVT58rN~H`H}4L_dk5<@&+z)ho;4Suuoqea@pFqj$KQ& zS?-w}!mDR4W3d>))NlrUDV^rWCT9nDebDip=LI}|^!)T*kfoaGAH>>)Q%DX_NqSaE zFJFNLx8oxmEnB@PG9KCF;G@coC-Cx8%an(W12S+Tt1qIO;_g2o!^!0^dUjAIm&5w}6%HnS zrc!6}yA!G$kjnU|AC$ufPkx~~&D(}0VH^TbABY3^lyIJ}UU2w)YxL%q=b?{mywO&M{ zQN$AoJo2S4;otn+&!bXU$NT^O&mu8-5UU&O+}xJ1d2IoQr-ra^|D@e%9N-)qKfE8A zDg8o;JLf_HU-_+1;-39Sn9jX)hMS^YS?Uk21JPkB6DkZT4uRGKUy(}Uu8O-zxYa;B z+{99Cv?pEAjZmy>ep=W^xV62#N_t^GHAv@!W|rhDg-21u1ax09#*j-CUBJl@D0BB8 z9%4Lf%D-BW@=qb8bL>gaZ4>JGBC4}1Xix#S`ci1c-FpmVwx2{c zm_X$&WnX7srbp1Kts+#WAy-=?ew{RIBjTK6xTP~0juX$mmLZW&BQmOXBAASXj*uP% z5enz1?9Zcgbpg%!EXv%V=`KKI--CbiVQn<^oA0yNHu3Vsb(A>pvQ&QQxSG5J{sOO; z$j162IDL5yOT`clPt!UzLa!ltv4(U(=L;v_3vU7O_6ex?GT97PuAD`(f0XoY@F^{r z)xti)&o5~ERI1@Ba{7Iy6kTEf7gwv?@kepr!6ADNqB>a@>)#Ztm$iM7vWp;_P1vV( zQwbfIQ^Ur3L5Vi$t!{o+T`bT6vwStEn>Ezuo<@E29=4ZvC&9}kFP6-39<0*Ps8BB2 zj`q!e=Cq%Vh`8Ot0q_+VeUG7=5Uxp_?`SmU^+cmwE@N|T9ZfD!lbHtY-IvApzI8v| zbbK7UM>B{~vAez&JIcn+b?-%RJkkJKUn^mLjysEm0(bdkY|uE^+^k}a;f1*ZE^!R4 ztmM(xPa{D_udR^!cN4=vZ7<)y6F@&23*oEJUcvwVtFPgXqjUJ|CtpA&HI6-d_2#f> zl!0KpI<5`DNLPXf+Y-~?jU}ytmoWD;c_)&V|4xY=)78_^5@Q8FZ^i@YHSu!o?S$J zJx^xLmrbH+%3q~99<~m$&Z>Pc==p!M#@%{D1^_A8Mv}wAp0nno)17mz zLG2d3bfa;;55aIRI3-N*2QVSThSM|W)w#<^<%Wf6^YB@@JQm#6SFpiJG8!(BUkk-Z z4h`<8%T%uWhLfFg{i~PP^BgeZ$CVzZ@sOkCIWm%Ed)86dTt~53=7f(!XWolebZzHn z86P#xOJ5XG-5O z_S#t@OD6iJ{AC1KJv!+sQ@?a57Hind%K(rez%fHZ$6g8&xmeoOg#`Xx7hRp>PDkUD z#=?(1{0w%@gm5d3k%`GDPW{D``1q$cuBY%FPJvp^xOa+huw&d01PFR* z+rWhDrR@Zkbe;6;!j1EFQGBDt{C^l!rPo`n*H7=p&vvjKFGua=p{Mzw!)Fr76waT& zh=2aS{bRiL{L@He)A*kM<>wLN=A}@pU~Vao<*RepHxR?VJ)=mbw82Rro6BHee3XhL zXLt2K{F@)bH%;A+2o-g>#Wh(9dqa-|IXB{5!nsb{k+k}Kd7L}?^d2r4$Iwb2fKHwZ z#ict?W24Ot-A1*BJpDqY z%JsBra@%`jGBy}a4ROccpQ3JOU-;mfmA)qc>8$4TYG1jeZ3hiJ9- zXQSv#)3V`??Gs;o2}{jky!)PMjO8LGul0u-Ko#?g?~=%GEeCF#c2_}fcG?837O=dq zjQ;6^*726+5t-)==r#n(u?`>%(gK#1yxB~k$xeJ_wv1zwdfwJy6v);U?oBi3!RZ$H z@)CFM6m1QLzDYGUK>%qOrp^Z;VHF_WhQj+@#{1H3r@8g|7B_AI=p0a9Oz8V|KU}89HcXTxRTY3cI z3ug_fep0#4c__mv+&-Pr!n8iyG)BZax3HdXP}T;9`oc&hnBL~y4Z`?+EzcPOQvNOE za&i2lUwj;oyi&opzbT6hty859Rjy$7xi8~mUr%EEuJ6O&`N=ylmRUoS6G`o^Iqi-_ zmORSQQ*JvNz+V^F3rx6PS}(LwJ7&58yuN(?dhCXMg%AJ9SMW_#4aW7FJl zoTnD{@IH=yxKT%=l!v~a7u9FpnPPNoE2UFSAXVL<`~@Ti5(p1)!;u?6X!aVKTr+KV zE{5CzG_*c(Gu5I}t}L#gQLeIDZb~n> zA`O(!SP-YRvv29o5iaZJkHp59clu2<0N!V`P7mk>NbdMIUjv^0MP^b))>(o$;YfB5 z>a900NToe9h1f0o3~wx)7XXJb8QP#2@uBBXTY41dexZfU!BH9j|KJI#krp02)Q5fJ zY)sOrqwNSdF@3sH|G)B>wf+xuz}`@ z;maTkf1SJbBiSluMmV9^5jL;cDW;4)-=ntd788yU9bv37Wo%hzRof{^AqZk7J}wh| z7xrZ_-eI+SC(S8+9nj={$*@^)ZX@5cF9S|c&OsV~!8R4|?ZC+)xin2=(YKIHhVh}# zyn_GxQ;YV=-$N5zB$TF#kWIEakG`Zm@&EUrA_36E_ zOwWZ}KyyO7LEZ6NTwKI2{;PkDi?5tyTAjPXLA?EM{Vb9LLw09uZL@%jFFb`*B#C$2 zK82}?0i;qfWHKrA<+AAO&mxgb;0s@W4TFs-+!xhZ?VM*J?l!q@EY)gwxxa;4S~sJe z2%49gX}TXfQ7Pjvcd@CVKD3SvBh)7&pOiL-InRqrz-xbI^I7OK<>Q#Ean~7gM}WKf zD2upyS>-F}hj}3n_;4tqh(T5RyI+~7j4~PVO~qsP88z;H6Dj}HJm=X!@WRd$(u)vWNLQwK zcvpgh0BHd0%NPKQbYUEj)L(?{yzh7n$wUkZeJ7d&xKidozx+6ggZCh2vNHqemBs29 zV5y)cLB1Ns%vc%;?S#E_znZ4d>047N>^ZMly*j$On&H4nqxTqe5Rm&Br10Ku-juuZ zjn;FSOK8Ov)_`~?+ALv}2NnQ?u+Or&1nzObGzxl9~|y{jgr`dN=< zblmWlpE{3!@zHCTp330FK0VtMon#;lGnK<>TuvWGa&!x$?1%Ate|QRCJ$Dd$ z5ADU&I46bo*unT)ZXXzGM><#oU$7u-K?M+9Y1hlUP1;StHg^f-2Er1)O5P$*H2!>e0UFrV@b@^I5)NKvba;t zGER*|QRi-7s#nTNQpi!QnOok>WZ<~9LGL!KucF1>wKf>l^)gCxH0t%tLw9@ibGK|3jlO;~xa-$B08R>z zkMZj`>nGKdF_YNHC^Oj=Pp#uzE`havJ#uh7{5yw^ADyeFK^x~H7TnFv?U-IXbXelN z^liXTQLDx`&myFk9F=kSc7zVy?-B)V9;}=6y*{L*_d1r&Ih>GE`uZtnXg^tSJfxC{ zPU-_dJD2a$ygqG%V*15f8tMI)u=eFOME1SuCm(+6;T#o&l&??jGO7`TGo@{f5TSD8 zfa}X(Y$S(WQ#1&6k7D<(ehf5D;<+;wG~?qK?dL$2$>j43NFg?Aco`UW4nJMFs%Obf zRBA2c%T3I#bB9SoCC8ni9!(nqc77^LE3>$Qjm23+lUXV>XYm?)zYG@8Zc_z38GMvL zVP9bx-b-|z!wZ6W91zokG-?mmwm#dAvQh527e9+iWDx1;TZxqI>G2U!fS-a=#2fhv zcL_<%7uiOw2(osk#qGeIvL+ob{?7yrXK@z}D)Oz0URk{It!!_?@S=X!+~eAXVyTJE ze8X<>SJ*%L9)Nz8kWO(Cg;1Ji72fydKbjHkmfWD%9aKWihl43qS$lP6xd zgrEDs1!M*@c;I-yEs8#9sA_T5cN-dv;zl#d0^2U@?9_Ox}ZGYNWK7g*?mqsIYDpyzczg1 za`fX6@k5ga=4Ae#AgJaA$c`nfyThCs?cPG5I}PhMWbh597Yxjxj%XBWrr z5*OO1GA%3)a&6mf4lB1!>wP6J5-ye z=iEBy*1ss}>o2b0Qi|*FhPL%pY5hiU=VyJdUQoFeES~vnZPzfkCA2d^84v(EG_v`7P_<2(9nox z(3g#4u=Ogw{z?^*+!)8M&ff1XUik%HKUoLqgh4${P}o-vdR(2S6@78Fj)Am3tm9`2 zbMW;cm5igbZ~>M42EwrvB09>^>mHHpWHkPrrBy|L2FUapBD1&36pIK1m?) zNTp*vWoXnIGz@k8r-u(k;@FIgU}g8)xbSANyYg{_mOh1#e(EYd@G(w|Oh1m@GGvdY ztSnvyia8F>cOftCqkF;d-HFC$8@#}^!B+f@;Ty@*12@T{mrQZr{dL2C&2k*LUf&La zQ@s=H-uVk`4p52dj@9RX>v!v<8@>UH*E#3Ta-Lnw#8B0zX^Hce z!!6a&x}ZG1ugg3)O9ND(*?AfP!zu2bsZ0dgHEUpQT%%;b<@yxaSuXFYWQN@T7T;WP z6V1z)5Q`@fo1Ew$-0D2doT>*kk4$;$T!P#6vV|5+*(~H=g zFW9YpE^KJ^Q#occXePMhk5LiWTIJRzo3+gE&tBsf0I}91%ovRbJv!A|89KFswNeeI zX8KIdpyC(wG_8S;3#O@xdm~NsXT7uZ+eI_b4hO+WDVd_xO+;u2w))?I(1|-OZF>-2 zkKx%q6N6~UK+3Z}!S=4x0Eq5qnElCN7TG^(%-ft)kSnq637i)|7%&_fLu&dgB11=h z_~Ct%DO#tp@sy-Q{yWdWczfU)#UcC#QY@V4M=DxHw0H(*=i;0Y8LZH<(^0{C!#t|a z@Myc6Rxv3B+BQ@q>Nx4GM6`u!qk+q79MqgNX}w9}aR@~dNcIog?^~?!sw=mtI7E@Lr_snGc0jl3ja1 zD-si~T`OTkzo=*vIlK;CTCapKUkKsqdJ{_p&gqH_gckDj+0-b~SfF0^oWfz^eHXIy z5?z_;Itp3y(3POVI#S7SP(Q@u?qfhP8gdbiJCWG9psYF@A237~}M*NnyVyu4yW2Mg^S$PDXe{31Q{(()*t*5bjPd_H7xESiBErX6!;?w~z z9FW~FP0*R_0q`r@3x@7a+ktWiczx7e@R!IcQ1h+rCyY%X_$mND` z`SLvOyXzPZk0+3zp`b^pPWiWRX0CwKF^lh#365TMQ z?38DLb7-_cl|79suO zyfK7Ud@s|Y_6k{e*RXq`P}#Py>qc%3$#;Dj*)?_a;ZS-Hc5$G(bY9$lTTUO{21^eh zJc3we6#elHEK>31F@a1bPNh@Bs&4VnI+ZbCw`FJ$^ss9;wgRHDuj$b!*(}#Fw^^rg zNDG>~M!z#Opu&j^;<*vKgPX6MSZFtuBd0N&vDh;(}zLM1no6}txeYsmSs=p?Le#xPox*n~`*?Rz61|q2go$j|?kj%rF zFQa{YG>PT)GQRS}8W+J9hKCczyDJaFDqHtGKljy(___ah3NNq3v1c-ldyeP2#<7+_ zz3m)fE!In{voaeq=ey=;aiRmWi&eDJ6KG7_g^^qD#nfm4>GGE_h(~eql?(V!e^A7i zo@^pBkjA0I11!hA1MPsEIuQdmLOf^(y+9AGL9miR=*`;$JLKwto1<#O>m+|YAlAL? zuZIh||5mVV+1_001z+{6|4s4J+KqDeSt=IrnP2=RJpVg?fJ>XJI1{bWAfO@-bF;GN z2=4gaf5>Hs^UZetEfhCax$A!x+0lKNoEX8O@ia!W`YI+jEL8rQZzpGqIA5PYZovEC zkBSbCBL>^^&Lvv1Fb>-pw|+MBiEeO0u5fP8a0d`xD*=0Sge+$im1=9@H4<<`)tI(h z^_EYJ+`ln#SjD;dn!kqn!Xo;n_aHJLg`{%5eDriTPeCUHRCLiTx(66#Z74n>U zTF10+Zn2GHZtWpDT&W^?aRV3Y4O|?_7%%^>tYnsmV&MF4@QnmHTXL0+mt>`m>A{r! zWYch-)27AfE$aL>FxrTv5w9lMC)5FlN7zQXrM(k)`CA+x5lX6Gt6g10vouHpV4C8~ zkm0&MltCz~M;g}y3D@T6fnr{zLZgU$?{|Fr!zWK~VrrTSJ0+#z(!Kf{nCFFq&{h@% zN6+12Y6v6gb)0J8m7q2N=jkrqskb>RR#)Hm%5*3r z@KWvSr>ktAMxK`yBSUdajfL>S%PaWG*Eg}W%*jn9J}{8vgbbt1-O(dozl4AN`={{9 z=L$%0oZWdegMBj`#NwfPIaV@T==9S^_Y*%`Jd{F0*MlObJoNjM4ZM6lf{@JD}M#RopTiM3)JyZ82EWF*e~GLr<3qZMIsffs5c zdgDG2u?5!)JJZ}S>rGI!;dPLHqo5+pS-%ML|3#2++lc4TZE#Wl>S`usu3djP9LLk2 z{v z3)nj|fg>Y&cSpx!OEHD<^raGJ!&B%V==VzW9j^)qD3S#YrHhl!z;K@Pk)H3zE8O*0 zxb97GopoFDewVm<#eO<_vF?9EUZ8pHhulR!tt(wPgLK~jQsdmMYBORT?r8M6_54PG zJ9M^_-4=9s{Y);RyC61S)gJn-eHE4EO%%^wLE*6%Q2O%oD9kRP-bbA<#L;jSHM*SQVc&@^fosB9t?Z*b$la>++@v8$`7t(9?dAb}!x7;b&` zl|P*+d9pBt=fKrc;Bf6)dnDy*6Xh$LSe`Fqb+Llgl?paiD=2K#P*|r5=t}{^J1K6jAOnSmn2E;aIJb`%Ho2(JaE$89sr*ZE4I5$KUJs0&E}ech zXon*R{n{Tq*ZPZ3ew0GJ1rNSyKReZ_Cd=j#nipWu4h8~_);)u+7w0g0_BlLuvLAbn z9zrVPeiv^FOyCuuxRjMn*UKiO=u3v}Rr zPsFW_Ri6GNpB66NF&RpSF_5q)`_2epV|W{H7grwo?e?-OK{zic*n+nU+f8D7iH?O^ zoP47r60YIG`2{@t@+MxnSi`xidHd?;wUteKb2Z1wI5m;N@MxC#GztCoaBOuJMKo07 z&P%`XR~Z^lZb9)1bp7svR=<3?h379$^1;O;2fvr4l zF8fVTy)HTaM+O^F-Ob@p2A!Zc_DJc*nGTqVVeaBNJo5kkKiD{P1{;+cRyZ!wM~~pl zwK*gsP4pdqD-OT?2e|96a?ZL#sWdcCKl>QQ#wM}2vWla(9K)>>3GC_%Aw%V_FJwM` zu8d0GE)3`yx0Omq0hHI~vHQ36OE{b2xo(w5zZwYwQIlUuX8P<5r7L9QM){c)PZ57500TFg`dfxp2@av^_x>+)+UM*{KZvC z-2wBWjVcB!>qzXGL}>RIJK=d$H)v3_*q0aPuymz_XZ8(Xoz!*KLcL}0I$8ZCc@Tmz z(U@moLAEiwAH(G$`Zy-^m|pFu{)zDtrM4X$m$uF$?uDHtA9{26UrD?9%Ozq+n53}tkT%kUQwe-CRAAJu74o+il?hF^iFC!Lu5?8OB z#3#Q{!0-NH6Z2~W7@zLP^mKv@{Syp5?&b%etIi$-+T`^C^Lbfsj>8UALf;&NzdG=n z<-c~hHwnFBwe_7rds!xMWO3f=4S$`>|E1siPx#tz{tDI?=8>;fP)y};_^sc8m(HI= z3{*CEJ%s&l{vOgg3k6~gUj(vl1dt|Av$9?Iw8k&Q) zu`IJKfCQs+|LvjF>sz8vWI+YINH7@i7g_dnsgC$s9?coI1{5={NnNGxI{um&RSywifcEeyUf=NVAUN$}-}6 zcO$%eHxtMs!#r0mqmic)=EiT0o92aF0u?ELrklA&Sv}5O;Bda{cz#!zbo{SGbPf*N zjGb8F+EddyOI?*^UB+fQ#+?I&oYOZ=l6i&}snCzJ6BgsB0pD@lobrK_c57;@@uIg?O_}R?&BR;ef zI~}NkBFP+vvsElzyGSLTwT0h(K&N{G1}!at;(9zFgFx>M6sq30`@M7pRthz?Uj+TM zwhYfpfQ5mJ(}L#Yj;6DAI7ftoVC~dv=&!D!N#nqd)g+BS9lD?$?Z*4EJD+J9SoH>; zf9%s3zzXt-z3AV2m)rRpl~3snF*d=4%S-s$i>t_2!q`8Rz#C7buxmJs>5&BPJu!*n z2eX(Q)&ioos-awD=QqrDrRCW`t5QKdPXl0e1NlWaIoFn!k>4nyz&2Z`B~cD%Z1<7S zb0n6jyAA#`f1BJ+8VmbiIKLki^nCL?Ul7Cx0<5#I*u&_{7`nbOYy zna`1-+Du_RejFRq@58`}J8)#OfYHcv$TT0NVfYn1^TI{^{zppq^DiY)3y)%YPd^uG zO4HJBlN}HBp~5CWd-ZlH&hx_GFu43y#tk7r^p`F6FAM*z%YQw~l5ax4ap5y#0sqnXh~pu_hJR{ojR|d%ulyUEk@D3NS7V zxA6QUpTLp3-^zKqj?vK}9GysEAQeG~i~J*}xicP}MxV~L*SJ)pQ4njot`1k2PX8V{ zI5!>MPw03Kr9}CDoJDZ0-C&(}ar0ywir5AgiV18s+)v?54nk>l1%b%$yGJG;~J7 z;4tcJcYn@{S7%CDsZKKCTrr;SNo@2jj8qm8r?C~@qusQVLO=KqtzJQWNxztCpvH~f zsy0S!3;oJM>yxd2)%?%OQ+R4BGk0 z?cqXCZR&@8uwWZ6W}QSu6_cSbJ($LUF&Y-$&&Nz22{4zhRmmzQ`GLd8&K1|_x=e?OpoEYkmi;m;nwghVEX z{K_(F+-XHqY4neA_raZftXW|m?f&&Fk986|`t})2)s1Oo8bC!Z)cUll>K=(l5hITm zA05Ssw`MT8kBgpb6z7zW(%4C3L=VR1kY4=~@-IDtYcD*HYb#9}o732+z6sU(n{oGj zcj2M;4B}mHiK9QhMl+w~H1$pbYp3d{_GDy!yK#J<;5TG11W2|6n?o*ebFj5z{`z6N zy8Sm0V`u0VuoLq_983B+u9W|k*IvaFzxCVLJbMO9#Z^1EKey))?!W)rk>qavgP-_S zL@Fyt-v0xbxc%KUP&GE)&R9ff&OF0CKhi3=Q^D_SCRK7+9E(BMBV3Ql7teCt2_d=nAR;l%KaZ!;Ib#0X#rSbP zXx_H2Tto7y$1upvS?b^(ga)|NPxYac9YkFR23bWkCtYUa<$-v+3GV^pwzLRuiLU${ zcm6u+AaeVCWF-PlO1me|HS_!nC_LAq;om^L9>&wnB<53LZlkoW+R8-w?qaqBm+WYr z=V6#pKT(d8Q<7_1y4J!pclL+w9kI2=$mq)p7QtbM)Jh%6s|@sIfWL8wNRO}!dJ!Hc ztDj8MvuG6>Xs*)uncia*uLs&yF>!_Q9*y$`~0P!c%9GI5NggtX7fFWidLU zC)C};BSF4`X0wTnl_jQOc#>t5C-YakHX2RbdgBh3udLhCxKz5Syy;y7mQHz!5XV|8 zlE7|v2-mCQNK)CE9ZTWpWCBO05;#KTX{<=$$@nJpophtIoUAa`=jL>N<_Q&yv3m6;s*MRr4mMRezGo z^De&m^ZybHU;74js$1Bv?{gWK!{ZZQ@U;g|*M}21jsrURDOkDVY-I^00 zF=gJ!MNr<`$EC0T8jd~k0c6u%Oce8Y?8JzDIPIG^BAA++wewMo8!C~;iv8tqUc#*l zU674db1EMq=Jt8ooHpClPVQb@vjcZvB1o_o!^0L= zDQ%|gZlZeoCgSsF5G#^bdtMUI3*tIEXlJ^~gHo@)gwgfe7=Gvs+T?4x70{sIuTufA z2mBln7eAmQ%di0a?9oNUdk$HwPpgXQ_BvwcpP+J4WE?U+YY*Dd2C#4$`!AN!Xtv2e z{`tA-k zUwi>0=N?A>$Q*sdsC}m>Mz0_aoZCasL7QoG2Uq>xp~kj)_a^AR(OhI zl=|fE0pqV>=(*XM#I0?Z@6quLj*ceXZ~PKIe7nd+1|aMe4yq#HkD0WJvQYh_%j zHt>y?R=LW};E_{#oEoQgy}v^xFpCim;FLc`Gssd%FIWDBuPxq1GLuFo&xsUJ=ZK2b z8`!?Ngd3MvQLpN>ya<_B$F{%pp&W`|ORqZ}Z|it^x8lh`b=1;;pdqKBr>Xg})S{GZpEo^Kxu*_Bd!a@TJ zDT(Q1!s~u)+e_i^$?EJc@HO?Yg{1JTc&r%tSv`h)GK!c$4YFdY@KlNSgM68ZX z^Ac*8K8wxQzJaZq3skIPC^x353_QgZ#k=vq!ymxMK0J*Nzo&zfvt_QHs`ga0-r~?} zQ5s_!kKueYNCVstr^CU@9|rGwyEFkUf$rii{tDQAI8H^ecbv_$7TQK*M1qxcQ0b-gMS{Q zr{6{4&jC(8qEfoy=lc1T-~G2Zap5rvn+B#P$8m11fYIR$Ub+KJa^*i99LsAd1F(_X z8w*xGqv`z2_IPh~Pj`4%!1;yTJ^!$upNS=B?PqulQqTy|eONY7LxK^7bHr6q9?Ny9DbQ-BMr%}3f3suBXD~zD6 zc4tkLP(Noo2xy6rp$ayt9)j>bg7NwqvV{!d4?Rhj+l_GqqyRM0rSh`>#wPh;8>_7p zUP&cTXGZ#PTEN|%(mn{GTpa`+jOymJ!xf-@Ns=FBTWuU&>*B$8kCLwiNqDt1uC0Qk zQULT7x7=n6iOno9kq16`oN?}X zwe<~LYK>s;v5&Gm+9nD%i3mP_%Yzy2tlh!Z-Al;EC}blU)bpni&5o!vy>d8^PZZnw z6z_Hgr;ZJAz*Nzy?b(+8_~To9GKS zS8?~oE~kX6g9N7PZQoX)*`>dZ!jxjrs#8!_6R1>UsM6GHNeXc)KsKLT*)@PE*Ob&i zgWf6e%v}Byc&!$d4sAVwz7&8&8V|hxlbB7G5vi==w}1O9)DIbh`32*$58h!`D8LwC2YaRWVeZk7;qf2H zvd<}?r35G+BjU;ufLvA%hPkP&k6i5`x_1es*MA2auY48d^>s9;3{+ZqDg;k(9)ASK z&V1OEf$#fp1ZU@~)P$%Iw4`vT%}JA;Wle9ngvv-5a190>sHebt+~a=;^y0je$loIj zHrwIwhmh?%g+b9Tw*;Ub@Y9(fDO`X4MLhq{ehzypi&)%WL7QXc%wzAzW6yk&b1_3@ zuWh&AzWnMJ@XDKC!Py`AZxEk&z*hbORn6wBfLX2IzE1Nx=FUCNai7NYNE-7~L%6(5 z;XgNzp@PmK(E#vi%yJaGkM*^~y}#Vv&$%@s4-@_}^b2tBuhA>4Amc3q3!@r$cXP#W}%8cN%!4n8V~r zuKqRI19}JP5>z)W7GfJEPVQ++1oPnxRlExRtms zz+g>7d6*;Y4i%u^iEdN4!@)csE8)Vi0(;6oY(m2>!|LJ&p1u9Mn4TF!a-?W0gLb8Y z%JLenM5eL-*ayu|+*?_wEh?owl(*N=td&t1)hie=?5uNj7%$i{wQUMN4X!qo3CHj~ z<6(*PYMxfjdKY+nYy?BYER$8lS2R?Qz_;%cfck~?BK;jQFRi+>RLYb`V_}W-V=NN2 z@Fb^0vxys*ma)84u`=m~KtNS&>;@G8cLiV^Z)58YKL3Rmd>LI@M<}2cYNcKT0#VgXip+NT$ME!zKTQT5wR-6@$UW$xj$W^f z^jFyfML=UKm8bwKucCDE3)p(~YiM#j=(&qVGlf#~VU$|WV)E#F@bQmdz#sWY8YibK zcAKEZ)q#DkSPFqSk0al!ht0BHIXr~ih7N>#$H6rBgL?`5-l5k(-v$1FvU^(ymxcL- zolXgG^Tkf_)3pH>H4eq z_uu?g{M29ldwArDci}THT;;sxU?M&Hd1ljTw(#xG{5&52;K$HxwlOxG#j)98ENpUN zH-DV-T&GXEviKs|C1@TES>bNzI{#o88!p3(jY8UTn-bu0Gs44)fyLp)yM+gSx;v)* zw!P)MRL~2Yvve_%cyoJe3%l2^qj2F7E@pI^Ckt$8`4a(x(HHJLG?xmL4TW15G5-@k zjLe1e*uHWVo0o5+J2GL%`r5725P_ifJukbu-m@&dzraw(Y#cDKU8!O`RzWJ(M&_Z% zSyr{N=WmLuTZ+*p>MvbFeY1*ssfIVYd0dYsOz=Aez~>qwEjZvb==&+npn53KiL~YoUc`DvL;Vh>JgJL4wm7)<@2=q%#;|?%S=1DU3vZsxO+=qyJ9Z%m-ZY<<#6u(pTMc~ z7M5 zl8~W7pl1h+8yU!UZQp~i!{cW4{0Cy+<2)1w3H;vRK=T|5zt1e*G5E5WhhN+-9*u+P=pZ@UW+xOuTO-Yvf5Oc$layC{y1aQ-m{{dCCM z{*4 zR=+Vrm&RQT@f?~E1bMKT74kFNF1=nwr(Q#{wvW*wB`xPt;mN1{LQQEEk0#3bRoO%3 z&6{YI8fffSai^QYOOY(>%eIW-x`o8e9)yE#=i%nPz__w6r>d8&H}P;Sf%A_QjDLuS zt*zI%_^M%Rqp3|%^5YoJJu-x`NvU64G?7HCTtl?hKz3*xk?SP%!~}4*|LmCHp0fNQ zLVpK<&>yC%qy}aLwL4c)UtdP%^pi*xof2?Qr}dK=u)RIFNb0K}c>gT&8GQ^Vg3E7Q z!S8 zYB2^GuRh0kA=kx)V@1SAhwc1sONV9+Qo$#ScVP_pcl_a322xnEyH{y*|ky$rL}cBqezm`bxKrH zC_LlY1k#xp6#%E9YNfxmwvE?c(6lq*TP#b3uNV@RKsWxLzi8ESte=crlr3xZ^Q_f53ABw}foqc5;~EEKhxX1;fMSd0Go8jOmtNyNLAI z1Q#~boM&!iyGx%&;8u;=jTT0)you4(+Zg%DAI9jDkC7KuaP6BfqnpT^;-%-3oI)-d z-nMI>Uf>ou+|?m~Af9E)@^@;K5mdBu1@gCK)OKHrPd;U@SaPZD;_6{_DlpY+*U;Lj zpuJZ^qf|w`8^dpRhtOms$7j@Hp0+h^I3aZcz@}9;`#H)-FI#OmFNpadcKkzjiS( zIfn6}7}j_6efbK~i72Y&3TeBeVFP1yWdc${2pZfv|3AxB??^U+qpf9}dhK^H9&6yq zlVf;vDuain(s*<(i^t}2cw}CNnpiQ-fs;gxLNI_}phn{{fNJL%muY`ye6Uir7bh8Mr^HEeC|aFtZR#QZE0)YQ~hT73p5JNC;aJ8V20 zhKBrlaG2jgI4q8<8sVJ~I0OzR6TNpzs+ad+AR=PIv^_nCb2LWdh$WI7`x)GM{SAEa zAN)Nme)c!9)u17FMg>8?kB|3}CIQi<=k;}y~^H=@?3a3tDdubI{U%X1@Sg;jdZ_A&?l~VQT6LMFA zM|y6-fWv|Mr^$s}ii&kS8AFD7i?*6LH9GFjEC_(x{F0WY;y3IC~aD7jti#=9+ z7w&XE>s8;h4qV3Owz=orf_@y~PKXURCaNA59IcKHXP_ERa)4ob}>ugtcf=^HiC4liJeLpJ9~Az zPhQ^LK_WNg+RGD^t%;}sG0AL?4974_Gd&c?B+V!XMsj2VYpEe>r#GOF1}26$D49vG z2DU60M^|UN5aF`DzZoCj zIh>y^&e;nK!e!J>hU+3*dDBYe(x_AWj&dMM)a$E=rTrReNF$r2U}1HG`itP$^cY5G zN3grF03Ao&is|eGf9rzA?PxgM)xq87&`)6gh7s;X1|Udt5aery#Pr<4?YCZI9xA;H zh-C_xJ~D@5bPun;a!tN20VDXDmhBdAxaWUwTpXCwHF6{mn>PvGj(6|8fmU#*m|%8VANsBTk%-riio ztyf;etH1FXeD)WA8E?Ju1~xW0`I9M(Oim(`$+Emu2E0l}knK>`Su&D)1XJJj!c zg5NiRJ{%3GjphRGk-;Gk~5;Nj+-Nb9A|a*S+$ZrOgfL zwxz%&&_kW^f&`|Blb@CL?RJKXLJxYkxzZNo*e^G`Nd=hOjUS6baB&6R8i2$6lqA9h zS4Kj+NnAXkLtfL0;@FWio_cPW3oof2OwY>z4W*?OZ+7kIvy+>YOdJFA#9ErT{p}S~i`FI9BL=X&yhza`j{f;RC z+QFHg8pYzuK5DfNs*MiP=_K|yH;~Hf0~Wwkwv8i09UL8MW0=f)Y$%CjLf?9JD_wgP zj>KgrMkldRoI&@-n@Co6kth`VOjP+RUVuBN>m5U6JIlNrO52tF`t1$eNX=tnwtuf? zaPql$@-f@vx+u*4-b2`3yXSUrz}d^v@>B|QRucAt^$&1ve`tsN=3cRtQrxdIx#%?zZ$Lx3(XNoQ4 zQe@)P!u8fllNza=<1Yok1ejxrqAQ4J3)q=DgYwEv*oFxl4PNxW$B3?@?V}jTt=9f)JGZXbbQejayluj`nVR3P@*QWslbPk%{ z)hvgb?fw>!jILtk)+A;gIt~D9K$O4AW3L4GxUwv+uctRX7;q3&f12`sg|_bYdEn&M za|hdRea+5B&@+ch+oPv+@g%zG9IDwOwsWJ{NN2E5X4UF8P+nib!dq|Rm9KsQU;4FQ z!0-OzFW{}`zm3&}Ti7p`kj&*#oR}a}7en+)fiFuhqeGzQeV_3A`u~B$y&1{JcmDwN z{Q?2QdYa&8-8qJ<+5xE5sqh+>!;V@o$ar`B4_Yn`??P$1&-ZDfF=*3v??2X%q4d+?=0}Bq#3j@;v46$o#Zy&iB`2z7=-tA^8#6p#hWz?^>y@~4js=dW! z{#FK!7sk^Vs8C7K?HfS%hSY6GphR&Ffda-)dE_$)?rc!PRWe`_QMRto2BpjCM;6X&YJy#XNq zAUufUN-j^knsJvt1pdKr6b-e5Koh&MUqUpvr|CytniG67)5aUu>gYt1C>F^y1GOI-@S|N4JtOu%%I0+4h1WNL;ASD(laeBZLN2j`d-2VIPpZ@ z9_Dg0RdHOJP|7~gGl&s{t6XA0m2#cqK9q|7kyah+m%dI$!2I+e8OMrC>*57;R3<51 zphD10PfKypGFX`CWYdSAPLt{5PM*#TUMfjnzfF zpIscEMs8@Bf>F;AgmwuAa_mFTHRydWe7Er5GrT=v^+*8L>uOU|b`o5*rtITaFaE24 ziEsadzl*(_H!%LpM{)9#e-dLyPH_C{o;O9i-eV0xuO(=y$vGqOOJ8r|V}I;1TzGiS z79noxC|=(vzMhod-rB;ojW!nE{2WHdk0Mi;#Ln7n%%6J>Q}dIItFgosjH{Favw7*c zJ>vXB@xuPzHb0uMU)Z5=XLM24QXnH3FRkKo4oCZVwj&x;^AlWn#RV*+&DS}dL$hp zOV0tQf>ADZqsK;wbKG9r0k{Z4>JRW%Kre4^AAr~o{N#WAsc>Kq4H}jv@ROIApSF+V zL*q!Wv#QJ25uqT_1hqImoH&GrtjqwS+IpE5wm=-6neWGGMfe$`2gEJ?FadMukY}RdS$KA^c;&{uz z@Q{ZqgEzvx(PWmd_2WAboExW zL^6$&6T^7x_FZ(6S<-c76J6Es%ybbSe)tF;K01!!Od6Z}RW$U<6l1ub%U=*M5VVK83#y{^TQ8DpYAX z*wE%2s zkS&g4cw`KE)l$da>dAQ5j;;(nhDYdQgaOBQf$t^mp%5bA+h6?MY`fB-)vMk5(275e zD#!UNzx1#0jeqcWuy^e`CZDC?|GuBZ@Z3?x)>#X>cW(`K4~VoiuWBFZ;MZR4;?WO3 zfTy3Cw?4GZAQLb_WM?!+r2s50t>MmY7k6L$Rj&R&$ab!v)r#QcgOAzsHU>(rOdM*) zUA)`l0_zL+cW#f!I?T`P9^!C&WzRe*{5w&c-FOSnb(S#pr+*Ba^$s?+-2=3@-+Tkz z;tUeSpPNsg0P@T zP~z$;mdv18DPevpi}Gd#o0qpRe|{95@d;|O+Wu4`fkVRCiI`|=)xMM-N9yt`h_}fg zN8FQ^irX{1xU>P{UEY~&*Ki`XhTmGA#<7#`$VXS;{s32Ghj(%MNC6XL+Hqh%Qo_*Qs^PI zHh%a=PT<W_W?z6B%i_q zb7S^^)cU?YMqwqjxbEunHE=!w$YnkuZ}a1&Uf$)(V$mEb@A%PUn8XUaxcPGI1!5Zb#L& zmaud8q8r!tDp>%E7&iTD@biE36QhlGnmEh0fAq)n}Y9!&b+Yc;>(jav zl%>rj#8P^inJT7l8-X>lxt*t&ueO&>A+Vp1L(qL{9TQvSie_uKfpn>Yz1t;Rczgt@ zEJqy~V?D;!xBOiiLzq4&x&xz%WN{n|)hH%zUPgL!7>TrdqO@mhfVqz8yB(N6Cqe;b zWcQcxa_tnRrgXZX5AS8jctqvW$zVrk^8GMc`CJl1G|Q`H&xBpv01P)jw-s*_k6wC? zPujZMX?6`H)Y9|P(W`RJmTl`7g9Q=Ptv7vN+oyDA*xzm~Xe$z|zet zw$f9K`BNtlZB=mV%5B$1E}8?QdziTo+$Sgz-^b?iFs3e?K_<^OunFuUA53zesu=gI z`Ue07))%tL5zA}0vA=Z9`a<`iT`dL)IiLQo@58GRbLP*_=ke539+$T^ahY=%a1gxO?eM zRQC3e$`vs>J#F*To+Hq}QhvS^q26?$V2{2nyj`Swhz4H4=uswA=*b8J!N0k@itqf> ze~cIYm%oq3+9qb+`vW-kksm{z%8YSGGV@?u4ubqt7}uV{fV<& zthAl*_i_E-fk)JzacbRfymlRzU-%4;Kkz=3cGodHeiVg?8H`U3hswbGf^^PuHZOs@ zkN3+Kgjq`rxV;@lyg&`ch>rYzX7L3)bTo_j5B(4;8nd%Zu7B+sUcGn=sS{_=WqaC! zMRZ&;GvZ$o{uMUD@Efn=XlWByCg)Im&r{?#5qo{k4C4jLlkAOh5_PWAt4$HreA2bg z1w^-p2bl^t%f$=)gH^cB#Yi;vEf04qE0`57t-#5ofVTzU+QWg*HE`2uKJ3E|$5m&q z#xSO5e@%4jxD(5up&D8wUw%)*5s@El7F=c5vjaoB8GP(XE>JV%jTV_kmWysMFeJU7 zz))VSPJut`spkOX?p9lf7ui>O3t*V$(p_MDl&dtit1bwVeNPZh6yOKS7(4mU`#!b0 zu!5!CBvy9Vv7C&Bj2^~wDZ(AmcOCF$14UCAr1J&Tb~fy=nuI?upw}owq%pNQ=p_7w z2SUc$(g?bNk)$TO&6R0$YYVmIb$sMwM>M`IZmiq3&TGf~SGFvbD}yKEJOZG9cW4wt zZ@z-U_z;p@O_{eD{)jl-8T0TURKhsP0eU1~$I`8BY!*&nxZoy$0VBC2Mh$f;0D8t@ za?E{bBLICBtWj@cPfyS)4gH*9rHBM>DFAlVBuz4^$;Y7>3YQUxMz_ILW~+r%!l_X$ z=G}j?RSz(AQEx=>-VYtY zn08`zg=`AP*@m~)cF-apo-D@kk%zLly;dhfm11F0`-KdFd3k@;M^7l0$Z_eBV0%rDP26U?ien87QmFSRy9#;166>NC$Vq=Q!7d+9g z+lSimyZOc?eD!Dlcf9<6{BO|N)ki<@BRKMbPa-=$!GytT-v~GeYyszqM_kv?XtP>^ zH~!MYRM7p(-)iJ*WtP$fep=yD(JNQ+`ggv8eJWTZ6#TX79*WavFfui6 z583wf_jwxDhl74$eh{Ab&h0J(Zb8UTAQCG3gKL-YNTG)KkN$|YqkM0F<0iiHtwlsn z&!KA%C;D<}KIt!<7afGupx~Xnd>O<0JGgV)E1aH%1zIrB~#`9pReA3@`3cOslPxTObw{q=;5_$?saELB)d#fKKe(EmPSj z!4!>bisfZltuCyGr{JhM2cd`b@^$$USiqKc|MXBG$AU)C#n>?UoH)BrXA%3nP9Pd` z%1@s~ekhy9?1UChjSAFliV}H;4#df(xl-^I zF`+{==mxv$LVp*98d5fItN7B+HU&_FH1r9|K=6CvPq#I;ClEZ%Px*!A#ceEKxrNBy zI&!%*a`Q(pmD7hTq_MHJ_>XgSRg33cz9JETFN<|XV9~A5dyZXv8DsMkh-dv<0p94^ zyRU9;m&V+@Xjn)A5c4@-*v3~c#*jZc1)W17`k_?4H2b9nnMWP@bb`u^)MQtn4BK;I zY0uFO8FjH4mP3;-MP?V5j^Aw|(x}_v9Xfo%$|b|N8ll~q9eAvTA%T;+?mtFj65L{8 zXRC^MDu?qAP2$|?48Hi4o9IT<6#S;XTgi%40ycKa*kQRxi`rcgxby?SJX5Ur%t#*B zR<>y;aN$Ur3PBT2RMUotm4(^0gbN?w2iXIDPD<2ZWc6fRtN3Qxc5BRK!$2QYf<95UlGcI0-0b*=7hV&~RX-2CR3@XEjaG+zDf z-@xXbyHx19$WKfoTNpB-Y_HjB`RMz?TGqL!w0$%+3=P`ZaF>GxtVD9WQXmui(Ij+OC z7)fRD?c?{Y!&#G{x$K4Cn^79DXeKFmmVvZY8$@=3fY8S7v? z*Fdw;K)IRV)Qy`GAo_|EfR)t{XQ`RY&}}SS4gnR^XtQQ-7BtzeWSQ8n5hqtu#<~e1 zd6A8GD399Mpx&)-kLe8u_hnL5(9TVKWY;x(+U>|kLXSlVczM&_;w ztB*+72U=8cX=8q1IfCBJpO{BF%asa+#r|H2b!kFRVmpSS=z9NKqbiPiy@U153hv(C zz~YU&Xz#9Kge%Jv51zyH@e{@*wzl>#ThyQ?u!mz5#_9;2erNRV=>u0gSF|W<)a2){ zy@rt!(}+^Ta-lBVaHi+@?$sv<7w9#+M59Don{Hh^m|DhXuS{e1RPelmK(%%tWn1oQ zt%-Czf{_t-4^FVVSI63VnQ{901bV2_C8?n%H4$069PuNwIn2#uF*yv3CaXxd_U-83 zR!e=5uoJKJillbYB@im4U#~aq3wWkti7+o~%Vp$8ia2s?439lLj<0|1GAi{LhKEuX zM_*A?e{M2;iG5WZQkfZG1VSJu+drF5vTjkldSeG~-l|}~uDCwDk9gaS3AJ$mA{!Hf zy>*FYZDV+P8Y5#vxcTav6rADC4CpvabutD*ms3Q85J5OyIHdy}F)crP;HXWdD)}&` zj#D|c<>0~C9u9bGe6(7e4{YN=F?UheejI13Z+-=>df9}(ZUeX=#;{19n5@H$EZQ;} z3$_!+mC+M(^Y|-2@aH(#r9`{eCVMsYxD;cjbV#Am?T5B8d9Cb=!=sp)JAvcp9-%_; zKAe5#BN#pP2y#=$5ib-`FO{(P+Vi;m)z9MPfBi3U`AeV2=FMBEbH$Wm+QQhVJydAB z1T0fvTwzrRhYvQP?{k~)8e36L^_acFXsi8H9#^j2#jkz(pW$Es5C0ujpZ_vWo_rin ze*aHn`ut;DMCfzXT=m)KDGvc_0N)DXd{s93%S-Zkr53}d-^}4}{)GpT&m~OB2|frD zq;utTc+Za=px67Zzw$EPx_TYMqf>~d3&<8H(Tc<|O=Z&8v_+uVz;LFGVycQNd3U{&AjgWC5Z9qe zie@Qk3xo$v6>c((*>0_3w$j??dbKL&n9-`xEd7F!B4g3~MV1Q-!qvvjy(})w zaZXE641h~N2tgcW>QR9TVK$A*WsSvLgfoxM);n*z`p_+%N6(L&60oyV!|NB_^HulMFop5lq zxethrY(IgdNWS`|U&YSmI_4jH2H98xm%siU%f#}u*b?}jrj$Mk-&RL0M1ewXpw)@W zqMR+!0dO=N1Xv_OEuIQgE&G@7$-nlHeL=Cq@fwufT|=~d_6Edt|G!exb|Rg=U3Ae` zC@=rU&!WRsO{Yl(qvN(M-yW2YN-u>@ZOHyg=8#AY*@v>CtKY1ler@2k)AuC zViC+yZ&^tX%f{NdAJ7|fR&b3`C!8Z>y4pe5SzE%+(k*+2VQ=9Y64f&2bri{=2~0io z2*%GpjInbUFnR7QQXC(8Ro6AS6euAy<|bGcq)nq+Ja%g#n#9G+H}LJRe-YpM-CxK4 zoy#~edlJt)^>Lg!`y|6PkNQXT3UpOT`?wI_tIoR*%F|gk_e$*3fAm@&fBXlJWjAwD?!b#(Ez3vwf>EVO` zC;1*2>fHy!`=#j5qF!3%qyF^nSiOq(t}SBX;aRK|hwxjUzm8grO8J=Ey^}I8VX5>o zTEXfq9?j$8#%<(xH_(3gaZFF7Fq>(b;I;*w8xjrz+ZuZiRBwBjn@Ft{!(u6qdNgad zEVEQ5)c#6tBzPGl$#hggG+#8Qqcqx@H=2y0kGFMvL9D0UAIVk)$8%J^smSbg^&FNP zUz&rayeNq%C_nl|#4|NE&5%NkE9%NVKG!*l-HvYG_|k~DA^P|IBi(7o$b%D9;*uw)S!|ZON%QJ;;Oqs!zxfu1 zx5>2+zWj&BX8Zk#zyBS!r7Ku3t^%AFL0^~K#s0@KI4f>E-vNN=yV@$El)l;{|@HzzzSIDD9OdmOp;jt;@YQ?mo@*-PX zR{LeHY`?yJ9sxo1x!uA>(%K#^SJ z?86V>)7N5n`K>) zxrVc=wF2ueqrsU?$FX0cP_TA&ZL4^W^}DzUP6FMt939Hw#6$CrXWMxDNDBPWvQ7L>DWVGiKKnU;i>nY!ja=eTP6OxU;Pel zFSc;{x zSReYS-Q>}#@U3rs4qNL>IQI1Wuyg%Qtlz$CF|>anB9=y|ES9(W;D_<|fA$mjX!A|{ zrN8l;c;m{J?OvE5cCka?+<|XDRP9WGSAGuf`LF&o#wMwpa-#L0oe%`Q>A=#`L)F{c zEu+b@xNyazA;YR{t>F3>e%_w`*S8Lg@eI)HLxjRGmKs7_Mz3MUQ?{L|@o%6EnOSq~ zc?`F<@IUGf7GD=PCIj1c>8KR!Y%F8%?lqJbuA{X|p}|ZN z6pRh7fRl5_F>>NKQuD{qE>KY{6wuKFd|Wk)j?UAs)yml0+QJ4Ei`zG@;;q+SKy7c; zzSQ~115e@ECq9Dtxl^{QVYf6mvD`Q#(DGQQobGy%_4a^)3b*^wR3!e%)p0yBDNF=p=KX*`)XQ9lj?w*gy#{;6^a`9>YLN=-D_cIjfl;%Q!TN;t!d zc0Fo(Hi*T|m6lQ1SwrN^BbXRZ;CP|IK2ib76*aDnlO62wKoxya_z? z7%)8S(uUw|a&_SI>6O8t?}$C}(Vww{fO=j;3}?w?tC16_4DzF+C{9kGFj+*Vkm6)# z`Pd=NMgNr9dMby}(IK3B@F5(h zW-~E!4C$;6*ioix5zE|gT{V!kYoM*St(|?$7Q|#6#K{nA5en%Tm)gN#5D4{7mA~0& zVfywJjLeU)++1y053>h3ATwuABlqM}`1Nnx#a^|8_dI?aJNcvd`b}zM+c)j|^meMQ zn6K}2wajQ_2hVTLV|qRtYG2o8Hu>bDtqG#t4-51DRwqsnY3Z`HgJMs?vRtPhIcg8c zSzB0}gh1R$udqaOOqfTM0zE&G#MDF$!;uw4s9d#>r0CJCR&-^^d}Vy*D~tO`as@X! zk;jD#^AuJky#D4Avbl^sqoDHwN^FOCJc3HKfh?6E9n0(5SH@k{JNiDv1PAKc+L~=G zcJ0ATMeuQDdt?3v4pVu`JL{;nY8aWC$Ko5WxIXEDix)J3R&TYTlX&qHe*}MOW(|$y zTlnTnTU1b776YLEJ>WO!ROzc|CLY7=sWgXym})4-L3#rD(Nrq>G@L**+!&S6++Dne z(z4zF;L3yJ$|CzTR)3m!Y8c7FJW_>OB+|o(CDQC0-ER*uGl8K@6VIcveFa%6*{7!| zY>lo34cL}NfPBxOapsIYyePvFl+NZbG;;*w=N`r6WA8(E?ld}u5mWTrTWtT^*Rb*0 zcQBvrp!3<^Lga;S;M!;ZJ-+rEzkqLi?pN^I7e0ea-})WgeEr*8JS^h$krVjfdwu{v z_Je-`4_|l&x!e%iR1{Pvm!}66#iRGs?|$F|-A)?t>$ftfvu*#}k3VQn{2vtl?yp1+ z?*VZMP0hbozw~8Ps1TPau*Qx&%z&7EbSpnTdCvoY{i_4Rc^U8vIRd;_23X(R`f(Q&Fif zh$$(VE<$@{c^j}iWbwj6=>frfyoQ~o76R@zYw&E9-4c^xtdl=gddt8Pn{hKqsPor+ zYO%ew6JuX>RUn~B8KBz^<6LyfQ}R))X=FH$>DdX4&rKpfTtF(DLYhixergKU%{9)U zEsKA#Gm4!q1uN&eBkAmbzQEzWd=@U77zb9Z)Iei%7)Rzg$5}T|#Dj}>D1?Koj(u=d z=7nQa?XS0@I;%TK%=lAwRY56tm#zS#Pa ze>%+u9zu3x1euXBJ6-PNbRO@1>J%R0YWno~3pjr6AsjvXFy>D`i0NZzF+O{O3dB5D z`qL3O3n*j~ zoG2=*5yeQnid!3G;M3z&kepIt<>f`gMz7H*wx3(xxS_6i}3?sU$?QOgxN8hW#);jLC5-I{95rMhc2(f=Vt03p21=0UTIjZYs#i(mn@z z1mjZ$96L6N(cu_gdgVG&nY?|nxhkf~a48PuN`vhmJMsEqeP*UaPQ9r{(F=dM=LU}nhQse%uON2)xN!gXADkuSok}tE){?AELR>IxV>~4pLpVf)GM5T zwkU#dAqgVmQV*JU2BDbN7^;ILCv67l4W9xPf+FX0@u6ptI`I$^6I52m=CH}tSYv1u zcd{AeW{>0OiSy(EPvPOmKY;hW_mALXANol=bp9ExI%kc1i}TSA?;(B1a6@pQ;Gt68 z9~epTG?(7k?BI7+iuhZ9_5s_y;_z~LSR40=dMtzxh-;4P0Gu!X`(G!|nnxo!VqgA~ zf2CT-*!&T<3+bZwt^qh#AU5dk^{sG^FjT)FlKGQhl`GcW^<`8xR;|62r(31=L6mhk zPiuX_ger0)94ESEX%vl^aP}N3HLiRqCG{Zj*!~?vrcRUp4r4l1Mlr{DY#-%q`P;=q z2o2y6FM`X<42!8<#33pHdkv0hmR)JOtvcFlPZwQ2jw1%+T;Q@69dX7e_96*9_wLh} zq!7G&Yu)G@&~8MMNR!`8&J1IuID}d9=^_`D+KIMk0mI>c=guu``tJnncM^EDs|V^B z;G0yI8-Fa1EdT~)wF`HsK|9$%c`b=}BaNwPugruai1uO7^Y+Lg(NsqxMca1aw)PO4 z*1dm5);7%um4J(vX;TScf4j;Kf_x4k?SUbO1jZhr0wBb_H7H(DQ_ zc=qfl&Yzk>nyW=UP^eW6FD|;`vXzZ-(RL)db_+p{M!jJxeCyoi`6Njj4L>WA-zoRL8a;& zw+&|X5KiRi(IUnsa@gM~n{wx6GTXFE1t5oEI}2Jh4Iqq%z!K@goFc4ytUyIz63LNK zjE;3NTP#siZg5raZUN}SB_?pZGPS;1rqHfoYL<$_)Cf+U7{{xxTw*ikkmb^#OeH`A zQMqd;KsymR{ttxq+ThZN*enM zx9v-7{R9r&IP-oasAnA#7hgdAG1gZOmrU$}bikaQ! z={1yy2Dq*c*KSUI_c|siV2_N=aO{Q@06~C<{SJVmbiXL~59tBxV{=$y#oMtI8S&^C z#~jBC6@x4l{9`An_*3{FIdT@$)5pl5IUYG*v^ylD+fKICZ!Idi&N>KhU*16w-&Q=0 zg(~y-$8S#Ir#?A>lk+2X6nDQ{U5i?#-fdS}K{15e!+)>6jWNZ?)i+} zy)q_`93}5^Y5Oz@y?lC>vq`iUhhXzYcJCtSQc&Hn=ZmsbHqxmS8dQ$sIV$)4(z%`M zdKI0uJ5-`NXynMx5)uX$>@FU!)S4EDjgGOs+enUcu`@M`k;p#Ab8Y*?u6U0nk?jcd zA#fg2FN46(Y+g*@yXV33@j7Zv^6LiqhCRE&7+y&UYU2nng%RM)X62TsTVLL9;|Jb% zit;YabRAr|y4I5q`lTWr6x&p2X2*~%=8caype>Z;XzcG}<>H&zzI)fwwb^&yX-%U> z#X@BfPcg$h%{T(iwr~fs1Kc1^o)xWNXQ6;JW!xASTt;vJ9POY~eMI0L1AZRV4kAU% z>RN9h%E22g=3KaLujz20>sP7t>5w4u3%liZFZ9U=*ntc~&e)^c0SI{rHD}MyBOyx@ zxJqp}Lyhmf=O-~Tls3T`ZVN{v)DRv5xAK&Ro=oaZ0DZheeW#B05eP!%7M~TvPR66w znH!ZB#$zoGHWw*Qrdx_+Y@pl&o=D=-^Eh&JoUDth?`dj{AN{Be%76c@JNWYJ>-gaZ z^^gS_Zn!^LC>=#SIyZ@(@w2#mcOQx6TPWze`xL6VXdR37d1Ph_c36b+lBF@JlDJ&} z83lDQGgrXzQ{yPGy|&l(jUhT2pmtJTNsMq+PSk-KMdg=U_CYXzpDEjgEx}AFXfhLs z4NoFBn#IIu3sa*tj1D!CPBR}b)b$Y9?sgq33wxNF8$xj;kB1&QifeCOMuQ4fk{WeG zkJ(zj9QchE8Z=@m$|~j0s}72wdw=^IYgCEc{cL&KFR(4Pi!0ooA*fYQ=4x>F#wCSV zcmU3&t8x%HT3RC{*Kb+7%6*u^*M}hOK@cq|f(*|;K&GBEToczpIGw`-pZ)y`SMkcz z#g@NL2NH{-zc%6QbR{6EV-KV!rxX#G3n*G(`taQo2Wk2(BTQ}Pe-i98_7(z#jtP71w6UzF{D+}W z{(JHeX9VdXhx-B4Pr~0`}ExrW* zZBCoF^jUa4xld1RsLpdC^tBgmfntVy)IHZwZ0_S!u8HXf=8@3X;rsy5Ggp*Y zXXprq;z#i+Xaw6!}-@U1gp32*n_LBggXkkR~#ArEWU7!*$A3k z&1|eJptiYYVf~zZM8ZML=mb9|kZlm^xPF@Zf#Nb{q=o(Z6plS|jI_isJsA=Zjew%r zytEmoykG4L02V+G5bmwqKy~c~JHAP;-~mC-(c}4nG+LMXu6#~~~SamlUKT|`Io?nqcgmT)N0UEQ>|!WvgOKK0dC zf4G|i(Q!sUhX)YG*}ji{^e=s?7fG28gb%tU3-l1w zhr3sB^nqh2e&5IKTh`Z>_VBm<;kWT8pF55`CrMA+3*{Ans|(A-yp#Dnx<}4nZTvKD z?sYLSJ%xNLf=N!&nQjZGPbV>xY#>sqph^L&PPKCLq6bpi}2eca3b|Fdxyd!7wwvvut%H%{aXBJ^=UnIUgMnTPd@@9)AkS zC|8VL`s?b}wX}J$RV;BSK-F^1J(EHoDMxy}Z0GjtTGsThpdTgN z+V2#Y!Z>GO?u7y0!=oGy_aUqPke}+Or{Mq3i(~lsvw1xE;EeT&F?6fEqFHPM@70IE z%>W%xbn*G`ptM&(J2Q-Uw#Yu~V0-Z`Odq*`m9Y;k@YS^z}Q}F*<$3`q@BZjbY+w(b5{C^%63jJ+Ab&Y;kaPJBi%XI2B8A3;swe zc+gI`w*5``Q=n#dH!&J*VEDm@-R&k)9c}MnDAhzXljJyL0%a>2mbtFJ9L~d_hg!iM zgn|da$|KuwmXG|7YaZ0PQUEBV=%=>RyZx_o;jzRz`O+(Skh^OG&S@#!dPe9>dleJ) zZB!Okuy=PEyDRJ1-r2)Wxq?cwg*w~2!nvvEob(__mG!^Y%Hz%06zb8GjRgt+K=3oz zY?rriv#b~a9(W0{cox;gx4;bPq<68s5yQ1>MdZ>Q6o<)!)UE<=^&lV-hLA@ORU>-4 zBU-Fmd}#-fsiM`*2T~y*k4@|$+T1|n^#o-Hpzour3f~W>0^oK4dsE zB!Shv7KW1STDDESo3t$-)6fN>y4F%DJo=$0C;+qg*5wWS{eSWzevHC@h}y8#BFMlJ zxVjq_vPDq&XhOxaX~d`Js0pSp#zC5<5|BPQjM(WZBuCO1pNe6qTf*LMhaKq^0n#wB zXbO&_DYy9m_XR;_xjN|B325Yyjq8ic3S)t$CAtV3*|MW>jK~ya0Xix#rgMr#PQD3Qk zwQ?DyT`Cov?C!Nd7v0T?U_7Zu=_iF@cN@!>Ug-~7(Xr4VuD~Ihu0dMYVJ^f8REBz? z7{oseT!>FhP#$`YDtq*C3>R5u_KQNbbsXH%l8^j2tn8@eIu#tR+t^d#dJbmq`U}#C zkQ<&rF+Yrom^Xi^;xXpogndlLmo+ddfZ-}k4+2+EPPR!rhx*P9tZgmg2cG_@DPJm; z#SEf{i3}1nXJ8J7-4DWPoH$deS;jdepL720ABtoNF!TPN$7@Ij}bo}4IY{qMsw(VA9wUfqvEspD3 z5e!d_AjQRsXj$F85$NDC34hf+$+Tn5J&Zp7xZmn`b8rlMNXOcUrrl0yxJ&``oQL`! zh|j_X`3r1EjuS;*Hbpp}bQF1&0$-0j>kW;~P7H5QLf8CU*BlceS%DFVr)Ul~NpGQ> z#m!C*w@|>1=rC@Qf8B`OW#mo56r z)8*^(a&AG8w?Qx5fzk!G{LLgtvruK9S8(fA9*c_^sA-3X*a<(^L+@=yRVq5yvAsB}OJ~RQ}=@@8H+JcoRSV-V=8F!WANj>k_y; zoS%Hm9aNVNbCbTU?BZQam)lebV@N$SN6j$Je58p+kQs_%a-@UGP6M?z%f*B$mIR2| zq7%?J6G5}mKqi|(D%XFo(8n4?y>kE#^D|&TFHE@V&2q-`NaPC`9gScpzQ)yX6{|~G z3g#xJ<}xh*FistxLizS3?6h?2VlV?eyOGPf(*zaLYBsRBwndB+H{nj(3ffEHEcPuC zJ&d@1`#N@)7wBe#uzih=j~`4pfx`yfW&$tujg~$4KtGKGM$}|C?;syyL+3F*ufwO@ zIq{BB3^FAd-NKO)tbS9dj=HYztf9Jg4T)45qeBxod-55^*+i{TK{BW9f7j=o`X1w` zt=#I(GIxJ}>Eo_m&eL`un0cpN!_MY)Jay(_6te{~dav;Kv^`r8#t(pkENer|>w5x~ zJxJO!yxikwMpuDswcvfg2r%3d33uN22Nyw6S1C;X^^I}-$&ZfW=xotF_!fXg3yq}v z(WSrMl&MoNzx36wBbF;7Ss2Ck+AU1Xoo57&PtsXjT*b);FE|BI)iHW~qTAaQ>u;T~ zsXli=B#6gEa$KB zYq)lP=`T}`Wl@f1?3n|t_HETqqZZJpkS)?8YotAH5XL>+8|KPwBZ_~c#fo=w%q`1> z5Bb5Zg%obyByVND#UaTl##ZC_v|%uxkoRCTB0fS}vW}Wv{O&GbN`L}XA_m;r z*fJVRRJLxlptE`s`ou8P9fW=s?izdaV}1u9fPRdgt)pdiHvLm4iqvp)H=Ce~k89C< zTpJ{TpSgoe-%k+sHwfs3Ku#N2-oIyiqt&M-T&2r_P%hzUp2C)^v}VU`g-8()U0I6% zg%{VbTWaGIPtDRVOjHxZ94#Ao=5KD&NN^O)?zfQ|%OL)Mf6auNr(VO8 zpp7Lum>j2@E5}mRDK*MEFhPFmDo2-sg)50%p7it`0rOJ~f$YG9Q13MRkaiq^0a{KG zh$eGfy=E|)-QpnLz}i|KYs*vuj-;uGWO4lTQFK=>W236)B;3kIWwli@XQ|E)5M8zN z>cX<9a$@Su1Yyd_<>@AZO&{BCz46jF$#nhM|MZuFWT;&NaCqQjb~u<|=fw|zk6;5e z965wD54FE$aXoPqvu9^1RGk8#WMKs$NT&OXItN`(oZC6$%@!()m(i|lBbyt-so4iP z;gcwi9L3)DEiT21OzRZYNM!}7tUt&@^)s4*EiWN`)2wbAgQ14W3)_qeRc-S!vQ#u4 zJ8|B20StWlo-GLDZv&PSFP8Q93k&H2q)_sH)3S&1?OvJW(WSl)vRra|G6JN z4}FQ#+AIinz2{OKPRs$rw0->6Yp-HwV~5=~h26~+jLx31V51r7m;#_%0O5y?Er^*_ zs|}hKvRr-X5Uqhc87@IlFYnox8b@YNlBR@_Zh2~9ph%)bBY(xG(5#S=FD8q%h}|yhD{SN~ zK|&IZQ+P{sp?HVVs z+nrE(b?TrV;&ePw-yK-CcDIQa7o)MLW;@gg`cA8fYtMhpXb4n2?RGi0^K&3iwOQZS z+4S?EB-VGm823Uyts7G=ky7cK=wq0E@T}p+B$Qo`l*>nMY4|!*LU_I2usT$3ziRz> zWa<>>hrU{;vmN3X8=b|@)^&9CdS<(Vc&AQ>Q~W@W>Kd! zElg19_2H_Qe(P%+IC}1^dsfMZh_Ds{yPU6DD27@^C-P(aKY%kPU=?tg?oo-CH>I zf$t~NV*xZa6g#Ll%b+$HZtWwI;(Yf?Ob{$EJnZ4Y>R`|h?E5*8Gb#nFTEku|g;Ht~ zRj&4Pi3YmOGUrPTGw}va#j99u$Lwo@R#zEbWcR_%Qs?K}gtp$a3Rd=kpm##v3w`-1 zj7D+I4&sMt`OLg!NDn^%=06bM(RC!pNC;y4vDuK)f=sozyIMEFC0Lr7nCh9A@9>F_+?$@I!R0aUFEEss zke5N=e<-LyeV7_ZC*?WXYG&m_|DKUBaj&4sW4GKwKGs4Z9cA0JIgw+iQuEa90=-$_ zqj_+&X!Ym@e&#JZz(XcTBulD=6o45j0LkM;M8@4&+y)j;HXA-FEv$=lri-!R4$3<% z4p2Q5W0Yvy)w#`R&~{MWucEd^#!@D;Z?gVu7-Iygw8+Z@h!O_QcM3roOCRSyjbtW^ zLZ*T?m4MBiEEYL<$EV^*XOoybb_}DjeJm}lqsalM)EW+Y=qklkm^}owy~S0sR;OGc zbJeOm6wlR9b>N`m=wDyB>E3-Nu3@ZQEvr^9zQA3b<#7)xdf#WjVGuaO-UGNfc;Ua* zNn`BX!=_9I%%KM=uuoYhbJH^tx>e9@HqqKyBLiPVo-6xPa~CX*0i(y`DXK|j>{V*$ zl-H0-7pM!S8Kid5*l{B|pe>)~?iIB6uAwmV6jFsFY?}my#!E;QPcxd*MXlDr|{@fou zZ>QbaT_8)&$g~4WW*r(g_}7EdBT@i3;q)N11u?4GE|$OC3ocG5Fq}pj25-Z|%OAqorX5E!|Y&iku(0wcGr_RSXUzQ0HX z!rQX+`G#?`U6gyuHRyKqg2+9kfFQKR@!3jf&UVP}x@d4wx=Fr&<3<}dZt8gv_hwK! z!~PQkRC3kF{d>@>x`2)*$5^~UnzyM0NRt?*wxNPiq0%X_dLtk+PX4{Vf_5Xye&}F- zp=xg{r6|XPXF>vqJx&E6$iwpSg%D^`i7`KNByaCNha|HZ=TapNaqj!!Aqa;Jfa)Qe zVXo7FGl@Dfx($lbykdVz&$| zt)nC8+YWbO=H>ikJLiB~xK^?$PQqy_9*LlS)$IDwk2KR;&bV z9lR0aYJ-mcbYcII;of@n1-8Mi)m3BC=78c^+;Eu!+yYz#19S931!3I695F;#c02x= z%3v=&EsZg`w3^5reF&MnCR5Ob7GjtIo%(o{lpK91Mw70wavhy|1!s>v!n(U{RTtNd z&2*-S-Ss!wj$6nSrr5Sl3%Bvha2w;6gcF;>pTv+E(*tK}4Iq&jMSX7popuZH>;z)z zAyn2bVr*y#7xXrOJq+k*83eWE9uZAnJFG{*EKvAA-=uN(7(d>i@%!jpBh5 zMb2+B32O`&F1v>wLehHH$Jdtro$J@Jy10ng*t}2R#J(^$w>qfo@1QtygyX~uY6~N8 zs_FCJEfl$m*C9c+FtK^v#q!PD*eOw2rqFw|@hkYV#s3-KKla-=k-d$0w@M-{To}26 z&)j(useBP}J9j+7Ik!!IM&)~c#4=J|QZ%&7p^vMnx*hVg=DT${X@Dmy|@JPGw^{1eY_toU>k9T)vbz`b+MM5K`S*x-bCRa zEm3xmcc;?Gv`R=aUoouGZW)(b!`P4NpdZ!A)$M*@bA-m#ENlb;?r%%8aHdp*SMc&xF2thHQe397DV4a4I{wrNydlrFU%+v9ndj-P<+Xy3xYU zwiZtbBvX15&ZqUpk+EyfubGJ=PTn88%kd+gHj$^l0yTD0{Kt`*;5gh{LZiwt!#K6A z2KJX~;vIyb z4b_2qn!iYXd6E)#gsb^6YLPnSzRg~2tBf?Z`NR0SCo5a0cb0xZ0L2JE?#xe!g zDg^p;q!a?XEn=C5%zeP(8RCq}NhKhWNh6ogQ~hhG)RS0SiP&p`L&FJVhevSgXc5b| zucOj-t9&VoBBk3G<=tK1nVbN&3t*_rffs!M=EirvYMODJ9_l;!t5;+zo=s9mgdk6~ zgjz?06z06;?_8m{AgKqU`1i!nQr4kUsPksC-GHLe)hieBHxz{FyFfOndL3c4s_x~@y`ZD%wEkv?9 zirc@QMjj+4Z^?OS)=HcjLl_Q?6QwWjb3Qi7qsF+x()6Kct6s-j7uT?}m&bb({~mv3 z{O{qp;@2@0(`k{)oDr3n%5$t+!)7;+>-9&F&$}}WmhWyMSIkmzbb?ZMH*_#pgFH+R z`*k}Mbn91fVhosj;-f5&6d-X<6-pOxc{~8UlRwm;f}Ui({DMf}#-m)$^po|mFxut# zZ|>LGC|qGSqu9<;af)+QueV{E8%UGKrIHkCwH+k8j7NVRdp$fkgKw4clv_?{`)=sj zeZ)g3PeDJ}33!#+==i>ppFKk%o9@0cFi84fHbEQ%AP9|_vYY6~&00OIHT2ORDJOW_jPt9aTCXdz$VAfRSkE=9@Q)p3gA${{jI3jSQO z3oSTw@Ku_2D%IuS=ulf^=ck!xvPnV80Z^lG+AN{DP)2j9fzE!L{D8w+4I^G7&J>g* zY-G8M2l=sPG2Q#8u#fFwYik#EYLTm}q(M5PW1QHT9L}De!REqs?9^E&7Fr6U?vIvs z+?xQ=E>|jvoTKL`Tf1-EzJ|T!J9aBT^|WTOa98&pi1V>sqRFJ6+{S^a+C50ch9g24>s3QV2Ls?Y6DBgY2#q4yu5 zzziP#b7R7QNDmi;9icY1z9h5!_E&xf-Ru+_oXZReSLV@_uvQ92uHFhj4CyKV78QJL`?GN9EWU`x9z2QBQ;(5?6LSKQ zHBdI*wjkLw?I`DTtBxp@oj4h)@dvAji*gSH{-MBTrO7etjtAfDWKkQMW4IIO$>uf+ zi6+}Bj(BC8LQh|V<>H0>V&v!yQsYXG4z6YP%Z(@&AYwu{#@ zyeMiwTk-n1z-3~7@-U|o970P*mjmEp9stifJV&x?gySj3w$iFy3V;c2CUq}IYH`Of zE{1fgB$sO1$+pd1Dv@QCy2G(XS!EAMIr5?@yOH6AgyMT`MD9|t)H{en+J)8*BJo5D z@nR17>>9f4i)NE!Nw+SmO;o4^RJN!H1PXw_jRPakh;1AnNuZdQR;vIDv``0*c{(h( zgu;pR@DPOKhQXSW{uCQ%Q1~}Fpw4ADNEKIuOD3xOCe&Qm7{iGuMq*v)E}%|v6Z2Qp zbTW=AC+*_W2Ij}~Dw^b9u!>fh^}eqLgC;lqHIbEt!f5MaRh5xjULH3i+`Fw=_$yFZ z%2r9gm_~%={-9K{IQZ?B0F|sP6_uDiro-}UyIjG%sE(7fBN&<)L#miZVmOQV5S6jv zG;Mb5P!b66r9Z+?CiIw6jD=Ni=oksU}7>w=9I*lGxMl!FJf(%Bb#ljJX*~V4&-Kk{LWKm8zDl^Pmkv{nZQ5a?&7cx%ulP8)@B_Y_EBeFw^bO{%Z`&X$$m=|FnsKkG4_KXnjI=Pds}kNr%YCEASBWLe*O{VPbYz0>(|i{PUWgi&eYsxpxoaZZ9pv7suyAykIz zyX-giHRHvT1?;a~#)C&sU}|{G6m>yRgn&*D4!Zwyf_GH5P$buF*q<0jE1$;*S1}Ks zE!tMOwHKimo5%q90Y?yB3jv+9Si`r!`4!HylW4Z1WR$?i3SYpVpZceGDDg#wE)k15g`?E_?&ezVAawk8{;+ z3ZSE>v1xYi;w&$dycb0Z3!1HSK5*>Bb&6bX@Gw+p*a*C>gUo8X^L_1pNQ$`g=kStChU*tGvY~ z!V_%6B-x^DDFynr!Tekd=Pso1z+)NApUI#&8%KUJg3O3`lY6$xcKQO|w8FbGzhCT*yW8MdXSV=D$jQ!y&}J(k^C`G9mV)zXf14bs<#^ z430z07Zditi`{4Taoi=qLkx{b4=04i)Bw12h7N)c(9@h13i>4TJj)fX>qr_Bw1+;t zErmekO2?xprea(Tu;`o&I)+#GqW7p_?yjw4swgGEJuj-Q7uSX?HwT|~4BA{hs20IT za#RdolpfxnSc>C3oj*I67bz(t6_&EZ$$5I%1qzfbz?RXOSc$y5vZWCNvL z3O8!#D&oY<2y&C7i0FK9edx#xds-$=EzfY;DRyvD_kGw;X{P0>J(iCl&cTxy=L8?F zQv)rdxm}?$P)Bo>!kHR)mkOReJD_bqtCWWTH9v+i4}I#hy0?c4#}+jUY?7z#?nf~- zO(lQ>?bz{IB)j{#ySm4I(RUK4BXXAhl z`z$Y4+6Asq+^3iWaP(Bhnob=nmF&Mx1B>Emsve@x_!KJFZY`m-^ko!A z^)Vo6<}8cF77%CqXdIIhn!86#Ac7WI+sQkKr$@;Qaz?w|tYSFcz@x|Y@SB!|jL7J{ z)FCnh_PLbwo4bsj|@45&O^8j?pO6*Y$E#7OlRN5Wu&@~2R4%4F=lW+XCTS z)Kln^zjK_XYf+>clvkz*= zUO{YRnKn-Ow%0&(Q4a`mAzC2Mk$}-H0gmm|2o;OWsy;hu&!6d8gxJTw?@xUyVj3!e zji-mD(p;I&Q=`pMnDjogDDbvfVO(~&B?t$cJqV`_z_%qqpL>j<#uf5-qJtT>o^@`h z0LBmK9#jU{sBEC2R2*q?2&w_-kg48YuV6A8wPygdOTd`6?IMP51*9>-Pd_nZJ3z?% z?N4A=c-)Nhv^YW~++?c*#yOdyQUJ6IpeHj0KK|jLKq&zf@Or(2bsb9AQK1r$N#!sy zH%7s(&QrX=2xuEa(JcdQ^-xpegtoK)WvKB{+R&z-ggck3u^}o{T!5y=sFBAiXmfSZ zSg)bBQb&DTud}gD7*_+WUr8CcV~A0BB^tZf*lyX1MBmci-Rod=O*;Vz`*6_o^aQ3y zlel?z9r`AN2Ci0CddR6u1wd~-i00Ov>!_|Tv+bCl2DjCR?MY)3(&t}K=aKm6kK@tV zB)INEs*uO>as{Q^3r5q5H(+=TX7>Pi4@nLmxfg}F(rE`kAKl5#oo3Ui?*@seF53ES z)teZhvN=R17)-}t+}oHSs`0e5yN>1kICd7kMMk)b;fYfW3tk;_@dbJo!rkZ#z?U%q z5fojH%S2|vIrXFBSXsY_k39Z9)8vhL`gCT6X$TIwzgHM+j{gL}3V5zuX;R@nHi=0t zPFC0JI5J=C)nDz?1GznVC|DBG;@o@Xg|DF69ikvh;YX)_9q%9d8pD-3;EP>kxomrS zZW$k+dmi=81zfz7;w%`k4`fxVG1S+V@G~<%i=UeR=g8T8exE)llodZH5p6?tVF06j z`u6vsGo&{RVpKG?I378#a-27uo3;b6yM(#qCLaIb50STVE*U=)___-XY@q=n2;nYX z1WhWhLtGAas^phVE{-TbB!CQPX*?_MW~qznX4_Vd67-wx1Zu++{&6m+n6>-@{c8f7 zh*3F>)OEH8t0m!|&0C%_DK1iy=``AnI*RcQ-q==v&yz7c84oH1YZrJ1(F~kJK?8;t zYjy)6&Y|-4!s+L@b|1q2F3gq1`OEh4&GMcEbMoRty-f;CnB+LkmZHeeq-t@b>a0J7 z{}|VY=O0bs!n?94&QP{;`Um+q3L)d$Cb-I}c;@z(pe`z6D=9@lYaQ}ODgoUx71Pln z_LX=HWl6lqJ{d)Bq>6lG$&O%;{n;PU&=cpI2Vw~@}Mv-El2SSZ7u zWyrmF&!^w7hrxZqwEbV9Fw@4-(Nr6wai^hLm~2B?Y1KBsdl|`&AjR?yQxTx}L7Up< z#jC40HKmo4no2tX9lP)1Zfj^?z^_8-4ptHt6j0QK&}aD0Uzc7uFZ#a!P+c>mhUh8w zaxj^CJ$4uK=w5fcg*=sj#x5siHOlta0C9rT!6Ag?WrgyzBxsGElmV{1Wk=ch zx_y$QFfYWB9HT-|)V=H)SJZV*@G45HRomX{w%lz3DFi0mWY{O##@^c4L!B~9BR1Nt z+2JR5?skzMirec?!^I(-IX;2A3#;fTZzgRuI0%_{ivv)CZ1s&7$#BR`qyUh%6QC|1 z8_Z^Nl^4ljW%zLvr$;cAtU?bA-rZyw-h3004rh|Z5-5EiY_;D5#Ki_R)BP{lYAKX$_q4r=j1{$}LnQ!&I_YQC<2vQrS^t zhNg{DC`(f~H4>dGpcFvh=lo;#9EG6-?O3pFZhsp;`W^}my$K)=5+Y$u8is@JcLG-6 z|HQyDgo~l}U2G%~9UsF81=iKO4V*kS!Vtxh@f97k2Egd~i^iW6fNy>CtJI@M(CWnT z=VpG1D}M^`V8#cH>C>bWZ9G1^iXT4q62?m}AyZw(d-I>gUp@P2oJd_`l%O1e2_V3| zztMB3&V2vh-}-S(%}!Z%+w0p%=+L0o_VpUn5J+AmEoSWMbv}?*O!g=4uTAX}TC#sTw#+=w? zu=-DQsu=BTp;OV(w2V?1qtdEz>*ogj;++2}DgbfqR#vDau!--KLooPrLRDo@p?!yzCzW*M2=14D@N8r;_Ud!4?;N%~Z!0daVU^Cgosk z*gcB{kiTW75FZ)BP=Si(5C73W^QjnDRQec--ks0HI_@4hSD}eCCz~ZAFpqHF17!*a z_*jE}hrm7I9BdR`Wv>1urY~fhNJahAxHQ%_K^n8YgO*sYM+~&89OfWvaB%N(WnM0K zFs^%aq9#RvlPHGZOM*@b&`(N%9}WLG5dld1+fMLLnKMaj(c( zB;T=zgW||gOOq17K1ipksBUm&u|WpK6=#gAf?npXc<%r_UF{CUv?Cy8fVS-xP#GZI zL?OnNHSbM#WYc)y)GW5Qw^41oRj*!~Yq5UKN(q}+Uo%A@Ec~6VNnt%?hj?_Th}73Ma203K z9U3CtIBspnu=~;rh<2z>`{pe28zw%j*u?EulX)?mRiyH#H<>DqJAqYEAR_E+{ z2AJ|I?X2M4XU`&^_%Ht*u~<`8Px0*+GdU%6Ao zvH3Ah8}bQD(69JmRX#}59^|9_r7wR8*`Z0&=;Dt}{}vJvj<17+Y>Wm#<$?V2_~;Iv zoVu_MCQM^8Nw%k9R^S#K!26*2=CFDqMZw)fLi_s6tJ9#V(=_!~1#Qk#?QU*X%h=KJ z$U4o8`KkzQvn9mXD>OsxbtI~rq|Jcb2;vm}n&-;Om5cGH&7?DF=#$Hu^W)Jv*0~ng zq>>RXq^joHQi#wV()Y9ZZ>I*wwj0yWf9A2hm-OoMn0FHqXO{f|MsUMdWV^VKu>ELW2WZW zP3ztN;9b#hfe3Vj-Mw;$z)~FI--Cl;B%<@2Yb;!Xg?})kN$8+A00Ib+HoF%r#5q)^ zLXrb5*~P0@_b@d~;Y8fc9K~Yib@Y&--wjYY{e4|c6ge+%J4fIaI9%}*K%qt1I#MP5 z9jS^Q$-Z2;v9g7Y)jcW!?)~HN;N=h_ zHz;Fmt&YW|CJI9_6o%8(cxP;-zO9E+7_r*uU}xbv8hhI|##E-hO-8{!u+zQh)(1cu zhj8jb@!U7sR@ z8=XbA=#T65pmJ?4uCfoBm>uS-jPy0}ZL>&a=SpgG?HU#qu3&ibjFGN!^}o0B3ddF4 zUjK^*@AG)j!>6`W6BNylNw@qV1W{$Hf*xEf8<}V~syJCp;pphpp$b6AaxmZ^^z!z$ zAn^N72=^@l%c-V#tu=;PJdF!8QPi4UZ0!KkWBTHokL2Ng)pdw-=>g!Cr91YlMmnSW z?NNMU`m0Dsbdz5cl&M7x*&Y!IGXdpreE9_l1OZOlqKCpbEx){W9xs$Wh$C}(Y;Eq^ z+cfEH4xOE=c;9=TM1Ew#1c#uPl1PuLM|!ru1mOlfhYK(#6V!BjP71khSkrFBW2loS z)Dkf?lQG;}T|{Se2I<1ERaMXCs3;DX&9TUZLa}G;$S1*{dsa1m2 zhXa=Fua!mB%0Pq}C7b(5F20V=mCJ}wSah-7?1|E$i zvWQ3l7@wiQE*gEKK}5`L3F|DO4*mvpX-a zZlpj3GgF)wC1qo_N~b4L0M*z``+E|)o_oGNX5apJ>Szo(Dy`pmZ6A-E(R=w00{Vwm*O31B5Px|6 zwU?=!Qu*aP=(H1fcI4X_N$j~88VG_gu`nJuj5!_v3p$X{qRG$WLRp4iy7PW)#4liS zI){~ob(;^vu?@WM1MfvVDdi@h@95c;7w4kwk%8id!g~+|1VB_mu+Bw6g)*SRgbcR%t7^&iu8 zTMb0oO)A_vYb1+qrHoTUT{Or=mP+ay#ts!RET#Lmd&A)TtcikP;UVay60O5Xgu&7} z0#4=yIC(m4EdY|Flc~gz+T!AAk7I{|Uz@ZKKM=)x-krkye3Xl4x7t@b1qw*G_(B8c zLH|KGP#MMOB@8U_PC3YB*&p^?N~Mm{ehqtjHSCs}C^Z_WbsAh$)=^(;p{)nbxp;~F z;7?EiU}9@{tq_xXx|}N_+rH`NWLV$XLj{NR%YfG*;pS%z?ATh16R^TnkraS4nI$Six5;|0*&i0(t_Pb*A%Wa^@hk*o(`azQ?N^Ln>r2y8dk=pvM zZVgmydt7HT*eh#BhsMYqLbKe*rr?E0{R*No4f43T#`Nwvl3h(Ucv_-dX{Y&%oSZ3F_bn; z=07HcYH~QdU4%oztX(-Izf{(D(c^exp3Il?>czK8c;wue8wW~9)2s7+Dlc!vxBLI! zeu0coU+NL?J%7%9uzd(Z}(&xq7&EwZCNbH|MKRKVr=RN$8ZN5 z>svTIpT;xqddB9134hhek_0q7#*6IUSSF%h&x6p%l&yt2P&Bi7Rq@SoZP4aiy>sPF z%%6YK9_V#KOh)B#!au z(Bw*0kG{A7g(;2`Qw~>H*j9kbq1O-_IUq*?m#8(Fh;`Ci0T$^1m{-`}kVZ4u?f z(mly4wM_fi1qE}x#0j-oqFv)4)N724%Jy-o0~+2IxPtaU6Szc;ovV%J+CJLVD&hqo zGZ8~^CXSJr7)GX}WJ-F|<2pg$_nJX$wiNa-&q7K!t~N#T**; zdQ=OwN(ZTQ3dvL)b2G!pw;-r+xK)o004s8T z0@1eWxOSJ|Pf%%%=?n#@4fv`D>72V~%+Er+rMCcbJp~{W+yd~C*RS4T9TOPV6WKNv zh~P>sk3ycStdSUo z$$a8Hn6d8Bi)j?RH3Uw z4NUlZw+qwtpmCOAy7ZdFg^Na`w2gJH{O2Bejw32&Wl%8!{XcLEcDFX{Krkr@DJtip zA)mu~!Y7H7{axE@2D!XXc%Shx3oHyhru?C(PZDT5z#8xAMothRP zBJ0X$#UwZ-I)E_#UBH+7&=d@F{%#JN(5K7Z)o*i!UrQjq9Y=?% zO<+uiM>2kIon&-8h$u~vXE^V-^9%T04}2Twb4mOkYKmf8r0CO0Gx!8jy+*tEmgSU zvom4w5-jDYYfvEC~YsX@9Umn^i&>^Q~~LUIb`(km9??% z<(E)eT*vgp2*;1|NMP~W*KzaB&#_rG7DPXRc6OP4j zpue$}z-}yqJjba%_%%zVev}O3voCDp=?6xwT~seS+>3pvp9%JX$|@F_JG-t{tKe(j zxkMTqLv~v%h72lrcI0JWjv%3k^wC4%9{;e1@Iwd?{jH^k@p|pOm>5Z5er5=#PS0^w z=Y;=23SXZv1ocu~3RKE<+^dcV?$viNx&!a$EPtiNmO^FY4)#|UF?IgkHs++1hHYE< zGk%9sXmf1^>D-XbJDvRz>(sP&;Nlt8eiO=FB_po160~V3|7+SIB^{j?(4ry`OHja) zDJLkV=F)XMGuFnb(IhIJI5zd&6G_&fVzMZ&L|GP#0nzlAw6(ZTs#{WEUZjY zLcghZ_sLWCD3mDpDNQlTG56flF+BTZ9K~S?efAaO2X!6*677{NTzt!trS1jxKjTB<!?E;-*7-RmOChARfD!mkJ#-=CbJ6Fz)h8;|z9fAf2NMomj)-KJ~ z9@?8bw0F?i*`weuu{>=g&dwt?N%hs<6Q$8P0%U=R<_|GBXUAj;&epa;TxU>|5oEc7 z9vQ|cm4eyvCJKp7j;9LtDpA~7Y~t=x9dq+}Oiz#E!~^H4+e9#t*~i+(KDP96BUVcH z{#)uRF&gVj-=VZs-=NA8_{p>m6>;|)&DR=416H?2^l&4U7_LlYY)3_4V}>>_{q|!j z3jb)53c%z%g(>T0;ZbZ}zl}^ZfvkTs;QEWdhV|PoS{f%{Xm>eh%1hYYuOpToVVTs& z)U@kWly~n?!D%6#8CDG}fA!s=pfK4+REWUWzvp)47OnE?OE^C{jYnrsa;&inEZ@W7 zV3r5n|0RI7R=>2+!Ps;W$!r=83Y4=GQR7qBm$&iRH&*f4*Vpjnn-zTPRt0aa)UmkR zG=4Th@eo1>V8B1@ z@OVH|-71u2`q_&gM`Gr2Oi-|#e&DFx-qYAuY2D9*M|y6lHR3k;yB6;%p94e6lcDgw%m!l?ka(Zp5QL#SIxiiWv z8lfCW)bYef0~e;!sCQG?D7Vm{uyYD}s77I2U|Vx41y0 z@Q+qv=#(g*DEP;U5xkp%|LG@U7~<;R?(ciSYjgVm^nLoFR!qm(dPVM4#Ty;>T&BR^ z+Nfb|xrEileQd9nQQ6b;U|if$Vd`>W8mJuVJsp)_OQcYab6${N>1{fbt0wq^Q6Dn$ zW2VAm@A>48SBKnpuhrEA?yyI=XFn*tF%Btg-G2@ zK0<+oq;3D#t-!!TnI=+_cBW}!Wb=tQHD)R@jh3`Jg}Gz_?u=XYC`LkW6J+a%XKEBqbwtS- zIvhli1Si@9rxD5NRYlSdjPjDPR_hTwU=&7U@f4pcZk;ItH`4Nnar7=Cc z$Nbi?#{s>x*1=1!?^}|Y={#nSpFn}SmZ*&-MDLUkm)}1;$8=DEZ6bXD^xV842))D z7|A6#oj5m`@GD&Xiy^0|jJj8VDG2K+d~D*YNOJDDBYdp@1D3&I4SJ8?!32SER;81| z|90`uQYjwB<4+v#t^9p3jpr*qiJ*@04#FLyq`XZtc=7o!|;aCli&vbEawunlti8U$$ z>Sud)D3~-sK?vUG0Q4hRIGy6-Cip3MGSopbI;xk#zgy?Rv`QgLdzA9xJx|5(%wtg$ za^&soBZ?DGEyzhcr4J78`^gT9Dc)hqCT$7gTCIZ}E`Zk8YFJt-V|lTR&5bHbdvywY zjzN7yNjuS8Fvp{AH(Fp^jJ&N%!M~Ttp&Ct^;5VV~g}>;loh+`Ipj3Uo*mK|a7u`|7 z^bd|_RX^1mdYGeyYQ0T?;~Lv30&WNeX%0fq>yR*kyz{I~La*Pk2w4uBs!leGB#~xs zoKLYQn7>ONT!Uf<#<}~|ad0oL@&YvuqL$Irz-pmb=-{=h4U7&YQPA@MKCanTDH{E) zuFl`Nozce|)YKBP3YAci98$wsBlF_6tk{lnq+*DaIX#4HwVjfdOHi6H^xOd=TZ5cZ zQ-g*BA(`L=mBLI7Re4!~4uHOUFf_J_+>u=_(5r~$B=l>jFOdWXN9xRJuGlH8jlSs0 z^7!`zK^hus9FUd#ocl?Vt?*zCU>9E9xOL@mAZIXAR6Z#UI#b`u zsfQa)8Q@Q6@y9dB&7ZK7%CxJnbNe>qkDygv#@*+C9=KB<1?W7H~U%uGF6AzAKW;}!K8s{L}Vl1ogeofS-6lhfVWkqmw{KN(XT6G>qz^Z=KX#VpRn zUch9AQq;<$mh-I_Zp8aF=so`4!x%&;kYnj{cTeNn&7Z(?j}?*4rA)XOC|~j{w<~ck z^mq~@PE4{Lq>D3+_*Jt>1z_LhH88#mcOC&sZjZY!e;wK4I7W}1r)MDib*1h8yy&yW zmpM0bR5VAKmWf?7qa)NA?M`ZeqlJNmItb#*)BJ;(BR2&ttG!Nvn~OH=v%&d-b|M`` zMK>j+)xh{j5|5pq$H{C18{7NX;X+7r*^yLyV%`eCp)NOB)+V%j5B9OjS)DFPe%fg` zq2H`?#V^7CWE@XFO2MDiX^efr@2MH|d4SK07vF#a|>+5wp)pTK@ zjFpuNc6J-~u(VeHs;kQ87Mm?9r!8dDUF32xq*LTF97oMg6jk!UokW(a{uEl|kxC)n zZnl*~C3CjGl{@ekxbWC>ANLACaG?nbF3`Q%Dm9U^lmQ(A!%Vb&CPl>C96P{=KI0 zkz~naO#$F!RYmDReG&Uq0*0x*&S;gZ$gF5k1rd@RRIOJQAM|y=;*o7nMxk9a z?l=+Y@T`e@z*0EFq~yDM<4p`aP2tq>D*uZI!=$z;`<(bKN%C}WqB95 z;SthThCXTt4)OX!h3}eQxJqvail@27dbK&ve(9AuKJc!2`^;=H6T!k(7so~<1iJR& zuWw(v%O*-Nf5%sJ`wlHCzs-Gg^)4-$>P9VsZ(T3r?&>DiR@X68aD5Vw`!UvyV?xJI z4KMm~sy4nx;fmd_lK1!r9b{kVxyhDvsv_wB8;ZF^d{xAEe_P?uC+|?xkKYB5cVnt{q*6cQmKvAwH6i@xv;rj$Cayf+`e7G)|Ng2-=fk(idx+0 zZ7x&vWSkt)Vj@Z5Ka>MT#!@JbW|7WtrN7t39{K*ZR{dPCG^6^ujcVi#GgsgArI9PQ za|ec?c(MtxcYoq9eoBRA*Z`<818;@f)7?!y*hOW)4us(Vr0S{L2M3ZK0*v7!$ji6^MJuf9TxVA*J z)g>(}rG;RZtI>rdj!#mlQDK;>m(Dkexp^^6fBFaQg?=xxr`i@0IfEx5Z3u27;pv-Wu_X+Xf*0u+Z?mDzLZEKXN(q=Rv@xnLs>%Rg zK%l?hm&a1*LLROc#UuGK#Pda*m>or?x`JyuvY1Lhf8K?FB$T&8)RS?_tqfPtDLqh4 zzSyDypl2qI&cwLlkK)2<_iCSe3qz?KO`{=0el3BmF(`MFtM=`^CYD#~xPGICH!oH3 z#v4^!rNCcaX`o7Z8H?%D?_Ks)6q$SsNuBO01y93`3sX}vR8Z~ukRR!dqRFuYMklk# z=}2hu?d7E!R;avgQuqhk{f^J|rJ}v1BtKe#pWW{lE~kNan=J*v-vSUgZy$F6>09cP zmR{GYHKDf$^u2R!)yCN<0i!g^9z6*1R!3+Tz&&m6{8XJNwe@m4!D-#$wARCSY-olD zab(zBsIwFIDBCvKcw6j%U3>L`G)Y*@B8V#^&{WbvQ@SUw%4h@lmG`N=p7dP)(^<4*rD-v;AuX6I7s>r9PX3B+vfX@3&q+nuKHkozkx5_Zs0@jK5cbWzosc9 zxArM8@=ozNJ~M{bFJ43qTskS8`G&#wql67R$} zG)Myo(0d6FLN7cVF@!VAe}C&qTI8>2N zQ(T4dyjoJj%ywzC=^w$Bul=^Y$4h zwUGj8WD5+}xMq64)!E~j;Wz@iomYVPIjhVl^mXW1mkWbpWFOC+FDilybCJv)fL<4j zrgh&ZPnM9vL@|TAYdcu4xcm)#68F51Y{xm0lpAT9Zi(Deiwm~j>0>dx@2Lb%&NDpD zx>%k{tvYK}?VL@m>MLEWZ#Hpzv4Jqo5c|8mEdATaQjvn3l#pl?CAcg zpY>4rTn(*^0@+d}d(9_L0W-EVL<2v$dkTQacv{}!A#f{|?_diiu0sgKwD&7b=+#bX zMfw)BD%s1$A`gNpAO#?%)fe5aXw=Tw08#=_#?1p`O>E^D^grqHI% zzA(Y3qhpm?cPF&o)n|bRlmNDbV(1wFDFIe2hD!-(w;LE?XWd<{V7H#f?1*bxB@_j# zhjZx9i>GUjkR8H(*I2$%0yH=DYNfV%q>ZVJQUdCg8Vbxms>3m~?X1rBG!BO#kQLOP z6x&1(Mx{BhDix_ru5*KE`uGmY%$xM9yLk)Ohn-SW)cEbD;Q_c`-l~{Y&Kq-E$lF8E zAQqYVQGiDiF%-vBh*Jq@*Yv=W+x}{?KAOB*3FtOKJC?8pLY!kE?5`8%sum@qKR_a;HMJRFVfn_tGe&pmpXCOt^|LRM{=9H;0fp z6f8U(DTJHm*TMhvoj-*~-}fYjhPkFC3y^Pxd{oa_rMN;Igu`iRER{-98uWG($EgPm zv0$8;Wz~}C2j2SXZ{g@ePa~sq{Z$rvhTBs-{rW3kN3J-5!uX7}X+O&zLQq@@FgCO8 z0{gH~6wCWyTC=p}?-U2UQYhgcCqww;qdDYrRAQ+Vbc0o~V)x2NAkkPRPi6_l3JWWSQYlemcM_!G4U_DF^mDXx2OSEY%a|BN#2TQKt;sqawMpM*+Xp!SY%g zca~eYcDs&?S890WVhu0Ty!uuZZ*i4>d#Qmf3j2DEi?Bo&V=T(tR2OrzQH+mAk!SIe zT%1YZ2aTYss?nmLs@L2ukNL3tszV~y#mra|GgBGse|K8|xPGI8yH%jX1yq|0H{j2A_~Mx083-WzRbyMs))N_tWVxMsG8AgmIan4VZLKy-kV z7MDp0NZQ&`YO&_KoM8Km#Ia3KT3WjQqMZOeTr%9oC9W>o(Htg+^zMU;XXWR`W#ior zGcx9s9T;B^*}?4qHN3tXpU)&%7B#%l)XWbVNw1Jj-=oP=-Mvs2GWf z>3Iez0c9xx%*(ZfE)ljzk^?Tye4Sb%7MB_uaSBHO7T<#>-G_TTJkZ}&`0XJmt3_mw zM_7VH6veRw67>=qI+vQOxNIuQGEy0|F~intyWOF7w7|Zb#PqRqcMxUg`j z$IS|G+RP}C)T@i>UhH0!AR3Lz6NLB6Pan>K{q@VJZrs3M`hlOuNVdT7&4EqY^~%1T zzpjTR4MG(UX#J;v`{o@g-`j#GpoPWV?FwGsir`&Ooiu(Url)4r!=&pwEfjMJ#G@UI zP_Q+&uH(+W-ujTx3rgW_v$$$T9ka=%DdgJ0Oa}@$%NC`wnr~gl>EgQY5C-^kX5=0K z@Bg;p0utl6-lz}bAHMNl;Rk-`m_1{qd8>nRO8f2zZI^tIhI1XDOQ-6m^aj370uzKw zh|78DEB^tXF*EUA0j!!(8u!lR{w!8XQaa;-Q%JdRgQT9_@haO~9hc1?u zxA3*M%9IyYQ!9rk1V*zs#igao}OT4FM`HFk*yy9Ju)eQ*t|=K(bN zb+prXp@EmL#!$$o*}>YGV6LuWjy&;R`Fvr`M}KE2#Bh(fx^dv7Q)!GAbq}7(34y}8&SHSA||fa1w9>u9v<@ay8vnwRUws#P@(AW1ejrATAUb~Q`#v> zvOSVRc|@}Q)dxiqh-^4N19}AhVIv6a|37p89W7b5-iKko%DL{XoA2!$rYH2|nV0he z@Bku^U;r2(kOWB)Bt>e8=CY(ev}{=RQZScfTb8|~MK9TsC;C+pMCZbVry^^a0CP$VrkSa5;zkA zVn}pqXjUkhli;q*rYM=W?8786wqI*W{imIi4n@UUWC4q(F5=@CXR(}I#opc?Dy<|1 z0WCC--a~kvgu%k>hl!a;f3earq|dyFL8pnmSNG$>v6=-p$#Gb5YTu}rlN16 z?ea#E$@!ZGN1)lQw5-@Dy}*s50rL&m8+$jtiBq$4_~p<40`$Qq+dgELZmW)DCd+vc z66`#LG5%}A{|sdROO&r2v|Bq>ykAe^W6z#3?a?s1f6kF1Rw*1TQTtbao;h(0x88pf z73g3j(q5CPxNSq!zjwN20pv^E(3gE7|g4mz#IWVurV|b za#CRb^=n^1^wdw{_^B+{r)Hr}?sx3jaEijPgTr_a&o2*bi`CoQ?#HGt-7dZ8Pz3LO z`}c5$%wKQjs7*l@*EtdFZ#=;5E3f19#g8JI$`S{21qCv(^#c9sdmUiYHOf}DO3{Ci zmi7@n#&}2bY;7{X=C0xDcJLDyV>r7)=C52VcSzh3(m{I*lYTwAjHObDXEKQ83ur}B z*g2@-z3ZF!)|EZ%HuX4Bt+d)$UCd?~Q3@DQ(#0WVdOdG<6;KU>bk41!lt);sSdN<> zYwLh`k>ql=2rN@~I=&FWLP-Y%-5CtaBvAVdq3?V~=rCrRWy|z?qRcM2m_D0jj~o_f z<5-?glI%M^DZ(fF`du>rN*^6De#3 z0tJnbnb$0zb`)k1xXtz*FXO{?h@#%=qT1-&9nm`UriCn!8pdPdfpgjho-bTzF+Ov+}F1x->?Ek)ZaFPqy&J z2U#r7a)8rf)Jo?{(gZfw$o6sG4#Gwj%TbN{Wbmaz5z`BKTQqys;3G$_Uit>YKKm!x zY9KwJ=BwQRN~k6Xh_eTsFFSA>&>l*xarI140FX}Hprje#RvITY%1OpbSBesJbXxDJ zTLK3{DSv=kj*(j+{}IL#$t^1sX7+~xdqoF|*cVfCailtB)GB1;y%awBLD_oAOUd<^cY}j!Q*zd3gvnGeB_x^V~v-f_G{Z*ub66AXey%}$S5uxo5GcMub~?cgaG!V*)HGI zpoXdV0A((>sSF9QDFUuMnT=)%pPqgR843w5Bn&>`zbg3o`G5NUU%_X8<~eQZur1WQ zNh5TPYjG+SLhD@aH(XvQ+)a`RP+y452C3BUYv1`APF{S0%wN}1`_5AW>ys!pZe7Fn z{o6S8#79YVQ|xbcxZ-`%07TP8M|Akx@&*Ns()xPJEn8r2he*HnWjr&aQ>1fGEcfyJ zqtkBpPeO&5KLxTrl>*LclzVAxw^F!QN#OlW;PTxLF5j%++U*MNZA(ccdK*+n_4Hgn zO1x2N?AoPpj6fZ&!mV7ZGV7%Drex4f{;RjOkxdLyNK?zt>l5;QnjU6~0~B%tDsoKE zwE8n}h+O&VGh)-@9BuJ8>jP^2+U2lT8!u2^m6aqdn<_-GxDclxL1l+yX17~73OVR+ObrV#$as9}y?AQPg86 zaPssqeCE+QTD5K5+2lOYxrb1-t$Uoy&lm4kIB}*gd z7wHarKNP}=h=bby)%~;hR^?al>_=wY_CM3?lO|*`38W@Y{s(y-r5HoFY|Rf^zIt)e zm+=&EbLaZ^zlD|ak0UoT!w@DEeY9u^3NhSz`&BfnH7uWh3XxQjYv2%FU~)BIH*`vY zvD5ENGA<_s3iNduf!r3x(luv|5&JMkZdD_=e7l7!ce}W9uZOqqbny1AwwZVCv~gp- zg9qCk(#Bq;>$n8KF!vThlW|Y9d!u*e(`!qW`FxWw>%W2OB zOAyefJvEqF3IU_sAvCJAwqg>x;DbzYNFiV-Lj4e^PUEa$+v?!mX44@FFcd<5q{AmY zOjGjfb!vF$UJ)l3B^j!1hQ;IYcHq{peuAF&;m)STNzyMzQ950;LEf!)CvjrP5~E|%eYRhK<5L-eRQZ;fr3Ra zmMHkcNoh<7(Mv#QS=e%Sg%+-O(LKh7{~qOQo6$Ab}_zi z3WoK)Td1zSg}?oCe+|o}1u}fMixd>0y9-3j1OH+8kl=r_Fm7%L#(|U3W1s3S0(^CC z8@KyKeDrAw0H#$7gE* z7N@u#ncU?F@=f-GgAh&wmr2ZjOum(d0?`k?kHwRxQJ9~nH`HgWyLOANzWfd5%V6&0 zBZ!e6*nvNSW0nq!gcPMuh+$cqeS{!{QeeSBTmVF-WD3?2Q>GxB@ad2qS)^SBE(KAK zEc<$FNx%Mr1KoBVJI5;7>mb!_A>E;}L{sS0QD`?Y)oGyAm1&~XYhb2d$1H8ROT9X# zx;0Fqd(wvTiEabAU6AOCy* z7?L85b77$WL^_nMy=a%qNgd$53R8S7HsMv>RZ> z1*vK4pGL2M*jJ?}o%bl=OOtj<6zQBnodtp0+9q@=m&mN07Vc~pE<^l{UG3ZBog0)k zhx7QtlU<}@!P^S%&;AwQ!|Y!@>cdo&z*2MM>bGKe;%81Ho{r7bKuuAbiRv}MWD3ZWY3T4yif#j~77{ixMT(tt>(PM|b@i-E7wlBp+G%i| zC;ajyNo#@f9teE(()jUKfXp->@uWKg++Vf`|G-R&DptGVPGWXW9~7v>>6VL}k3bTE#yULSeo zAR$dnVPWMw-F>T9kaujWMJ`-|PM^ea?aluY7nhIY*Z#tPh!%;RPXAl_a5Y#r^M=Db z91--tI!yG*geQQ>K=X}%9MGxWkOJ@j{_+^db@M%a~o9M``7lrLihn0_VB(t>3}?%45jQ&a+$mnIHp)Mce)2{ko69 zPS?BtqhTV>_l3IOZ2h{h(R^2!{j;xW>sh@(ZqwlV`hH3aDVk)THtBI<&|zHgP}hUX zHIHk(G-&mr^#t9zQaGK8BO}c_sgHSajdL#P%@N6v?l2<#B%68_vESjCw0b0|eRMd- zq^NbofJrBG&w%<>3|Imw^m^Z#CjP6 zx5BB8Q9y{W9DSs1sMqMI{GrWyG&onPq)k+anyoDA!vZSVB(^zBJDkE@;uin3rn|25 zK-}JT|CYk}JxsXt|IwfMABMw3$v)ev4vQz)C^jOMNg|^LsWF@c>_0u8;bL^pF<3tH zYoWLzoh83{T}A9Cs8k4oS_lV?wqmj@tC)`BSh9oJm<|WJ73c7bZ8MsjB#xa_0X<5v zZc6x4XbGplSuWNGG0vs4G&C0OBP~p?qSYyuQOkP$JxX$gd3@?Z*9eKd>&-+;H_kWi z=1`!4VpLr1W)$Z>bprY24AypZ9cjbjTp~ZA`6Ju8ImxK`AE)Gce3}zUCsB0bMDHr= z{{BM23j##mBlFjlr(H5gy%`|NNTY4i)$IZ5)R?t7u2E23Bm|VmK;}*_A+j**3p@nY z5r@E4%yqNeVcY#20X{q&eHgcS#o#FfbXL*Y*um{ z)USTo*U2{~n7|K#PhW(=cLKU(ro`a>D$*Lu_0 zm0y4D9ek~M694|Me94Hl?E)NXmeRI5ecV{>;Q2EtEEGs!B?M5Z`0|&38<)FJaQxj} z2_=*mhJ7N-Gi1r+MFtJT^l?+Qj^PNGFCo)L2n!?<`Tu-w_ioRn5AZa#)k`- zipcuZMlXNsUt;;(^GFq^ks#e4$FsVuYMa_>f)i9*)}y)Q3-MOS;UMgFeW`!fFTp%_ zVa~R`CLKzU!DpzgX9i8A_0)ez=C7BS$!Ekf?VN#jd=nDtMF$fYux>*=s?Zj>Y}@^! z&02`grKvPcPfsDA&ya^DDRf8e>9P2*5kadT8|uef`CLc)R#@E_PZ~-|$Y_g62{w)l zQ=MX@$7Wcz)iIP`Abb-+Do2Jm%+PK9A~UvFApc3z`=aSh^r{^+R@H{zO zs#+q&b(5x~qx;xplH@-mq!}@8@}z7O+ELbNToVq6Sc9)VmXxIeU1JsQ!8+bSaF|46 zC`ovhI8Ua!n2zbOfa@%qOvGVmBt1Fg=y5@J(na*6T-c1WhFJwfJmm3VvVEEIhx%p& zHfA(>4Xt0@=3?pMrK{8yR_5@+X--UQo09;QaRR@7gns04wu)@tk7Duc5*D5+qFn3Z z>fNfPaQR)O$Ns>r#XQ7Rql(9-`xM9|fw6-$;kXEpr6{NuP9+G4F}68?dSt-52a{VD zP2AreqDf80Kz%|>TWQB~ab!yAf0Vodw&hD+#U-6itTqBl!MCXSKh$(#$EhRU*1Nw zt4m>+kAj^TXZGnYA)1>-zqW_+%l~iJU#f@dX_HIFTgvCXR)W%v>g-??EeQ43I6R!* z#4wZ=FCd%a*lC;?GJ%81<(J0MXjPDT|DWPZAOF+%$xr+&+MO1gAwo2nM{{Ko7#j*2 zFLw{4%o8P#;V`-%5hk#G29DlZapH;Q z)3deL!frK!Pd}DGCe~$l4Urf&@$0|!&v7&HBI!&Fu|WfmCbsn%D=aRouqcPmMu>!7 zYg`(il(N56`p@vf(gx>{0xj7Q5RUK_(tI%BI7fTWUI(tE>Bjd)vl3L7HfH z>a#sD+9I7vYO&&5sgx94+8Oe)tlln2Qa}*TBNjvLYV5|(0=%0bCM6@G#M~N#Af1fD zLVj89$AfT(LH@82$R<6sR~M@6!+n}Px@&0MZDISR7#df|OW0pmj>k~ZXI)f=I)k>u z5|k<1yJ;D%2#O)ZUii7c@oUrB7-mvUWa9@MkOO3rZRF`s$M%pKY$DcqfJoyG3F|Gi z_imuJ^#S(QZesKPDpv39*iA)u?sjnh!2p|E1MF9ZBwo63Q#%U!x)T>1iMYMr$bnWJ zw5_E6wr4!PeyX8_E($%^>cvqRFfT*(bwJyOvK0PD`Dp1Axrt7lHVM2KqlJfY`aB*K zZvMa)gc4X6YEbojy4%9y6eZ@{9duBjoAuC{04B1I)W5l1-T;sFFDHz=+BMKP4w^~K zoXvA0M)6>$X=yE;Wex_-f##Y*wFo;DxHhO9XQ|z15_*cS6-6VBze%P~Dba)iT{9~z zdJNz}r%SWUqwn$uw*^`f5ra+-c`Xu2aHftjPKAcS{D%X7M6k*DA>i9QMlFXH6v=Tc zhZyJMRBjiw-3BVv5{k2W8z9I-Lt(F3Z{QAv8yf&wwCzJd?7Ts2&WPJ{=X<#OU5x*GP;t#9M$xkdcskN*mEeX=e}auDQn;O5_Cm_ZQ43XOz>QGFk(_|b3# z+QTq`=|@C62}fmeVK(lZOYg3&;r-SWKK{&EqXiSwOLg>qIkVXWDzz3i4k*0OQFG*a zky3N<>&bp4Vk{+@>^Ra0Laa?W^^Zp2jv7lyQHguxri)LV2%PG zu0`w|3>u=^%i`Df{sx|SYFT;Z?l}>VEXmaSzZEB+lN^Y?O#QJwJtY5*Pb{U=WJ80}&$Nt7WY&_V+{o8xEb^QR> z-Yet%_p7*dyMYJm9c=IPv0vqaXhx}-#?c+dZL3ok9k|aJx(e$sNWCA$RzHFLKGU$q zNmg3Qpz#9NDr=V(xNee4Pz%;}p(I8tj{Wv3uQioFXN}aAfp3Ap! z{3+(7TDQV57s2+-z$M&0A?32(cLEc%>h z5&|asYXnNK;)2Hc{1Xs_TLT0m$01;%pmF9NI~`~tadAcSh-T6#Cbv-DuCwmbD3r!R zfF|+H2UToUq}5x9^^;JG@oVw+hB>auBAz`T$HBoK_U1o{Xz3L5c2K|cFVH(!WqP$) zID`6z>-}MEU=9|fMf69)sI37wzX)!wIR6j^C0E-bq@JIyy^V8RhZjHh*T|rCyZQjv+f(?+lc$l?7BI5~ zIS;p1P@tB*vDZR{OJjvXfNqVM-TgC3v^*9S15>j9yAbUymCpU`cc9vCl}@5{*5S+G|)M!#|bT z!ihPC<%{T+j-xSi7LDnXXj2gH7G}}O6wu|kbjeIb5(D~gz0Y=yY;zw9r*WJt@C#^* zmykiL?$m)OWTlLe>$P7oa(!P!JKPcSHhlz4j|vA=DmoM}bm>oxLcjr)w4JpYDqBt{ z=yg;A6mKa*sNaww$V9IO&fJ%A}c?rE`fz9;XmjN9m(mtnUFz-z}oW zzArB*jnW2vK?wER2*v}9*i%3AH-8Oj5=*YA7@0{Vk+bLh`82h}ZUa>@jtDzRk`J|F z`=&Z2#VDmJ`>+ld=a4F{ZcmFx%9L9+k)&V{?Y@sl>wOHH*U_!sMsxozJM$hp^&Zyl z+{4`u?&HS$T-4Xr@xcdMxOuxmZLNVdz4Ec&#csKSy=o6-GQGWa1e;wh=zbE_0VO$3 zJZ;Cz7?Wf}Yzjyaphlc*Nf6*<;y?$2fHm0~u4Uu?EY$v;ty8G`jh=lwe7icp0hw;K zpF_JxsViN_yLTFhq-QZ#(7ny0E;b1D>3E#k`F1#vcx&4c%%7h^JQYQ`-b2GKN*WK0 z&11Qhhn56|M4Yj78*a|z8kyr}d5Am(0Q-VrPzUV@1g{Rtt*t#5LE{d?WMc!gB+!H= zM4O8?Ndll9mPlI9a9m&gkzjQVf&9KI2J(l~1dXupkb4ASkK7zR3IUN!4h5`ZXR}KJ zQ6STFi@Mor13AzW|kU35l^2jK>|$=Eh}7~i zG^fsDFMblW_zXH+)6(W`A2UUpZJA*BGW3iXe&AMZw6IhkORReNFxj%qbZj;fhBQ<=0vjICV?2(=*|^io(GWXPOZ53Wbu6_D_gSIyLcoj8RT z69hN`20A!mgKsT$iJZ$OV68pCdf9y;tlAo|t?V2>xrB3|Z^+Z+5>4E=TVr3%Vk)aw z1U)g3vB5h8ejr3ong>7VVsoV6H$l!@>1i_yXuz9M<*yqe~#;6KGH&D`Z%8a$WNd@aPRyZ z1UO`y898V|U|#+x-lA<)dibFY`u{ChU7c}FbA7YEdKa7ZCO&9S;qkL8m@4GhC%zp@ zXE1V%K+m!x!!GV@x!uj_oCL%nW*3)GtiFf$*6L`GiJh3AaT!!D`zPqOxo8(3NyM;7 zIqjY93SzD6I5%~`7?u4Y>%{1WY-gzr`|UiwhQEX5hzam_SDHg0lpTe;2_kZ$pUv!JXGK(%pskxT%_ILjfr=!u2DVC%_yApO<_}LV&)jud_aOQ>OK) z;%Ut7!0eD;;M__li*ZIyhv;@F5L9c}-`d0O{R6c2NXuGLBq-F_c_r&hm)pRc3Nzm! zI5O}@0FCt=vzL%Ny@vS02GYNq!yc)6dx;9W`jK5T?sppNXCG$$%qjCE1psq$GKg_T z8)R^lc>7a2ft^A=O$HHfV}EB0y^fw;b3lms~TzVzy0j9RG)39$~DX@eSll|*o#OstHP$EWe!(<>jniLH8 zDKK7d7jgE)66Q)pHc_PbhvfG``Fx6Wt7R9gWU?s~DL}TnQ9O2T1>4uZjjiqsh3PV8 zr%O!j#!Wp&R)$Yf9*z%VNO2ACbPn)?%47J*_cD1s?y*=j;HT1IPSZwHn^~_8;Qp zlb@pIpD{9^ob6VJ0@5OA?D3C(%(mz3Z0NP8vYH#3V>>dT7J z1-f?F{AZY*4=^Esf;5GIxEBH}B`qVVvR#P#b(Vp-Lw<*x|Av;1s9qUtqE?|WaAzO2 zwGR4?C{nouq6sBBjDRrm9tt19hlL*orPDVN=8!qDip2aHvcFTnMxuw_Le_Q^)h~gp zJnG-jZ|td`{?%VIkN!#gqx)NSgrZxRrldAaC2Sh`45hnF7iDT{?M8)|C{gLueI#YZ zO~w`{355U~i2%L8xvcPT&sun3d=wc_FOtBc&wmb|{@f=qGdqo9F;9t~3zyP+p3E?l zAO(7tO|NTZcFhEIO< z1RlY+@V$45PCH2KYmq8db5wPLa|a=c566bV<+Y)d>u|DQJVtSDuIbXLXsXDzZDMct z0jjlqtWpqtwUNYr@lk4v&trx{V2p%I_45;+Q$R%Z%Z?_I7 zUjNS5aQdmIkk8Alfg^;*+jKa|Fw&64>`f)2{0E!5+c zz?PF_^oc87U&RXU;QZ7+=4Po~mR4|(JBxCB1+`%j9j+}>DCQlr{Ef&`iZy4}{YMpfE;_mV@^jD4*iIU;DmP3C*R~3x~Zfg`e@Zz5V*Mu5Z2j zpJV|nPid@b4MR7$>cE5t!4RHOy!d( zOLMZ=+$VnHR~JaN}U9oXye8^7bgxESeH8dBOm{HeDSj{ z+N&C3UV3(u%4Cqu=bbPxmBn;1g((UISu#EC9-!Z}Q?8YrG9Ij#aecRkTg^1;!!**A zoNZS?#gGZc+f8JeH6$o(v?wUJ`v={^a;_s_%%QEFx)n>W2p&+49L7>;6T23kJDcO$ z=O+D-TDH@)n{==44{`e3G$rpi_Uc_@cy6Y8{Iuj1?@dwrPo!A8C}nA#NY-UUF&#kE z;&*2stO)keL6`VyQRL&g>)$s-p#Il!T<_Oq6Cy0yfzii!Mv=A*~`@zYhh*Te<+`SEDH`Zr{LgcLNVL8+eP-@vX9B_+9pk4khY!H@S7yZ-)d| z{iQc0bT5iXioTJpb0*zRA4!g*4sPvIaLX|K*~jLwbovBh6bRUBu4n_5F9azh(+SK) z*KuPrg1u%O)5kC3i=W72q47<8{cT-+s&fV58A@=WHC=bhBp2dAVKQ#2;LG6E8g|qMf~f#hC)zTXSQsy(_D)tD9=&&z?aIOnnUkK=M|5kQzum2d-ZwjCSbM-Rv)1-$hD}H2@ zma~E!_tmd{11Bzi1nGk4GNaguRh@?9!Vj3g=7_*%k>PZBRVRJ8WB*!2UBCvJlob=E& zncaarN^jBn3)_l{(XdbTI6w#7br^8m@h+W9Xr6J5gHX~*@ZquypB!pyhJ6^V;XrR8 zy;G(16{8@KBuP@ge;Beb{3vMzL4_#CWr& z3A(9YQkxD2#!VWlbWlMT9K>+)=(WZuwfY_^bqXLlK}unwMFwUXC5>AU9QSSnJ8d#( zGPnb_v5-h(X)#LzJ-~LQGoFNIyG0x)6HigtinBdpPP)0uik2`yA;9!THc#Hj_NJv?D&;$BOS6hxRgve3WPL`c1F_V>-}bfLSY^!&Mc9bGa{(h1gKs#6wr!!j>+B!SZ~ea z`n@(j_UVt|`N!9>cIgVPtmUn*G-66GOk-?r{)NNL_H)CEHMixSgo!#Sao}`}B@E6d z3?ivIU`i8hp>kun(`zVP z5E;&=r0OIhNkr-kE88R1pM;IOw{P0vN8z2#Omv3O7Yxz%{m_>>`?1*^;|M<>(7@R$gb}NHi z=@i#}8kedU@Lc@cD5gc{e920$T8wO2L;U8!Uq*B0MI@q4WT*A&C+j_`x)OP?EH0ly zCAfJW?ZKthSk|^S(b!$Z@?(#?;)zd+i3F~fzx*|mOo|-yd%Ktz!x5Z5e~~N;{qdTI&vM<%KO;8ypQfC*JdVxcwU`h8GZ=- zka$(WqJuQF^~zu*jj5-~=-j`B(rY=~Stk8XCD_lwn7E`)SmTh`A;1w1Iw&2-$~(-I zL5~Y$$i-?W>B;1K2^LUT#LQd{^D|`9WcIZ(3u{$u+i@7xD6^A$l8)&Q5c~cz>!C)o zVgoX|g^%Ko|Ljj8Po}32PgrFG7`fS@%C3&3ag10OJEV}$XE8gSqqdaBTrtWv>uXGX z)M_N2J9WIX)x)()f|_`Wj3t5$7rtciJOze%yF6lmCfljQg03WI1P|MsL?p1LX?1&E zla~+_L#-FHt!3fSiF-xqErvS7bcb7`(ZiFE%u)M};_en1rD1cRw#g)t6aaF14U?JG zc+KXZ6O_hw1(cS3;DrE1hrmR{_LPbkgT?Rscu363K6;IAb zor7qS`8LUXB_t&!DN_(2H?etPV1-%X-tD{w1E#Iq0}k$R4m5D%b_Z`hh@d$Tckqm# z^Fvy{G5(N|U*X!3>C*17?{pu8u6~Yie(0=4F0GGs=*CD2DvcKQDqsGBvDn7?ja%4{oGo!;RDpl~`rt^|cTqa7X@F@i48y@PvqzKcJ&yoXEm7fC$k zaD1wbq#h55xtZ~K{g1*@?5lExLawfp_T`U2#U2XMOthdNE|f-f(R{H-Q5;SMZ0tAj z&Ydpa_@IwJyj;WYzO{*OUAu?x-nfld@2%p^^=-Vpxr4VhcJcc90bagS!FS%L*QoVoi6UY@jaaT=*Mk%445y@$@$thzm1ud)5y)vn1UjxRvV;C zy3I8~=Id?# z(gYQ=G&Ip1+ogl+40neYM@d{Y2#5UwJ7awq6i*zXWF9At4`kO{JAJ674?uNNd*a$z z)Lkm9y!c1});+R=U;UeBRKuge=Ns8Rqve&IVm}o6Xm$>;_ihPH&0#IzHJKO7Fl zsTzjUd>#T1?WjKV7QxhW4YV)cLh7vq*3VGzR2%(3$qL4l0>IxK?Esj~RTpX3*@wsXLZZc2OR>ms>fk?Dil(r#GPmRqEV=`LbL(j2J z627WzOI=TL*j}9ph_&2@Q%ndD7YtWKP7PL_qU|1Mb-QNccj;;iAMBF6>kJbf$yey({?M)g=3x^M>t96{rDDFCv+rMKV`HB0G(E znkFOn4AS{2fLTqIZHl`^8_%^W*~<$7V9BCypMy; z@8Ad5w(-r?M>%Ov;LIEuJ*draOrs=fnhU|OC@e!^X>VU&n+pj6K{4`%i!`^DXi=Ir z!l(75TRsQ$Ut4YB>usYtL5pMB)C zooW5nR*SSEji(+x&o#~7vVLQwR9S+zLhx{Z3QENc;)52}4*C=_DJT~gDTE~P!m%oT z^Nl-bb;&GaEqs>(bS8Zaizi-SEg}HU&We0Jtx^bqVQ|jwK zuKX&xv(I2@iHZ}2Mqgo9EB*L+;j3kS1toQOOc12;wiJ$AFMS>7KJsxR=oZXBF|ezz zy-r~@kLe}tigAuHTZ2Nf&iNz~Nn|8F6I|^XsYO~|!%XuoPEU6+bL=>V(c@d5U)QGve1bxXRKn&X&>hPmX2AQT{HxNLdUwGhu!9Em%u_ySh2JmJf)>u zOyth(J>0v!jaI8g;e>)nw~E++hJ+_V(;` z5^wu+pgE{F0FpU|$DPJupw(cuGa~L5CLustne_v`R!7G~4=9AxntC&WIK_t*<3UNZt9(i9lSccRo$2l=u!>J?KqER@-h_j8j^UQY$k;rUQ9W1BH)$iTzs?0CpHh z;f)2n_I3mJsw`9&GBKSoe)fyzPQdiV;N4Du8#6mAVYX0E+BQVdi1K3dcw_c?~e*{~4cAs8=NG}&Sn{q-NZTU#)U=EmZmXk9o>+urdLQ~OrN8MyS3A_ z3x%vtLPe@98MRPRX6SKRC~fxX1}DPrzg5RS{3bQ{cOOuDe+BjUo9NG0kUX`F#L^1l zdTWS6QY4WfGWDN>pnYOkkz@wZbe=jwUiXKiosOZ-zcz)NGUwN3vx8O6$&LB|6>8`C zOqO#G*w}60px4EfDrXLv-02f1FvX778dcp5RB!KeFxjt@K-{^Ez2>~W+cIG{QJCj= z&f??8ckwS?eG5O>$>WJn{7KBrpJsAa!p2tbze_ZcuocBt=0$*galTY%JUdM^&(eW( zWeI;!_>XaVMfDUlaBz6EgGxI~=W_g(wDY$h1P{}lP_TCEHp--D zi>J<*5UVV`UXMyi$9AzYqmTV?H2OUZcJE`Zw}~?=1x&3RM>n^KHWjzNb}^YMFj|ME zG1C(^1}wulgUW_L{h)Bpo#>ROZb3eQcUv-pFb?ll8WtuJCucB^1TKaD^}zuK+0M9i zuQgaA6Usx|lfx&%gXLFW^%xyC>K*MXAB9}YVlFs`v6h+xg+eAj@^i!?pn(6au2D2GWnOA@qQF{xv{)tWiu5k(O89Mvn`^X?!kTc?H4qBN4=|E_X;TQ-V2zg_FyepNk?Dr6$m2 z)a6*_s<#)k}KFQr|@8Fi0%CzYAs6GUSl?9V1{mD8W}PVF=xB=jf}S4 zi=fpeA8PiozE+_ks<#!S#P3HQ< zIcl0*><|270Q;vg0U+5&GOL4lY^hMogvv9&H?rKIsa#qz7N+u}X!a=xPzVqwPqCiv zP?&3rSo3amz%(%u9uX4}HflYT7V;#{m1Y;^mOHQ~Y%yx#u}%w-CN;ATO+(+Zqz2UM zxcadUZ@t^ZoeIm4hC%^A%-`k-z}^yy_qJ_wq~+SKq#YJJkz#ic<01>^ABTZs2?G zkoe{bB%o<)iZiT}uUFtUu)0ZrNn#M2LMmG{O}pQ1Qa;j{DP6c8&aJaDHb4Ru;C?)I z54J*Ge@}oCSQO)EqMREEtfN6ZPJnFd z2%lDkskn)Dsoo6G9E}udMpe?UGe`A5!r5pmVcB#er^p%U|bh;y%ApYW-@=+&T;_=N2v|^T@refRS;2Tg{fxfk!n4 z^Sge~qk-5$2kq!K_FrkB{$3oJB`P?2zuWLBZ5VujtiyN}Xwmvn{y7SZ6-4sak@*_e z^i&oD8WLDbqk2Vt>Hl$QgvPW=1u{i+^#+5-T0bN>hnQ+O@9I^z^Q3oQqYj zg2kjsa6yQXxq~u7rWP5AW}^n^P!i}h_Q>!&ZaP(PoT@P4@honTu@?21~#fP&aD&IZBDGV1OVd9WfMs2#F|Us zb_f{Pp%kEd_`9szA5q ztG3E}T*y5VsV?i;ai&MX$dq=rxs(`SF*k4*Jh43WMXlAv%{}%d)yCuVQF{zvT}s>? z*7^2Mi$YQ##dI7cGPx-#7`Y_JT5lUfDO6Fzw8R|yTX*Yt{T?eLDkd#j+O8Um(=iR0q_>o|$c5C$9Xwe-@nR}cqgkXd>2n{3m{a_HdWUI$$*ay9S z4z1xA@!3!P6#npxTQ$6Wy^C~y84YIJthBINZeY97!bZ7{ zYORHazJ<>I9K`ELPE8@!-ol`I9kJqR5~_=wIPN*JTT{|jgVs4)Fm{c>Cwmw|;np(Y zmYbd)wbfo*Zyf2BMy~%%k@F{pQ|F(1POFc*%{eB^8AVP)kcPIE#Y}gpG%U`f zC^#kU@lJg2Wqk0~AK+f+X}tJ_Kf}4F6Fge|L;F^IuiHa95k)c)N3*_#k8S;@_*0Lp zn-cQ(@BLNGed;f98alx^5F(ETR|(ZykKr5*R{9`TENy^$uYL{3pZ~0{u+m3JN7{Jv zyWhvTXI^j!Xk^u!9aEl?DGFEm_WhuYV_dkUxoNu#rAt9n+P)se*&3uR<;0l0XZm*G zPtdtUD*B{D*!ot0dwtL%EIJIqR)16nZ~b%shteIM>-u4sEK4Z|8H2jQ&H>O?c#jG| ztF0SN-EM2U-8ZH#rAu*AuJi~~wjS5$ak43x`eU2yJP{FD4f&%dEjiM}V!Vf0DqT~_ zq3ysVsVM0YQ=r({9H)_dXU0Ma3Ky|4+N~Wk_lB4*1k#rj6|1JWA8Vq1&FyR&28uUn z4Rb)zd7t%NJB4GPpTp7@_3Yl47GxWN4=~HSEoo3Yh0zSRNXWl}5B`hy@&3yv@W#(Q zL()veg?%9y2>>pe4`hX+JF95v;+*+o79OAt(in^aokL64h=V#WLblr3Lb7rl&9!S- zy?GzI>w8=*EhZ%6CNqyn+p_xvv~8uyPv*k~t}7OYLy5wAfFy3^?sASs6XYpmRyG+q zNbF>tWS2Witz8nj7@6JI%!N5%+<=pIXm>xm*H*+tIMc}}N#we$3ki(Aq}Ok^*#BZo zS+;Nr2?`>mWD2LJk~lS<Q>fGbuFLCw4|4=mw3dCW0m!jf4R0d`SA%>wal{>_gqd zIDM+L%|)iWz(4=&34HXadF+;3xN`e|ZPH^5<3@L&Cp>)1YsIvTt*{(?5q;?$63~07j2qrNNqQ#zRPu%Lqe|$3#>Y>PNTUR0^uHk5FG{KU|UlTQxL3fl7g0; zc^tp;V;7C+kGpPM<|O)u>+(=J-tLkB>oq;mFrA=Jwr*hU-LK<~_XqgY&;CuLHG0EI zN=B_xv)6tl#Ov*cHt9*``fuW3xPVii|0QabTogAJ|K79s{{lzKw z#(<@F)))djG^*5*z{$|Rgx=0~aP8kez)SsQZ2rVY*vFiks`E$y5CT=mJQM(G2k2Dx z(K~S=ggjJW04{?$$3VaRE1aDa+0LUG*ey(&_dH21I?B+>J-87A-l!@AIKq&>gZ(Th9JMUMqR@HWOk3`g=tmm+m}*?Zciy^!zxz*aqZ8Mwa9S^nllF3QnahY;-uip2 z8s|;vIo3Vv*2{p}IJI4k-=MO_HJ7GblSVX|MP}g)g;h$1Y>%b&bsYD~VPMRWkv`BY z=MH`~_Ah-8+GKb^5p>kha` z^-40AxvfRq82dSP>>~+s z2W0l!yB%zAx3It0vS;$~xbAr&y^0U*oKiwco*1vyag5&}?6>|1*^IGqrpx9_5a|<0 zpzBj>%SF3LQ9;rfsDSB@X|5YZ8%;XcLegaVIqnfEt@Zcb$B!kyjnm70ytDf(?xvqY za-IS}A&z1xi>XqcbdUc5N?c!DTLA>w z3?@7u0#b6ng1uMX!M*=W48MQj9Quzx!hWZ+^7QBofEqKl?YYsxE(V2Zwv?m#L&_OV z@Bonq5py+CghZNkdpHGlGi4GTj3J{C&C*OX4xr4GG)aWA1v1WJ4BhM;`uRnQ*)u@C zWH%FnW|*DAFjK%VmBTQ}39dtF{=k`ugnppN#t7O-t6d6Z1H9tG$y z;C{7@Qwvj=;slX2dO+NUhDQCO!{yx;nRY8dx0ou!iP#9!$f#8BHekHgo+@DFvFxBb z{HufVh=5b@M?;tIkSS;h7>EpOBjcwD(>oXm1~hK_ zRDRk%yv@1OY;-CN>s6Vvb#=a;f8@P6319x}l z@bsgLICW|hFMZ`LJgAf?0QjwX6&BPg><&O)n^XeT(*n##vc>UABb`fJm z=b%+ar&dO4=JDMjuZjMbBhX^mBda+w$ZJhE}_n zhB!bTIQip)WQm#C9sdHgga5$}fR^$8?YA*=<|2JQ4PkwK9kKKj*Jql+EQg)2cl#!$ zDtGbB@jMphr;(VNMx-!>#xRB5W)z!seSKB*ib_pV7ZN4NP!mRP10g_dQ8`wUFD`J8 zN~a^#P4ou=v{~U;UU-~$5`x*RwI4;LIm8{(jLYvH;L?>n+`YYz@?H(GA%&_e6(p|h zoOUUxXc!Ih%zr#&bUajszz4E0mFLD(w8PPQ2XxUXp({h;mm*!$F0vF9cOHOAf`XKn zzeaz|wjdWzde^65)w=W&{&e?u@a)Al@^R9o(HKttI-C6?I!fM_pSgqD<~`i`>OAJ2NKzprkq)Z$BSDZ@yRtcCX4lc! z+(G{J8a7r+NU?)s&rksHseE$RIbtHc$^p3oM}Y(}46dR9xE4%?G1QQSyG?Eq4Gx6D z>@+3`l3q8It>(`ZHu3oxRo|o=7(4#o*w#(FDhtISrGmc4W8(kAt z&y>XMwM(E!0eW_I;p7yu)MD3m>b3}j3TVPAtzK2_)MIGZ6KFRRl=9=m7h<&5(KNDc zk46= z1=y%`u-_PhJeb-<9}k#rpFA#j&)=0ITLcbRoXKEkkJ|ZO+cAHO_cKGymFcxMG2SrtX`uy19~Ws>XE>(&vvt)GzSb0 zp&bX%9>qDw80ABmCW>>-(~k`Mg8}i#D(B5B_>HgTQBORDPktnaXtzP(Fo{;?BX?Ssu#8`h~+La~#SL_F6)=IYJ>kv5cjq zd1M9;aP_Spptx|33{-FO3@F5Bkxr+LpxeCBJTWXIOb*P;A0I3wOIqzXRp4S6owd~) zm|9pN{T^$7d;4Xy`}&YnnyF&gy>|=kn{VL7Qw5wnzJ$~)6`1Kc?Dx~yAk(jC7cfSK zpNz9CcXx?smDO`puvbx!oOqu=RIonuH-Ak$;@ey4+mK2Wy4hpqK8s(L~g%W&?vubgUiSqW+fX=y(- zjZFSNh3gx*{=3VVdo+#g>|r5b!V`iZ+}k?ihAIl@cF=f(N-Tx0$7Si`k1si1`O>LT;r@MQixPV{dU_^jaJx z+IkL`cb;Y@5>esMk1Z?@qe4SY@Ay#vLvS=c1Ny})6l}HDccZ6gF+8z?*4z}D18TfA zYP95n-Db~-lF-@YVCTu$=~QAMjj)3?c6NbAy8xa3&`uveerm=}wfA~G`%JJMlvMF5 zn?E9O+C}JghUid|Z`I;xR+DH{5@^&U6i5?^5&x)1oslr0@>L%b1XL&Dlp$W77jR`z zz+n9v6e?79jzU0+Qf#Hs#0~|Iom$VNbrBDJf>=B5rEDDAwGIv#UZ#L@(B$MMVpldN zF7b%T%V@jt?rIfldo8=%$MvVPRd(PO9S^p110zrxCULewfFp|CdKc%@17!3pg6*_~ zq#lU`nQi9)yX(^^uIT&Siu2$F04>O=co~=8uVAlL!sBP=@Yv%A`1Swp+o&f`vA?v1 zatM@HFsjQKMnx!YR2=(&gWsubo7(~H0FOc7rftq}oIt($;o#z29_JSRz$aqgKz#TL z-n_hvZ(O>FPkj0mN{OoViG+Y$HjBUb)E>U`_5(cFBc50a>A6RkUG?GoYwcs8J07fo zu7ohSCF#PW=~*Q7Rndw1gy4@3@Im2l=MH*BK5bo|Jn;yYsS#<}1#?6&ku&U3%!EIH zP+;IZB1o=5Vg{-FB91R4v2pWd)Ea%{rjMbR*M0krYgu{~9KvCh5BnJ}ueP;aaF9=J zaqHB+tJ16>UeNp1Zq6T6>J+-g%u`f8cCr52*KncG$8%3ThRnheFtd!^ff#=TO$zxE zK(#X=1tloc3XyUD2H_cYxX%K=+2MACY&rGy*eEsiV69ncq(Q=cf31$U-rmOh?{3%! zzS7aI-A|(H$W^rfhy7?mnJ0j;N8{`a!)OOBnn+K#ysmub7R}XLPBK!$G*sbss#*Gx zV5Iv%^r%+VaV6(#dNW1 z<){|lzxyO=J$LZPK~S>~0ri=88hFo#ruPuEcmga_DBS!GlWj?-DEZINqp?t8J1DR; z+9dK#GU%Q$Y%yCgQxgD)MwkLdu7isLomMTAfu#}&oLu6dlDppDs@nv0Wrb>P6i${C z2y}phirHv)pjC;XS)pK1j-yQhL5~jXAfW0hbTsZT59`B;sW3g49#9AfiV-1gQ3%jz zW;jt(QGJl7j!HX@N~=#{faONqp~f^Psf2+2hCZKcM^~&YWBRrW;F&bT^n|Bt#>e|O z^}8)*OXqAEK@dJ+Mq%E;j;#&3(3%Y#pNb)_&m0n`h>l+OOC{TA?bXn1&LF3EYe&G$ zVs23#{^_E=a~qc)EaBwIB`g*;FxbC|KX`k9cqZ@Wp2`Zt$bUE@1j=U?|6+0U+nm=r z&k{t8AizP}oMD_l1pf$JnlM)9)-R2D9Knf4Z(x7>b^Nn$%wp-W7xBajCl4o4JGIQd zTfnb8vxB$Zy@%Tss$s(p5^3G)NfJcuvESTf{W*w27_OFz@O~AgZ-S(Xb95iMstl}8 zC*X*b78DBCgbjIh$oBc?p2HG}uCCP9tGfdAcaYAk$!r7#OoliJg@vO7x3|rTW-v@H zpja%Tl%zIwu*y25kT1@7)IPCQDbzU=NJxwQTJ&B*$VEi0y;WqV7p*6S<)GF@lUn_N zjo*9wyU1@`#b-YGBIeJW!*F&5`_%9@>TuU>i;@ar0~`A z5K18jBTbQ!QCQFxMe3hM^jAVwQaj+vV?wP8GQBY9JRBDGpKs>reVf+$4_$q~fGezW=j!;mnhDU%J zU_jx7LO?2W1Ciu9dM~9BdsaIDisO$<=7*IH9<<5Wnk~fjYLt5BNN~B_uLOW0KAqge znb8S3>ZztSQ6ct88oM}h)|*%)@szyThz)q z;7lSZ&~3LVvD5s;z@<&=2C7D4iLUIcf5JRO&s;=W_T-$DhCiJ0?NAxfP~` zKpxX;57B9G0al`Dl%td~DHJrL#7%lnCaiYoFj%X_v^uD0m>fnOSI{9n9pckF(&?CP zPpqNdrEozmzFpM~fx2c{UqF-)5JS1yfnD>?MjC_n{p6TE*AZ=d3_>Hn;#{qjR`FJK z`X%|w9i;Q-2*0!Ck6^1Yz{yA(r5U~Xp+%vNazrSbu3_g+AMyM&lKIg5)j0qPs=7HZ zGuXnbAFwYXMVvXNoq$#R_y3>E=;w~PaSJ-gV8Y`-m0_@~39zKo5dGD^E?U^QpI%i`dX8M;O_RGJr^H;1<_@Cs5}dJDA3y;0`DQ)S)5BrDn+R! zWD|X)dJjSK6cfWy0j&q)V_KO%$<3FJ4xz*r$7Rg~>1PoYp2;-OAJHl4T;hlkB^^vU~bvo?; zmq7KkF#bvVcaJ}!*xhU5^3@Hz{>DA5KG^5DP!MnTNavi0a9tCg%5b)qfbw zYvqh;Z*GP8;vLZ8-2RuAPTt!$Ds0&+^&#*$!XVn*B@OON0AK?}P3%f;9SRh0(wI?# z>60(c|C4`&AOG1t<}Z?7Zbi`Bcg$a($QS+8u5WUlgmKWpVs#JSesByk=X6c4SCE8E zfl$)52inP5>MU#M)-U7Mw~k}s(JAB>juHY6 zLC{IT;6?Kk0&*zKTu1BRo_hqKa2FpCDB5)BnMH@%Z6YJ7H+Z(^5rv$AL%(`Y_j-Q@ z4NxkM==**>V-7-S9Zp--?odO$-6eq;L~-HRRZ7$iLr`xg@dqD#6vKogK4$bou>AJp zz^Zc?jtV0jnU>&!eF21VGKPiA70_WlWVQz}s6-O2=^_R?OhQ80t~F4vbZjz7`*MPS zTa?;f66oZ0vrUFi20C5HU|}kSLN1BB>op|B$i`JNrwIToRa<8E0Txb3`)Ca9;MEm3 zNi}w?9gPkLi72(3BoMV28Wq~o64=!WlR!WL+3=gRskShy2@0Idx<5RnODn5&5}3H% z3$R=5VV44iu3XMh>DFt3^%jMIjw-6j&06|?G6ru9+`0Krw~UXIJFsaKKQbZ4uNul$ zT7er&=h01udzBW>=Y~j6>rsHMcy*GsE0^BK>Ww@KOBre@TEU7mY;;oqAQQQD^A=W{ zD>#1a7*4Nj;r2@};qvaX9gqs<-UvR#e>gbEsNaYV(y_dOp1&)^w`1%$WRI*-!ViZ~ z!B&=Y8aTHPReflp+W8n>!+Y;v!#Cf(h>w2sJZ58MbYpq+QpfNYo+)GP)(yO|;hsxI zlQ|OjH2RHQ;?c-CtYH|{zTZVOw?ZZy?6@3N|4{yiP#q3%ep_?qBt8y)YWg%j`}7Li zL1CHWta(z|ub|baVsCd39SW?utiFNo%Kz{&lq2vQPDD5yWw!4D{fO8nXV6c~ArT`1 z?`@&CeUFo}k64<7R@$Hk-~BYqFGg)h4uf!O9n#oZ5@V0!U~Lnpo6>>{G}; z@iFWVQ`m1YoVhfL{*2mwUBx!uIo56ULgOcg0` zC@@Zip6hyH>1wb8zy>p19ptNI9oy@4(XO|U(8J#}8>#TX=!ZnwWwM`&V^{KR;X(6|~+!r_5b z6OM!r37-gNea#;##>M*ptHU^tnr-$73G;K%b(>i`pF?WcK)+c-^`MCcIir0%hV4`P zHMu*~{I$i?XLzO2MJmO9NX1bqB)Ks3%)L*7;!(3y>j#4D;5n2gr~1s8zWjk0M-z5?BjRT^f7}sKf#!}myq|5PtK5$w zS#RJ37eg#7X6qZyg(b;4KHS6B>KvwyaRI1Pe2oy%rNmwI%J=c+y$lMa5{@rqaWZ!k z|LFJDxp+&=uTlhZ1f>c_5hL)k$Xu@D<#*{~IxyCugs*2W;jE)c6vq7{vHmd}s!G@^ zw;N#^tCJIq;*oXiZ@-Cu{%yATu@~^je1~I|KsR*~fAWbkwr{7fKBMqgpVDW$Zl^9{6PuWxL(QDc1M7<9e-9j8bzA*xJ~o z;!G{Gyp4F2^K+XFIhE(y(hTuf0@R0#csRhpL+R;o{|@AkU#}x4r`dP9gFS*wYX|B5 z`$*{aJ-wYI09F0bTF+HiQPB9hs@nqFtsp;`A`2GI>iMF z+kJa`$Hu}he8Z_9Wesd|o6~{PTPfyo1zK4aa47AB<$*pXvLbC^L~&=ej2~ROiw|yX zp;BqsAv|lN5hB$~=>pq9;0}rx*o9S;4D^b0t=TmiDH`G)l{kSw`CR|W?{JO`!$n(z zU041y+#^>h`ln$^I@!nUWGQGZ3LqUaey8=jq?+r>Dn&~=gFUt&;~#3LMuEsxAFHTr z=F=NUy0Tk$*{~i_YHa*okBypoRgVkOEc^&>>r@m61!Tl~PK!*S1iFYtPrMt8vc=^UzthXPv z&eougK)3?D0$03)u=_B4NZg3#5}ecFKAhYQ%p?S9%x1K!mj=`gU_X&YJ6A+9PTh1^ zN3GmOt=cBx(mpu{lw+<*s%^1kGG+pR7QDV_m`z48Kb^+ywVK5R{X2%q`lt>^RM7)- zGENJ@w%8;njAC3qtzj9JVfA;>jy=+&dg&676enY1*h0D9M3+LF64n|mtXCf9 zhA5_^T*Q65=RlhrIw+(3rtQmkeEc{3E>5=Mz1thrW$bo-)kkiD8$VW@w#d7t|7N3) zEYMfppYNNSZM|&`bY)OPkaY88ZL|boVynK1fwAY3CWn6q@3xDv>zKgZN zanmGRZ3M1N2P4M_EJSEWzRA&xa&Gin2R=bK#(~T4a*rYGe>ji95y1)y2RpY9wfPX` zyr^K%eiL8)UITlnPvPTFQrjmJ?dOi;Cofd7d+R;CzD}Z-%8~};S@%6wkM&W%2H+}9 zOU0VAcTKBYn6IPCey*EKmP@s$oFgxDQ&gd#KC?U2Yb6H7BaTJ z;?X+RH=A5%8RT>NvSYX+9>VSTFc>AF!@D2KW>Lh?J{=_TXl7>7qdV8yM|yV)xq2D- zeiP|V9r0ET!$u9=dJTpq%XXP78`6I zOXG~!_^CXVtgJ!)iC>S>Kxw>l0uF~yWMco*D`uu}MTwSZ&E9@c#w%~%!=3xvRB~Fj z+o(&6tR9wDw*L7ekpCfYX>7{Nwm;{WK%gDcnhsf$popp4g>Qz(;Sb6%GqxNq;s|i5 zZnDMnbq=c|zDB0srH~=N(z(2xZC;_$jw;!Z?U1Tmdv<^K7M8#EZG7(U3{W~je79rh z?P%B02>{yuw;fQUNUUqVig>1P2Mc4Qm9y1*_-geTEFafpb1Kmr{<}U_9W;|@m}f|( zd#HCI6LCbiE{D|v^y(FKbnixH2bQxpQEP>z6jDwP)AzjA{LUzf=B1yg+{ zzk{9K7G`I%NRk#Io<;0A3IJBF@|i>3A$PRyhHJ3E4?%I zVH`I)Q+TgAg{>|d#^7S&0MDMgW{dO6-346Rd)A(@=nzGKDgawx0WeO{mgG=6gHTez z$V*2!DsYF1%){}a0uGfG#LEuj8pIN4Q3z1GGKmK2)fN|f*Pe%Ub#FeWNtcw;Zf@h` zu6Ks^7(ma*O8Gci?Dqzf=>Ut$94(>|IKRfoy4d_msFcq3NvvXWI;oh8h(DdaOqfSI#hMNS)yep&t|!UbJ?DqxHZl#kc7juxoibn zw-U%M6znjLVb@szT?8HN;r7itxLYn^`PecROATc9-^7)5_^4R3A6*k=?Dn62NXmKW45m^_AA?PbeJP$QW| zB-89S4fIhEWE;Ul0U_K1=hiG~v~&2WFFsFYqGR19?QnB_pUl64E}3ia;T!dRCe=Z; zT*dkZi8GarOjal24UwT2)&TR-;1dS%ffY_ZilSo_9z~aeKrKDPbu&b~-o}88EKWkK zn>h2FbJN2f<_B#gwpP)){Q+tZZesiH9cdi( zes6r)qvAuJQJ5U+uW_PKqz9kIV3g36A?B|BzVqM!uTbN^_h6gavt#^LCHG^-Wp()s zrx^?UPzYFtKvhs#GMYl&&H%Lik@T?s6kbF$l`VnUiU zV)}lqX--+uWcZ?sw%t#!*pT~H2Gh~**AB4!&wn3}e71q7zQmGRq;r@3)_=hK1MS}o z^JnWwA($pk|G&Fiey+5g*QTxJC>PMLVZUiZ9rwC#cl z^{bU7q(@Z6EixH;m?o%)zhz0heaot>K`d zSRJw<`|P%{R_<}CrBPrsl`Y2vm`7hDlQ1NogaF|auD~|8_d63Xe)Xwh$LZ`xNIh7; zQ+rCX|HR|9^SrDTd{>IJJ}sA{NA&j_zUm!8E3hD^3wCjf7Z_0fvn&eE)r5 zYGwwDvvYXz>|Okme|QDWbX?7?-gs*|gq`wjaHlvdU#g!M{f&}$yJuwX4b z1V@D(hEQjOoF4{364}lKYgV?Nb>73)`c?eScUN%sQy;@zvWwY;1$^>E6@nZX-SO2!8B2_xxYsnrnCO ztYd3)8wHNJZEspW*S>U$8a58Fy*W!FsJcpSn(oFhwGQLk?AWq>w#<&FQsxKbSm!@&NG=p=q(^%$|ogOwZ)h{Do z-3HcfphbconVKan;R0hmt0&7+akl<_c@}KG0KD&T_++9ZB7K0B5w$+P_h28dU80ao zjlbP$+dA+SpwT)D+^U_oX*pE#d$;)=xY;qDBXZdzLJ|X0G8tgYtV04>KfvH%6RoW^ zYQfa3sqyMEBdtxhj-9P~k^ehdBIc)q(X7ATcv85lwgg`p)ltHYNQ9WZc8)YRWQ!Fs zg7JDfF#D}iS*Fo93w5^nr9kNW4k;%HNV89O?qF?i9z6;P$Ij>s zK?EBdqyGLT+r@Rw{;74{WOw)|#8XMz*sLO}i-0BtfFOz0A+!UK;Ns6AIqcxi&%K0S zTzVVN7w+SeQ}>XgRCB$d&jvFCvwKwI(nct~gCn3cQ|U53a`q;*wj%!E#`EawBO_w| z#G^s6&Tz@S!~d8)D#iREpM%3`JlLd??Tuj44);I+K5VkcF{q1>9*=9w_Pq>tPvS@v9?cbYoMKg2&DXJ5vN#p zeO#s=_g6j>xtrK(waRjRJ2L#4@Y4h^c57}#?Hbn7JKw=luH zo}6Y$x>>~fMA`J&<1QCQ1)b;k*zwaixwwh7H($Y< z8*>zXydXiadiWo;LV|!ZB3jPyNB@?>1P7PF^|Qu_fBlXgds(mtmu3PE1&!tvK{zJh zkoPE1lF4NB*?e(zibZzOZd}6eeIttEW1qy*d=5(s)A-b>8aAkA9O8>75F_Is zlK!@J4~eu1F$iB1%`t(Was(GPG8QYh!Zjydy@L4QynzhK4sFg$+C4H(T~c;XZsOMM zO{D4eIB@Q2mGRnHU^+dLmBOo?0`1I-ovD9%bPU(-!>^+&DpA; ze9%U@PF|of(pH3wG!8b)^6QLhTW~y zy4JX^Z^00O^{u+e{a|amj>upBuU~UM#_`_+ld{l;o~>=|BUeacs#L<+)P4Nf#qTgK zPECfIzocze<{zwn5;xk5bQ2XDD1@3+#&Bg5vvmszr6pl2K6mzAGQ~Q6>zyaij!>#m zV|~MQXHka8a0Rx) zXgkYr$vyIqfQb*mLunK+k<2kL=XB#~wz(-$*6Miw{(;^8C#hNS{azRAwHTJ?rt$Pr z6seehUdcRbBqW1eNr~OO5W2vae>?_3n7~^ju;+i8{3IxmAN($UVZMf5tA@*1LG_8x zaSAy`%!2Wmg%&>cbRLn}8IP2Vo|@F4TF2)71uTB{JOvste=_238GVk;fACe-rvEC&mOmD{ja}$n}PrZKMyu#%y#QT z45?b-9Bvi4C>KyDB(boVz)Z>S3J~qMw#qTKCg4z*V~8HKMhW(-zF}090_)TDO)|m+ zcDUZV>6H5@mJSGOZjzSju%H;o=s5-B26~N0HruKXr-_hDn3ce5TuSLf^>igWho+|U z%jO?FqxI+AlB2XuE~7V;x)e&ZzN;0|Dcj=bnsNw?`3Sf5B=-4myadpIM5udA)+J$CzC* z#&%!Vp~q>H-b(Np=)+FreeCuom9-}4*{Qv4oG@0 z@#@QPT+}x<<5{nCVHd^I+rDx9-yrR}ImGT}6aV3jC$YG^f)wY9jkd;sbgRXBbfOdz zvqeOTIizQD$m%PV)8Y$5yR9?IbQ-wmu!r>C7K&@zSSx%2$6h>*M7pJ^ggj-;xts)m zKFZw~wwo!do2sHQ41~7Wvw!U2M*sp5+b$VUqpq!Jy;j2sJ4oZH+;tW%?Ub1l`a++k zRub>lDF6gugTilpJI?!Zq^7^w%J&4CtvD8QWj34#K?y zA*ExzGwsGv15c@w1Cq;furoRk#Pp;I5}GC9>a`XNG;p@zov52U!2lCRaiK(v9H9w; zf-K+o$M=mJ0mt~q(aB`eE-tFn+V1hIkVJY_O^E^ zwNh#)k#l(LcLau?Ki21#D@a1W`{$4PA&!Grzm1>GZ6H&~+FkX9{WaX{<&l`y6}~Rr z9ZK8LgEEfgxZHDkF6{bHlRh=9p}Z4Ec0rfjh^#SwK48|BI!0-hy!WRBH z1V@EAP|PUS;}x^jw*-=r_i^d+DsJvQf-}#*h?PPIKYOu-*Dl?}{i@czviRJgB3yGx z^oK>{rl%~*+Q6SsG6xd@V^7d#Hy4Ccw21Sn5yemc_$N?Gi3w;+y^Z(Yy^lPp-NlQi zkx9qUX*E!#MyEWMdxVw_h0&xl5ft+zl-&&~IW=res?odhD$j4m~I-HV{t>}2%W+!jrzqpy+bYo+wJ z`pz_^A-8d`TgLw8E)F&}QQqD}n@o7nY1o>OY@#<;be(m)*Fd^oMxnojQe+47B??c+ zj$!816G+dUL?U0}@+70NhI^XDwV>}z6tYRo6qBenJ7m0E-)y>!#0xR<*ugetw%*5V zece7DR(kYtti13M6qfWlu6vDE=MWu`b-#hk8$ZCmm3;+&;}=r+f~VLa1d0}ehGbn46Xyo`%7^mx z(=AqWTeuYLAthxAfC>AE&~hn3f*G?bjr;8~Ztv)Md;+t1$LwXYnH0)vJJfoj)DXC! zy_V!ah`rOwQ@;iQ&NhNh(RTg4>v(?e6`Wg{;^Jc%%hl~@k+pSf&t9<4Z`!bMPTpyx z(IR0xooXVQ=c45zRd_5$4T4%utT=7kXeI!Vm}XGJYwxb(pg)bJl@%;cH&Lv=f!}^T zYmYzlOikcxWM<^nSOsPjZZZC65~8t`^_7VDkqHO^j)x#vD+bQ3AgvAkJq$~Z|bAA1UMYCf8uw{LA=f47DwpFW3NLE{^>6VB_L z3xlENm=L)90!ROxTXvEHLowGyF};IGX9M+04O?41ni%$Wd(bCo#dx+h^jYqN2@XQ# z+U(H==mg&F!qpG%&;AuiMz#~pqIUf%zVPA+TQ8M18_Id9^`kc1scp+bW)a|^t=9>Y zX?l4E16a`wESfooKsg8E5Zl5aF$JR(_OyefcvhD45qlwzS82viR>vvG2 zrrh7Zhh&=?cdSY#-Nj5Pj-`b(7U$BammBCdsz~%J$m$+>GNVT>@cxQOn~zFpI9Oq%^S;27%8 zmH~yTA!)5Xk!=3Bj5K-nmofAxdY-9EK#P;e#k&-G=cxU!v&^k5%hiqy)0iPMrV;a( z_OA+S=EM?hWM+a#ef$xb+#mQt7U%8vb; zmdm*itS^m=%!B}-pplaZI@$rC0HB-erV438yxl3_V*aKzRoiKaR0=s3@ZE#c(0lxb zn63X*=`Q~C$@kxpJd&~p|ZFhXI$4+EvEQY@%`aR-nb}=|;p|{1xZPwA- zZlJ$SM!Da{u+BJ6Vv51G?IY$t6K&v;><$^`0JW~$;uwQ>+YI!eNhix}G2H=v?06cV zIiAARoi^EkuRpVnaH)bv0&8vQ0(>rC7=mzf`yXlg-SjlNWS;hUWY$5C1N1EciU24T z^IX(oN=_&+O+Yac0)#|mSV0OMgSmZujs(Vyc&_0H*#_QWmU_p*sBQMcdeZ29f89K$ zYmLuwqRvjI>{dhdnI2*6Zf#?&k~G1kkc~obKoqsNl?S z7fIa_z{M|(E5?3rRa!{S%rc=P^x7)i-nfT%w(^+bI4mx#;MtQ`@h^Y#2KFQKMCX?G z!*E2XDmM|#fUuu+lhC2dfsVv^bU|a7n3uNVy<7I!gi~3aJXrWdWC#qGTbr@SHa0eH zGS& zIP*#<$Z`D@a}o5(P%EqNp}u(&jg1@V?A}1Mb`SaJKIRJp9AC`f7`4yEV{@24zJl44 zCoy;87-pB|p<6=VxwM8>qeWo@D3K|ZPM$&G#3RTqoTR2Y&GqPZDqR!9bK3`M%tvAJ zkO`5-eX!c3aK^qk*udQSJ6Nb~AT_^)(nmgpxyLRdm1BV>6f+I;o5s)fI>xVqlVpk% zd~zv$vqW3@dUVmoDGF63rknZHQxx{~2#9NZC6CtiHR!7H0g*|dGMl)JX=~?&{n(c+ zMZ%22#N26!Pev87Z~m{R5#5e+XndUIb%Mg^`M)adA)cZDPzs&(VVX#to-XUgI<)RR z!0pA4qfp8*iZnmYwUQuTOig2uox?DE(H3Pt72?QbZ&hL84nnnu1(*YZF7# z+CJ+XZL$un4DuJK)L2=rP|d-HJ_yA+OR2Q55Tl|1@NbX41{hRSmWZ=1NNCnO?EEN7 zQ8I!?w-ToxA7v#vC@FpFCo zdKMF-Ai#m9kkPNSDXlfo*{Y(mQ$w$!i*z~|w!0YWMkz9vfjCZ`ZZaPoYMjqB@DocP z;PKL`Y4LYzvsO;1|3~dn4FYiW;ezADnWg0XAAMmKkIcoeTkYdUnf1|tD!A%Gpfg zE$^CyfaB8|#RmvNpg0Q-#i`B`1Dve@^%+oO|Lf4A^5_%4CzmrQO{eX(KfS@AQ`ou| zSvz_|7YRoca7;#Kqz& ze)`b^{MO5xX!fOXFqP5=+2z*6NfeMNP(utBz^D$P$_Rpr9sx?(Zd54z?ck}8ejd-B zB5~{waOchzcBK73bDm7kKl8UbP&lNLF~ef-uO4td>aeHqyD~;a(c$K{Bj$RU)E%-D z6DEVn^tcY&n8{a2@$MosypBloE~-20*xqd5{{10t-y33Mdw`0xI@=M`4Vij`!oIgM ztR#bg=;~L@yOo*4t8d-KnOqyEkC!M+Y5XF#6Oc|Pp?B5QPW#?G>+04Bb6Xq9Nazzv zD~W4E_x|g<4Qg+cLPoYwz|6uN78XlbTA3xIUnHYHhSJh8(-BX{Yx%R~Lr!!>onIWc=15-T3 z?YhYf-etQl+`EHpXNcUzV^)47Lt2z-qPyBKrmtEX-O$*3_gFBXUpC8>U|@`$##M$! zf}Yp|wRhKgrE>y+1PDFJcX*jjWw2k8X*~i6?EnZ@jcGdyh+!$-z}Mf4Vfw-&)?P~` z%aXET5(;7&)~QIrM4!Q*MPzmfkrSsdq)-;+JV`Y4%JKm-v?%mVBYBSF>A#NZ=8fvY zb{SH((N*5&j(%d#{xJ#w@`S)D!9cqnu|X!xgt|dUU8V+ZHVSyMcw0-x3P`4sSZ&YZ zUV{~7PyW)WcW`lPgR#n?QiYJ(Af?nlyj?`OB?+~M-aeWBb{*}#Duna|n}6i)B4cZDB4O z$7^@%_@JglZV-b~$CE|oa2$UK#-oGs!frv3hGwGk8PV4(VO)5reuJ}ELVy@(8gtV* zoAj2JM)++)>3Tr5(P9V+A3Gg{%MOFWM~NJa`iQs>MVVjqHRFQN&^_Kg<&!iH%odZZ zt0S2D>ew!+n21<{T8W?T*+eao44*_e(OG7Sg70M1jPmQQYB*yOE>DcbGwd&78JWmeP;8I z(2QsC_CXr4tqm*>tB4gS$a1lF_iKpH%`=66#@MUj-COst-kPOgQ^2vs8Jx?$hF|{* ziC2umg4Wgq2>(Q-4csg-hX>~$)tO)ml=grU{b*D}s3!a32w(!WPk(Bup8w9xPT|k| zgM<}?~NFg%Qi(GrG9UJbV!aZ;Zg1ojsl#Vv>*0%4Pfcg0^{WMNY>65KJT)uo4 z(=*dJ|Hz8Z<}=HRq#;EzooHd5%v#&`>T5wT9~`*8b58c5X?D`)60Ey+n8-lL^b%=Z zgv7RFQ+VNpIjod6P>NkavUvr2>o>8nx`)-(2yWg1R@a9pQ<>-!S2`U!OW?~7z)H@S z@Xmua`gYdnH==}S?dJ)qqso$Kjys1m@KAVOXj2mtQ+zi>Jb?MY=Q z0B8q5pvLikSZ2DmDjl_5%=m*lcr*4KN(*jBT)@TZs_80LyHS#}u@(Qu33kg=3CPNf^)ii$Ry%OsCZFKgi z>6h!&^z~I5?G9LKf*S;@Pf#Umi2R(e+NL3+(5rQgRt9fuE@7vWvrchDXoQI15ztcq zA0ts%%0_XZLoqBwk1W1@w}~5DE&O1M0*SbWb+9$rI!xG{arGMe!^Wl4&p7X-Q5|dm zd><-6{s9M46D-+pVIVP?lHoL&Q%2v2wsgwp9|zFwz9tyNIB@tJjAIz;JriBxA)GFl z5CO=qAPIg}Dm}Wes6_@NuhoD*lE@1=r=c|4L+l=OEWIT6Mx%*?y*>O?=3RX1IWB6Q z6PPDKTFN5Axm2KZd@j9)FBY!hOWoIyx^)NJ_v*M;&LCb$k!XuJc|)kZaTTZW02hyO ztS!W~z_|%5Q;z~lJ8O8OeH^nZ1)G7^2H)5|=gbHF67EtXC>^XLn@b_i`KxDuQTyaI zYd`E^f9ozTt?H~o4l7G1@z}XdT>2L;;hH}T7$&+wJw6;pHGCMDRfnbq`p}Noeq7)< zk4^m#0UH~?HgujPnwi2^zW!g}-~MwYeB%$V;lWy4-J(wLxW{l5TEk=!;aIvEsE{bN zjCSKDzW!1ZC%^c&@UhYjd}d`Ezxf8&u?|IrDytH8T01$lY=Tx8!q|@j*ZQCjhS*=d zfgv@ZKk@TFi+rSmyLUFRwbR5i&z|QxagTyVSk2;3G|P2F&6vX8#&+B71Tb7xwAT23 zv*aVcoV0^2-bkG7(#`-4wXu!z0_IOWffE-V$Ku&1@#xbR@zEDo@a&^)(v_>ov@fH+ zeFG2f?BD_C&z(CxZ148DcBsKp$w(%H(o~-PBbLr!x0l84&K{O#^Aw=j8rDH;N^R@u zkYA5ut3LGMrX5;-k4K0Ehi#kqK7oa4Ju6&g$d1?rJKy>0Tex%W24;^f;Oz4kk)H{k zzbmmzF7PNExN175FURWR6R4g#-&CVg@Zi#GXx@GqOG{HIJ^2MpKmH<;nGDmAk#nxA zX=41MZDRT*(&)uP1oMN<`#Hk)ySND~JkAqFrwa|Fru2;)`JEZ;F>OaXI26(nNi1Z$_})tgNL_dm$uz^2Zd`>CSY7!e zTV2CDx?@%j-zm*U~z7)2#MO_>*sL>`D4%ilz#+Z5#th-QOsYTxYfYw z*^=I;bvcKqv=ex;xN3waO9^c*)3mMlUp{pSi5P_jUxXFU2^$^6@Q>e`$6FszlB$W> zQQOxRm;VdEa*bL}+c(0#3@Eizoleu~Ca_u0pfMl;PCBN(9d=CG6{2 zTP-IMcG-dVq=4J@U(iWGhq?NgWa!;tGfHoM=N1G5G&13I7U$eb&gqN+HH=uVg?Oif zej6xI@}B18WwsG0y%v;7$R-4M7|&XdPvCwhAe3wZRG)A;^2>O)T-s9B31WHG&4!DW zlUAndI`^wRtnYT*jZ;kICLXZ4xrc1;K0f=X>svFddxUc-GE1$W29&6iu@27Vckr3~ zP5gNO5;8Y#;9#p^-;>aVK6`iWW2U@~kIh$%C<>2N&5Cnn38Kjal7kLzz1Kke!b#Yd zw76>B_|Y((#$rESz&rH<1(Y(1oB^qB3yI}rMhmTf(5u3sM{5($0Hj&wU z760NL3NO^0g5D46;2=DU1(UI32*Q%Cj}Km7ggF%4VIxFCBN&Di~LJx6io@IE3EF1_2`Y2Ls$UanyIi~lY@ zKl>gYEo|U-FH`-nXYQ8R*{oA6GfP2=;~Y#X4<2jC5dt^yY^=2XU*F%v)XHP{>Cb$OOhSlrXxO*S> zZg+6=7T3rInK`x6R7TJ1Ig4De9DB~wcp9~O3q>kZu3oM_8EVLV3IX=oBkSPKTzE#I zbPTrUhQaa&NN9ZD_-?hlVnFY|w~6n3`CCY(`#Al~6IeQP$^>uCr2uJw+hd!A0Jn!A zjc(%8t$W)KR&%SBWnbqc~34V=hajl1yKR z*TnQ?^ct@6*r=GTcDOQS;vA!PB!zqV0@|;AACIRg+@Cy7`ojJsvyM?&ZQZStnfpwh z=!I$DM4Lz9ejdnXfwtD@7EKZVurmXyNGM$Zxl#>@90|I>qL_Az{o9kG$pG@4bS{f@ zeGR|+1{IrR$!Mr{qEwJ}HYDsAdV$%>7pl{!|0$U0jMGLPx#g14F&FGIE4@qV@&xUU zee!4i{I7L~+EVo)9yCQH0JPigm6{~QthBa2l$r63K@KMpw@^s*IDoqCu8(J?H%Z?; z7qB8ZXZaVW1ii7Fz~BGc3|dWg9VdwJkIM{|ZBFlJxsLJ6P$N#nIiPHq8W$`Ab1I#3 zIjrLja-iDih+T;S%rx`9wKKqhZEQ%&XF8?#d7M3N!9&bHNEZqhOuBu1kd_fa9K8m? z09g5K#E@-EwrhyAIPsHu4B+lGci?iX4I%^z51ttXFv1^zq9>D#ARMgvd55!nT?1Q> zOr(KORx_{(=Ou4FnvmvSr!du%NAVt?p55&q)NyBZ6F>hbg&R$hpsb(*5(e_rzGriY zO5kCVIE8`Jg$h2AzK2g#E~9mO730kgJ*c*Oe)E5Sq-VklbCzD|;(g zIX4BpX{9=kXC;Ak*D2rieim2DK(j!CtQIUftz0ewDx!L zgLk|5Z~v>`LA6n1Jw;^4DJHTKl>5VAl-3;1CrqkGG(v{dyo+yquZo#3{B8XF@>@uE zH}JiiOr+<;zOrgsB#}cZH|^UwS>C9O5h%mRWq9hlt7x|xc;x9%;bRxi;O?zeyU+Z| zr_b8!ViQ=*>HCVH`VM0S%uFYcPgHSltc&J`&Bhv3vhI*6!DF@7~Zp zR-{+8QW?ELL&iXYAbQm5^r;2w!X*}=;#nuXhTZLU?G(3rHcWf8{$&U5LlATXt)RMY zCn1J!ef=%my7C5&om;`_r=LNtD6LVA9*I;FAiv=lqnrd13caS->$K6PX>tA~vl%R% zeS-Don#?3oDCw;)&&Y{@%|?#Habh}x)6;#-rYTazd&Wa_uv;eh;wgJb&9;2ZX14k! zsE6L)@9NDD3exZQfvLA%!l|VtM3-lofx-Y4zy5D<#R@tID9|>ZzF8lDCgPym#M#0=8^p%u{qtKISDeyN&Ls1X zQR@A_eRT>~*VB%9F>g>gvz^1|^xbos!^2>C7!jlm z(uk?`NthDs&t$tpX*PyAE|%aNKp3<|sM`Yd&2u|}EN~-Be15?7^Ke!NK^7HGx7i+C zo%ko)4Ev6@9V}Bi87n}k9imZsa|b`1pPHa#Vs|&|IE7m{yR0pCf{hbRU>mUBDUPkS z{-@K3>Mn%X(5`X4SUkXUsXLgOEph$$`KR(mS;si+mvd$|+r^u250H6e$)2;R?l!i} zWcAdKjZ*~F{c*b$!^udMTHKsPs^53ER&nJ%rT5e{PAo0su`^}7|BdhAN_oNN-URqI ze>i+t0v8_s4Fmx@6|5Zrn;j0^=$gYrC`L~9_vQ!hpxLZ*-8n5w;X%GpwxBHg{cxCw zH;;ZCwrGS5sdX3MdTAdEU-(=2w~oI=4R;$?xAbh8l3Xw@Y)7iN$UH~)K@dI}tC1lP zM`i7XX;?3Q`loSbp@6Gb?jT<*;{5q#4pk_ZFHSIOFD+pjPzcb4S_?%Ac6atzr3_<5 ztbM=nC&&|kuK~dl*g?ZIh4lSK0;f()*>?5Az3AK`>}2EUL}n=vETAxV9FIJ979V|K z9v7B2kZHYz{ngvJPmOeKErR_D$5@I^f}vy+TzN0wsV`sev&16Dq-dK{`nuGxpx=G9)AqSAAOv3M5nn}kot3!?a+vshmpPv z?fmMMMSU{9-)^DX*6Dt7Ue+s>&LByngN2P+15pYG)AL1FFONdipUMnzc4mN;To;*` zWBf7B_c%?!_|4WDkPx8x>}o;dModCfyBkHhn?$ppuscVFnKZ6!?Bn#UTbMtwga`$A zPzXt#O`vsojZG2LP%DmrQ23~ZLm8m-i9TWn&6apgzIA&2=s2PgHpX-eBsv`9ct!%_YBlx8KEC- zY!}iDzfm?DTXl8!)7C*Tg7kCP=hjy_UfL^V_rR46-&>)=dN% zVX+^xknL(G4zz6P7(SoyE^S zJ%=PG(PpKMdY=S^lA>Ps6H!qP)z%pY<1h!#9|~h7$6?M0!nT-``pd$ONN>i63xYbR z-Z^SJF{-UIth;>+fblX8Tn=r?O9)7Cu>l(ru2 z_^65BplFL@W{U}a7^iOs>>ZHk-nfpReTLHiMCo*!S3jX}j=O|`SUyROJfSzckV~>Z z$e=4-63A$B#Qd!&!ieDc3Z#FLP_^1rLSw?55rMmVF<^YJA^AjAz;vcfN#E3!>J$p zEBGs?zK5%~E4W=IosbYf(7Z_Ls%D?>hr_tPsBYiofadWNKlP_j(fjM=CLVqK zG_pC)1E1X0%bW(Ic{U0ok&PDY?(=iY12SC_Q8El2T(xx<^L41aDYGF2u2RnUR zn^UBP9FkBO0Wg5|a=SO2XQV?C21t@A49p-^I)&5c&*LM{OyT^(CL-l4*t~NK_wRSG zwG&6ZqdA@;Qvmb`TW3xjRtW)7|B)?823#i=FDD^%k=C6Ng4_1!}k4sbCa$c7U{?iqt-~cj`}2Wvm3)c`)t2Q z4WGhInly2tm_RL8!29o9#|1s+JF@_kxR$tX6H{$8ukE^BWI-4qVO&S^hJXPRVf5IV z9UFViQ*~q;5)tx5edRVu25r%7L6xmJAVE`8{0@M7Jx@Xab%)_=VU{BM7K9+jRxS*S^y zU!CEm+8CVM*U1|};11H8VY0*Vg0NdK;diJfz{M+qlOUEruGwH+hbWN1qFYATR3C5eD$^bLD+;}?!X_o%qiqwNb7&^h z!IgKqNOJKf(ka%-*G~16QD$GJX6=3_f|*zc$0<2$?hg80tZl5~Rym7kGJ{8#rf~60 z4gc)d-#{fgXMOH)OoGFBRLsLLk;)i`IlS%Sbx1IpEVvy32?Ab>vG%)vpCkBnYj7Mk zUXy`sFyVQ~`=KyOM~AAQ#{q-(8ou^w9~XZ77x7n5eitu&(85MtXEiu}?CfM=$ukDu zCUgA|U>?oo`raD4tuk`6r}4>;e-azF?;@4WQvf(=8mP?`rW?1AV9tq<5e%ao%fuAU z9;3$F-og4#%Wm0om0})cB2HUJ#NgJYRR;+Y*7IkV@ZJZzCP*xjz$&BSjw(xm7CvgQ z0z{iq_OYaPbOGto37o%hoWj5ijuq~sy>$t9Z`{TDej1hj6q?jpXIV^wN{;?CFLn1o zyQ4xq9TjesL5EeFpgOs5=MX*BJpsS}+uuTS{{c=s^&;kutuR^-6_wrfm!Xl%w_hNp zukU%(5BAWi>`~e4m?Ah;%A+tzZt*eu6hb=5!XLOV@u z|75X^lD7P%z**bG4h5=>69C3F6S(#%R18yEf3*|G0hNMXn$AFPB2lnlRSKyXa=8?? zD3q*y{}RrV2xT9o5RlFzHcuLKu!YV}+YzV${ZTLx=RG6K{Y5oj2DDjzgv?xZPei-O zChHtGor__OHT7lhbNp*#q0`zzo7pYQT5N7_v%#{}X+gN;YF%tPUmD=lVh4{Lt7BoR zjBKxr{?;~XH`h?F_mNpyL2jCB(1Y6nP_KGK-im$c7r*#xpj^JoFZSyOe$fAU*JTw2fD7X?lGSIMK9>TKtA z`Lu}t^Btj9`6?K=Rx&))4HG@$>lp^a;hZCPfb+;W zZwwBVEm=3l1vlO8+Iz2se2Ph!XtKx=*y8{S0eWR7d?vuTTqzTE;g8w&r}A8w(b6DJ zKLj`A&f~%ZA;9&UU>xhfa0Cbl8cz|8&@ym)m6O{t=*ZR>~Wg|r^N)(M?fftgHWG1 z0wEZOxg7xs0tqrdwMg zG5nP?uj3o;tIKpampBG$k7^JeAGy_zlgH<=xpjaR zm6mk5 zzGVh&#D`sEl0(ut$@$9XI>)889ygajE~D4vC))C_cVb-sPV1N59IHytQG^MPd0i6k@E~U@)kC(_MvV0t za1JRn9_wS~`5h$kJv-}WM3%*fi4XSKhE{-tZgxm8C1gAI*rixEEcDY@&QTp)8Zq`H z`?yq!Vr4msW6Lr0*!D`|I7$mTNba%H(#1sqX2U~I?8hkp)G8;?p|t5DLuC+D0i6R- zm_8#odJI5N*g>t2rznXe(6HCSBqW%`N#gv^UrFO1{$PeuwwON$$+gBIwZi0f_K5j2 zout(?nSVZ?uvdAe3K1-@Lm!{5;dEh_lcs0e|7<5RDZLxo*9IH%)Y{sE1XlZbYWXp2 zHM;ot*&>SUAQAM-4_bEPpGj0KQ&kAs9N2<@0Efc_L3%T+Z`d#RQQQG&-8>wwt;#4$ z4N8xUkN_Z|$@<5B9hmK@kG8jU!&cJo1h_aF;rGZL+Z%&?7Q&w(W4v+)KF z8gcaWvF%YFKPF7CU7%#Fi3hj2K+m1F$4Oz~#9Sldx|(c1yN))v0<_A);4$*1uv=ikLQuC_^_wS%F9fch?gS~o^K zb}@W3HqP#M$$++Q8PR(7qd$XayM=T*g~y*b;|@cGP>t~j=wpR~umI~A6v8^0FH>b`)nk|G?IpFgsXFVCXcY+>slhO;O2ct(+ek>epaGDd+xgpfpZ zRc#(!3Ic=V43=5Wvu6{iZ@h&ociPyA9>Z*&3PFnGo)zITcS1mi{SXKN9!9mcbQHcw zB(Gfh0M}lB9kVA-k-aqPolZ-Pp!V4mfpU3CB;Kz|=H_I5Jb^ ztk&BUKv)6a2=`n$s6zyMTl<(@DB0uNam@rOi+!(cK}zI0T&zbNP6!CF3C80mP?=)> zU253}ZKv@cbd#u%>2?NjWBz#(%zS)c=Lpmt>Z5EbiDWL1w`vU}-h7Y!I)l_HeXk&k z^oc0yuRlP9yvYjl1qLk{86Pf?dmKLG{OOZ9lBrg-doG$oo}}{(XWEG9TPP*+$}H)V zcJEmKDC-!_)1;X?##RZTXb^=O4T(`#|ESN^!>~$JG+SkwKT2DP1awGw(V^y^cE3p< zbSKJ2`xvGcM8{l0tr;f(IP3w$e&QFu@N0wWJZi(>{c86cSlYJlw)^fmDkU17NY#Zj z0pZi@Fs0a@z0at=OxfX;C@$T};Q#nrv-S}TF<%XmD>z&M4m2C!n7;&vm~9nm>p!0( z-lD!ipu-{qtQ33H{0}gbsvGmyGm;3)igG3B+t7NXlVBrb-2ra&rcjTjI7xxGRvS20 zOrzc&;(vH;4|`pAD8ss!)$q+Q2;8odj*gpzpdBtgjPI~5I2y+|pN#IT&a|4y^?K}Q zCkWYKn;DlED%vD&JsZ?chdYNMaCU%KAYs(}{E-6X+?;kJH-9_?{vQ@L5*nNrb$vRT z<9B$H>El6rHQ>tIui;O;px1yx5M&MoTK>b~z7tFsU>j4E_LmBJFTIbt?Ork58zV?0 zG=)MId+S?R>*P?R_A(-T0Zuy9f}kiZwOX}}r_biCANBgx-u61KmoxTw=JDf;xOlRR zFaOrd*c|9;V3p_cj!=Fm1f~2i_+ePaWeIePU^GdsnnEvEH$&JrF3Q8C-@5N#0Y=G3 zj&S`Cl|_$;Q!LU(r@4-=zIOp%`uK7D%42u&t@nr6YUPlfa&J$B5R!%nr!+Q=C)fP{ zx3>2Twk^5N!@iSqxH-O@CSZU;7ytx85+EQ@R4{4LkQ~H6c3D!n97Y1OxsN2TXYv-*`!;WMiHB%OX`T6sq zEzZbsEX{tM<3gi=OB>`LXyWjgiVPJ22~VS;$w|=S=j_H3$2V~Ee#aga>0qAap`TL? zEZ=NM1VY4V1POC}BO*0NMWBkas|Bni9^$3f@8SMv19Mz_&1Ic{P*Y|S`qjI{Y~A%b^@Xh(u*JHaHKu!H^HCA$$&H{@HBQL{7V%6It%6~$kqXL z9p20#QLf;XySu2oeithrJ%iMI4)HRDcBh8^Loz059|TJ~TZCD^cWbO`>pyuyIw!hy zl*)-7(`XK4d&q5aPTKCIgc6NzE0Q9>{*z)5t5R+)F#Qsvm&PoQ$~#7{#@d>YrwMk% z*xqJrYTQBJ5%mWu0D3KzisaCn+Gqu-QjQ7%|>nz%5h)9Zb%loHrJ&f`D%+ZD71X$ouq z++UPz&`gana~gN5m3XA3m6x9T&sVke&yJkIQZUphkb-aGil`?_+KWA7A+(-b2$_=(^!MZu3P z{%F4O-__rUM{?l!PH=Ut`J=D3g&4Jub5C(kC;e$bC3&m{5jvBcWYNT9ZFHIs@dtNa zz@PcK0{-kXb$si+0atBBq_R3ZNjz3ebH7MozqGi3mE|SO&COBxmpJ!xw#9t+?H_O~ z4X}Rxc`VGYA15Ct|@t9o15^(_r;&13N#t@aOl85~ol zG>2T2lAq`ib=idfkTP5X(n{>Ja6C&mB`SD>N(I;7zK!C|Lu~%+IV#U-WX_k+`0*{a zC3{SHTEbvQKz<*l5~X@vq%}B}S&lA6VLL@dhWV?h#(kFOLQnuiO9{mfX-mP81}UTM zYps|m!>ETMSsI~v-`7FHf1&{Rl|Kc&Od_tgB`EIWee!zBLfXRbAES?seeJrakkjRVz$9@uo3*~U)#ZEm{#o_XW7tTXK=OuT7RAmK`oQL(&Y&1(3oJ5 zVcu@2IC$K4@y_jjtaHun(|W&!c{^$ZW`}eho)jMig=u0`+Iky+lbdx)agf;giO`e= zrw9`yEIM6I2DZB{*Dw^z&@u5K$Sp{JKE3mM6A25yf)HmmO;9Mz_MpB#K5p6bcULiC zvajgWilEjSfiDk9Teym?EH+oult!0c4m(I8G8!vICm1n=R{1W_|o12)Q ztJ?0635+lvXw@lf9=`ty-Emxg<`jGZL8#FTw#JvXN8=@~ zPAgn|sfCPgoS)uoEa~g1*2*%`VJ=Ua8`2!PBtS$Nb^!7;c@3;y7qd}I!Up$?Q zJqp~p^vHz2UKJGSU<6aYXvI*a;&hVF%%l1J+lbi(W0usl zy`>FqmX)?v{kdiqnPvvMBDkKTTw$^y3){7KWSK&#CXAPe6!;o!`a)p8H$4iE0RQVZ@_6M|!i11%&z6}g8?fb;(AVJd!k>+xXa5;?!pcep3v(mnGR%YY z=CfU_7g|`$pP-mwrK!NgsVT;!DoXfs;u;qwSt$TxDgdBH`9`mTT09HgUaM!&8qDt1 zKUa1#DNZC8=j-EUD$k4sn2qh z*SNEPs}oz5eR1dZUDUe?6svl4$8r53)%Z{d=|tPyEUGeV5Ac2Ekj&{->1!O7w7c-O*32lW>%j9Ofr_6jN;dF?1Ru|^6O=aTfJ8z*l zH;3g*MI_kAg9eqny#^I&)!C(SM4YYiB`D?d$2p|AaeGmq6|m`ysRF z!(8yxo(WJP<>U{UYU>{BEhV2`!?L=`xb6NV`B+jbf7%HO|2W-x3nxjFi#O33XSn_? zVt_Q=NgVg8sBGxqu;?)_ozWtF+Xb+SQrVIMknN^XY^E?jY~fyvgPJSQz`(40-sn@6 zTA6e^J@cnCI#?y4lfY8u1P>3A_P zRlrqmYK(HKkCj}T!oP_*+G%R6_U^x5^_wx$DlCmY7u+0EyB*^}H;cQm3bjjZKhrQz zb&kh06JX-!k8@A)1oE5h17_nQhCePXjpgUURY*r8v_l9d_@ICr@Vkj5s=CmHfQD=%a-?$siZa^#abgl*K#CKl1fq&zZc_+-C0D+cSVIT@7PCCpjTMo7^?HJoB z)@$R@aLEgJ*Y2fq7MS_cO5~q(jh$f-zv9YCIa^+LwL}zy8Y?(Q0<^SO5AS z;_#?r?HCn!a;cWueR<|m9+xi^P@s;pzt?2bxW0DMF1Yzmh|YOKV_fVSb$7JHN9`#-#i`?qg#RX;~&A4jHF!=3FqTEz`)mZ>E8oq%FKi`9Gw+jrl` zod?H8qq4AsVYg{t=v-nOUVHW`&R@QWVv!0s^U?GP%CK7uC~s!W@OR$1iGCuFT(L}^ z?r^3(^@OqFaVDq}P$slOL=++9Nyf6i*T==%al6f~QSRH7@A_)&aX({+{<;*xMGF0u z3fB zmf9#&E0hADq+0abh%}li92-Fgq4e2c3jYC>fL14lA7jb3m-PHu2W2#5tVX_5d=t~{ zK#kq+U4Vsqv@nSrJs;v2UYTrqr2dP~9|pVUBk3%}u&fV5qD;qsh32Jm(OVi(AHU$QRMm^HQP5;okPjBh;6#T+8N>-i)jD|YOv>6$Ur5{D zKg3?Yg851g7fL;>6>IoE|H*A?!QnLcES-N|a4qgYZLZ2~_vVm0cLo3XfBLua*7f^t z_ltS?W^thT#BsTD<`dXFcacq5Lb));+G>JIz==IZ2m;rEbI;KD7cBb+(Xu_C@iD&j z<`BE1v)D^kkfAVjhyNn!Z1Sj_Z0qJR?p*&a17ldf{PPrQ1$_DwPa#F-tz^-vnA7_s z!80&hGhu1YxWCijVxtb(VmN7zJ;&=*MxBYeb+?XlXR1yxDwBXun9zv8)cYit2L)Ii z-B{Ny+9Ai`Kl{Cxk>iTDkjqjCQ80Fnk>XRsEpAg&(NDBon8z%@w>3S@Np>{awdXh3-wdokotrUx7!J9-3LQ zs}O1BkJtj@4O&B#*C}-}AuRlOzuBkSi}I^|kIPjqKCJAlmpkaEHyhk4UkX56{j4Re zwhBBrcFDSp-8sFT{wi9rJY@g}QDqs~g7`miq)~QS%!&(nJ$hqU;){R!7hdEt6Qz>^ zGY4{Hu%#}QfN{~7xfM|bVkWNJsRU5)54wGH8f|3q98heu{fCe6U`ImIq_bgKLYk@Y z_X>bbDhej963<`C;oNy$`a>3|#$#L~mcsTZkF8-I*E7jF!>TGZB_yD*Qt|rXc^Uv0BfDv0?jMiH-CMi_K06N{2gx zC%?ydy?{`Tn>t`68)n=(G66R5lc zmbIy`IkHW4e}i=c!ENV<{Cqm)@5A(Cbzp#WD+wnF{n<3G{sEkuiIm4^fKI1R1u?n{ zpe;=@s9Xj|^%lN;eHUMSW@zv08bP1b{dk~a&_9WzvlBz_2vjQA>{(v|pSNp4XU6Rz zPFiVf#}+L_5Nx$ksgyySW4nBG8;6+%F7P5NxRAeqxW}zN&dtS8rLwHb)ea7EqsDPc zhIo0oh-X%7_>JFu1vN}>IWzF(`Y@QHOzROqZ9Re7U3~pFzmC1#M|L1MT8R6E+b zZ}rTrGfa~epEm)Fp-uvv!xk;#YxL@L`QCmD%S$EOqPNT<1k4%n2bcyq*Xc4^FpWy3 z{?cRAAHBMTn=gMKOSu*bgF_TzEo8?XWQGkC`v=(Fs&T<~4l8qc0mb6H*a7blUZa6bA&>fA4ULAf(L@O~Ws$5GoZz=`4$ycig~jy( zu05N>+?)lG*R#WEnz1DIN4g1%g4;f_k-&B*i*M{Nqt-9uYNdr-NH8*t1O z;Gm($Tw@Ho3H)%tG_kZD8j%9vlmJUHf#6riY75NxDg(?xhGZZE3b(No z0s0Nc=z7C)$qwM+r(o`BbR|yU!@QhQ6YGm;}ORKg>CN<`@c@w>~0k# zmE**q358Lv)~nhMqdhtvV6R)mer(?5>0#0zY@ZBQK(SsA<>Lpa<(H`mOS^Z`26T(O z+G5b{;mWeg8%K@f`}RQxgH#!pHWsmwyn{Qp?%T+7>YO6;TE$)i80U}-I5s8clJu}o^m_kR3O(Q7wR zT6`L%xlR1sr=LNd4BL-3!wWERO@kanilUS7$F&pttgfEl=eUa2Dp0Sis{Q4DA~3z{ z1DR+Ba#Jw1y2xd-98cP*^T81?@2Rk#7Boloc&y$W;OoEhJ>+{gvAkG8d5J<Y{|#R=7IaaBysdf4f5 zQfUWZriK$^tbmPJTFT+_M@rZ{qw8Hct%)x|rMJ2P{kZNLv zo|H~L=bf;(F!sL_{!S|%a;1BxzlcU$-yIM&*A4=?4cI=Zj8g)#^&QkIo8+fD1Vv1j z$k{COLA{4(*W<`%bhxpNo&94Rj!IZtEa6Py7}>!Ae&d_FNM@qXf+smSS`*8K4oAAi z6sWQv{`5yV$GDQaeavz)ziBgB0VZbpN8bcz8f!3S|MvE&cbby7#Y&T&M>@VHPr1?tRGc};;nUpIpZBO{p8`KM0TS8?p&u(pQELIH)MKX}G` zWJ`hVw2pD>^=~KvsvDohrSoU;(Pz#J%hO?2lY%(MOu2%GNLu9|*XnjCwp=cvSj?NS zce^N51a+8?yvtr6Ci7F$DCr3)Zwo@3$VnLqAd)7~ZKJQ)}4AWn8?<$?wl#30L{3 zflpY_!(j%ELE3J2lF;^S-guGdh*>mxaeQ~Df*Z%nczV8vQmSi|B&o(+_4k@&uq|M> zo5ME;D`+6?g@3g00`Ipt7aTP%@2Ov4ZZ=>nN9Lt%`7RZKw(dgb5|!;R=D>1w3bcJ% zdS__J@d3qg>@cKv?oKL=N~eX4UHIZsxWTHGIy;lhuGLbYNqU|C4euf31!aoi_R>$7s);v3?b}9EnMPw?9TDHNaX$41i;5_Ym9d46^ww zt}Lf;asCMZ%intw!;BsSSn?@MG7F%I2lf@P#MRp${IxRvtis&&zBQxQroV-%mG(nBR+GmrWCvW{p&h07 z&jnT*=R6H+cTZ5`MvntPh3D{S6=yHzt*$mkiKh#|9^7~twMTc5$jqU#_DOvHQ%_-G zPQqwfsM&UYLcT<8Hkzie6;1Hx?C{qFH;`h!x+Sl{)t{~$5Ah}}JnEEsB!B;-`QK^} zsa#|&S{Sosi*SLNh$*edz=*J&I5!(y{eR=P|0%Mm7A}4IOURXVlcGb?v)u5B^id*< zQA!smk#E;t$E__2&*e)faGvO6Vi(TLbEW$V4hIXE(--+T_9ykD@-rGIaOd3zxc>5+ zw(>76mR)4Dn8c6P;BjyWABr=fH;WZ~QULP0iL=J?U10s5&S1b*e}99Ew*qG*Cr_IS zj2#z>bWre$mziXjkdS@L)r z!_H`^I=6tHXdBId;;6_CdML2`A!w3R5Oph(JiI{#AeGRzzf%C5@K@QCm_~(^(}PGz zCW}A*=w=-M^P3;R{IefN_1qa`mKV5~?_>rJj=nWH+4oK=CADOS1VwOrki5l7MCc`-Jv=!;V5z})!y*E7`4AE%Wel(+8V~OFZ z#h1_L@YKf^$b2$ZU@JO>zE=Jc{zv09_9^^ZT={n;{Ivy495ucj-m|Remqn2Oej|n7 zf3Si)2mh6F+nyomxqqh>N0SP`JDm!CKm|b86KN_+ps8Gzwf^X~q7WqP!|NQ%Lw?z( zjbP&D3T~WY9mq&+H=s$I!TOS&+Q8xScjBJX2pO9{>Nb3H5d2`a_DtAezbi=ey# zEY5>D`6IgO>vpqAM#~kqJWB6z^SLaAP!n%F=;KOy8yA-J_=%uTic$%Pm77#XMLfs++hyJR9EpeK}{!=mRHgnGL8%IytU7YvUA# zCHI{I6aL;MLfS&Uvh3al*xjvRyD>sPp2fAzIjk3U@QrW3jfYJ!Rx&M5dO{)sY9n?J z=Sc?t;4gAzyL_Jk6heg}E-Yt}J>JD1Y!_zfF#n0u!)gBvD3XcQKJn2Z=fWP2j-?>Z zA)Z>Hw$2q|DT50aDyZs_t{s|S65`}yf z^NVR4a~k8i1LU0_ehvLz8`X1)4yI+B7I+f$7~NU0^3b+< z!*XAL;{o3M&hO%x&;0@_%VglD#Q0v~k0a;viBl0smpG?VC^X;0-Mc4?zC^dRo8J;3HW|(nNU!GSY=C*Gwii6Xzx=2__eRR*zK3m9hA`?<C1`N-(`^x11=TzPihUPp77O6!EbzTEd{ zl${8FDIm68uN?{Dc{-+0&~HL~(hy|M%u7 z*1rP@err4iCZ!P2u3a3n4&;DQwA*QZ2JYUu<6efhYq=w&dyA9+Za$eOzG6A@^L7P1r}8BbWrfe^-Tx1wceXiXV%BKd$NSX z_>!e{nYg;R+@e4~|HTM384|T!997Sdu1?0f6pEMYq&>iy${2G6t_tc6Y#+7lo`G|# z^H@qf!r|^NzH_~WSV|w>@QGaJ&Ne^C6Wdj*|3CY)SMV1;zr$j8G2+0J@}1@?cQMt$ z|Mij>oOUmiR;ipFVAl6ISXKl#7T5zZDo4XTu7>xy>SkYzmXOXaQgJPzz_!0|ei5rn z84L$)oSd{cUzI~J0@;D84-HX|L8z;2wYy7awsR6RURkbjjpbRv=EaJwcJ<7(Nd@T6 z^*>}%3a#bO;Dt|q6c^7>AO-Nna@j`;;mHrEUDaweyD3j!>k~|{Ch4Z&rw|706zv4K zCZA%-WzFbq!6cRr&6(O!3sv@Ah!;$RQUs#uPQwhg=u$xGj{I+a?Hfp@hq&;uPa#cZ zIgHC067_|%3L4_f>s zDDac$6k^b$aqTjwO#=mA#E9c@n2mBiZP;egePov?Csa|%8$qO;0apvj=FK+owe_#E zIujbmCDD)H@@M$&@fd&opDp1|@n>=Mv!9|8cNVF<9@(euljvhTMBi_qU0pz-D2>KO z3e&RAR1Stzwi8#s_#eLb==dUz+skNl7SNzFa5TuFp30*iBU2L@YMAX*4%vK)tLq*G zG?}|80j}Y7prU=gi}V3{TSi*q?V`>916oUZVq=2rb}vik>vJZeL|-CnpHk$zn_Hc@U zY38HHVl6g^c%Sf`;CE?)(XYAnBRtxZa%q$nb;^<{TU?z|@QxZ?`YBxemlK6M0}-#$ zk49Thy8!ilxzoVaqen<{W$d$`;M>5b+iW(mb*@FQ{iO)7EHVMt(N_7X1n6x7G8&x; z&?-xeN43;5YV9V7hO6h3VJ19^C%3Y(0JpW>+KaPMG<=HWg* zRT|i{|5%QbUYC4uJj70Hz49_Ol$D0CI5{-fcFuiNY4zyCH<+v{dgI?gpi_XEJy+hdBZ z++rl?U_98ft^cE%gv7jkR(Fu(D!H(N)wM-jJfB4&-{%Uv!+GoujS8&4CavYcDijQV zXiRbR?f`Dq%z{GVu`ZRu1V+gvEG|>HvHth2e+MV~TWstCs%JirKk~EBqDVnCp`ZeI zkJZbAf^@pS(P(hhubTz^GkL-Ui;l<2Z(*9l+U6Z|4v(O_SdSs;R5oqc$JA20p0ujA?qpXTa++0pk2CbUoILBGm1HYFf~LU#-I z?j9nxdX++DjFoB@rT#u%fA0YC@(OOe@irdbc#kW^JXWq}qL<%pfm!ug(Dw5?P z$7*o(74)7pW{4 z7Z#8pKTXnPIB$~V>so}y9vt8#TSjRv>(grdir5&P#xW9Se*Q1LI2`MsnYP_2fL*hr z%dkcwi^F6QH8Rz1j4i}LqUU8=VQQP%1}3R#@O0}k5Dv zUa4j9qXwB9TYHZK<#?PkWkr|?;^>mtJPD;4mSUc!SF;WWtb@Mf6zD~1D_?pienGJ1 z2)M{+DACx<4X#dAc0C% z+O8wDWoX9w!S#h~!($>H0Mw%aeVL9vh&K<5_;mFI3k)9}=)G%}m5eKX zm}7ggPU!(+%a52w3e8mTo6Wv#?Z)x;@abv&?AJlmtpsXg=X8B%=UYw=a9BAJxfiPX5+ys<{>y(Q*+LidYaUQ$5F>| zeG!|N7Hxa``uBd5?JzoB3l&uNI3hPZNO4u{uY#*g0KMWa@; zzF)j}k;-7s*NgQxdXC^seg?|G{!hWzweMFnH83rTRYyh@;!3vo)Rcem{nx>o{3tgr7!*Vwo~8) zH#>_=b7zplc8?0hh}xF~KRdq5RbS_rLhfiE`T9-dkMAMX*oQuB(PAfyo}N>>()e;( zTl(_S<(f7|=A6K5tuk^f*I5dUG7DGX0GW%AP$X7L425`ohCiaVy+wPZ{U?GcDKr9w zxKP(N0Vd)63GoKCt8ASOh^3P5>SECe={!j*P5^VO-D4=X8+i6; z+l0S`c{~kbfwjA}Jv*9htd&C|#Yw|_w3=~OHxp5rX@GGl+v{wH}-IAtA*0a8W%}p zEF}84efI$di4t=2^Qf+^IeJFJ5ejW7h&TyC3|LWkJR}N=o%TWmOxvKvOp5Io7I!%h zpBf>ZcMG&6O{U5A*V|>HKzTFHaE=u8CKK!0kE7Vp`4wFl#CTuWX=y^gkp_98@_DpH zq4(0u_~;cbce6V1CqCeLfg#H+T5_KTk0-EBn?lqV+-@w9P`8WHS@Jy5RAitX$z!oAX`@2f9>zJ1r^zUv>(B0@ajKrt~hNyKI3#e@GB2CeSHwbwXd)uQG1b z>EY<0VXJmM`^Z&`IDbtyy*Y)VO98$$$YZ~sg+9oE)>UHcj^{k%4LyCY&K{c+832S7P%^Bj+>@j?#3@oH# zSW3sSmL(qDuTe>O$VMU`ciNwfPj7T5ZWm{E#OP-dZzkf?3RmX>qy(^jI$=6$cCCzY zb`l$lc+<&jFv-KkWx4YD*ui~dwDPB4Nz}$ZsWA$5vR03}tVzP&1U?0;JyT`8aJ1d! zp0Tr#r-0 zS_|io%GBH=PvR;s!xe`HkB=``E7;rF#cm^kl~fN`b7ZXI{(3GW;m<$LszTtkh_a=c?7Vq5Fr=ciYHBl##$$+EnXyP4va}Uj#0La9>FZCTog-N zwH_77EH>BYImUJoZ|~u2FEy#$P|;JlEUhQtEd}eF`L8^P;mpc9)+&Act?$S1Z~jk* zczsuWB_)pa6z(K*S625Mg-PK)6lT)}A8j!doN#rrhrPoRSD7Ug^Q5ULYgaw0nPbym zpfYe3)rDnjoaKDJkU)hi8Qs>|r!uLVDb*d;B>}wO#)QJX33yXn);HGXiiSe(;9WAK zI$M_XFaB|S`7@VL)H6&?zEJF`!ypL%3dato!UU}Nvh8=0*#rWWX^c~j?UUspu|Q5D z4W%$ME(96)#M)KU9LeUwD&5b~DA0d8D1edCj}Qzmh6i`H@a~)M;qoUxfvjDm<-!eU z>Dv?&1v;elmWJ(8S>Ld5b3a$9vH}AP8b^4r+ry|hhx(|9!uS{+D!Z|45t(wC^jrg4 z{b@W&gW38-GV|b^Gf0oYlVYbuXIbf4-vY9E@}SExq?xJYxz=R~@{1%DeC-bD?v-(x zbEN1VlW8ysCr3pNQOua0FTd8WJm-+SpkF6_UBbCl4ndT_2S@l)@w@oq3zu>6na?1vyV^5lYJpW$mp5^Ka~aPsay1;gg~8D-9@eP2 z#B-eV(%4yQ(o)e>HD`On8a|@%SZ9OIQSK&)yT`o0c9OucYRh=nv<_Fc9JcC^)9AUT za(T!d@C?-;-D>b0(wo?oER-+6|iJoqC< zqW0LXTwr@~z$o0I+2bgkrPwU$3tYg_NgGWRP_1OJT#DgxWgq|h*B)Y+$g*oK1DEhL za8eHk$N24+_wYY{qlMpjoozvUd)~=5ut{%uY9#o~2@_YeQBT7ZeFmN!%uxGR|L@|U zR$%{B?J91UgHk!e(osoXpe}ZvtBtG3S5~pOHcw?hU-V0%JQqhkuk#!f-{jg!GGX1; zX|_yyjC77ny1-Qk+p0(fqEJq9oN-am?$8{dbF#yFvte`VxbWOp@N>_t_&KRIVKG!F zIehhXiBE?LNVzKEHEk)gy~lBb$06Vv$U`(`t;aCa*9Bc#HMg!k*JG>TpAyjSrEcXM zB2VTU!1dqba5{XZbc|Dchdko#A78i2saDT#`11I8{z-A4eqP;!=&BC1^O*$ZicSf& zoeTaIs37UUSCfmVgIXJdTp6jt9F^TYdlcG97VI&@RB-q<4`6u*h(ttjl*YS$5=`oC zW8LMobV%izb2#xFl_?6zG*@L(af~MMbPfRRkzKJXNU)xEn2T|uD7^HLvWP6B$DeR7 zNvM-+ApUcX-T1v%@rmLtO3OMV7g7^wxm1LZ%)=!76r2u^`lD_wh?C&dLP8KeYo%G+*$hM8?9@ITtc z&c&u-eMPAL3^| z`xz9u@*3zu8%`>F{!c_Z5XhBQj!MDm>H@A-n)q1i7CL)7xKpFR%jio-EIBJqvX2=x z(pC?+mW^X;5X0X;23q1Q{10iO;0A-jy%FxjZ72r88Q5ij;8Q9o0b|{(aI6b_97SCq zG;H;4C&2DywgKu}R_<{eE5~~{-(f*5lyRY7`C}`4G63Dq7&n2=Fr(w*14Nt_ryt>_ z(wrnTZUNy|J{>aQo}SOM@Ol(L8Hi$mN&s=xx1y{5Qon@?PHG+UQR8^`B+i5R^+P&h zTn~&w+ZFTWV>YK2xTVT=Z~_>IEAeSe({b-$;(G2%G4 zTx9q$zWx38aQ}pLiU_0t)&@RQMc3;+`m>!It@_oE7ERmNc}l~LN>Ajchbe)_Ae2XW zYQGFr0%~mFJ+Kf`#gT;lOM;qwW6DE zu2Bp^tF|~^b-`4H!rw0NQPEU3+7s-k`w3uiMqdu~N6dCK^bLK1dvrycgI-3&XN0bR zX-6E7-3}SMUb%`Cz*|p-NMtCtK;(~)8u;;dU%}>6Poq$wR%Ij|f-Z0AHak?5!wr2A zLc*h&FLEVF1PJvK;F*bb@9>y<%+NukCZJ0l$b?sxFfE1buL>8r2NrksEeo0Rz!oDPrrCvJ17 zmK$9)}+cGkhL%- zINlvgW{~V2BhhbhW!2}3ugEf)HezJ*#T<@yj;!5(rqW;t)1~@IoV`Ui1(iB@0&dWc ziTmU2k7ASvANS!eiCK>Be-bw7G~Zqt&;7vwuO0SrJ#iW3r=Rz$E~N_XEA*J%pHSfH zVlLgM5)i}o2^k8x%+<5=_Q~qny|?hK_w~rd^-aik7DUj~^+MmWnEWtIPIC!d1wz3{;ECnPlY5l+(WIACgWT(B_NDRnV<+eBVaj|#aKHfC3=@QWzKLwT_hL2 zM)NeyGaUaGLS)dR?2V zAwPjz0c-VNs!;fI99y*7$D>WLZ5BrZW?&K=i63zsgc||Fgbt4}#IvNVIrLegdMhfY z6)?gC9?!z&c2Ps}8pPFGF`yFa7KfamdBfuslT4R@6dbxSE|# z&$;d3pp2A)A&t#MpXY;{HB{gEA+9`2Au7V5wBDKpau5rDJkn8{!fAg1g}c<0eN?ov zx}0gjkCOmuJIcP+do?@zWaErMT8#h3%OhO;?4QEsm8VSj+p0`S_$S)-`l|XYl+$H4 z1qErIJUqZbLRUf;9oJ-HmxfYPlUp~CbvT&^vSVqSPy{IhjeoVB-NYutY3kf;STkyA zXWM6ILjmY$CbRY}fg_#tXC7Q!>H|;CPyv{4-@qr%6j5EhY{Fj`z-YoLPy6y5$;hoO zZpldtq579Dt)hDIQ@H%})A);@>*1@(-$U!hYv}4Zkra)w?h>HDl5r)*F*QTk0?{QQ zN8ik((B|(Qo}l*fO~iiihq(Oi@8j~@zk~E^e}Mk}0gFf+|Ei*|x-(3t^3DADI$(~g znK}R6aQ>LWMBz82pc~X$uus^se7bmPzJ36I^vQub&%vDBpE{#%|gDKG`b2vf!Xcv1A_wn}46Eu5%=YV-;Vglaw0?QR6p{3xf!Ogb1EugeS|zUP=GQ8Cy}M{PK90!+5^E1w z=B^4)+^A8-hIn+CLnop4#TDjqaq)6TAjDadxt63iD4t>zJ<63Z_l# z+JJ*_r=?4(Sa#x7(|Utq%(0a~y7uSFXq-ied%x;G$=lM&KlS}& z@M%5>`>|;6F+aywe8_S61|HtOgS$IgWjM|n75*+oux0#TD7ymLK2o5yi5ufwbVlRG zjU5}_bjODoG>_XRpp-UNIFF5ubu3r(?BAhIfF8YqDdArzarLTaoj%+-qTo{6?+lSC zSg_Jrde{Ei<{wZAP@qMHI?t3~BpZY}}>rXU`fB$&}`(b63$gI<)viWdXx{ z1;ySTrxVk7nokDT?@t74tEqDWatGrfc%OOH#g#4Rt6xn}iAqp#vwmWD0pz5FPjW2v z8=PyU0S@zh)MI`0PkI<1an1Mb>D;ds6jN-Q*ND0LN1MDi{rrNvIC*%OR@0|Qs|D;oR?ZbyH0L; zB_JRgAu?RMGEufkKiQfr&M)Oe+KAz^6ZPC*D}Q~~x6h2F1eoxrtXJhelDLnR^B-Z| z*&!7EVVm6N=zk@cL{4nR32|dc@eK0Im#GN6fG>V>9e?e)>zIH4x6$0MdnG{k3J{;T zK?!iLcPIy+OUS^0ar8HDJVf*5ck!=nZsULZ3+M1({`yn+kN@a8{p@lj*E6)M_=0N_ot2LP6VaV$j^d-u;Jo z>%F?|28hw=!k}!{ZCM9!`M6B23>M%`)af0vhM5Y6g?Ss#i8kxoJZ6M%E1I?QYZy~G zd8NixNs(G{^^r@+vKtsJ{#eDvxLZ48N@B=dzaIvMMi?;tYrP5@r41}yd3sj(6Q;E! zlV^MB?TW)*0&Tr8%&_GGhavHI>pdLzvp9GD9Ing{tUV@FA`|Y(;K!rk#kd0E98`J| zh!n*@-cvyyJ~-wBf#`lwNoiF-MT-=5|BHYQ*6G43(X%>- z4lrAf%Vq|kx$KP%PD$HFk3vZ5tjEA8Ov%_d)?M{a0PvOu>y4 zfr1NqH{M6fFX4ZO!e0xoAX%iYr1NFAV*!m?-SA_J8_4L|*=~dMl&PUkie?b;$T<@i zg%I%pNFivUHNbjJyUt^5t;Lbw%phx*VktIYsc;;Vv{UUk>YX0y)d5bpyl*7AV&?ei zk!SV~yXZaapm(E*(YtNLZ+4NrH$Y`OhJ}MTN>m&&ZSmVN1`i%_!RcgFkOK~U!$rZ` zI+!U;(>OToe-aoD`=EJ}L}!-*P_&J{1HCOa)}c%vrjotRIxH?cjq%y@zWZEGHYY=w zCj2G%oiz)LE9H@HlCN_t82=X#SK}-m?%d}X%HFTW@cIYmFVodORb%6sW z2yRUVJ^wU(GUOiVbg1pv%Aal%K#a6)3Zoa0n{Mn@;;Z5<$fbc6*^00-b~u+CEv@`@FjK1@jl%$smn)JP!F;np9|9_qBbZLb%>})tJxyIO4?(vfTdr3Y)!Xl+Rk5Sms6n66YClS-@tY-@y^2r zl>qrYuh5S->3os=*uBXC?R-==km{W<%HcZ`h0}glHkX@VHhvl&0iQrS84VV8rwY8k zmcr;<7Da|@%Ri)a)v(csr@ZV!jWKH8ZvI&8D!0cxO9(Cgx)(?Pr6bLW{3 z+vwkKBKB?zg*SRweK&^nEeg6idF}Bw7M8-{V^>e>a|>{O!K5e=W5ZJJ0P=h1PX^}0 zKC)ea+e&zyE#`^t@H7kB$`6)D|qQMB)oyUb?N(e3^Tr%GbD-pN9bIi~UhDoe`8 z1$&z^J8YMmU{wU&K`@@gv*>UoKdCrvWoWSs49b8aOaV|03_(I#0^if7dqf-y<46M4e!~=86XE3gY*M%&BAzAxz0I#$U?3q`9P=CGGX_G&I z@`+?+q@sR#jE)bC#EH4;I{@kfUugcZ->3v+3S|o463Qi=x#&?icaZGw7!YVH_@u=s$#u3ItvavWUqS1ITit+4qx%9 zaJ1c}S;=?;^XVZD52#tE%IIh2@N-wnh>ci}Nov|NgiqzdXkq55<^HSBR&=2xHp|+H zaM3>v2=&9ze_B$}lIbH$@%GEOb!QiQ$2vGf2nZp=sPP~aV*&h;JxxOgP4FtR)u`j- znElRvNR+PPEc?6?ZvLAflHqrBtEMg{(zVr*$BcqV-X97dgcoSZrm#io3iOSLh#Uce)fH4pij57q3zdX=U$mnZK?rmgbhqma%&7DxQDt z8T@MM`xx)sBSR1^UoQUXKMF3+VqDaMzRnh1$va4};m@S>+MmO8?|^#YZwEh4r6Agb z=4oO9JdOj^)q!>Zv@(zq5Xx>_LCK7r49*wz1vM!FePj}Cd3X~)euGLtE2;$O zz)>V~<>&K!%<#t<;j7PB1`5n!USH9plGkfs+&*T!u*saNRdlKYymRweP;vc$I>vGT zM4yVCM!VFmwyt+01Dbg|@_sBb>SAt;L8pPkJ@@EEsSMwFrodp;RRXBii=#c%Gw2wW z$uqmH0Xhk4_U!~d@v-wL#HdmlN=1Hk+G3(t^_#o;G=h)kO_$~{`xy6piu6&ZK|AIwX zA9&D~yzUy%Wl`?lktfi6tdhbxZ9W7h>B(yn33R*KqIDs9%Ohk--t8U(uyZZQH?Ve( z^p1LfX>N2qRyGelt-x;T?Dnxk1z>S~nZb?=2$~fB*=)}70L>jEKAp<}Y~Jv{ML}|J zI|zRvI}_?4+d^dXCrzQ>I_7Gb^Ld=ntJQ|3pU2^JrXHgG^f<0(l1KUyp_C&~Bt+IHtl}%f-ypv$P8_Y|jHXDL3C+9pl0L zh|0hao%jF;%_cVIL|^<@4WPcYhTuQ>A8nb5>>=i~%yPN#@TY&tCZq8fIQ&^)8#AB5 zD23y@8ZSyri*sSv9I80Mp3x@QPXO1Z z_9L52Y&@^mctlsg92i%L_fbu%b$oKh$I0|`g7YUqAblEU!kAsiG3)~9(Tv({lAcOl zJe@La~tGxEUgs?6Q2j=@ zpfA*=?2t~fb&OHJO~I@&!BMbL#Zm4&-g%=GA>&dDj+uQHmCWYnR4i0pImGX5c)+SR3p;Q3aAA0z;+hz`=Q`WVl45=NSP*J9W zc;OPx6*(q60sEbled6%o#|uIH`oI3&ZTvUiIMfFM38!(N1R?eRPrxE1V_n4R-@_X> z8fbQPakdMO!iSfXu{Jk?kAE8bY@gi+Z(GPXy@X+ISSm(p?pucHg$x(cKVAWy4qhoLeo)Bz7 zoajDtiGMDOal0L2QFOgcGBc3_)*KA^IAB=ELK14g9wEQ zXlHS##eg0Ku#G2VBk-iKDLAShj&lk;ayp*CV&10@1mvZWrHg=)w|Y2g^l<;&2%~HQ z11>uHG~ILpZTj0enWULkE`?S;iDn^=W)V1`u)n=N!u9h5ynAkl!+IAh<&<6O#U@9S zrrwR=r~~Y^LFGG!hYjG~@d$U0MtJ{ljCc0Nxc+E_H@Am)^Wgw*Z4GdJyN~yF+SoqQ zqX!)hb;`pN8#q)b3at0RJ<5R&!&Pri{!w#4dFbUUgWugCtF-xMXczz4~ZjeC6Vc{5EsY$SX-gSJE5aEtxUa#pcPlvsfY%mW!RAk zVNM!Ne#L1en=LO{x);tSu=C^Zbhlt;B0|e)!C@w%vu0bpEVyupyN7BhqMwqA@>0SIG zn{8yf0o~3C4qIsyOF4ThKxt*{T!GSu{31p8Ku~tf%j(bJ-@|d+klU z^e7u?*Fftu#o5p1Yp_}JBDtGke8Yb#re5#7=6?&){w)prwG z-Zt=_nXm{<%6b~%RIsiE)*DUXW&erHvz?t@VBDi>; zTvbJrLjLZ}hZx3Fs4mS}o{Fd))Q~R}kg+cTsvne}5_*t3GzRBQoq|#e9QWtIgbF>g z0&3zgOx+l$??i_y9p=nm}a-)h@TXT4=IgdBm3%K5%$2+}wyxU#I`~4-{?k?iqaE1J1 z6SoKFaC>+jH~Z)DZtpx^Z=J&rYODCpUKv}B7|!LJNNacZ@n&(Liu)EBa8aTqb#8%! zi;dB_QM0!I^q5hK=I_3>iG|O740*~ddt7Va37f^ANIo`ZJUHxtE1My-2YW{xt7Bx> zbS3a47>Q3j{cA7wb<&QF8V>Y1QR+ykQ}mob`k^iea`B$FhcGy|c4}NH3^3+k9xtpQ zUdj?tl@u0#97!g~;jQ=Y;w#UcF`@53TC~%^9carn<`e+S%V!we#Eq6AL<{t8xegeX zD-}GqMq%>c4gC0x9VB(4Qc{n|!@IW;+dsr#{v3t z#_>Df$9uO~kWH>cIoaH9hL9#d2EirU1cPpP=uqn>ev0k$Q7Qmd7v;%#J&R0`=>=wB z>HW{t9f8w+K{V`Cyye9}4K`chMB?pPBgcYPKdJNx*}b=5ae)#ZpQieWH+N*kK}z8`SupPx0pz%#mTd zzSH2!VgU<_C5DiY3MMlF7pCmBT9cqYR~&F|a5ceV^*Ql3R;yS|G|1nE$`RY(CDX-z2)|H?~mgtzd02oMVY#SfQOim{|xR z8gB_INnbT^f4WQqU@AEBXviK-Ue~yaS8No4eh99bMC-o=wD$x4k4D{NwgYWy#Mws zl$Pc>*YZX~3_ZIn=5$zhIVuU2zZOp9bi z^Vl7%JzC2ML>foVPA!f~g>Bs!qIJu?2_;@!<67t+-CV|}{>(3NENa(U z^rDHqI})U@sCN=+mP_A1s-t_-M|NY$c(y?d_egV2ir00006O#arA8v=rL6_w(=j z`JI{FIkR@{nc3OB*8YC^y9*%HP*GO_ApHXm5)T0IcMqVV9OC8-0BCCixBvhECIA_U z0D%0Dq5lhPNQD36#Q*re(g1*>otL-Q|6)T2J1<5pHzj38K|y}NUj#rAfP(xV{)iWfK8YQ(FGh?YX-2t1JIlzD z0VdhC{hpBD4KP-b94cI4=-=VMN)ac5HL4`KoXHko)JZ9(>=;>x z1q~S;34nq5FISZafP{klPc9lN67qimG zi-G}}eXO4l5ZZxJF}h5yD9kEi=)ZsacN2h%^3M(t3K8Hn;Dss%sute{lQl=LWzbT0 zrB!;kR3wYGlIj zG3s7Y4XB9tHrL@wbS*7Mk;8HkyPPocpa7Hr@xH=-_)=j&o74Q|=Rv6a>t5O%3AHuE zN9+c*GX-hb#Q}f(a@kLZoXf<3A*_R>OJ@S&3;f{pK+=OT^0^t)8Qb&unU)oEX48G2 zv(;veg1p zEn){FE=h>3)v0&t7iuzF@fTQy(4@o`ni51z&msT+(*^_!Ug} z1`5~L5A(fPp&c4h9%NRnSs5G6v(q+Ki*Cy@x)2=v=6UNM?~ypumgw$7hN8uSWD;6w z%L#N3-20+Jen*ozm)ilL#LV=5|KI~2dRZ;}F4|H6l3%$RpW*jpNzZ%Kw(+^q|EVZl z>Csq%NB}~v*@k@gZH{Ad=-)opkU4yiK4WpDUL>etTq#>U*m_Pzidg55y11xknf%yE zPx8k#|MF$x@xvx@m&aFDBeL4lU`&jiFJghEzpMS!9%HY{EzqYoKc>^)ZN8q}2_^W0 zG~1`tR12HsU95z?5Yk@}ZZ|9(?CdI&{d}a{BxM zHuSP}1nW!8=4&w!p)h%U$1yfGU6W`6-y-o%Sfq$2F;Qd0PIq-i0Ysz7&;M$c+PPe1Z&*U=o?LztelJ zA9S42L>k!*!Vpp~J8jVKwiY_5zJ0Y^I z-SCU9o?G3h7<7L@QRJxIfwHFHdnA7>O<`WKjS`TMKox#DvQ;VG^U=^Q00M=o;i6&I zD#CGCJs~fOtGdD3(hY_RLs%En3o`fPSESckpFK$RUAbyXxr5TilFH}M3blnZ38AcH zjb*ipY2TbOs19D{KeXdOiXB*+OCf6@_;zaK^{;}$@kAbUp z$R0Vh(D8hg#kSBfdlsa#XN}Fmo!pyKiHwGH3(;dJB)#u(uq$<{E-z9P!69={N$!6l zpp^;zm~#j7>-&(gb35izd|=++Nj)M@6W5ElIJ6YI*_w8(fRe9mby%1MuYzYlK?$u9lVhcl2`CPEK zyYr_S;tIY$-vWakE?$p@nJzx;Wz!`MV38smGN3Ak4!B;M%;aw z(a(M!kE+q7Q{7|NMM-PS*-ppN%x>#H(2PZnAl`-AOvfa?0rixe<%~__W z#tCuTQ{JIX6oV9P6gqT()t7jaff>hiW3?}Vj$Y9Zko%L3gkJ&gLlO$z=kW~W0!W30 zYa7;K;YXTegi^-nMufY=Pj_ij;<%^GedddVlz1|czV{3A(%4QtmFOa5*2TKN>;?i0 zovA#lOmpC@>aI%-Vq9P!s(QF$qL=c#z@I|r^yswLYw{IqkYBm00nNfIL=BoFGW*I( zi~NnM#@pg*(owG&D0liO)*D$YM&U$|RlFd`4RdMkM)IwnLJK^oJ8ZF3NQJ=Wrgn$_ zd9DNYr$Bm)FTu&g_H%b)zAiE5VjAT|EBE2!T7NIhqvslLbw5q+bP(%?R9vo4o>Z^a zszdD(p5D*{(t*(q5ZL7%;f{J)_E~T`CYevi*|N{zfneg_mF0f(KSKW?q^>%OI~3N+ zJ-cYRTN5|H+UwfB+2gT$sOzcbk1Aj`8NDB^c8gDYCKd&3y1-zealQ-33ZDAf7vLWf zoy5K99Z$Z{rBY7ju@<3c9cuh=q_gW|<4vs*B%{>;Dvn)nJUO=+b$sry5!~7{x^EUFdK8Q+H_h1zU z>7L42!bP}9J@~71dytO;Mp~tJ@&)OE`EHNR>_g9_*1lAt*KhgWqaTcJx>^$6XatA4 z*3;bNXP!~Ro$`4tR$#$jA9G(|kNBL;zbaq-1x$4QVsY$UAl^1G3UgJLRnMX}w*G+X zJC>U*Q`dI%3`Ov^f5W|1mV;_|));}^05#W5RM9}VXV7|a;Al8Py5;F`)0zC(_SAiK z@4NV)kOkdYics~-TUm#KWtJx2)0>s{jKOe@fT`TNGC&7s+rG4~j8BeZ4?VXbV`e@j z{gR%v5TXO`+u+DA{72qG5#(F$-xY#ubc0Q5LLpMx26oxT)JR94(8 zdT^F6jA8a}EKZ=i^VrMA>&?QYZKfb}t7FiYuo_&}460+KHpP8w-2=j@Zhxva?eu9z z5ohC9uU3@{DzIZtpxll8sjzO8JDHB{b3!XW)hc1Cp0AvJ8^!--W1{CulB=TNL8XE7n$pQX5&D}gM;$wF*(d0SLD~CM722(7Yfk?&V?MN+;DB$7+uV?+ ztKo&9*&NL`HD|~L5dkl-4dM7x^}hhFQl;m5S;Ij-Q&qV?Stw4jt@*&aCMOncK2O|~ zqcN%Ra#(7Edb5bd3kB~4O4QEDs?lOB;d8cK|;sIlzk%#@?v|# z`#qG-F+g9KN$UYS7T>~&CX3-NVbGDHb(gpS_DsjSroJ7);Y;_$RKk_SG`f5~H=dx~ zoXSOFJj{ER7BP?qo3OD$8mGCDSj4DyAZ|-RvQf9abN$wp;jRDo7831{UF;U{yuMmeWnklwPdz^fvZf^T?z4# zNgRIWKO&j(nQ>)tUNwps&8ne-9(h5$kT2NhTtny!_5#6n%;#WRb7e*_Eo~6>{mrPA zEBC^d==zcCADTF8bg~d9h}ZXdIT}9!29ERl(eOO_wLdNB#;U6i1O(f$F$Y6E>L61G z^FT|*fJI<6-&Uk}GNG}1!)W+QRhMi^JAB$T;&uO?)9gGcE4czGK6f?J zgq8OoDM`;GTATrEv?eb;xS&{=@^Hp+8<*_UG!?3uUOxVskB0<0=N?pDD|8M`M{IRflW)G;_BZm2#|%VO<(Y zyT;T}_=w01`RYqL3RzC^EM2e-M6ayk>IygXvZ_9y6C=!Hggskl^=&Mez-xJsGYPyne8HATRxH%z=tI|_c95cVsHCx?AnxEt&L|mUoxL~p=nw}Y(G@#N zOCC!ZNx}T$9#TS2sY_eGH4b!_hS<1XukL9Q&l&31Fbh=qdP)*%JPX)mnJsh@)kFEQ z7m0Ppu)N6IJaLY;>#s*^T?nUl-Q%K1nap^t^1REpL@uV>;?2{9llUxoHx1%^P!|Ix zE3;!bN5MtnDXIYw+*bzbR^8`QOVbK{Mq6J+o8h=Rdj9v?>NN2Jm*oHv-4-#fzkt~p z6zpi#RPh5bwCD=rp!Uk3Rxc@n)8@%+vVF;uv`Hih^0uzD@n2$uk^H<59U1^6Md-)< zI%?ZI9$VYVvQ{rbU8Rs4Ftb% zHCoq=;V2HyBwOq#%MQ4l#`6LIJ5$Sy3eez}E!68iE|X-Xe&e5|Q;yy*G>+CDja7>D zY8DNRdD-s9a%#Jc{~IhUPU9!Ts+rU(2}3aYr&}7k_9k3?ZWVg@Dao=4I1p z(uEl&PQunrq=so@t?+lHvB;ip<`yIoJKS`x=GptF%z)jZ_d4MvUF8MQ1 zHqYgaGqE#VtS=RDMM1MEuqn>*n=>(qFH}*gDuL!?8t)peOXq9l*ScZ&M~@SGuPHk*5`d!!t}yTE_DG z`TF7GQFi8sc}5qS(N1oNUK-vRA_h7}H#Ug~QYYNp1libpMC;lePii(>JA=lQ`g||qZ3*oz!LpA*iW=$mFV%z23OVBhgZT+v@2%&f?n{n(x37Z z63n+uL^f~1b2`7|&7F&xN>Hu|RW#^bO3#I{6`S|(^%bN;FBFH^+AcfWss@O$!03mq zwi#G}0(o}1h$nRny}Ln~A&M4vs(g(EHMId-^Uy`@k_)z1dGbg?8dPCePg2YkzU%7F zp93nqwCPW70pxtL@Lpxyr}>#%{u_2Z#&dV|BfpBOyX#mS0n0Id_nCB1bUM!Xo{Ry{ z=elQZ-O-H+{dQStYYBY^;bvZUR{kq&MT_>Ru}QDVn0>4>=4?T(eX#i|8Mjq4`Eyc@ zIoO?sJDGBESBWP#eTsYMjYfvJ*R_~BQnjn(`&s;=#@7^%&>toIV&f{+Q6FGV6K)`~ z_WoIOsiK|}={oL1()}U%)sy$lmyX&Un|-WgXzG>N0c5`?0lx7t{<9T!$|2tb>_gu% zmbr)srOp;|DMVz7qLE$cT%WLi$ME;?$tn;lhx*NEQ*K^-CM8wIp`iwTW$P4vaBt@v zb5%t*O#^!6^EH6G$3#NCo3(j=+pwtl;E?vg>lWk9y1=b~r*49HiZ*YL|LhXiSJpS; zSR5j#K@1Gm;_c<3=LekPZu-LbB0kcpmP|u^T~K@WByBvE7cs!=aY?(P=MgJHqp2)d5CV)cEUwc-G7c=Iy;}vntY#-VEamOI@w0=mqcbP+?twQlI^2lC z(@UP^aE}wTMvcAnKBS;bWz=iNRK+;O;S~(TS%AI-{!oaT)b3jS`W~R}Kr0dZx6yJ( zcpRUNj~8#+Y5f%=!ulpcI$Quqm1()r6?8ibB!0hgIpGv@Ry&rULK|$^XvbAqm|xg` z2iCxTK)V^;vvbHrB-{0>K_K;dNWjy#A`=6Lg#7goQ> zcOxol_sgJtS4mKe#Lu%`e^76N#z!y#y>#=&? z(Jbm`&K9PlR^rw0x;d~zN8AxyS0}HXM-(}^qC$c1tC<3c(TeQHg5kbb zaKE`s?VRnL&g=%;^x%xi?VvR7?|A(Cxmz_6+28upIW&sf*n{i#21V2uf@n3TX$Q%x zb|!zI%=*Z&@8e5>rp-_ZcIL7A0IRA34JZg5i~~r+MFO1$nGDf|7h-)fo&)u$#41Ed z79sD~=inj%k=!}{_K}-a3>Xzp9oZjZx8L%fBZYqlO&83RBfih!rr?THBU(Qcmr57V z!ct@w=;Y#2;?(Z-#Z7|XO@%pEN#4wgn>zZv`>J6L(Uy&(i!k|PFE(^bjX4!`Cx99) zi~V-)l~Kh#8D%+X3U-t2oi3kDe9iuvdau6`%b$(&ALnB#Pm67Cgk;hn9SjPsPo&p{ zp_M#Pye7=L8tw(#Pb!81cDCBx6XCVhu3tx^hJ2YkUVJ2`L1!|uj)##fUOQJqDHeUq zA@z#dA}0r9#7e0&3Eq4M#^J2^p0<1xcY(SHHvd;-eqD+;HlA z)bg8P!RgPV9zz2I)kpz&p8@yS&!k;(?9~U#zKNsWnIq+`DoNt8v~Kg41HvQG6>XoK zApXkoO=tIlPHN-iGe}qZW|l)sv0;)29?XBtW&HYER;Lwjabw{d`t)ieBv|HX?cEsu znZR7jmF5C{74%-1`*+vG2?oatT~nHi)Nu+oHeN({;Fzqe)u+(F+HVoZ)6)8V?|IuD z3_~R|RimysPgZaC>Vr&qV_ms|{AJ#e)Kh<0z!i`F86zlFs z{shQ_@=rWW-IGcNL*QUkU0?=+xe}d0*rndOk~m5I4fcUxYd^JlMoy-s_-IbqHrG}+ zMhJvMO0IS@q==|9GR;AnG_n%OgO8Zh1n)_Rr1zOeJcZQ$H|nQ5b_QBrZMRX%iLW6d zo(P=D8VRJ9cwX6?NTJ` zkjT3!FQ$}x)NI6$6sOe&3a^YU+O>wd5BAQ7##WQBpP(kaP7EchjTRaE%9|pD$0d)V zGbi+GZ}BcEp*xK`BxCC58)A2#MrAT_!?ySCs#iwUJ%pEwg6^8^fxN z236E352bBsbM#!yadXNb`F)?Mfw&XTbSa9|j~d#p8bn>CC<^@#DMZu$pu$4ot~qDH zEd>3(>E6zYa^`BP4vF9J>*-9a_CZd%QLuE_{el$k?@HwIkO*HeaD0|08iPq$TZCQy zVUM>UxQRIoTC44&{Gfc)jK)tiZlF<9wwfm!C=k=O);L-aw(B%!@!dE^q-Ie4AkGwt zwNV9BjgCH3`|{=!88t~ArGE&f)R)O)ClK9emh%_&rTW{yfE;S7OPgSjov?|%C&Arx zy+I?~yVaZM9r`Jg?R3_9?QBTrjTPUzL(1x>sog{sg^C6M|ozpgmJQ^ysom z?A2i)1mw4v#|qORr>GgvYh9)*(bSGsNE*FNA_-nSMRJ9XjDOy@#mjG2R;1cN;jx0> z1vh8>a~JHmstxv3mQzPH-fG8*=6B@nOq$xxxT*X~FNqr?d&TF^^>rGGXj4bTP-8_) zOVbeKU!nVYv2{CZp6QuEv-mI+5lI8@tS`)UP&VBj-`-K+f#mBSpMO7%(vD@Rhm(9g zy5{_tzzI}Z@^Yx138!g$*aKg92jfB&S{BhcJLG%RY#LzSRiF9)9Bu7LeHRr%;t6vP z{4s1DG|jG#!GE|EC%NQRhW<`E^7Sd%;$BY6cT>M(T7uc#pa93>BhQ`Qr&(WXmSc$< z8h?7bcj%zPl!_Yz|0n-wlpiK1TAa{_W1DI@h(j=IOf_}E*?RW*_4r0Y6~#j`ZJm~Z zG5X$dGVI)&mVE|Sf5F3F)hIlGw=Z!nuJsX)DhbVagV&hsD-T=@92?`4&9JsBF;V9| z;$TuT338GQ!S-Fwd&fH%CkTT$CUL2o81s(ER}|or9ccOHaCZXJ>pAX8?KE&BflC|H z6|88Z&t=~$tx?XW(#vZ#RD?cvg)iJp*oqpC(htltwI?haqSEE{D?bcwE0>LlX~@C?3b5l3GpRd8HzN9cnBIK$yw4)n%l~{w zIaw-`XIaS5F(L>)_4@!^y>{^kd%lBiIJb9&qT3MMfAT1HWqtG2vqMda+C~BcGOmge zW6jW@Utj4ucT+PmcQn%t&1s3M?uiGQ>}>(WPcZN_4h7iVSkyMM(T?-ehh4aT0Oq7fKiqHHyO+4&9~oFUyM^G)DE`z+ z0xKQd*Xl&v_oZtVSn5HHNeoZE@N-$eHkc6iqs3s#J2qCYS%yrVlf3s+apEg1 z(&K~enFwh^RTX7mtkhdsV%~JKDuuH?bCvFT>s&_*NBrj?^02peBFqP_EZs^c}GX z7nA>>!+RGNWXnU9`oZdhQ?DTPNlQ&}9NziYt=|Z@IbWwyfe~|Kski4w!oAvrtZRNN zSgU*Q5s41+FjR)O#6Z_&Dz$p zC2{o={vuc6$F5fXQPn1U)NSuwFM!zZHTF;?=>3IX_KtBT^N6`#Iii24TA?S;voAk& zF&^Y_1%J9`pmIFsVrg?_N@=M0C8gfVU}%W}QS@dWtqKh&JBwcz+ejGn{bIG%wO352 z&ABtD%OGa%(Cmwp-2kRCFhnx74d!Q;N0^)BwFc>NxWtva*Nu`GewEC%MMi0n^7n5; z2B(b8>JJC)ktu9s<-ejjz_?J#Q#E6Jb)teiF{dmU2T~{k4Fwslc zr%(iwt8?63`1X0TWKuv@`~_-A>84(FQ4I{XORiHCs!E*qt`lX+rCvTiSYFk40yF=+I~lkR$q7rR6a*6wCKx8p$Rm> zxqExQy5YWK9q&@Ndiy5bM=q=zWSFR8_ln2Sgm~k~aE=u|_*$sf4fr$2?p^5?!us%W zeZ%u&qIey$<#Myg=1M5f= zyyL%W|Ay&BggR!dla7L^8`W*2g_7#EfR)_pam36@f5^gF21Y>AX7QXDkxrsbCz{Y7 z&sm;x`+@0}i&n<;MRnBjgH~d$4|D=0e%opr*5T65eFIso$a2zL+OXOvHFKgbishEO(JS&=Jt8NvJS>t{r#=oWm-*D!6wA)@N8I6(5H`teb(2Y} zUW|5eOR82MlF0dj9S67O2D&hGwVY9jCF{oCf=-OjaN|Iw8QmBwo#-7F#k-wTx2YWN zSW}#%!W@QFZ@!5NG-v79ZGCO#WD0aAU%8!Nd#GDcjf(W_IMuWTnk;4INQPZcl?m13 zO6TQwF;x^@DGr*t?gaCF5TUFHO`HWffcQayJkny+4w?fwWgR8?abM@l+9)()6b~{U zp|b*+Tyuo4^PA1H$(9q5iOhKt=q)OD1nbdbvsjWwWTG7({R~oU{Wx2Rw9r1nP}pa8 zH&JGZSAWzjJ?uL*@zcIFq`zKQH~m@qqNixl!G30OHUSyx^GIZ;rXZPWhyAqq;<^kDNNIzc3tmYl_5fb)yD3$z4G$Q14E#9 z1~1j0ei{4)oFc0ObFN^-9GHgHy3Uw`gMsnYHO6w0z8Q$t;LfnK-e9a%1OA1$8CQOZ zqd9{L37JHgW}4yrmV|9{SDSehV!f1lulaMYkY*Hbe)8Mw6ea%sL#C~&AlHv>Bc(?( z29bTAFXO<3Qr4vhG@A~xwu(ALaK z0daIbT4KcuDx%DYI^wlwR8ytOLX$t~d%DNyq>23O%zgcCWW{o-+)Y#y44b^$!nY_TEpIkn`WxY{Mg!v zfO0FCsfK;9pV#O;R&C+_F8IAAw5)sUJz00W)3Fn@#vU!GAYyL(y~h42Wb+_5)R@;~ zqvYwKrMt%PzapWB7X;KRkkP-Ku3=ywa+}P2spo!?8rl@^E(@q;! zO;S`;=`*LJ@uud6b*K0uGjaO=EqCJqo@kFvr)`+)4491ETdwreZ|?0?2V&PFQ#1f2E?Sy3nekx)Gxx z8c80neb%GdrBWULDn z;l5_rm|9eEgc&NBg@n*E4DRM7Rrf3q$mmCq`ikRC6jgQN#-u#WehBXv{{t;6|HCHz zcJFcbDCZ$R4`Pyafr81Hgcxs`ev>KxusdI*P0M8&n*UA=j1p*IzTKI%>NTzwL@Xys zG{s;sz0Bd9l6u@vC^wm6J2{QSV+6O}()7kmL&d0gKZ^ooD#teZF0T=j^1UK^G9y1P zfz&eMk5veq_M~_il0@w(w}mDmuD!iOg_^#Uj_ujZUl%=*j4@kNnU+^Twn2YjU5nq0 zip4@%8nk+OR_$i^U}wpt=&9FbTt2GUShotYrj6>~3xuKOptMLgRc9naNHG`nKq{C-@%cd&N(E2-sUy;TpG<5Ns#}#=)8Iy;*6U|<{#(8Ydr%7u zBH<)7+q01ayan^&AHa2(OT<^EMT<{Wh6tz~Hgq^v?PSx+P)(3XjUeum{qQlOEondM z92*wul57+rtwX_VjMf?=o$^}2^f^i&Nyx)WFP?_|s%rse!J|ilrhAjwknez4vJs~b zfUT^+PI`Q>p;;s5!68@lT1~3HT$L0pD{at6WkwE+%|>m2U91X*sS9H-Wdi_~07!cWzoXb0>IB2%R}hJ{OvLEv?>C$91Zs-)!b*pwk8{FA99RE4E98R>wb;BQHyQD zbFG4RT8epGd0Sh&%iE)y=GiNhzy4_p9ueWkNdOoSh|kY$e9e1x_$8*FPo-%NWbRtO7zSr3efv$(tj#w3|517|Lx23(w4Fwc}qN9@`fD( zOw>sn8*dkh6tAa>L#MJo^Z299$Ioatr8&l$Qzx)1{=1R7IeZHuq*RUCL2Ro?)q1)Q z72H#{`R|y2`gOoY{wTPv)^M#uF;BBnc8VuLpEqM(Z&7eq9i`9@@AP|5)FO53<1{nQNfZC&m8IlOGQXxc(HI`Ct=GOvz_RjF z_k3JogkJW~qz$jT1N+gB^A_QLXuDOS*QXeBTGze2IohYEAESgYbtQjK?ER#Wh7Ut960#fi{s9|Cw!#G2Iieoe7NTqoAW{QUSgfK>GW71bMhcl&Jf>Jb zvI`ruO>Z{PooaSVAU3l&E}OQ)Ry#jGdGwhiK4!CDC~HGb5iTFiyVOVN*DFX3TN$^t zufQ|lu(RvpaPub}{#9eb*hBJ0T(w#5Liqe7`ImoQ3f>R1?26iuRrTRJc0$)J`Sq^r z(YB4tnyxRnu1%6-N(rI;u z2A6iYwJa|#ycdjq$AtDKM&1OYrGFU~{=qoM`Ju%r7DLc&r&Uj!P}Ny_%GcZ5Gc4V? zFivF+axB!N_F2(d7SNMXRRp8kn7`fLwOHu;=5)jTdXY7947iUd?QD+xo%}Tm55rn^ z9h2H=>W53lG$7A-Dl8Y5*q_nD=<_Q-w5zFPLwbCVOKk6VLDDatg?z>=HR0KoPM@)= zXVj@270p5N`ZfR++_AX_)6f<}HbaiS9v4t}GV3c+O`7zWqI9u%wz4yMOWDZj!^20C zSGoL0ClfvX$lQ57$me^?XjqE{*v)dDn2d}2?~?nPJ30JP?s%Rg;=T5dx9RqaO;s>; zpZqviD;K{9h?jPC_x9`bFDdft*a)&wgi3`EP?Te>#w8iZ*OOfU&ZQz*OACZ^%mU9} zD|OC$_Dd)U>f6-=hzS(Uzw1Qr(z*rajt|Wxx<^-?B2oL^kI0%0LN94t`UYSSQqn6@ z1{o4puk-JSUVIt!tdZ(z`(UDeAwXqB1}jORBoi>^M#iU0cDvpXMEb35)OcWLaLH$6 zBS*=U*6&oDl6nqHy@0MPqdlkV&%95)-;WSJY7uS;dOek9ZM9m%jYKw^X*1;$)=ti2 zygSUG$yr2AEx}-E&aYtBH!knEH8Vc?Y0WLqRE4y!TpmCM2F)~FA(`-$?hktdp)-RD zh6lT-cR%d-_6tV+-&83iS~I4xkQ^4Rfo#`J^7olPyGiHV<=6RBGWxj6dbG0=% zJs1%QcvQk5bPa{vGn-rH0^e%K}_-i_2ZD`jGG~ zS(Sl@v3%LCFE*C9zMx-KN<0ORdF{NO3br3UZHbqOOcxj1oh-Ez-OIu-KQj)Ek>`5Ml5yT+z>Yv-A`{|NGygf&)wH7MC z;}^{gKq~V>^}VT~*syF``V{FxcsVWeGWgEOsU@3E6)z-h2Zk~ua75Lj%9`E0G(h0v ztcpwJsDd2NU>^5iw*q~m>BMs)m93;t6C7vWCaWj;onRxzix_ND6{CR5H8IsvsQ8XC zmVXxa;o^B5zuBWXDswlvsdt8YQ&dwNIbskK3t zDpzJHQess*zA*sWyC?^A6OBDHcF;*gwVU>|s?3|S4>@(M^{I6p60od=iRDUY9BV=? zM@+U}4uVUY&_sU)ES}WSiqw!e$$md3H)}EpEnaJEite(jrWx5cjy~HkOnaNQr_L%R zd6z@8KZ1j0z3HHfeZ+&fGzOpU(~d5jYSJLQf3z?IPM&#cRjhOhd?ix|K8FT*EK>x7 zK;g^5iAil>6T0$lg-ErVDZiblna)D@P0Ojl_vr;9;T*ow!JXUySef%VsvZ)cPrG2+7USG8_h$&RZ?a*tt$q<_`OQMyqRDrZ_H&gD>0;$dc_AzIVwG^LP8hj` zW-C`Vgq%y)Ml|n3UoG3GUz<};=q~M+;I!q_=s|pWbNW@rbk#I&DUX`3%o!b))2eyL z*YZ6UuJaD(_)}>s8V8!*gTy^hwL5l!StRQeDfZ7|Y5Trn_^e!Xo42Ntb&DyVCM)vO z;<$9Qk5VQ<60K~>yiMgpX5lBoXm6%`x*`ngIrYMTLzKDxs8)Nx%I^VPS%cI}E z>ihoZRQM^n;yay3Upy~NPtqSn?kHB*`&Ua~d0!f|jgjL4^x5SvUqanB%Z%z(y2_Wr40L-Ysi z(1xn*;|2Z@KfZGuaFkVHLWa=lykGu+U)E)N35S-TO!EWhk2$W%Xk8T%~+E$w4beaq-^so88KJpEZxw&wOy65 zHcev&(o`-tMM*OaCTFZwu=n{I*-hxMfAVjXz9jNGhUm`k6* zZf3YH#V>o<8_ROml;j~UfXRfVi$~^}FV)WF84`f#5c%i%T!s<;49gB9AMv6-f=Mk# zzc;i53#^)2jdc=#bviy?{Or|T9lS_=s{V72PrpD!yL(HcKUAaOk{)(FAwt}MgzsiT zHpB9i88Puqk)$C$jc7OW?A#A*Gr^38z%V|fF(1O_jHNL{=z&F$B>7o{n`sK z3vdkQ)PZ9}@StI`bYhz$PYTZWH#)64!3h$v+>!w)u2_pZ_Y!A2^8f>C~hG(nl9fh zQ6-W6OwncjcZ8Y#CLK+OxeL5ZJ0q1;VO;RQvcpf^vm9_!L#nCIcZ43jLWhXI2Cfgj zB~gow&$RB}vm`~W+Z7(yc&A;POkLzo!E6o)S}qc|uMrTCuLdQpqDu?6>ZeK>LQVu2<4HrQ9)8q~F zSs~%XeKLwcoFo--sGu0A?@cC>6N6PcDu;)$=^BDcglqD&x6WmD?d9kLQI1Jhu4+hu z_L6DwdJiXKMBW=XjSK?XRqwTeIR+Q_Wu8+%Ad8f9*WyMr43i6^8V4Mly>B(ncL=N& z`}cVzwFe^dY<@C@tE12GW#KDF0sz-62_fH#|A7)p2wCxBj72)wfKz5w)<+Jn>4-YY z%?+p)xh9sVNFPSE+^|%;g)!-~=Jg$}L=!IY z?wYty;j|sw@I(Z2RJiG zN)K{k@l6yhrTk>@9@wNY^NS%uGVM|=W(#DKh0TB)85C^sRl{;+Kv3`6RweOaAGdfs zw|-EF{>aU6To6~Sr*z-cD%ORMTzeC628manhhu?C-b^p+sRu2#RflA)4+)PgaBj$@ z5O7G6tZ129zDSr|INB8O3=6^kq`M_P89)+`8A;CGTa^Xl(UC?4`sZFg#MoMjHdJa6vZ?qEfD7H^#8)ceC9s15nKm1T-xGxNs%P}RXoH3r9-iVmtGzYUJgxH23Hs`B39{mVUrUc=j8ek+A zBqF`8J^TwW<9VnF(>YWd`NEa)%#uh;?0VU>L`_lP`WF!Y5ibNekbzcg0P_i7diO7& z!6HwRD`R-|y>5zf(XDQO@A{cH^eCq%A=!+zAOOEkbq_Ve{2^`yN5Wy_gFn;9TWL67 zcM@~(D=g5vboo1PcP>I@&OdJ?vRy*c70Cv+&{G&zLNSF~wcX7J{Y(KV&0>1jKp$~B zQM*VF@;hEIstcLP4r1->He+l|KS9jBq9N1pb4ujo4{v2+j?#w|x4Y!N$IY`6Q0`v< zaE4v&F63gq`9}o#sf@-YEzT>AAEzAnTqQQg(pTx7-rqxatbC@C-1IA*LgZebBK=&^ zbMLOTv@$80D%1{qv7gz)fp9mLy&nYlFa@-x^6%v!vitsQH^1Vkggl_A_Q1@AJ)hOa zj9YIwYgl<7-}R)@glC<3uf2}x9CdCLBWwB5Pw~5Nbbjh}^}@`tE4P+T0D?M50#>k$ zyTUq@W&z4F6T>F6TTGVa;MVzs4liUn8DHZ^~f@KKY!1o?y#Dr(ANo{qVq7|+w?-lMImvJlD8 zmFfB+ntDJR->6wRYBR`Gl4v@$9hcJJ(m9RUCYPtK-e6MX^t zsv0-T{ifAiRD?k(DoY9i@Sb0BTgS`tPLZS=Ad7tZ9To0C`!P4;zLNA+XdQiD%N9cjTaFt9{j5d zPPK(;ptds5kL!JdBZ|epc1sDF5+$kxo)*xK?(I1%@mnE=(i7M5UnW8 z1Xp$u4*zVy)l+5<>*vO%6QJxOg=Q8lc3hh)CW%u?pTJzvWsLxOE7T@e6jai#c$lN* zzy-;AQbs*{yff4h${2mU2mx-eo<;C>JRH08RaWurvA%|zwhCXq@~RWzw@_NMrWg$h)XDmZUpr5vSoib2^IxFphNZ=4ll-MDJ2yV9c@ zMv#Y?+m6Dq9}&6DSLPuQPb)4%8o;{bxoFvUb%_C*EP~-ABa8+7pcY|eB!*6$=_w-~ zQ^(d{namK*i9S*@B>ujOKeQs@aqbH#31$I|54aX)HCE_OoTnt_pwXsMV0OrmnUNy05deI2!hM8LdNbK8Y)k_kaZQV zn@5OQfUVj}H|S=}{C06mo3sttKK=gyeL#Z02_rw4!{3*qX)R)ri3U0+4xK-C9_|UO z3e@+Gl$@klwU9Hsu_K6seww(UG#dW^mNPu+V2yw*W6;y6I*d7Iw^`ybFe7%L(@=2S zy0>U2?$~))Yxd)fFIcA0J9NoqMC>uO%(imoS!Kck47&&gMFHwQ@G#}})(b0MUAMb( zlS^>!$50B9#2Pn4{^g6`(QJ zu4xqssZD9y9!An!`!+VlQZ1o7rgeI3P-+I9dRNr+#b3_(vg5P)CmgUO4MZEU2jLSg@%*r?(xg8DmjWLFvO003EYmPz3~P zb6+T1<|i`EWM!bV0XB_Ql7ti5c#8HP3{+6WP_?_7l=A>N0832h-J zorr7sVuE=onG%ta8;$6}bT#RT?cD0t*{;J+NrC%<*`{tlNTE;4uZWSIi(+(J}?(Gzdi)Pvux;NS>gllRI{#^qF5l1UJQAKEKXixj7aQMyg+jNH6 z`=h_*CY*dQb<5}lAdKWb?Xh^J#if5q6dgF9Q-o{fxy)9VM{8CVe?vpr{q)2C04mJw zt_SGItwE-`;ft8$R2bRW zO41aan9^LgJlT_E_Toc$lE@7Naf;W}`r(C~=2sbqGTz=^u%+h06-J1vv`{`2`|uvx z*dipI>$p`7xruHxH25FO3vQxr>Iqa5@ST+H9zSjt&AWE$!xC_;D(?OL;NP533J?c| zJadQ5+g)ULG07n;m1H&Jv{se)aK`f4q+9cJjrvolMjSS}o+H49r^5;D?PG@~m%L)a zXxdKC!Nc;$GMP+jH!k3Ny?jdl0GGZ-#FCcd zO8EF;Qpf_Xr%~C*A4eH)n0WSA6v`7&s68zfCo+%%jd*K~Np9q{@P+cwl63fB#Bjz( zoob_qriTeuAqgTm9#u6BzgFY2Pf&2!&hm>)#XqIy zVo5EfskFLZ^`Jdae-Ij)bpYYhoLZ<;aEMud7+=OIz@CJ0uZ9Ck_SbgeDUq});5QJ! z)G((}+k+TcLDZkxL*6nSNomjzPDF4$Y7Qb%eAmld!O0g*G%&5q4&C7v$1>a)u0Wzp8imL3wL19q!|Ho`d$yA!&TRYpNmIR!L7}aFWIY&v zdSb8U&PL4nGWqjtr2R%)a(9xVwHVc35?dN7Y!T<#}L)umL% zN={`TGC7RAYhq71E&X1`sVaZ35{*><02lAWg5NQVF@XmC&goxY3U=bO<<4nWF&U)| z-T;A*{lQ9wZ}D~>w5A-8H_*-B#Oy7mqX0h(SMJ1H>=d0U%w;uJ7wC08>v)5h;CS}_ zMg~cnWn$UhNMjD56?8fWri269Ivg~!J0zB;adOq}T#a2o)myNPKWDmIh<={vYQmw1 z20f#*#|>N8NOwa#QWazRjHAsN93&sN!wqY~Ryd++Zz6Y)+%j8+% zh{U^9M#WM1O*ID>)7|9;?^OB6XYJRVM=hX^*v^hr@A42T1$3v!3OO^E&TX5d?1aY= zBe!w>`!UP-Z!VrYD`=#U$ajh_%7V2zbi>Bh1m&JxSfHxi+@XmN;*1gIKA>yshN<;7 z){t>jLl!8wyAG^*8x<#s;qB=g9`WV(oXwGpmd7?WS#_dGB+CMBmf}<&q!jQ7A5+Bn zMFt7vT#VA^`JQ;!>Gap;2;y;4sRR)PLP|3HZs~l+?inyMTrmrp*5{f8Xh=8uKT8gAkbs$L*sz!gpvOMPEFO> zyV6RInhKqj18xbTjRzW@CM0~)#=%X#R~L4J%4BU_&xz^iC_QkBUS+?H4{)lepF3z-!L(=gcU3?)X%V=KOgj~y`Uys)xZgz(zM6GEX{r-;(DuM9_T z9FbheEK+kAA+MQCvql-{v=w<<@{rJiDA1(Gdq0W6%ovlc2@urKlR^22O?> zDI%puVB5+pxSBUgtq##afxW}eC=mcaJ4vCz@yjk%Bbxq6b}e6QdjoJBf3t-&tWZfZTSv071ta;+l{)K!G53zj4FKRfbi$b7*%W28BTRgX z1wkgNy5K6*)=LD0fRT`mtnO)AaT3k4jpk9rigd$wG6q1RW4zPmJ(zLd7Lr3GfC9y+ z0Mv~sU%&3a3)LWzL*-t~9KfX{RpN;Tu@+4W!F4mDD{s+@jR2_OhYgjjtF+f50MZI6 zHR3QP#r8v~BDAaaRN(EPb&BAi-KpLNpYg*VIKiw^0!4AoB)z_p(HSbCfzWQHJWe99 zKUtaW6G{RRRa2uMvjVe7rfkSMZmh#=8t??*rbQE`bqrydfn@-mxW0gv>$a1~bxVIq z7*>(}Zwyx%q&6WG$72|hO*qKILGW6AxNqLtS>`E!7H1K7P16P{eDKH^NfgL>GMW`V zs&M4V9y0g0Wa})_5=f?jwvV}R*}uNEvCr;fzhIV^%eQ&Z2Nf!Q@-ZHgK_F%T_@8+w zpcWFP3=~ND3ix`$7L&cYlXu;_#yrJ1O2dNz&>l4DT6D&x`i;iYcU_?bl9jHkM+{{w z1dN^AGKfHBrviL`JV_igw3iKaCeJkh15-hvt`vnPu(umkI{Lw@Xav!~wJuF$YSxN) z3=x-dI8c15Gy|=0n~8nQ~M!YQPHja+1M zF?mfIk)n}a)7K5IWV`Yhk?Aa*E2snZV8&ya#ccst$tNLq%Bu- zuMW=)6Ksri85z8tI!kEG=QqlHw?1o_t);0bC4coB@Gll`+v`j{x!Uw)Fs8LR{h$n<* z=lq3l%sFJ4X=D!tdzmX%PBir$4k#STA8@@cXK3=#|%er zddkL*S;J5tC<+Y;I$nO}$ZaewrEv@vP|ZnB+HuinL8lR@r8UByQ@P5QF0(mJq;}S< zfun*H2$1%mQNROHOfTntQ?%x5K@HPC)7?@DsD41iQPgk*arFZk%e%9Cc1z}o!~wA* zU;t2I>Uu=qTUd?VU=5%OT>&R8X9|){PBq$a6yRl5CT9?eSd!o(ArunyuM#_JrkuF2kgozkp$5GV?8JlnoAj1SxO3{nav5Sc@UC1q$m>tJf7JJa zEm;2mr%-FO*0>%SR+yZtLx8e<(s*n+SLxCvppsXmJ6VtBaY5!ob@U3sN$w-5BTlF8 zt}kDCSx!ulkWFMf2aA6EPSd=RSYF94y)?#AZMpm6twIHK{g<0!2K~g^;)!4ZyPb zxK@;{I8+Qc`N|2P<*WPKgd|A@!4))J)YHWA!+(?>=KA|C%dFHilhMkufIy6wyRz2|F?pu-C3@j2rV`z34t z0FL`BE%$T+=681z#-MGY6SQg5ZGO4?TQGsbrr?k7&{@hsHx)M)i^3!LvVTq>* z2b!Qv;(+z*iuX5(q~;91+*O$Vr8_9KAA4doB*oGcXE+ch#$8MPjs_Sq=-ko2XvC$y?7m{Xg<<0XRW8xS*&89D(`dqF-vo#qdMjZ z?1=9p*=`vK{3Y3%zx1H{Mm=tjwIw`A9@lGXS32AH-+LmrgR=pD0yz2@20} zMKxij-~C4g?X1m>gxAo*OsK#>56dkEz(;Khv8lq6t$RF#vX+)e;jY4dO=tn^WA|c9 z%c(p0a(gybiWnoZfNc!TDIjk6RFmnA_*ozz46!~xpGoj-04YzCQg9tKH1MH4BtxFt za-E&dW&KWA*L2RZI#YJokb(nvk^waE#jW(mG0g4J#*m)6fK3T+Pz63XN6R?^WfpHD z8tw}bC3vcFKO8u%AV}_B6t8-SvF@iC8&mcIF^k?8rsef6yoCEd+q;=Ny2%U_(2@$d zp1qUn$v@>LyNyZQ#bN~URsH7ytg_)5KvZ{=x9U@Y?f(35LqC#LnhdhqGEuy{x*$qa z_SBR298DBa!xqSc7OvG|C>pp0Dkw%9Wa`i!e;@0IZfD^VkgX|EL$rkhhPYb*?$9z1 zDd1_qS4?(0AT|Qkk&R6U5A0!Qa!n!%z_A*33@J+)LfdH8vP(D~SoZNe1g%e=45xO+tZESeyv8R!TJ8DOj!*H#cPIvM@f{ z@WDf%3&3GMUupE~Mm23U!iJ+bQYr{I5oV@IHk~QvX5yibvbe!4B1qKhKn-!Wsf>U+ z1C9Vovvsa1wz2BLIz-YaPzDn-_xCJRg0Xph4ivKm1-k|l*?`fRI=QYoILaJ+q70Hk zW{xF8Ng1~=Iw$~|pR%7EN@&O!DBM&ndeXJ0+lW;Iux4%=VtELlRnSne{g`oq42(|_ zhnIZ-BA{T6xC*1k2q0Q80<{`ydf|L}4LIY=mv4-fs=$vCiK$UdaFus(I_p~DN*atL z!coRR{zqy;YR063HSxqR8oT$D1g%9+W+Isn@xwsb6tjdwIj!APe4>XP zY7i=X?ta0Hz(X@i+8UFN0s#e^Zyvlb*eJ&st_7lsxovdUL5@!$EJIKddwVhRD#lEL zl_RBfr*BLpno`GL;A(5@jwUfif^J||)^=G2)r{4?7(fESmv>YIEI?_)hPYie*z)NW zf&EjnuwaV?T~nP&5G@(&*KsHe)Uy@ z-=lnyuqw2ravVAMWPs13pPTz2;e)TmGY3PDgta>qkZ!GW4$lh869ucguIp z9ry)NsM8>)58@cP5ZcXlxr{Kv*OupFK88rt>*_ald~x1#<<;g4wePH8R=tHQBmsZb zQO2G)gSNj6EHp(Bb{&V2&WE3G8M(gQ3%X?7rB!t`#Uh%M%v6m-Z96zhlwL)AiQetq zw{UgpF_&2_h-joL2BC)xC2J_7ncmHa(xxIj!(DX!*p}Y&VEsi5gH9C$*X}r(AP=W5 z6EZy6njME>>*E$#-^f`~LAzR-4QcSfs3+QYu8YE>hsUtsJeCp78r)hPr53FjHDUYl z_EmE_zpcoYDLBbtWIy}M#<`i4oIVX_|qUs(p zL&jHHxC4cHkBA&_gOjrxoXTl(ON+UTZy4BAfS^}j1BaAC(pMxMl14V~sPp}tP6fX$ zS|$2skVY+TRf$=m(NAb)8XsIayQGGTE(&lw4_+P+C%00Kz`A7DVHM16$K-nqe|vw; z(&RTu%Q?q3oGFWdz-C0p4-A7&uZwmdSUJD-#cD2CQEq6QARMxH7r2+Sf09Z#3lWaQ2k3;?H@7o@#8idi+qGA zZu_iL{SGxB?L8Y0Vc2Au#z!Ok?n*AU8lv(!_~;&r3->%&WW>d|vVNm?)+IBTfz2MtX7m+l!-`q8_qq%}tav+%I$ z4^e^b?rT6z4j6{)7*B#oa>WYb5|@~TdF9&hzX%) z>ec%-)Kqrk&$7#ZDN8~bsKz#~j)WaS`|;=tE2mg~jT}yk#a!)X2Z$ZGuKDkmWU5~$Fe~I?*bfSL95wx!xsCF?$1l4=z3izXEhs6phWv&e zw{S`3NF*+dbq}hMQ_~UZP)mks?FW5mg(U2!h8arVm@+uBn=k6TzikDxSj_UgHt47t zH`TNh8XbIUaXpVRN10nJ(M%$_DMtW~6|Y`AKRi1ow1VDJE}}?QLPIXi$X1%@I8;{@ z#I~l#GM>Q$nBsD)RUyW`LDW|g4d}Q@?=u@@9oTxw!TNjxvm6M>ju>)|Y|eYTOs6r- z64G1A?xnWMq04rLTic77LPx#$q9b|R{3>_Xai_IC@-nTd2a_lzoEPd8bn@Ev7wL6&-Scn`( zouiHp=N!RfmfgiBd6V3^W+hBgB-`t+W|gK7TIam2o><1#me-Lai?x*s1_rgEA$%}e zSXH}WNouv*Ku5We7Z)Gu4-`3YQ%pj2C>%J@4m%GD#->@$_nf;w^iFH$>rD1{VHuL> zs@)BIyWTVB({QM*b*)Yo<@r`lxAxbto4IDU zJ?YjOOw`c5BMqk!LNyqArHmP*0_NbVLQMpY2&wD<>Tnyc_i742)5m9^l9qNWd9^nB zg2(l)By_0Mlh=f!Zn<_$isSm7{?t@Z$t+T6q_%*H)21HzdV7nU*xTG$+ec+&MI<+g z+?G;)bsDkL;fKMs$g-JM;@-k3?w4PvkpnuBrB|Z-HNp$*_Itw68I2@56Izk$in)GW zrBVqSPr^Bk$eU8494QB4aPdEhHcw|`kip;FPPdojf2c^Jcp&^fr(6uo>|wgPY{)8i z+OZozW>R=m4QMpiA7$ziSBjcetPkwO*@fm$l*b&o#l*-iBr#g8yk<#Ug{!bp!Bh}f z@D;#yQC)VKDiVaZKqv=X;KZ;=OBJThH1QakYauifz$ETuc$p!aXm094Jg-Bcp~hY~ z?OAT1xf38U!z1fZ#Cc1O)~6l>;&*cAbpWTEZY*jH;&hP`Wj2?c`@xu+fQhl|qp%cm zI|o`H94(hDc4v|*dHk%rH&dssI+yXgcLtRp;(L417&g+H?<6VhIO$S>tgu1~X;{?0 zu}Pews}xq+NYJlkMj}GCQLHk!*v5+W)E>jxhji92DUw7*VrW=X=JCKR-!AVJmNcgE zL8lTrdf=2e4hJX$%qcZebBKx>ylmT}Be&%~9vDM+XDolOYM{uVDPQ9L>xB@@u|#f2 zC@7A49u#aVAX9B=xKTVjFwmmetO-q}^l3kl0Ks%3b0Vln+fLE`=)-)|K*}q+^hym1d2G^<`nLD??HD{rJvN znptx;R+m=cl0ZO`GCa{g@SoX^f^DvQxdkXfkxn>|AxR}Fz=@y>L&!^wnxy1JcXGaO z1=>BUwIu}Z9ixRujd+Y9&a&}ka?Ytpo|RS8)Zx1zmeTxYc242b%<8A-U*10PhlRD} zzI$LNW(RtLl;A};;Y&|+ptR&+O)T9Yvgg*ExsE>=hR7Ku?u&k)9#$HxgSMTc8j{Hv zG^h}>F>=HBxL59`Ax1X0YZz)W0?9$+gAu%UDdtVAqMJuiUI2QU;;S^qb+m zf>#T30oic_RCFs&6dt&8J~GLL&HOS34ACpmx&TSS-QXS7sITqA zdmzm%rZ#OrVlWjW zW&^O|!Ys_M%JLm`G}j2{J8b}3mg9vA)PiAP%_tQUpwT?bLeViHR7KCt_F<2&#=nB_Hdy z(L_82c49oy9GJ~Zw?cTia^xSNvEy`-a=N%w)Uv> z)EpKeB(;)8)OTBH)26?7--I_*lF*t^mP0~#n&HSaFlTWcl02>_7k3f>7Lgrmf+|Yc z%FJpApz*-#N#YNA5}K3&U4YP3SC3pQhAZ5{4(`s?nK*8x0XX5q6FSf(I!8EyS0>qs zAbCLb#y5jt!*>N5p4@ixE6x%IkLctLpdyvTb{4W`5K9EmPKu}t0Dv0Sy>V~_D;A=l zbW<8e*D*^ZSr&C9BXp+KgnP9WrkMLCj^Q(r`c+u0;tY6d6c5ZCI-%vy0>+Kdjo7hGByWu?YpGOTF3-&&T?Y1HAdomkm(6^xcS#i3RN z1i7|R9I9!h2g>|42SbY^mNPzFvdZGN{-q4}cMDclUhSEH`9M4mg>iewwOgSH2B4pp z!Yg%JcX#hRr41_yro&OI3Lc%6tRaySwude;?s%AjMxglOqW6E1r^@^8cFQiNHnD-; z$c|jw25nla^G8y2H3PI^7rXr9o>^p>rH?Gz-CA4C4Gq&wL!<88$`~5PbOlM!(2Ca{ zcCzt+KI%4j5MfLgab`Ov{xDsp)Gz@_bH;i8FkXM6I6F=DH~@_A(V{? zBT#W|*4-*@(reE9%|Ft7w?xPNx%Zp)?hAX9P;#$a z2=(dC`nbOOd5|*46pBvPUzM;z&oj2nqxuZOG&3;r)M(xqU}gD=-Ptvem^?E70Hj&L z+IZ|I@;;bVmgW*I*|ob2C_h3{H8dO#h~R(WjLPhAJV#&LPop!x0a|~>UL6PIcI}Q? zvc$5x*h_?xtsIrqkUmr6h0$1BUs%1&ba(#%xk0S}>*IvBS*%%|vs+$JNDkVbgmuR< z`RB8~kzCNY?%SY##`UHIR=QB;J!G>=W}u{13iOCl)95Z)@653^18*p}`0yJ$jBON5TnvCUirrmTS z2=U7Ei<@Yc+Us@2qXj@*1}Mbp4S0`SE4j;UBbU94CCgd9Vnhn1y$HZ4Hi+mqh@~`A zc!Q=LR`W$YqN}*xzEDpRe|{sJ@*1aZa(di{MwR1Ct3&P#MP->qV67@-al!#4_cRAy zI(Xtp`KKkjI~sXmcOZ`O59To>k%-@O0kn!A3<}P2^_4@Sfg#|)Qm3=y`PUUnP_yQY zTaL7!Ee$qP;YhbG=1h%m?kjfa&nI?w##9nCsINoN;lsAl@-tB!sM-)fAmYE8&em8O z>_VnQ07@xc%i26~yJ@G(pT0|}JD(_Grlcw0!yR3?Rw+2nGrSbvm1z{^`HpP&Cdusb zyNl$t?)#K3d!w|P3=7M%VB%pZ&ej!mUV9S0Az9BS6`>o0w`7FRKnIGCBi^ea$sw%w+g z(plkX+J(x$5Dx%HLrqBOTyWJ2)Qmf4lSfmb!Bfm-8tutZubr>v5mZ%5C^Y{7b$@0S zHHyJJO0lnYiLn40D)xMJB;nFg8448?Jur$}bd^~MqXXq5jd9TOmVCxg+P2U=*raUb z(Y`^QO#n2sygmG4yd)qA0QI1MP~Et8FjE;*s*&4(Ih!Lv9m~`_Bvt8My8PaszYB6~ z!Yj))cx4j>(O7j{UFxg__85y@EfUpmIF8?yYZur~^eHB#NmKg|*@Y8T4)yr!fzvs* zm1bQ~(!Q7?j0Aev@vqz)W4?a<;1n$<|5$Ih&awTLAShrS) zcr=*Kn<86wcp*`+pQwPJ!haHv@2(1Ek#{1I(vQdUAGZc>EsICwUornlt zL4}Bmu*AR-z=AY2!h@O!A`t5#)D)RoT`aX#5*0&7Q%dPxAF~TGvn)q?Aau}_tq5V% zc;R+&mm66mx1l0GJZ72|JO{&v!w9memZ4bEoOJEM>Y~wE2+31R(r_XMYGJX-MBlvoZ z8{cO&lxb?BG%=_L{6m5J@aH_iB*576Ez|=*X@_39K@XWd%gt*Z?Y-ScV51Mb)}ELj zBoZ5{A~J^1`r$x^OKi?fs2CMjJ56;z@WiQdWhZhPsop$rNb(A%0bcz;Ik2Bdvf2*r z3O=V$E7J+(xcze$rnDxQj$FN{}XzrMM$x_iY9G)Lt`)sDL8HTy88+bU5e zA9VT<*a*v%f95lrE?BibMp;p}n(MjLu%}G`QH6OPTJl1w#0Dy^KtJIWz^sM~o9wFA z-!q0pcx4X^QY|W>e5^s%n(#fCdF6J72*hl_8fe{H5pJrLNaALW-5S!BC~O|s&cI#; z7W1iEwNbkdhh_-d&QzG6k5D^1M~CH(yb)bQ$n>b7VfkSUF8kUB5-Z2}`qQ-G7%mY) z)iH(p;u&K#A9;ZSG^1hJ7}W1$%3u_~5it)NU=doP02aq=;KC z))P=WvWnV)_u?4iqXnmL9?W(Le1g1BZZ@)aqN1xpLDPl@%Ls6yv60CFmp)o4(2j=! za~z`HL?^ox917@1rVJNio1TD-M=sSzsIQdJcAPN^DatLzlHj2ci*sipf684*!);#P zaA;Mlr}^SI=Zfkn@>}?*>S{sxbssf;+#k$sLx~}gcL7ElM*?u)x`yIr5C;o9X0Se# zeLh3u*@N3ySjYB|kFus$h9id&!{B>3O3Rx$Vop`LlQFlqX)@{D8;Fpf(Lctdbm39c zh{29j&Lqr>WI2FiA}D)lK^tyU!2bXc{QYqDwPRmMu-z2@0EWCfDna3iX51HOExGlLym|DEyhkxIcNWUr@22Y8 z7FU?yPR>A_kM&jPz(3N39r(fBLO}osE1AuN}QMdm9 zry$`^@eYUKf|Q`Xy?XY@q_(Dy9=Uutj57iv$)Xb65j;x7sEwmKt0*D3b*lh=7;$C! zbh*xTBiy#zDUpTyu(%l4k zb(?Mp+t?3jG_DM(X=ah6eaGe{g>Zt--Ww|gh&b8^EZ@X?P83Av&#tu6xQ=;U;;1qi zN$Wg=?;z4z+pu8uW*X7kP6h1+9`ySwY(7{B9hDrC!jU2 z-+~!zo4|8QjSq$wr%q6mue=mgM-D>(kUh*slnu7D##kY!0BYU?77J0pna<_3om9j`>^#R>0jb1rD3O(V z1H!o5pb|AmH8k+X>{Kgo*1CFQ*$Gl=V#cB>u{sh3Ylv2&LN)3SjwX?*8!@MnpPnJ% zHk?Q&@5cnOjeNwhzLqWss5P&y0$u_%?XH!>i!y|*%&b8*?dh%nT}DprK`dxA?8Jj6 zL*1m~6Ijb4NgJz=ET|f%N>{E8MDDi|6p^U=o`BU`r3M?#AAFK`a?zt9j+&E$mN(E} zPLCM?q*^EhRPZ&!T}~B(+AfDlJ#mSoncCt@wh@Mt$Rkw-gZ>|$6y?&l{zGRi2G(+_ zeJO#tv~Lu~YRe-i+)_R(;!k11i%A>2vb#{KBb%YFJOC-fX!%QOD03ZzA6V;>{jGBe za?%QhXTxOO_6qXlqMJvV828^YA4%Qw3cHxe&mA$R8htKzmx4&_# zK-=c08Xh2VJZM4j;U8Akw16V7>BK3=hyw_&A!+3UX)fY`0b2ND?29-P<>6h`n1H2* zp!oc7w>`{Z$nv+ohib~pM3k*n4L)P(fM}$zNs~cnTRO&6tgbnp=s}v?Wj68#mJvya zI!C2x>*0kNK3caIme%aFS)MpSK4NNhC*f0s87KZa@y{gLu)4gN+G!dh7?OAz*RBY1 z_HP}RG{DnGERn`!F-Hn+BB(&GX1bG!6%(MP8zd88DShMHPlqXDb1r2awUM`u(OxuA zC_n%&15ZJUde%#sFJzm%rsv(XpB_JE9sI#AZ<|m3N$=!>-ZBh!VO3Dmj^pz+d`&dr zf%0VVNn!m?Aw%WhIuZNut74W@r;NSw9K29a{QPa2JN$> zsap7LEPfdLz2|(wY_2=LR=HNSl??Xb-Z14snalZjhCW?K3gUO|suv2t#*;tyEmBg_ zm4!*{KMMFxT3vro%I40lWM-0QFhZfpF@asx2Zccbxc2`5@>y{m)zq&XVF0id1GF#| zr)EDtpt8<#xFNDKTgwTI35+dK9Yt3|sp(%DWAqpK7_}!ayt)?hK#OM>2_dTjNU5(- zXh`hgi9fg;t%`{h{L(}HvuuR#6se_!q^k;S02~foahA8dlb-J05Jd*}Bd-t# zBTt+v?KG@)0C60DZZ9u)$Y~?faqgI%czK%?lkQB=upkft&}vO7OlEgyl!|aOMfVSx z1Rf$oo5&}3+aLpZAde0Q^TQXH<%08=;EGbgx0jPZX&9-m$F3h4!W(?PSqT6jB-0Eo zRkXOh&n|8)Ex|Fu>mKvvSCoYed;+2H#-hfFZEN5s&v(!+yv@H73FrpDiF|ukYHqWs z^Qx$DObNL8l|ZT2#<;Mv_|5iJcUO)`nL-65)`L@qza{08QIc z!Omj5nl4w(FG_`y8+Vgv8$dLm_;AK*>1ErkN#X$Pn_b@6wcTa4jMAkZ&`-1>lSM9F z?4Cyh$3`~hW>Kb(BRBs5elX9=Z5HR5WV~P+D} z!nxs+%OosM{LSS`f^?_$K*bSyk}i34%*C!6?TZu?+ZgItx%kja{~l3NlYrNpI$L1G(V9~NVP z@J7-@ZDAn{_at1(%h6QP0PyRJGm>)VhSg`8RLgfEmYb?OpgfiPxOSXQ?;C={N+9BJ z>+9(;A8&5--rY79JgD<_nqmI{qUT(vqyl(6xTSh0`~4mCH1&6{oDN(ug<@uzmQ)ty?G9 zT0j7(>>k-b5_i*H7Tr$jgJ?WR)~DlNuwiN}h|&2fskyk;z8J-gh%X>NE1vP&!~3V( zg-(o0s4HI6(-&HSz(ulx2BWm~`AIVLK4~4vYMPOS(M3k9BWl}*BeAqdBUss)sZJ+R zg_1EIWfkL~>Uv;RDyIn`+9)RsY);TCv~FWfDtKU(lq)95!v+IN*Ru&>jD<^bcQNxh z?Km$SDm=kONvYEVxT;|!7)4GpVWOUx!quc^HKjDi9s^cz=Xn$r0)zL{U$+^Gh**ba zt5;K6SEdIT!<9tROI{zp9|-_sT7kx-V+u%M3DTc_A)fX)Sc=rB*H0W+B$GiFrvgP) zF?~5$3T+$YJ853i`-T<5fg(fz3Jf;yGl3<{alsz;5`^R1)9k~MTBxk1wH=u1l2bru z8CY_pK@saK5DyvvF)YVv)O6$6IOFKl1{Ba@D~Sfe6+tb-SaVbs&^7-I^k8o0HiDT;tL7jEc|dbEOm@LWB)^lTXUHAu6IOU=E;{w2ib9AA8|0^z>rkX2iia<(|JD(Q5U(KxynODBE}lEvi>Pa6z^NIqvag|uM?x}SX05YY_6l@ z^Pqw6d&F9)=T0iqp*=LA@Too%qI-L_Xo&&ahV3_w(a;^g z7@p`x*LK9v9SIe$4_ax^jAi$Z@9q|Lil>&(#N2(ozfId|2{dyI4oamfUJB}KoX@!2 zrbXiCxomrT%Dm__1-i2K9?`>&7y@|aZt+}+D0Kpa>-d+isMi;5jm5RqiORD?EEpBk z>!zH0Mk`Kj<-=i^wWP?!-FI2eDyC$w%19bN_tzEO*F{6QaN;sNN8_&|x8;av{-vSh zQN(|WzE$wA3gRZ)Fo?&?$C7*Lbs`M2*PZQaO`H^H}9Kdm>VFYpY z^~AQBjQM+=>>d-KYF4#84kXmkIHNui2^SiCuHv3NI({&`7jj$7rb8f52b}!MJbOkQ zaZe2KBf{W=UIw6!wEJ+~w7s>=5h5XX6`&imB=#TKiQ<-P08D6hvjS70Ae~2H@xZG` zcz76dPxk`3r0s=^Np5Q)pm9M?zqs(h2yUiQiE+3Jg)B!J^f*OneQ$dZ1cz1xP>MBA z;bGyAt`&r?EbGI%tiKE zToX|7Zt}Q4<%fNx<;HCQXqd`P3KgonZ`3#E!EPBTS#gZ^ zjz0s>+(kKU%3dIhJ4HG!-tC5?rxV0>94IL2d#6D9YIp*0)U>~yWsc77K^^*O42&qZ z1Ncv4_;5T&W*pWzs@@=q<~H7jg$bbt*RB@hYHY$S-$lR}_27B?<}jO|B+IA$V*!Fn z*Ls~)S5E_kSG>EJeK>+iBD}Zn18kpG@FTGO-WYLP%M_3yi1|2;I`&f%v}{nmzz52r zwXHh_6dhVlaD`d4uxc~m)`!A2GP_*2F1r)j#Mx|$tg^$i^hwZGqlXU4V5z(_2&*>a zCunpdX%*vKExLvYVg_0;B9x~AfIra$4I^0HNfHyNjMY3eKbAT)uM>fk2y)zMYyvr9 z>6e8emvt_7s5($?8jjpmeD{;)Hre&oYaOJGYdd$b%NmwdsMQG^4Qt2YhvHn%1%9sF zp({j@H547ArWeC@mj_^N<)}+3ql4H-W-N_Nnv9~ZP>bXQDCr>9F*zqC%rl~I^9;H{ zV-|o&r3}ZzsRK+ovn-LM3Yl%(nR$$jkve$~sr~-|ZXGe)E5*DxbHTb}O_twgarbs} z2)|OKkQnW!4=|@%{4lcmg7sw{-tTNP-PEhlp3rddm8UcE-eV2A&v&**fbTI1BQWSk zMjj&wavoLAbJy?rZW*E~e^z!oB3kyb(@&44Evs%{TR!nKoXFp!C<_8c5<2xPM;}2! zf%&Fjz2fBa*$<@vY)HJZtqny0;Ywh^y_V86B82hT;kHG)_UkX5ZqyDH^H=_1T6*?L zatxZsD78s5Tj=vF#u5ySk?n~aja7J_%Ac@dZO&{n8-)`_N>Gi*@ZdBKsKhxX8{~et zUjjw69piO0BZ00W9C1#lsaeepyJ=;x+d_bLp3-qLW{yQW$zoX6y$%uF+AP4B!3MjC z9ljV{8?dY|@`Fu!V^40>45p{2`Qw8K+G-RqGRny{H<0VVp196;Y`6E>4s>2| zJA$b&Sj03bQC=K4;ynHc@1tk6ftFih6@dbhuNscp4J+G@hkV$H<=g)N87Vy!mF3oM z6_Qf}q1x)vuM*~)NMof2wZRDU3BMR^>QtR7Bo)`tk*9_e=Gh|L#Abk+ek$=(>4Y|x z*U-dl?qx29jE*?3_MK$N^ByDPICRaNNDLNal78RU^)T{Hkb}CEYJAxGTXC1j z*N{dU-SoJKEr07@9^TRL!W_aWY$q;I2)9(IKPmnp;BZpX^g4IS6z&x((2mi9&K_js zWJ+qY-MNB>N3LUt+AxA;n)8=0;pQx${Z+K67FdCYBNcR#WK1G-|+o;mDvz53_9XJAhVbIWyqY(1$Yjw#v z#JNUmCw*ak`r=@Gq?!esf4Y=#I5xPm*8c#gY%Lh5Wy}o6N`1KzL|JbS^ykYD3O1ud z!3sGjf3bAWVFVfwYWA|aSsCG#cE|-hYy0s&S9LB~BQKk}nS&MRjChgYX|ImBPncSH zh15@4ik4IJ4%*|Ew?g3-835i1Jb3>AmLq5iPXjddQXC)TGBMQdw>MBMR>hD(-ih~d zYS5uyN*eXo3gAd&b=s~<8k!nmyOiFWE12V*$yNkLPeWb@!wx%ELkHBvM&0FJgXLk@ z0;m)kNk-I{6RdXfi<%*GY^;OzDoE2u9heU-h!ZoFG$+ixLH*b$WY``PDGMQ^6f`J% zMn1TYzIK@q2aM=P1|7Ii!d=7%2RP7`E;2i%%q+kuyJIVSpcBCOAGrK*@5{3|FKnWk z9l;wyt@9!3t>Q2?;?SMp;;eE5Ri{ihEN8go%)*iq_VQG)QU0WV#6QNrc&O+xbtkc-tz9`cI^@461@ZHAJ=AzJOQr#Hl4KT^C9L#{#m;gm4>hZR!d)5LD_2I3p2P zQ^5I+4g(@ggN6}QQUf7lTAti0Mz4kvL0S^Dp`fo^PKK2<0~9jCX#B)f;wjvUifBA> zAR&tlIN~WtCuyM9TzF0#q*EG3yYv9{*0}q2)um_@arMX3(U>ZZ10PPxswzjzuiPHQBMw-ADNo>YBbjtidF&+npS&; zUoG>_F+>)w6IwN5%U4WANXU(gkTs}BaQp(!m0_~ULKgw^re#U*WFNu^(AJ=mK^4J{QujAByU2$y+D~ylRSMSj(svTv<)jd<3-OTyFrlSL z=}>TL_ie&i59~hw0G*t2&p3v@;@#`KRhDW!L3Kfc^F*EyQz-EJVA*&Ray8=>kudvLtpnbD+`nrBcNi$PIL zM=2^fnW1UslZpgE%{;}JTims^l7&|JS(k{wD06A&Xe7Ui12in=8Pt$Gzy=LXIt>mC zW|7+FHc2+-O?M+O+RA-DW*U-0WO)pZ;KtQ*gIfOp6*`O<%21@zk{a#TknW(W@EanG z?ctX*Thimq0xXdb869*wj=iH0UO^^d61=o_U{FkG7>b=34jd{EWigD;FPSX_(MlO2 z^D?ME1LK5)G8V2Stx{oDPvJdj`QhO;15U^S-5uhCqJZPqt!LA{?p+GSE3B%u+yK+67-(*(JSRh%1pfu`Mdw@-#3%d;o6l6x8B zCf0hR>L``$>*I_0s51`4!ydU2;hxA}J+hBH%jL_aUg~F#NST#E&{S53 zi3Y!RJa^0)73VK!H(6covs;#qKsXW!0f%TJnDzy-!yTfvn>Tv{)yXA+AZo(Bx*Syg z{Bl^hh7NMep#!@cZUT*V8V$#^si5?yW;GveUyECVZlmR1T|b$C`}1_F^3ZPv$DOg} zrqrFiDLMAaF3Ai^Xg zkM6{lw=&9mr;soUIDx>Jdk}wJKKU-C=6-EdP(r$ap(R|=16j@xYk6F2K_05olGZDr(LWnJ|nI!?3XcE zU{VLv8)e%f4NFFPj@k`=7{+fqMKHRjBbQ#gC({1h-i_V0-LEm9uFj8R$~bK1k~_DK zO6~-$LE}&ExHk6>cEl}SYh+mn;oc``@zd?~!(?0qRk=a>Xxn5U>IdO)JT$Mz2l8py zyGZPIsuH1SNhFH=DO2lAXKoQsH2NOzcC~7``)oaUbA@4;+*nB*Xw4eXl1St83V72@ z3%!fHbYovB5&)-F0Pw{2&e=`GrbOQqhjM|ghoJPtj}^Oam=QtxibrAT`QTLf6;YIw zbNQRntj2wjUR{`(2htK~KqyJk(2gFX24cI0*u-bJe>mE}pR)~PYLi_0BNrHtT92A*JPLO6^<(f9DQY)=Xg z*ne&k^7Y?)Zjj7CZUlCAV1)5BEUu)oj7AZmT4sqPIDoN~Z^dx%T?UdM95G2$a3p@h zF~bP8x_dyoqi@uQT7svF{_H5`2-eY7@;JwLB^Fkv$~qs}_F^Re0GWha14obbA#umV zV1R0!Twn?WD4^y(e;;uQoo%ppMK%GJpv|sMpsUZ5S}%c;o4GKt+2n zIENgmBZ5V0sTz(I?8a^ofxQW+(-=eDy*M78m{CB>(_C947xfB2mvO30A7vH61XDv_ z3;@gT<;yd6wvexM#JZ{D-PVjp`$-4T_+ibM!0e1yQYb*|0}ZZVigmF$rK|$r@?Zc^DV#4+qUo5&C3{6qDO@8b{cucp57PJPudUe7Uxm#IP#|bpo zrWRXLc?95mx)WS2NujK26;Y>zSR;)ox30L(?K=qV?8Jt@=qGbqJ)GcT<$3&iGeRboA zAq1MzhLkwtnm--~fX8V#4ij0$pVnFLgjQJUz;=$K4CS;o^Rfjaa1N)mVe@A;@D`%A zz}&+sRl5a673#_0e-i%OJ(qNXgCnmk^(Z`^*c$2)abw=Z36Vi$H0ljMJPOLMO6D>u z`9#Vj`*{8J!-Xx{0`NYX`Fkmbd#hRV0>GdEBq}`#sQk`4su~$)NfjJNsE%lE9p7Yi zEZi&k;dF3>h}NZ;(U|sr>_KH0a-@*En04{Oq7)JX3MY>f&|`;yjX>IBE^f*q&v|m* z!aJq6XrH`Bf0U6>LHlqa?5wh0Sz8#MXZ;xf{m5ik+^8%-DVv~mi*7G|q%I*26 zTgpBd(?uHy$)GV?pxwK9yocm`!%GSlC=$22G41jJZ=? zIAFB=kaQ8(Sun!Cg#jaH?^6=x@OKjhlU4+jVsLRB z%No?t_1CcAX2w?TSW%63vFLqpveIG>$K~XB#15nF z*BHBsNfl?edP;fP9->dI)!YNX+1tA^E=%4!@QAmLeJBZ$;An1{SqL2!sf zfbEhq_lzu7blA$pqhUoIeGVhMf>fNeNF)rjAPN#cZaHl68)-|QAmRz3LOU_jh^$gU zLa7PEaNAITKpGKTFN$vQD5TKqhV(KtiJ%9|QA48++!M685+y1(4Jq6HcuLU>Wy;0U zupn-)?!>mOewNB$^Ksg@FmIiZK*%F(CD+I@b-X!ri31c&+3p zqK#S*%6mcn>4y}os!dPKIAR4z-+MACEC@B@PPl3mQfm_G1A>M&?v_~O{-bIf$bc=v zQ~gjn`iyHd$}M@1DDJCQWF|Hw0tx7UzQcu5p|iLncrnOE*8H&(Mwx7@Bw<$EpEA;d zGyAo{X;~C0IEpDM9Q>)?6k)m&tUoCi=X@%-E1Vj6@lBArEyq4w# zy|4$T1 z{{SyICq{|J!|@dd2Qqsm%Z=PJAu`*83z9Van)-}Mac0jTM{-)B+fEeVJTZrj zVwq&ENYK>uIFA$}PAgSNpG9gVbeY2vB~V8|4xhIR?VIW36xCdieQ^hRR^Cw?6=DIX zrF(So$I1dAj#sRJ)j;SE0gjw!5CUpOaEr*X!qSlL%yxubPQSa3Bw@J*?^sY`Yl50UlxT z#Dr2xod*Gq#GE3aJJ_W{ri2meryM}XQ6Q+Ig%lc*+4l@6f#`PDwV)#j>)okcH!BfL zR7)CC56xf(b~}AO%r-9LRIhInhi+#X?$v+*(z@ygt{Zpgz2g9zcT|Dd+3SMXFdM|w zK^Bm&)v}XK{c$s0$CY0}cChb+7K(KPP!9+3q2u6uF%qcnQF}(+2B%yWT%H@JFFTZs zFdR)lroRjnwS=0hDHzLZSSfEXYd3Z+?j!FZ-0LF+VhvAk9?rN$;L;Q1K~KbcG0VB7k2r|MI>?Yvv8`ywY180wR3z4egk#GT z)S-<)_4bZ_YK^4j+_N$xSZilDWe*R$efUSq*M0O6qy7&esNyhk=GXeCCuX+0YUrls zFxp2#{-W$1Z_z^xcp%%t2dzRT0!jxN%=|hlMYXqtWK^i zrqvH+e>^OEe4X<~wvy=$=67Kw(2rl%jvcYP`cb15=xKquv{yO3(6pXE(ll#nYpp@4 zQ}O)prt(SdrOOi9D_GjvJBXw*57&j-f~edAkO?cthAsgq2DtU4rlGB9BMRZ{eGYsN z2sbLYmzFPkslyz)=1%R|kN)0DXvh35rF#jk6mxz3zGcf<*Dk?!T6p2_<3Kp5Ai4v< z&{si&qQ=iOwK2;PEgWJinCYtuP)G+|IR5~a8JW&Qdy~!rQC{8q$XpE>I}d>vvUIqr ztLhOhmu(PGj8JRX4rAsyf;NZ`k>s_lyq1h4j&%eT{7T=8?Zdw#xU!p{qO!3=A(Ar_ z+_wc_gwa>1G^KoTUu8DaWEWSNEtMA9=l*9eE%Qc>=e&--1pVg^0e2QznObJKY%&|T z7)5ldDzPx~llFdCDfYa?B<3*u`*evNVRWL(OM-yGlwGPP)Qpu$UH@y98krh`H7!pE~l zA(4$mPT%4km_u@{D(^$Ft3jt4W3>icB%os+e7Bh|G;-bl04rU{;#n=-BPu{@5LZLn ztw)H*k@?Tr+?H>2ZY=ql-HoDUc9wQ?%QXau zAPkPJv~?BK5rtmza;=tqZ)ePQahV{xQyjD&Zt6}X9)%xK{_Hx*!)tNnGz!a+{J}TN zAFi^g6)B)2ig@8eg=>M?JWZZ^YS||?vgHlmK@{61*!$KNLMsuFc}og;fF_lpH5A9c zzm|Sd9J$C(nVU0i`K*FeQndXrD5ubp#CT)Q9D&RnubAalzQy12A2Da#>y#tqm-%*C z9CoqBB0r^h^)6_MB5ZI%ni4~J`zs`T(=EvIysG*b&D<8r70HN=is5wvfL5F;00fQ# zxF_yS;HQ{FL{O8CSdEInU0DYttT(&h0ztnJywwSONx>7+I89Wcf5- zSS;XKm}@ABL$`%#Q;hw!_j83SH23?X^?%-iwL4`F-q8Dl%(;JcZIs1evW8}o{%+|& zJUpVU_hD}-{{Sxe&O$Ck+|QR!HOz`#t*xXX6;uUK>_us>PPn`pOPt8CnyCYR0n~W* z;%H@#A>E*$QB5#c`nAeZP?7*UDf2Qr{{Yig3s`Y!B#bIa9)f~1XXNb4B#0%U*nr*}y%Oe(woo<*8bgl5z0H5qW6B5L-rT^3$e+&=VZ|`Ig;Wn<;JL zLuqEzm-whV2ZaV1nG#2r{Z?l-iEAAfan#7>p?ygzF=A)0c`~dvY>T#~nYF3@^}|GE z(%-4K%&k>>nNnny6Ss7WU93k9z?zOY5vRfu61;?yy0b2=PPTC-wCtx|iClB_t;M-F zNqZARG-^A#d6l}Kf!4UKva04eobr|;-DC+J3HesFr-?N_rw*@iPGOSVTt$B}J1l}5 zGIj4uS7{@(P?P@L1<9Jt!3yPxyLb-N5%v?u6;UUEb>HmG1Q3SLe1r^RA>jp{#adZS8SI&L?h{<*YO{i z{kTZ$y5N>V$8~nsqWr&U#41mkye83LlxgGFuSAm40R$nKZEhr1v?qY|{n+^-Li<=T z3U^TO*RR`5DrBzM+sYA3`nEd^CCZrqsT;WBga8Zs(7Bt!@p=rSM?EJALP`W_Ux%13TE3Vb-!ij{TIMOJxjr-lXMCZ5W0s0pm}G6sZ7wD}h#OWRoeNopLlCxJ#=@sX_shaqt88nqqc36Vz$0 zGZKMPJ86y#1hUSfH0FSw2MA?|74JB1sc%dvxNWLH6(^<b!s~lA=O)FeIQ0>sxgF%L$B-@!5e9ly(OxskR!N(4g;BF;{l( zLP8Tk5{e*i_UVL@pVdSZpcTaE&erHI79DGg{s4E>0O?1Q-(f){I#g5~N9QkUsARgRNMy5452|QXxH1)>8uMA;E)fC4; zprGn$g~wzfOY#;lrMlLgxCJz&yM)WoRiekOmrzSNW=K3F~d9rPdyiOm8X`N?X+yib~?jxQ1qcB>EZr(k|1hW z*IuU`*-5}EsFLoBa4Y6uv?O%ErbeFgX&yieRQ;GKC=SxfYemxtH*GuVPbg4)P8@?l z26Z)5O>|eh+84^StvcYZB*L=YPjq-Qolih868(zBBT${y03M_K@OLe5=^Uwhd`8w= zcA-3XFrfR+8o&B_M%*B209GH*`T_fJ$%5q~ zRacCZ08xL0a1_DbbBU+UB1Hw7C|+%%l_iK3r+}^-G%!7CUZ#vGUA{gz((dFWHC{f$ z0qs6}zn)*}sCExiiT8>wqVow=h=`id8Wn765VB4~0a50u>)DLkUBp!GBWvgdYDhTL zh_L}6uE%OAH0k~E#DFAVWJ*+%=9*^O%^a(`Gx&Q4?HC_EP=Ud;Y8ns?G(HCe5gBP! z+@h~kXgXnuaHABNV$xg`P{KA>E0tzRq1=+hYqV=aTswJtG`WgM z(?tm{O}oiNVz#x)5;CwY&vKRRB~IP!D17 z!kdq)wqY%+3NQqxL*Yz7t%0toG&?4>tCfayxHTq}Jjc)8H1o{3!+P7#cXAHh=j5J* z0aMZVRPb&*a6a1Nk~9*n8&G3zm^GeeUsV%*Rk=P;9e)ylbYa>*W&kk~ZBYB`@-Wq@ z;Bhp7r8Ww)6EEJOFBZ{=*~g&#d~wcL?c`Q7WyG2=W{jE|*P+3zub5!Cgu{73O%Clg z8upw8hF6PH4$-FIXn*60t}P<;51z1xt+?}!EaZJCXuv#-VR zY_R79He3TauHZy7S z1@Jy*6CnlYX}ER7Rn@DlgG^I2+p~LHT@-~HFT%YM-E|nva>*o)Si8hm?!&g-wCG!* z@!^DgzHd_2drQdw06`agdu#ekN11yHgTkFL_1<%9mgUlB2qTb38#C@vMg#Dk!%F(% z4qx{>Bmv;Ow|iJh2U#SJn^#XOe#6%h>1pLOqJ-25I=j0>Tp=$w5~4c~UYHY@BZD<& z4Q1vdR3NFSJV)74gqAmj^=Q`y9^V z$oF?mM^W-WUyp7aFkMFN9H{8<$N(XS%U(X1W7ywCbP~q>#`Ibw-krV_=y+g_jPvD_ zyfTszhnk1VM?>j^IMy`V4r1h_1DbtDBOY5KK#{V>YA6U@0O_s=U0Q{xjmZX@Q(v@x z+$L+&8!AA;NX~^AlTS=;+V*KARahF0_(wuI4$yFbg(e(aLhz9o%k2dQfYnH+-;70L zCH#dUfrPaH6%?&fh0+0{K{P4L^B8}4C5ejf2K&kaOS-1(yIKgCG z`m%!TIcK<%IrB@ZjVS_ZPpe^WXFLgQ-6-zFW6K(8yTcut@R(^C+a)Qe`F(safkdxH zoylN))gO4m6s0c}LK24B8XMcT34-qXGC}nbcP^R$Pv?RXTSq)KV5UXjX-q4Y+9^~# zU<09GIGkkymn`c>3=MI@Ym}-RD8Xj1Nrfv(wvoYf;(T%QBf%jK%BT$#{`@YzgiH-I zAk$1i5_gdp=1|0FEBSik)Z06zmOoE3=du8dR07ed6S6!7cda8BcDymyxI=}$V~C_+h!RI4LY z6V-b?a7xDHFfljC>{nixvXizg3jU@by+d-JS8Ev!Upmu97zcA~(Z${?60B;ve7&O% z=C_VFd1GA;jtA#}xr`#+g1vjGwPXA((Ej{&wb0Tf=BtbWdu*2xEQFeIs2*fJqZ_ik zo(D)~U?xfxKm4NfBgYCmwX~6lH3LF0KKU70Cx=g`Zt@n=sNNVUG&n$33OwU6oOr}- zv&_4@mY#99LqZR)Ph19g?qZR$?7~ANiVt@yf8S2E{{Rr`I`Q;FmFAyJ7K}HIA5hPj=khx`D;W1^a>@7F0Ar525v@OX z#;qIHg((h#4+oSs|TRNgE9r zPKQq%HZSr@+5Z6J`IPiQBhQuHpZjATIf*+D7+2CO`A8#2n{y|z25zl<>AhocM{j^s+E zS%7V8r(8!QBvghw8;Je5s8LCsaiq8-Tb46vZLZfPzS|qQCLkKBjjxb+H8%m!k_SvZ zZSDfwkjz0-LOpQJ<~)t3q|pMhrl{+u!oIu@LxOo8aC1vHmSx*@ZA7_BQm3Pj15bej zW3M16cd6}_v3*Ea>73d0o+F1y_UMlrV^mRESB99Co|Rq%3Y;Rdy4@P>VdVg6*9s#W z$!>vy@xX>k%-gexTTKqQ>bZ9SwMBK)jwP9bDJnQ|rV~ass3)ei$8*MT$&iyNxGgJ zI1Xrp>KBQ?myw=!W&jnh4w$tfTr?Bn-R9#!13MAoF*HN!3c{74BX*rIm7EFyx|;r2 zUzMPZ7?IFaoLq{|H--jJEU@LuvB(&LXc+-C75@M{Cb+wbW~i6Ur0ig5ML)h6)#Q?s zK<0x=*A4vS%M`F(Ld5_TCYp~7F|=zml(=)cO=(dJNpgNk-5bU#+li)T zwIc(=1L_V_^aGQ*rp_Vs&`G;1xT8i78*|Wx#`L9kjv{ zlt-r?A$oj9B3hstWX;K1lomT-0_`cRFG$#J6kexX1e%v*+5NepKhSIdr&Aoc|#_nXYwUXOAF7zHl z#-h3(-Y_9UEdWX92TA!a|*P!^7;uNv|XdnT@)sc)+TSDnAfE3>wR?lI{rNLLG|!nO-b7f_#5&D~R)D@r-Ff zb!AwBJVC;q7*90wWwe^Ss~ zy4;y(o8-xz8)Y}p6B9Pw8$+XZ1E#*X^M&=RB=nWax{^_!s_Ub8^vBZoMe=Xh3&@NQ zO!!CKo1I&h_^^JHig~2v+A=*8H*-uYG6W2)3lO@VnjgOxC%63975rB4$st>~!m9(q zNU2Kr9v@~Y_`+P-cku??v;{~ScKV8Gg50Z^++{c7G$0z5h?7yU@n0P)hThvI<)V|E zkKNbH-Oq;yXyx%6J4E!HGpyDz+(k(V8>Eabj5iQ=p0!$f94^aT*?x$Skd!gMLZ^j& zcziI|<&4l>+lV0uAs%Snx*F<-0@$Ea{C6s?0M~DZ&>-OUY`$e))XWDFT zQ*e|#jL6yR@g9-k3?lNx2-$bW0|QJVb^tV75Y^)Z>$Lpo@H+Zp45u*`*8$@PXUa($ zP~e^RTT969R4%*TJp}}eg>@V#LHl*YN&YoyGghDbhQiU9!2Dq7E*ZS#nVWad*1d5I zuQi;jat77}F*L13dodlOqsQJUAU$7c8iUjk+71a8ON2#5qX9!+xM4aKmJoEOy+vz? z$`Q$~yQWFwxTJHgl{{YLfLn4GlVnWunB%iYnzFfF1 z5rK}i+%@Tl>&EHk5`T5SsAyDMJ*r(>NozO^7!X10hQ*^vX2!}>wnz;S{{RrK9x|v6 z-c(fShUYZdG-Weub=*{Kk!i;WVRbqV-*{!?dPjOQPq*Va*;8!kI{9O`19yXeV+8W~ zo;PUC7N)cu0qai=xD{b@9rb~TFPYSp*Mn0{dRK-g%h}t!Mg%luZ7-pq&{xpu=y7GH zpo1vVu?kK`Iv|ipg>fR%n-9YSZDt?|4uI&uo(HJH_wo+&ZrBB&7V0+pHhdzRDcTtt+DiFN2AvNNzX~o8mJ(K+K?kl9-IlkN zZa~mz-XQ+~b;8tAHx)a!Ng@2HTws0srA{jW+oH!f`keKD!tq9ZC1s$m?#NY~j z_#K&*3sf~V(w(?!4Ks;YBvfpIuWsXzHL;Uxk~JLC;?jZ#AG2o)2L-E2nB1X z)E`>ok~0Ie4G9&ln8dHNg1tDJ;9w!=3AT_c@ufVxF&mL0)oHIBLhs(KQK`pVaU|S9 zAkh8Tuo9%qvl=mC1vm~G;wErFBS1juj@$+Xw$#^+dvKp|U?>Tv99#)Zr0`sb+e4_= z1zCQk3MuoCGM>g5Z?v01Ct9C|3FX(dA|c>LJhYs|suUGe8N1tWsJ2_UhnkzI>BM5Y z=F#-o?VQLBCMpR7i3j}gYQUhGVIXa9I{F?zek-4IEKDCsGNCGy4xTvT7h0xOZD}cA zUJ&9dJryVk^M9Tu`e)b>GL8nIV^(0i5x5E}f}KwcZsu@{-NrXKG}ERVQce+gBvj3` zwy{)8=R5}-Bvf~!xnLXRMERT3uy~wFYiTXT$c+=dnx1<6sp7}>alw;i1&k$&capcv z=Z~QM*x^!J!)&Naml&rmz9*@Ops7s(QzB6#b?yidZInb*qAP^t%0t9W4^ zYkLM=X7^IatjKDSfn9%o8CM+dncV`gz@#uMy+A6Oa6P98D_f^ZA&6nCRQHbI?t1m4 zcimpac@RdPI2G7Nf<_7nCV^;rlhX}c_*`4(w$`^YmX0X5?4<*4Bvze*l>2bf<=$wy zx8@maxsK)UtnP~>qEZTo&rk=;PC8-p?j?-#=nwcn$lLcmZldpM<<3Zw2_F+M6&2u1Nxr65+pKR zcb2lPZejBpjU-;txGo=rPOf%6Wi;7a7?kvG$i)ZL;iRt zZ*v{U9BcBE`|zcL4Pgi&LYrckNRSvwJ535V?8004WLFA_zyAP~>^P9tCU4>F{vQ#E zWO7hG>bDSkaX@HlCsdt6h9Y2*#w3qTbqlR4*Bg#fimaPflo|~I95I&L0|!7re<@M; zYt(pS0H{*xz>Rkfp183Ui%*ooFx(;iO3-mW2d+BP2aN0*gHMJ7TwKd+k@qnYz?PMc zv`lh5)Ad#`Yf1y+2;+(rZH`03BMM6>01!cM%MmP%-Uj|HIBAT^%EUU4Ek%FJ7~ES^ zQB5n40WMWBm?B9T-nCl&hqoEF8`ZavO*S^1ML6PgMYshSPw<^_m@OVVj_Jiq5~hZr zsTzHU7Y2fnWK`5dpGhT<7SX#rY{8I`zk*g`e}7Ucr|8uau!{{X`e z%g1vcb6ObNayN*=I>(qm$#EJMHI7Bnq<&Z`-Qvo%=f*_u3nX4LSr{DBcoEmMMwPs= z-`lOLOIM|0cKp0>f$ml|NLXqMEe~%|>y1s8U1S-HShBlYx!-Fc*Ftn31BF?Qpt>FS z{WhMe=7aR);0X1>s!BofoDL#HTRgQUj*2Nb5!bBF}d6FIP3Alx07=SW0vD0 z?~H#|R^rvktu7OSkM{#iDd0*dc6%R&1{}!^xu|WYh{$&0J7bT$gsS%h?NhLZHDExd zr?(JItyq8u?84jiM}jNZ;s~?(iiP=HA22>Ot`W{aKoD_LU4G0)AZftKw@6o+J8_6E zZXF|Xt*BaxVtAxySndl7Z51Q$!28cB+pwJ}>4_}oUdEDV^<$>{dPEsgj@J+y!gHsKg>Ft4P$?T`6L>caU(PZX9t7zS0o>FbMc!cRS)&rkoBsbCpg~8>J6zQ&LAjFxSk% zGJv9_8sXN9z7~v=Kn}i`Yi89lY}G?3p&n9otuWS3F&87r1Wyn%5njem6W0#Bk|^f4 z?^(A!E5nW(7d2rV%${Lg^x<0c!OmE@A(2fh^7!`C1Uw0DvO3K{59vE+bDmbVzeKpV zjKstO;+i_1A%+`vd0pmPc=n0in{)+|O8JJB3PJJ3ktg~OPzmA%aNN%04CwB5rATr# zJ|DXaV&Pvw${BfL(vNza3~_RO$JMm4OhFUE0Urt+FioJal2(|IwnA9I>?NpA*uQ=b z@}6j;Ik!kWhz$sD#0O{Fg&fzF1iZ{*00f!$?qfmc;rEIxk|;7u@_m9p!ro4Icd z%E=`1ck|3Pp_TT5Qa~Ee4RJMZXoLZ9C{sa!%kA#-s$G)x2Q?4~prU%^ww1hp<`&oX zfg>B8CzE2h6rkO%*73pUIrl4@J6lAV8c=tMW`F8+s3^y5c6tMirW|uPE%QI z@)FuxxHM4%I%CXy#IL!Zm+md*js!K9IhtEZ58^eWA@M3er)V9xFO^CNv?y(*B3>=c>ohaAnLLT5xX?PU5pi1P?0No_9CQ@)Bt zbS$LpJAt9lvYmS|LXAmuO1`e4qYQoJGb(N*8^pTx|k#J0|%u|(3xUh3M8+G zU+>2eT4b-9Op@=}3}kuFUjc<7dPX@yTxhJ}oNipQi5fa_)O5l(jF}m$qj4TMvj;2W z$ro}Hd$x>C3BVk~kuEnAmECUy{F1KFz7-uYWL+Sd93>px&Vf;nL}(crGqphT@ipLZ zk=Rfva65ZW9P7w=?!R3&U2L3L{;zNYwwr5(w%ny0jj-3?*eJG} zt95D5XGnqSCKT3#T2e;6mOxX?I?cyC4jUE-NkD1x{3nlPf~H4DpHM3 zGh&dGCY^mEX)Uc{k~yyU%E4nob#Bsp1|d~jyO|zX{{YiFR)#0$(bv6%PR;$ zGz%Y1zP)L;D-CKGlI8dlX3cmD=N@)KL`%$Rsx4sI%7!$e@e@+24SHiuWmk`9fX(E zgHfhAETtkI13`q5SXfq?@r*8Q_TMb$X}*&(X(4#a7%pL;k_KfeO4m(PkU{8r9dI7! z*=+AFf^X^Bjg{jn_i(LDL;@(geoQV($%2gXCh;VxW;<@?>?fjjHi0HDNql;#3h}~> zxe8h)$^zq0PJ*78ttg7^GQnEiroj|~9GV>(ojQ2_cvTXsu`V~!5+sQjm%C5_q22qixgs*m9Gb5I=rJ4-P#Fk6W~U2cMNK->2wI_S zB5VpRKnABBcM2-aOmxu&dJHF#jFdF%rFEx{6a`^K=@Vq`8+&SX#ELc`;a<3cFbM*r zfls>=6H)1=Iz+8@$eDvnN{=Y5JaE_NJE0A_TC9q#DWD&>4klCns_03>KQM^re9doa z0-)KDwpG0!b9mpZ}5K`YekUd?d?Yu;^&y1P`Klo*TZ1cah$Ny3{%CPr<% z7ih)u5{JxU^`WgPN>F3vP}0((m8lruY9%$(L5)IyRQxcg;U-`JrE!u#txt|VcA>7i zYlvqKE6dh{EV zXnJ6>G>9Tjr4v59aFJ~Wga8MQ64~ud%s41I{LnqEzNfc0mzkVhp z6j!c;juXVim^mZP$4?AyNeZElq3gp;bnu)=z?h3Mle)KWFsmBiaB`p$blNHTX^C^m z$N(*AP93`80#=I5Pngrvm?g30fV!{bBZTWIo_KAyk2CA&FjJf-`d&~=WO^IRg^UmI zfy45`9I7EcXr`pBYe7!ah`qk;c>pq>*39j0(E8M*VmPoR2btuAjFZlIlF-;^Q;6n{R(|?g-ML z8V_9n$9J=x#fms8D@_f09BEhuw$eBW^NZI-!|pF(CZC9eFBMl%&8bp2(-T@swP3D{ ztkegv(}BdYrsByU*&>>Pyc(P|!e+K;&iDWl=ruYT{&+Df1W?G;G*W6IO~K--g>s`+ z0-hDZX{B~?5d>~J2GdG@%tviE)9zADH;oRYSN08YH+Zr#7eMir(1TLGgVUxjE|pYg zHEjLc00Cxim$2b!Sf<(yDqm{1W|cJicwrMQzj&08l7n41(EiLQ+`4Tw0PY8epg2;Y zjjEaB7h6m8%&P0cv^+x$9I~D%QnC<18f(Dew+x;4c@w>Bs)L~o*bk@Mg?7?OZouzy zgmD78_8boCYttmH-WlwR^Gu#Q#AyJduLc9d@53@{31N0o7)PxLrF zK%@$q*W-lQmQ5Av5(O$~r>${TZi{C^=dSm9Uj9~wJ9_bqbRJNwM`DH?d=E@%o$cFl z0)~_-b@d)NTbNi+YTH~;sM@RrdTMZtFkrFV9nsfD2e-!t6;xF+Femz}Iq_(2qV8TD z=uLLl%!k7oww~)LYNUbSeK#)y>)D8>g{`*AuH^^>IQ%}pzY|-8HSeRNeW4VvAeHeQLBR~aGM3-Gw7m>r6#)s-tocdxI%xc2cWOYPZ22=8b(2ge%+{Uw~ zaIdmj0+aCs4gjCq#}-0TJgUTT_`sbmDEEz;D!F{eKY3&F*EQN_7V_EMI{u`6+bKFR zJvGyfKFl^VJ9(a27SdrNA==dypaz&_#eFrjlpx1-9*-D4Ql$LYcx0EWo50dk!z^cj z;(UHM3HwjelBWKXpDC-|8`U>y2)g>yS{^^1QO(Ox%Wh&##nnhFv}g|>QHzF4T(>#O z0J%hFRiSVIWj+TL9z!v=DQx9f@c?K=JUZd&lIK&~T=y*^_in;~Qj9;on1H-wgH+}w z>vvtH^pq@A7>hc{p-_ee+Uf}}T6wEMQR#>>`_`40ExfAFU8&+cJP&3p2=b}(OO<%y zS%o~TN0mp87XJX@e79+P7H2)Te{~7msb3&(;-~g7C+gA@rFp|f?q0s}td4cz8hK7l zD_xik$&NppyKPYiQaX=H;o}4ub%aJcHR(es`M7lK#Ce45=gAOVXaax$z~MZqyIk(A zK|P(g6>cfq(B;HQ8kSHE2EV@vB#qPtT|m~D&8_i}cM~m18b3qhi6odp{$(XtQl2>I ztf`^IPrjg{Z-^-%SH$>ZGXA7uL^Twz`C%Q*hvr&{hQHK3TFl;{blTK%UTr7@M& zs{=T$QR?Iq?nIPI`56ePNeu_F{@jFzfz`z^`<>LO@=0!M3J(& zs~spb)3*r>T$l-LsWnS?`XaP9oC}qLc zE4C!Kw;R|B2@$HTgj<%PK%_D_XIgxO9wYO?8LKI%ATc#QI3IG=YOQyT38se)P9l(J z1r1`@E>w+xhEg=A;?oh&9B!s2p-o5!(}oAF!BQ20(9}~+dSO&I5trLDF6O7l98xKW zmJS697%uBC3cFp&JQlnUW)Y-GAuBS_A1O}8!l*g5kITLw^wc_(PrLDJ+KO-S$aAs2oV(eQ`#V0noVX zmWs!G*KBQtSVodRa^UPND9h?NRAWwpc*C*-Lq`L&br_vvHzrGX{{T)^qbNG=J!n23 zeiGU=kiN%88%+o&hwm699~c6YTs9fon|7TyaFHvgZ;legz*0hW1J1n|e*6`98bD`= z*Ujb}K=8sF%WbkN+n*uPg*YD1L-%2*UdSWNljf&hxyZ8%Hn~WyY~&{95&C_S58)^B zJq`d#8G=YNth%tC^zNwIVv@Ai{3lRHZ^I5NM`95pjr`70xOoK$srxCXZWGDMm+>=A3jt$h*k@f&aAuez17S{j)ApD zrlP%_MkKVlJCu>N%L=gk3_oGRQpS7Cp6)3jSuP@d5rO{zT|b2X0El+s&gKhxpDp!jq>4`nciS`C^Hq~-92+FhHJ)mSWMIP?9xFr;(k*D7}JpgX+kIv(6A5&<*F zSkN}0^z`r}4f|)2kX%O9Un~IUm}V)Nh+)A% zHTA-~X=vmzuTfK63W|1)K}ht{zvYFN>BCxCJ^LIASZiXl@g^V^hUWIE839hGVY7vVAcGZLX)LGa81DjY2D2K_r2t>Q~3N z8#1=E=qLs&Nc_yyt*36FfrK&z?}Ubx6sEj8aGEybPt9o<;|O!(!$c5sY(CI{d^Bn*}h0 znH_q!23bwU?Hd+YmX0k*m={{X(W1C4sRidVEzyKzW! zuPid$yBJv}QoDfzQB4n_7?azZo9v3_44LjGf+r??s^|)RJj>8mjWtp_gHFszUZp$A z+=p;deL3_InCaRCj%NJsySCq8)e8cnh^`>;QdLk7FxFa&ln*Hs>cM!?lU)l!NIf$q!T}n9fDfJvi4|53;Lmp#g zB~oCrDIIDn{#g0*_RcW6EK{#u$@O;kgEwq^pu(Xd;F!vdmSaWo9&H5w}o} zO%KFV66P?8;};MS-yt+0aqvG4Fw&bfHt zKZS=CuVKVI);qal&g`6bkvJ?{fE1^jz=Blx9}GohncLmkCdPi|bp=$Kv`h^sPf|F2 zhX$W56r7K|hVMd@rW`(G%gXq}hGS28QKAnvMjT0(~*&uW~sSOq)2C-(z<&xhYE2 zFx8f)v}^X`(XW_6Ya+l&X`YN#b=oV}vjBa^$&;C~sV;R%Ew&jd0Stc&j?N`dh7a6# z>an;L`c;AX86EeoNOv4@4+nREg5~((Cw?lORY@f{ccg(ZLJa$Ptx=5_)6D>;2DNs*9MSdg47Y<-yMrU6te^axsjj{U_G0Jc{$)(fJLj}9Gs(6{!&F3itxrOD zV>P}ltNf`LP2bvE!%DwQrBLkX{2sZ>2FhiIRS_|0WgYA_)|&Z{_=AT{oXeYK<_eJD zP!Ys>e|<2-*^GVDb;M^rx4R$G zbSopXuLJ0LNHcn6S1RFuPUXK*hXt5ubnz58A!f*S%vc(0PS9|tI<$u7&E1=B`Y}C@ zI2eqJuwZ%ymLbK@(Qeg_|V{YE#HaYSmZunG}opK%%egv4xmt~OzI1$0I z9!oOZS;ZvDvPNBm{{Vm82*HY1c#!7ZvMmjkTr6zNc*1t`cXLvul28Rm{9O;(*R)`z zxiOYkU}$voz*Gh!^zKQmLY2WtW@#c0O&v`e$H(J=988gATOk5BAr+xLd~pNsk~6QI zaMP&7kdW!dy|~LZ*+oW-KKv&rS;SUy2?46qkxGnxIt@)UJaNZf>BEDe)}5MaF(@Kc zByc$IIZ!Gzm=fb^F-HNF^za7)Y>b&@^PcRJY)p!)rudkS@DERzc#I#sO{cvHQyzo? z#9(#I4Zb_b=+6yEQ^A4L1vacGcF5v)B8T` zNo{otLaG?;K}83RJ3bgsa~O)?N{!`x4~JpGz|AHUPD>IT&O+=ai&h6~dSOOgmn@`7 zGSrPvXQmWEXeIKIQpa5|K_gg3-odUYRY6G2H8qJd8#rz)+BZN}nu=j1z0u1Db$=p- z0+G$pg=hinJTOi}R?z6f38ag>kGXPp1LbbR(BsKfMGjJmMHQ(z#Zrjf3ll=R5;%i| zbE_}}k*^wc#w}!*y)l#K2T*u=;ZTge=#6M~2ORoi!PX$ue&`sOjW~K^tswzaPzvrH zF{$BT!*HP1hqD|u=er5JP--yRh?0{qNIDbqal(0-V)B9ZVn^M$X|JaYan_)KNjhVq zaN`rophr{ko|uNt@Fbv}C};*IxN)>bLF3t4;BQ(n*ChbIw8GW@2o}Mwp5>iTx)4PggzH>5A8gT(!$uelV?yf>ZDGd9 zjf;Jz)+kZ-%*ZM~h;<{d_+VYuV$FB-7JsL=StX@*it+XA!-?|bhTt@!RX{^2j13Kc zZWKk7G2^Xt@xe^@n3Bgfw6wN}yF5|{aluO|+xM`lJyv!qe_OlsXmokINUoCrUFeSB5+G-i;gE8tb|y^3eKJ zeVD2z$bP=cM4UWvPMeupgu+OvQbv^r4<1~)&TV;OHMe0SpxvtK=WPQ4*0cu;yeV;n zqP}2#CHHC}q?D4H#p6!S(S*3Ma-v2G z_x$_ETehv(grP*1&fN5q{{Yw9Ym*f;)vFfr?Oc*Qf5msBVU6zeRGJCtU+{lhXjLI!$&-_MGnpD~QXlTF74B0s7H7 zdwEWTaYIUsO$1ZK-QiF``GD#vrZH$9#%V1sJkUyNM^!yf?ZVhZus3s~lm45wp_K7c zg{adAN)ujFYdk=xf0cm))3etf4XR2osT!&2Oht79tXtwN6^Rt;hZ(k*$^QT=GSP>~ z-7!iG#Jx^NNg^pGw5ZmHhx{;&j_C@dff&x{a_2rEEHG&JFkgGjX| zxQH_PW`Mjj46CRd0URmgjOEaGO;=;OLA{v%SX^U6BbipLO-i1gn1i}8HrG3YA1h&i z)-0rhSg&$|Y4_u`1A14=r9nM})}N8WB@#^KSkR%aoP02|Si*@Tr4JsyxTzG3O6xup zjE1Q-Z3Y&1n;j+wjSFt!Un$U!vk8-A5J5MPi`Hs&EG`Uk`h-!D~N{W1kvPHbma+e9uC47%vk*}S>-C4E$1GT=6U3C)XIy2Yl;#lgPFEx%O|wkuSPG4o09U5~;CfUMgk{Hg0qLO{ z=y6-}pEb*rUb->|U;$+hK{RCfcAkthAoL>^j8_nI9hdcdz3RjLMLH0Anshy*_8bFq zZdq2Xl2*#?H!bNW%plCgH=&UM?KHsKE6At0+6e>$yVtN_&c=3V$uv5HLNpA)ZLFiy}u#@LM`A{Rsi0>lmgodG;B z*UPS!+T~^~MPdOSyg$DjJFSXGI>@{Y4k+eP_T*}WZLQYkH!=ndU7IVR(zs2kD()H% zBgYH!*%|KTjX?&X#Sf@BNjP~fB!Nv79`e2w;r8HAaUjVBihz3}V!@lYr=}!;mxbaw zP-EwTVOrNxaSSpZ@NTM>sn-n5MGOrj@u_9qT6XoRz%23q`G$^YNF&D@yI_Gx1d>Xf zdvHExXcjq8{{W=bJ|l(?NY;`JgLszK7B)*1NRnG5pbs}*&2Zc1nR}?k4Mi)*PYe;s za|1P)5-Hp$r?B|oA2&!|-Bf8Y2fMEWt^{Qic9LE9LhZ`O2nQp+7VEjQf;V zUg@+a?I#7_wWf}awUN83-r<^Xkn4OBl3NHJL$#{sNPAB_x6iujKD!+N5xCTiHl7BYaNXsebHC*K8%(+`TM20eLP>7mKJsc=>r%{ht8qPX zXY&65yOQ3qj_)eiq=oOLxe7oa)P>qh5Cv#H>_y%&c+XaO7rDe>{fOzz#~y02~j z08aag?@#tnRcd_z8vw$S&l#RqY;Aw0%NUL%3mQA25?4Vx*mM?{FJF%4LGm%Ff0j;e?9_GTa!>ft%(Ebf_P0 z0p;AQaQPHd!y-j9AqF`{-4BkuPj5MVZ!Iz2ht1zerf|$DbBi=qi z=eT2!mAS6cYnL8NNf^a(Ue4}77@t6K<6n0^A>tf=q?$Q=hfv=TV zbD-?PhJLMEU$wilPUVW}sUVMm!W{dUBg-uX?a^zA=5FfR(OQAriqp^mQhPDs{{U_M z_V;&};kL0(U^(57m14BcL7b{rib@ETG~wnW!xzUd`_;?*#eS=t<+A0os1ZdmxbI*j z(|FyqGHcoh(v`+)@9o>073xq5PZaz!9hI9qPrPh5fbLsaLh_=90Q8Ea&}C9N%YT>c zFEfdS=6fiV({ez*SeO2v->w}Jh|vPdqDDFZ1ppox4a!-DTX~l(_VWo_=2N&3RPZ2* zgX#_s<=?F_X8^GA&~^+!Jfo=B3T&E-c7~Co8tu-qrRQju>ts#}vjQvFRN=SDnN-== zJmpppM#V(wJoOa|9A|Mqa2}@?k2dl>-g|#rE0u?H16Epr>qDr)zEkA;9!Se%`W8#P z%It%2cH?bFMNzF3c6B)P7iswwxCck}7!6R)YicF&w0nkd4}!o<4^J zZHD0N6jZTafWlnL(iwJ^U8HMJXhyj5X{u4pS|EiFZ!XEUo%G}V=zK;K-iB!x{$!Lr z9Z9Fh9J{$f%@ep*jka#+M;hWdl1sWG+z^AzTZ#B!oj6p$d(3Dthw{l$VG9`sx)VxN z;a$bbsoERk+Hg7(^sp*zDj|;2ge&awPYj%z+p55))P{ZO|oA0H$Hl6+lXdZ z-*t671u@OU$y32`oxpyx6R7f!+lx|Et89s%(5 z-@R8=@)<}jdeCshQd$1GCgV~;Zv`9%E)tl9EpctlR?EC5g}mDR*hOoXJdqZW2xleB z9=)G-GTEYE=1Z5w@}9eBYImml3aiH=Bt$u7wC=E`8@WxX@SdBYzqy*5A1_UNaAW|p4y-Rr@wkqaJmSjS! zRZk3Ph=W-BsBga$Xk&0HCD}MxbJ3qo8A5DaVa)D=v?|O~H?tlS)vI z+!=vKcA>a|L+UZbfSe_pQk)erp^#h&?#PgjHni}=mLw4<27t9m@WV$VX8y8@riyxa z9dPfI(fZ==3LGM>lvXNc%?%f`TuT|E&<%fX6UXMM<6p}PRH&$~qwc~CEiyJNU1>^E zxF4L{GDWdlX{Z<^#FhbT+rt2JqFPiXj)c^9>7{XYg;f^uq6`;K@>PruElqG@U8xO7 z;6MO&U|o`p&m$Ub2U2jd>Qz*zYSC$4l{#VSH8hDpqDg`~$7x-pPyy42_tOjGlr;bp zPyrR`!wBO>mReGjspEyVu@>7an)i%N0N^_@t7+cM(zBO>mx5un;&X zpzy@b15RtGjYm$W{IH(vlSQx0dUj)iT~kWH5k(pRbo9n9Bv;tHY38mzWTD+wBA%7P z8;My#JE&<&4_sIZnaa>a8JxZK&;affsU5gUB-J5%KI2SsX-|CHYvmLt2-({0YZ8%azI=o7wqm-aC-EKOGBmjC0RbKaV3)S@Q`EK9jgUz$cg^x?Ls@2)iS z1F&L!gpc0O8(S4DW)e?n@{dw{BSo%O#K!i?SWpQ3tx}9X;exjJ7WeTLSJ^N+DHN!u zk59`D6}g{&*yRzucr|F}rEsnr`C}4XDP@rcu{9`3J-ws18r8BEDl?xXZs|;_ix?ib zMYFEZ^`EgEheZ|~8(Rva9u7gl;p3eH_Vct9{V{jN# zf&JJ-vNgN1?j?6olC=Q#VrzStt>bnbaa{m#bm3RJAmzpdyvm?EHoe+Fp0duxhG71AzyvaL$7MIb+!>hT1lU{lBvk8{6wC zm7--Jl0!K@T2i3)j?az-a^GGXWUD*OHAQA4w)Vo#;eS+arl9bs_3gtyGs;@oq-f%4 zA#Gc7=qsqFL-73Y=dsMAl>{xfYUpDm9io~Ldn>@>H_?PfV^@j3Zo%-vT3VV`l|wEY zZs|SadG*dSEtz8`H$CM=8DEF|F%{H*)1^mh{WH*m$Gbf~7$cZiyid9%Y7ttFnttw> zO7p`sM#gfi3EFF+_;!yB60CY8ZAj#y)`y6jvA8u<-?)=halwbKGnwTpB&~Iqf+Zq` zF~Pc%PL1~*47ZW;dxET`;^VfJ(!5mu%sDJ&hUyi%Nm1h~aNbY_2`x? zw|;^K3L8FSuS^qRnX_$%a>xMNPs9M>r|iO|Ng`dMg9w^L_B-G)zl8eUsQu=ys8 z4UVT$2LMN2IL=jnb(hYrg`<@SE}Rtj)5jAVb9&LqXzaz@1yowIG2kdV;@IS`<=;K# zIPLR3ah6&DD>Yp-Onp^XJh7b;!mbA3S31ywqYYXJ8n`mM2?E$dvN7QNM77Y0^8Wzi+B)~AMNlRG4xRP z54qg7@;t|{ZYH;raN)6sl=$N_$GIw>_RUJ-HcsL(kz8BHB|sil*Ig;;fcI9WBl>!< z94qq=3=&(4NgQrY*E@YYF}dvy;Xrp%wd}=`X(*wp35+Wz5CZi704xl<+LU;eY7Jd` z1`SVbM(+_#J2>lvcNSolkPk5xI&kqAa!A_+aR!({zgZGON>py`(2m?q9%7*iJsFr1 ztz9XES&R)CY6hv{P6S|GoYH@%AR%`USn(KeY$#MgOX_UtF!j5;%!+BXO?Pqh7&*07 z27nU12V4NO4hUH^6dO-NgJ|YR)qy9=>B9(KaJCIWpCdF>-Cd`N>_597NZNOWDmD8t z!Ma%4wG21|+u4j%f~v}BPhJB~7_4t83puraC&)({rr1+!mT1_~TdMdRTpGo#Cn%YdyKeF!q=K~LUc-eJ@)5UaAxPAI+-V?M zG;Lan6o2pgt}`NS{Xm6?HFf=?_hZJAi3KKoI#cx{;p^7}=V7>Q6l278;D~i<(SBpV zbn(Jlr~qKh51;PE(5c50s8m5yIM~vK-5De`dK@<;%r54fJTnl{$wbnijegqU$DYG1 zR(CfxereVg*&7O^hMY+48Xp>AJ%&wcETCwvnV3e3Hyx#oDop^=rn+FHsUnq;Zl%Q% z5rGh%U7DHEQsyUK0gVp2Vq5!VkQowzsj2Yo#Q9y4!@4FCHse#T$=6Q|EuPX9N0Jp{ zcrx**>U=PT6zakj(p)I>;~TbWqC*3K1waOz4`-prZf&H6Wry~qX$(E zjst(fE|Q>-%KsNw@3Yv|jLc zbqyJ-58)%Pr7*;tXku2AO+&9Jj`qky7t@AxhGs1jP@d*aH2(TyIUa1$Pc%}xgx|JA z{{ZCQx6t+Y92B<^-r5wo2lW6h0r^{_4^PVgE+BX>U%aC_rq)$8EC=~&Fk%!QNkXJ6 z?XJz#yw+WC>#);ck3Fww$uhGl73r-G7Nl{cqIk59O<8*h<6HvetN1Rg&RcOQk(6$Y z`j!6xEj}166ANh!R|cY+NF7E1Qb;;Za(%ZFpcb5up@*UoNKo*SD(%-s2SZVXw!i~H z!L&8t4g%ZE5&NlRC4f?fpEe34=^}<21~fJ4fR>sWFw2z@K~^lrfOd-Ojg<_&*mG4C z6g+Xj+tij}xG_*brB|oN9Pd$Ab1@1CT?Z4_?8PWy1c-|;%j3*#S~(W4zg)4HN$W4Nj_i z2s&WATehnTor0s+w+YiELxW^jEZx*Xf~4@mJE>b}rh|#cWS4ZI7Oc%qJu8HFl9^{{ z(D_sf_|t|u6S6JG0TrEuiC=tzy-4XyeBjA4GXPdbro0EPB-mqtQAVz5Q;D{w$tz8| zC?~V2$7v{$Q!6Z^-Ta#~ySdA5p-XJu#occ5^3<9=gogo6q^&g`I#&kmdD|e&;Y*Ca zFj-@ofE}cHj|z^MuRY)83AuAVx%Uqywu!CtbdD_93hvo5fTC(~+UTkphenJy6NZJ`2(yZueFf_wZ*^%_k&GAv*GM82Zf#6SHOd!5jl?2hQ;)0a`(Dvb_ z$lU0h*OXgd@9rdE7I=ZEic$WgX1qmfPXaLajELMUY#bUAwWum_65~p@R+S7y)vL)e^y&N6GI~#%)OLTV~tuce(~$!iMu=92fJCo`hLgI znTp>#ptykZBN3S6QU3tg4#lM>Y+_|M*`vg{&QZ8s#}S6&3Q$NB&9x+w) zIhw;g$s>{(0kgXV&^E9+6=dxi)cv@rZQ5Ax;LKn>+;^l2l}547I-d&H2g5%u+(*o| zQ0&UD8DY(!Rnp#4Xp@1^7Bp}3$FCVp$MC37{{UbA03ZJV9}S{cb6&Y*KU9OM87y$G z_XC0cGum7-wZyqbbdfS2vp8W+oP6#L!dVMOW2uMjYAFD5qmagj2xB(w>I^xuG4? zy?`<}V>Av1pmBBZ){H#}#jRT^3SoJUwSsRuu!4)mdV`ogqo$l=(aK%hOA|&Uc%x{f z1B)Txdw=18bI*O2C709ptYO~np|xS!zB<(6ERQ{G%PSXg0Jl*oNupEpupVG5(D4{> zLv3xDT3ay+j1^>o&q)B&;6b4sMhLf8bh<2Ix2LW>2b61{_ly;?alnJhwH>%n*J$Ti z_D7yA%6Da}TAGu@*A6QyikG&XM372^6*`tvqc6bl#c_8t<+oyJArY{0NRXm{OUWSwg+Mi}6_}m?0!gMk!_C~8 znR2b|#jKXoD%#x15;Xzxja1ZWz>I2l4)R6IU#3~}C)7`#ee3q~))!x{Z9m55H5(4v z@UDFEn7X%;TWzI5ByHR}w?q3d;N-l~ZIwIc*k(@ZR%Sj|28w(;51=>$VRYA4B<-aD zj$y#9dXBZ=e%xXwmd^R0bYQLJdg6M2Jd}+2e?B>=NcV6@#wOeL%(%Q{TmRS_eBN0Ddl&^}&WgJV2-+l+d1}c4Ngw z1Q8Y*OUNi!?jmf8^{nTGBX=bTMzuw{(OGP%-ko5;7z6s$L)S}Lg0 zf}Lsh(+@d=G<8mgt_5aR>ve8pbq1sCJq`qER5UqBOO}d-Q=EmFo`8>(S9j(1VP&MD z0Fyu|wSeib_x9lwVdRP_2qn;!U=I`5^2Dm^q@eja4-4v=}8c=&_Pm zRfeXx7nojL+DRRbT?sc*sA*&ZrE9@gu+xe0#gl~di3b@Bkz88LEhH$UjnuE3vxgqT zf;QIjJ-ZeFup_R$xI<-?&-Dt?I5NmVmf?owMdEhX=WdnYJaFTl1Th&QAxeVEK;fqk z5sxXrP7!$j4VPq01Br)+GxDN%^^eZHuS5gf{DM8n>5@gqFbrf@k1P~YD(-u+Lz8FgC}j4gfW%#=E5M>BQ8I z9B`s*NmX|$({8=EiAXLg4La$-;lR{k1yH2joTfJm-JkQrj@|ddI98Yd83C$SU*S@4 zLdNtX6lmlLPyr*QJ3BC!Myy0@3JAcMx^p2yYvn7#oDZ%9-C1|_c&;Xax|rKW^%yl! zK{W+VxJfKKH3vd)v@1!%HPmYu%I}yUY_j4TnP!q#604GQ&>ctFhJJs^QF8`ko7=$> z#F1SvNsOw5lB&djc#5~jTv`0%l|ANLBSf`*rkZu8hXA>1-YKWOnnh#Y>|#$685Gof zP9#xqru4jnj$b(p<%%vtmd_6^1b7jgs(EYM2ISk#m zadz$3@+j2E>mA!~yNBu9NeRbob3FO=#wL@JCz3Y?`c-Ng_i@wnI^eVrm9CznryQ4g9|8Y zcHjUNsrb}-QwXjhk_HgmS8){#I5%T@^gnJ2)D~oVP+7xgw=aY+w=w2$CEWtbhs->G zeiqxxl@Tza9ag`G!wri&@28W$Kk0)>R+TI}MjR4sA!UvCLnR0`;ewT0E)=snc4ffmv(@L9Y>Bf@&Z9xe*8l$+gL0_2R>x44?~VL%E{h^Dj13>{4HHZ zElS1mk~hxoHPg34i2SY$Y&h`OfyRMZfAu3^ucnMUaeb8;#bk7xjBH&)^miTlioq$>X<8f{%Wf9_$lJX^RoV|9LteO3 zo@LR^Zud}srhaixl>Y!1@56H}zH1wXMl{oD7$&{*bs32qQf(g6ucXB{R!wO+0d$an zXbB4c0K^Zb26q9`?IrRgk4VWnM=x)HKan_eAxy&GyebCP+T^WjIuU_4Hd-`92HG~T zrn_s$;f}WN9O9q0(sd^zDz0zKk1XCNG$b-Ty;>>ZLtf?1hyI?wZU}NmIp$oye)m&I z(pyf{Fz9Fp4~;8_rOlPLX>UEHQMq!*D45U$9c6L|O6wZBVobrZb_DbFDv{l&W z@kTUL;%QKEHE*Kz1*Lsner01E zAS_I>+s>6o8tw;%A)mKZqm(&pntMCex05=OaoRY3@sn$HHN})}ku6XaZS6r({{Rd- zd2cxxj3p#$O$pQk(BZ3L0^8=-Sv;U@WiqJg!(WaF#L;EhkiGAOZQZJsA1m<(?xqm( zh*d^W*5-p8<%eY^%)~JoGM>D697)3dbns>S>OVXV%dQgPpq*Hflv>lLZ`g1`_%s=Z zc;`tFbnC$2bqXu8N}+m@UUEB%7{w~aqX?whuefRfBzj?d#*vm3_~3GfAZ~L_Nz-09 z>Sb4)n|(-OpgJ6O>OIj1sG%Bx!-u zzvYB7lzqE^qtqV|MjRR3VIL%eLRFNB06WDt&b4sYJhPrNwq$kUHhS0XN zNNQ@duN-}!MrOITSw%tyro3<_8JgDQ%C0JnRbJ7B_ZK4i;@p-5lwfr0Puq(r6kf3^ z!`hiGD=`7xTA-Y?RF1Dk(}o;8fjP3~IPG-quVQ!|heAh}?-+092=`ZA+)j3rS5vOF zo8J-mh^6sXm&h{N2Xn$n|~k?hqM9pXku_w%gi3Y~x&oG|6^kUw*7YyIVZhU|h!0Mw|FKu!k?{yQl=!Ixd-mbZ;> z4YOK6C?kzmfu{pOQ|nVx*A{;!a>jd_#BOYI#k9359j-5fMHJ*QTE`IcHlTvSgF~)8 zFOmC6$hiz|nJzw;DSOB8&onBX@yvK^7!tTm#IKyn721Zj%h zeb9#zQ*7NilT+chw85;u_VG=;9lm~}f<*;*6=nxO`A%Pz@3hRO7xQdpJ-{&A zqjUrhG=zAt6u|7->gIbhe{+;tEzPP3?V^c->{`=O02_@KlV!-zGnF$LO6oMwQitMj9lhAPR;twSICu=PhTm@0ZpQnq zG)}@X=p>qwM@Sr_D#I|lx6BRJZ15>FZRUC0XZOa*T-*aodE-;Z;oBd4k0xWww*xWCE(}}?zzOc895r4Q?4~ZhQ0Kg-Juhi)!ruHb-D@Lj zA*QA_{6oWt`|(Jmg4GO8N_S&j-d(=Fm_>Pf(MTqVSg=qaQKJohZqRG3eKDW7w@vL- ztPao58KDVQ;;c9n}(m8rmngwpW4!Ys_m)%_4=0DTsjI4>E95ft$IM2OorcRYj)vfb) zXbv~|2Z8I+91SFLl%!yhS`s){3PVPwn@J;Dcwscq1R+wVO$H@~R8T{Mxpeiw#6znU zLg3Y_)~5iuhcPzxv&?|#LIX|}I^d+TF|T*{zS`lV&9|p|S*QXi8B4JKBl~d18`iM| zzJI!Cn3gu0^4voVb$MQZlTrs$hc%=tWfJ*RR8d8HFh7^9S~v~;&;jKiq?Gv+r^NBX zyQ#F-R;2*&!(BBxMo@cX6re3xnYa&mA(}%|QbkTDt4PL19#Npec->=Aq|lLC3`o+j zO-CLYVQ{^e&xr+y+r#g~a>yjq{E7FRVYihVSk=2fJSc+L?W0uf<6hi%EMoIC6R8*o zS-W^(MtPd1QE4^XP|CopVD{j=^Ch%?b6wmp!kSB-YUYC!I@#FjTAot%pg#?C@EGa_ z1xF|?EQAm4x<|&3kyvW|EG?ol9$9Kr8v-&tiqOkXEc1>0dYbU~*BU zOL(dyh){vovs@aq0x?d#eQ`ws206kl&=8P;kc$+Jl%+A6n8i9!3KPI%g{U~_IN~W} z1XqbV(+L6_szG-ZtmcjYZXoo=Z1VVQU~cVeB+gm1$0+AJ}wNgzS(}pofpd#%m$BP5U7|in}vxZ%Qu7D|_;KzU+r%-+)w-a5<91+AH zSDCxGm$j*1vkmLJR?G^>rP?t2W8>%A+nK&3aq0#rl!N9m%27=aGd|Frva3kVwxKDu zy?bz}O*LL3wLT{iMv52o2?5T9hu=(16bI)nSnvS!$CWsm$&!vqv*nU0!dkS zccbxEotj{Pw6=goW(KC6ebSnZBdMQQ+sP2y+&nglC{)5zZ5Jv=_# zG~l{|@kp$VPb*aI+Q-1~K0Gli%;r!Gr)XLMx37*oLL3xSA5*rfsxpt5ULz5?vUYy- ztqB}grGI`Dq>DUlBn?Rtg`z9tz>GBV?Dgy^3pr$`M$mc_gKK{k&`G2n)QhI!O~SpM zqfQtZO{ud(BpJMI(d9jyCZ{pX8Yqgag?D#sMM%K+M<7LTHqZ{HqP#vBRU`M&g6OeG zHCY68QpfV}#B)s}6BXD(V=TSk`Acc1g=>qYRLU`6IG94l`XpspVpWg|0!>4o@2(U{ zC)KD#0KT;Zk*Mf? zqDcT~4-YkXXhyt6J~+A%9Kh!i?ZIk`NyDyuy`ii7p=Au8PO`_nsFOx@0=1zYA9%q` zgPg>&MPrzhWMEHwT7&lV@WWpE`Y6@IvdIA(inCUTcoEt?FeES203*3c;2vdVYL%w6 z@%8K14K}EC8dfohPV;)z?QI-3kB=^S%XUZa}hH8f*N9}dhsW6UkH3OqY#R0d7d2ejB%GO%??va#p@U8sxVg$ zyC4bBJPixeL*;7f8=>{WNUp9jo4=@mw?O8y!Veaw%)O2G938v>yFf(0v_@|!0f3=O zQ-?$2Ip>R|`WRLb@_k&YL})mW#1A*1*ACBZJ&sI}49`AQ;h2IsAKQLS_T4_N(l6>cx$;SWI*NnTM!JMwO0nw44uf-Z zbbno_fYz16VhrS)g^Ea6j*iDtI^gsYB(d*83RmW?A)IkftgXXSHP)=NYS?DoAt@UN zTu(Do6d_b&r{buo;3>d(W0OVo9S-nnxPmfjMQEpn?jzxaX-%p_RQ0AgA6mqaJdy4d zAjWu;z@2`>g0Yhk)t(Q9l-We9nMsW8T9KS)yV{Q zFJ=+D$2OxvLEwL87PIVrHBvOd+qjAYEGE0_T8$1E1!WZxUd1D*n0(z=w*sWGq~dFI zsbS_(*9M}MB|9ns6cp+(l2tIsc9XWX9++xL7(pFvD#mieEWpOhcIZ_9013eui^Qfm z02o>|a2^!J7Ak8l(4eH3yaa)|wKVm_iblp>JBEbg z3klkF1SzVVW-v=^W9WM^Nco0tL_- z)c9gF7g5cmp@13#z>IgC_8A$269TI2Ds|is5!s0%k8?YNz)@@2j>+9g7+`n`YtYvj zjbv{yKnU`Zbo;T~#9b(;o_NF*nO1_dVcCp4z{XNl+zF*eXOE5v8!}hCW4Tyr4hGL` z@m56nK`lf1W64m;c}OD>24-^jTQ~? zfNZj+v<5hllo7{yZ9FT5lETUob3-EbbQmTqq)EJsRRf{$!kF^sk%JHwSXP4zQxSoz&aNp4(Eq zLy8gk6NLn{EVCh|v~Td9+-B|pY{`2FY61fe!Ci35!Kq5ux8z`o2qq~OuCmqo!8*pJ zCPG|No^jXn!i=u+Ya66i)GY**KQj7ZuOvF1Y0d*`;_VzPyY!qtJ$6@shpeSDc@0(7 zs=f!n_8c6wdZj_tK5>BJDAD7Z5*j&lCci52sMGAh3u(ZdOb-=1*Ya#fELRaUEU2K+ z!ce<6mX)nY#^#|yp>;ZFcpO5L_iPj}0f7j6JTddickbY&Kp=HtgaM3@)r6J_gpr7Y z163gUV>?+@R#FImBMe7s73S}XfLV0Hxnf3%qb)%60lP8dKxsK$NrP;rhbg(AF1r=W z?;lch5KMm;fNs7tI3y>QD~W6-6p|_+Cxa;(H=!SRI6-=XP++(~OM(r1aW6023yCAk zuWHgpn;>=`W{$rp@f=1vKs6_?IJ7uWLwh!SJ{_ZkTNGCYNoCvRL9|!2>VI}4x3anp zWq9dRT31p!VP`YuFy${}Xwx(>+!FK2AI-2(P#z;*Bx{C_SRu`>=1jXacM4l+-y%Ih zJxxd24i(-2Dt5xdDp|v1b#0zYhLou>KsK(QG3$h8OP!$^O-)N-9nM|M7U;1@e&c#o zM9EN3U}2&D^uTE!I*3s(E*51)E|0cPF&fiNHLnagw1wnE9oGw35Pc!LwOh+ei#zK> zExd?QPz7oT^B;%iG3I}9xkO}BTv(`QdlfU-$TV54sZyRSszVOZQPUR{)?yE;^0!F#EKkV+^ftoCQiKl7Sa}aJ&6?#)ekCiIWzDu# zPnbIEp!C#ZOTD*p9#?prmG7|h8S{^}e&Bk+Kc{mNgIaM;M0Agkm*xBs+}n~ksnAxm z{`lZzPSQqVe=8`bsO-dCyUZgx%aZU&t-S+2l;Ak{94okmOLx&o0Hs&q)BEX+hJ`ds zYs^opDdb%tFS2R~@e?a5#@*yVfWTKxG{F4Q+iMGmjY?{1*l@8Fx>IniNIn?cTUb0S z0W1osJ)OAfRo$AzxY&IK1~y?ZqswI8Sm|1m@&a@q_#e38XVOiWSV?ZACFQo$87J`p z49kjkhOLL0W)* z{{V&q${O17XJyz{l&4d~ig@uK98jo=I-JM1U!09wV5hlX(yY38b>$nGerFa(H2(lm zBzErvi4>~D(1P1kj@oYfJuz=`gf^G)x;a*80+`1T6{>jpgNnPIGI-f7`GN#ix2JJ< zfN9+m^Z3x<@3x%P9$T2hmdz?UNR0q`*1LSm@t`NxxOL-YXcrB3_2ukDU)#5Tq`UnE z)>Xjqu1B{I_<`ddeAAIw$P(dMqLCCP<<_IHk6bsoa>9JOKNIFRaXb;Qc>A;}#C292 zH0>C9=b46D@tC{K$m(c7Gz9qJg4ZP9%Vvd@$U7@qxC8V3*yXdUTSW(i({C1-w|y=o z4EAMSU`t~!&t2`Gxu7A54YU?OK~hD3!btQd4BvEyOAJvQ#!IJ5lJhjHX3m>cK$CG_ zmuk@X0DCbXC}wls$KC_AVP=LxbO7`p-&{MdY~aqaIc)A!v4}G*HPC_x@uhX}CktUo zv$#stuR{Ghby*Md@pSa%a+|f&EVB)7jRO0Y4O55 z^DK0*Po$LZg@HS`l{^o_L5HQSmR-yL0AI`5yuNFAR(p43EFKpWMik>i z0Cl<)c+^lUjt%fN2ecmyTRARjmo}?5(NywC37{bGKeH5_nfhsGh|o(G;-$eGNNQ`- zQP&S{TFw<-j^K%uhEv(ch9mcz9p{`)C)-y+ui{bc>(7?cEt?yoAgFqlUKRTe95#0w z?UpUtkZKtA@x^sveYFPHG%G^Y)QbMh9`ke1nk_#OfrMsAvCYwfHTUb4)vO}pdfV}xG5B-Xp-cR2mxQs^A3jrC{#%V z;Hq%;if++cbE}=DK;ia`OOoF;w1u3Lu$q88czvIiB4?4IJIjk)z(Bg$BJk;Dpl&0}v<& z3`Z2{RVIZi4j>T|8Cu$588k`i2ZQv-6}!+{zF9`#dl+#a-;N-=-8@7eoKTMg(-6UY z65>e89kUMcN#Gmt56Jzva1|90H61F_a)qsC3$^J+Q?>mMU$^tZ=8=)rhX&B=fiO=P z4B=|7H1QZ!6sB0&WIKq`wfhbfp&r_{MRNgFbMr2>@WgV-RWDr_41L}c7zF&ha5po% zFsE|5yXc^J;-FSEs+i78bkkgSF^boQx(^H!y0)Z=n8g~kz+K8tpqf#X`hkQQU6*j8 zNoZa5I$-2WSm{7iajrPJN}*=8m>u=}kxd<8x9;~=y0Jfmt`X-snTcY^tcYvN!LTSg z!v_bL_5r|uh>sj7%oi~>%$Zkoj@%kRPu)ra;Z;r*76c$fbC*PO?Dk$XQD6Pnkg!H0|`l zY?0)%t(45A<9Y%+DN2kJxmKPMIFC8(3ct zXz;U?)r*6|qxa!_Wf^F?igmzi8?}-mO#>1t2TT{YP^n+y*8n&vCR$dZF(tVN$TTOX z5#x*`dt`QD#8jGb!n5Io_X9)Jk*zUMYlO0r1|mZwaj@(sLF<9C*)xKtLOKjBc@EGj zPmc=XFjeXllFD%8l9)2m6`V&A+2pUvdf`kGdG|04wuOapi6aJ*5&=9$5C)bjp7ET} z9jpgtFHLa-=pqofyg6m1%!P}@JIQx5YpJLo3eyX1WEVDw<50>v@WA}S*x%(hHj&Ut zEG`ni#Y&7OR8maL<7y{Pj)^~UR08PyqM+*M{5W|!aJR5=3>Tn+7*KDs>Vi_P%pK@p@SBN}t1{n>L8+LX@ zl=)hpD+9v>WS!Ot%9z-vs>-r-diK(1eJcE*m90aB;ouVENcZr;j3(XC;BnR^)V_+pAl$mblD zq>Vt~6yICLaS%dx82r(Z*1xdeEzP>##%!lzk|hXX#5Ygx;exYB*36F@gAqHHy%hAs zH}pL_>bZP^YOs@`}fP0r1Fy(C53p3;aUka+Y9di z8n#0XJW`%qDlHV$hw>#N$gm9(dCh81P)aUJAR%B6ui zk~ogsGr1!;H|o$$1~J(XbaIRts;9DwMKt*S%qc*|f`pN%uUsf)w{sB`6#zLL4`IjC zMOP{b0ccG){4hB%u?E~oRSK$ty$1{?g_31wp=PKiot!@GD!xUjT}dO&PuYafs>5@- zGD5bbe#|vFLDmRVEgYv|4o2Zk$EoqgX4EQZM(WoI$=NV^(xXan_~Ww>sk%B;3e&R+ zrZA965=PpMv}vzgA-qRfMaJzZvGw9QAKCH5=45IHHDwxl;yEQ*7h`}y1TZ-2Y7Fv# zP{M8r&-z5@z-eE*4XpPr`b((gNb3}Y@I8AErV2{N4WPYQblu=ihZEd)H+C$y19tJH z4+Dmv_iC=lGsq91pyo1&@>}pC5p4u2lk_t=oHcW4GX7x8 zQp#FMJVl-|284sa_)|~64&2ANyN%ek1bF*vcgC%Z4eFxO~32>h{f`*qDR{W9{_Z7FDp+ifW|F|pva z?88f&^3=@o?W)^e1{V>y93&cjgj6340?03&P1*p&pxPxSwO%?7ymiE-!iD|5rTtra zc+Aa{YTUQQ4gEBz<~FCWExhkQM%J$aI(%^XzLjpRt?m=& zT^LkwCY95nAmNuR5N0-sJY`y=LO&4fI9JOV#MZZI%h`!;=IWx}R^hyGQhRv%;1wjM zoTRgA(^Q?X>dYBgLevvV*MY=xS8}C43mWwF`2Ng6c4f7j%&k);NTp~2sUIDFCkiHE zRpCaiElNuT>cH%YqkWH{sRD-*#Un8)C;&TkJ-u-YGHzf91TAsi_w_0`l^S*t#~mWF zz|hR+R{iy{F^bUFT{IYHOjo{BT^mYa{{ST=w*(4g3kymK-*{uJV?R7ien+D zLX9Ge3uKn?RaIHVRG+u^VZ{xSn^MxLtB`Bd8vWP>leBw5VrxKk>ClWil1SdyV|>ZP z4ww?*L>VJwgsCK$pPYGm+nc!}?;*V+Xm2g2u#&ot?pWDA>YP>I%iPy|!|m;kU708s z*(^(AF84dt;%14o>*tC7>|B{~Tbp;YMyk&d*eP1K5l@Kw@k(VfPsx7k=J{o;W4g_* z7V#q96f#_m=AM(sIIoTwZ&xkcXl5v(*@5&iH>E6HvigUWRYC2=KBLxKxjmL)m#B%Z z1;k9m?gwixU_H1c9n22T1jtPXn3Xh9>V0t1%%aX?-E@~?*&wM6B-Jt&ri=j4jeAA~ zu5rw=OI0yjMoR`{m7Fl(py{FN4-VW1+?PDn511GIT>;uwoDhzZxpkva zh~fE=Z*J>Lq?9NWtNeiJ%w#dzDkXQ!b`Vc!vf5nR+ukyU5Ek4SN6Zj`tuWoYfIzuy zmv?UQ=3nT?EMT}`wNgUr1$yGz%y}lpYpcBHBEFV!JYXEWqK$+dSr6jlsI3hLTvZo0 z4B3=6GCN4Na*2eu7XlWA2rav70$d^kS`kfagY7N@iJ&=n<(G_t-n+QluTq5yuoN{0 zgk!@ITsC1)BQH0%b*;#GLB~uZ&3SJuw3V*zB54|A zDZC@Jk+P|&psAr1&|uSY7BnnS_2`h}cde3LX+Wp&dUl%j#@oY~rLprdaq@51D@rN0$ntl~NzCk=9p~lejj34xewtYg` zj>sqo>J3FZaN6h3{EFhy^BZWa=6T{@G(p45FeJMkh;AgUD5?O~hZ*2;n-V;+JW67LrjVK_ zKO8h5%V*AS#4Lnb!#~tqldpJ3%N=}9r@(mO%X=i(8zL7GB9E8@*T=&N&BEDR7_HQ@ zsIHn+o~N|o?W~{@GcXH=d-VXXqidp-%G_RTb2WB}+PL)>yBvvY=_&mQL>=;pJ8F>{zJ5*`naGgnKGO*P7RCr*O zq6lLyeq;Ayt27afCsMJ>eRY^kbX*Kv^Q*Ca* zs&(l`3SM(v%-Q&}Zbik_^f9A}TuGgT!OOz_biO{wz;i;Wv zG?T*^hxcPo;2(L5MS{nJu<1h0PD98^}Xk0ntZX70#us zyEQu$SJeLimITsTH6nr)D9x z(YG2`9vEXdv#8Q8iW4Meq|tQvM#+e@S90h&^Cbtt|2~zt!1i*d$aHkw;ka7h?f6Q?75a5<~D>8zTxh<&T0sFDr zn60xoTu(0Bn9169&{R{7yno99V9eeq!Sht=8+MdEDeH;h%~Z(9(IW;QA<&w2AKy%9 zR^G8uocZ%t3t?K5l*EGPEtuO}61NIBZ#o78t$O+#DT6l!JKBWQ2J-8P-dk(vdzs>Q zjBcZ|4e3!&w*hbRxia{>;N9}lio>_2;rnnZkVj0MV&$u(=Nw|}6IqbS84RowQq`pe zKKl6KRjz3zs7Z{H6>0?}bR7?l8P*xIB%RgCRTQj*@L~J#w%Ya8i#XV|0)*%VXo72E98lI@&GcvOeDUDCt%Tgtw!@%F?4T zJ0lgLs~QcyxaWIv`E=H4VGYEHzy@Kl_7Ve;PBi22z`5Q_D{*iXu?DJZU8J2U`>>+Y z<=hvMVhy~LA~RHtDNs(HBexY57>H?7RgTC!&n>0opxyN~p*u(%8^F`^!PJgC(=FdL zw2-Nw8q|@YAn-n(I0tYI$<)*w=zo+jUr`wsG;Gn4^P{PCY7jA$QRR~>Pf_VLK8YIvd;S2WRF-o#jF&mgX~bE)(c9vB;YJogs{>%N*IqJXV7mL|1o@nChrWO=M^ z68&QD<%@Gfzzy1pH3{HIBzWTv`|jNm3B!iT_IoQEZP*e}ny7zcpX0I;%zvm~UJTMF za`CBDgr6-B9XJE098GV2XN2qpQnY0~4^d1>G@+FFly0Hiwc1Y|E7J&~f-v%t7>Z}6 z;xyk*747gi5Q>asn88|;w>jIZV$Ns|!BV~+7*&^MQNVV)oefPt5yWxHQpnW;lq*gc z#l^I0fS@15pmg!VN_L1sO?qR5OB;aQf`v^0 z>4Dcb0x;_2m196oH*;|qR(~Gc2)&(wMPdT+VowkA!3afQ?kh-(7h#L0 zid@#-DFkdr<~nPH=rzIFhl1ASQ z7Rm1;n%$xZcOlvjMjpMR9w32HI)W6fCQ5B15t0BZ-~uVHt~l25gSfF!qlq|@W|9J- zM&QgBR;JKSr|j04!VSZ_kd8H{ju%+^12ZhG3Iz#Tjx_AT7nnPDQY9FUgG%CAgA!aw zYEGoJdhx>0TId0xc#fk1#+-loC#~I(&7)sPCeX4>Ot$o){SsM_^5nZQ7DW zH0;Fb-GEo<=tiEHSxAiw;R(fa2ErJ+f##vtk8TxRUN_YDHuny;=^B8jqt8$d<55z2 zQn(cy_VE{Y8&_ZqJ4c6&aRtqjUhJ3&qhwv6#^qaWYtyDGQY$E2RVz7}Op;$*wj%t-Ah)qu4TzurjOY5*2f(Ob^Tp+qwCB10v-)!XrG9IJ& zhhfC=UeGAGN)RYW<4)gPGLa`7W+oBNOsh&eZE?njw;8jKb2Y2EAXko~8fsOig!xzf zRqbBU;xQAeq@Jd=2Z-y71F|Jaq17-E?WAi-l!#^WpHtLfHRNs|axm{B9#;M^Fj>@J zTM*PGdi5SS7#uQvEW`=8!A zRM060f#_@4cpNH48WjOliVk6eHAE3?FHceY@wJBqp7Ii6lefLF0wGinoT(Xl0|N zE*)Ea$HrcF41+F_uHsFxt1$#rPzu)!c9$;9U+c2lh`Yy)O9i1;>#EkHj~o%_PGAt& zE?sWy(o90O-@*=`W*E0QEv%#JB(e=GV6wb^Ne^jK2q5@Yhpszr&J|ImWp6I1Xn++? zxDi<&Gh~uMG?%bjGLpO5M-7$N>?coCficSQ#T;tvt^qN)HK`pi;mfaMC9EXAxN<6? zna-o8hrrgDQ+1bR*QhPbXbOS}8dMSv;p0#!eS2{rmsEkF!C45VTX>gQG_KBll7;tg zmEwYUxz5(rW4E2Vi@?A3i%@U$uiShv%e9qqTh+|t9zx4)d$p=I9b=Ra1EKZDq%&?@ zf>F7#4K=2q zV`I7RlXA!D+*Tth?HfBs!<_ji-P@Jh3(xf%WF0CsRR_|oq|jun@}^^id2)_r{Vy;( zWZh$M+thSYPnl20Uqg#6Bptx+*leL;_JL2l;)Lb9>ydLMmA$<8@ow0TqiCf(r*jay zxPmKOTl}{C%Wn$XW*HOIr;x46wNs%wX^7qK${Sv#C~Dd&Dtjc~+E-6J&V->_4QOLGulj%Xe!4H1A^^#`H&VXc^1EOYOczGm*G(v*5=-yAx!+myMq5rtI?psCl52=xa{ zBF!LHD>JDI9}MqJ$m~XGSO(ACW6nkA}XnCSc*4=Qkp zGD#r4u%9iOGV02~kga%BGM~JCm~Gl}4tbI1_O|zNs@MldPW&Be(F5fMOeqWi!hvDHijtor>MKQw2<~RM1}r?^w{0f!oh9 zPJ$^AWIC3PQf=ZS0`Mx^y0i2#+B zA4*gyUwp@59->%TB&^T~K|SI%LV#*Vhi~~|!DD^4Knk6X1wrBuZW-LYnfI5FTo4o$ zXrv$EZU_79!CQxGd0AFXw0%4Ucw!3SpE(nIyYD;3ffDIafhp7>xr0@_?(^{NEKGuUtrnY>%0)}E3 zwUw1d@O&%B3Pm;)0EHmxM-L1Mg6F;wm0$|!!1d{Zo$@SH>V!}pwHz=Sg$$EP6p`hZ zaz%MY8ho+?)BIR>TU>38gBsL*xMa@AvoygCDgiw>as8MnX_&OJ`IuEHU4K6g7+cNi z^Fl1&&`Jq~=A4JofZwJD-jf@wfY1}aUWXZ;@*=yPil7vz?7(d2n5=BAw@oJJV?cw6 zJ#og{B;hS|@)D9%W3tlmB|>TjfPvUQnLsb-7@B^p$99Fp>ImFW{PMcNfu-3I6 zJ(zo@XA{R71_Zr8@$DGn%qg=%C2cPoxK5-hw1=8wzLB8VR8-eeb*Mjg-+`9Uw3)1u zTvV#961)M%q`YVqP>Sj|c#JKwl?CG?AS+J2ML7P<4NW2+s4UVhi4@YLkVj2P^uZ{j z@{aHTDWdjaExSan86%%Hj3{fh5|ZojzKx^ z7}s|3TGxgO%PDcVXy*I_KPI5QO_q{Klf=mm5?Z|8?hQXcMr(xQXc54gmIjj$ULp(Yedayh}=6vlQ*HyV${q3}3Q5mve}$SRJs^>6aV5VWbg zbqF=a3;zJjs9jA%QoTDc;2^6wg9%%c4BJVlQaVzg{{Y7g>tfkndn7F0S0zrINIGEV z^EJd_cs*0o0XdMy4VGyDYFyGmT@5HW{kXGP={sQW;5DcE$BywdD(ZNFhVL_3{avG{ zVcq)<3FLQQQ2;_~xpxoRG2GHHV_~$K3K7~cI(&C zD7pez!-6Wc0Qh!b1T%dGXFZnY+a)H9S6y^Jc>C~13)PSWBml=zUKl8&Y!NOGq|Mko z6UuDvl}j)sDl|04wo3!aBB9z16U25`32uYh%C|@=(d);K3&>%+wt?y8VzMFr5=Auo zX^s=8qFg6X<{*h}qjL8Mx?HI52T(?U`ixEWW>{Sef2f0N0oH>;F)W|~CveIL)65Rq z`e7Z?Fx_!(r*c-Re-h&3&4G&}NUCJ^_sq7@+FUaNiWD<(Jq>@$OfG@fxY}54{63fr z@}%&isRBh{>UhzCsP)uhTRXCUNoU?5P|C0=TPAg)l#9_lr-Hwz0* z-n~wQ#~DyjPa2)|H0V8W>Ap;^( z9yg2vSfq%x4kip{#YJv83|aB22r%FDdne6Oe?j%0YZk{ zK&aP<>^MmTV+%=1@MuQQ^|lEgq)*KYxY zUCdUptowgPcG~*heNpTu5Q=uJ=U2scE)HE3#a@TgC>T!$Z%XF7`JC{X0qxa#xb!9`|JI1X+ z$BFPbb=gVvwkjoJNfcmu4u=iA=^6XfXux><%0{5}5sx&bYAG_;EhD=M85r8l?xK_0)L8?+uA?} zw-x(ja&liV+~gUEFJeaPd26AF)s*_vL*fn#WcdzaqEVG z0Jn(D9$j;nvbrfz@4Tj^Do+Ir55#Q5Y$hGa^M&NwsIBg&dAV;i+w@nC#I>}^#ShhTCl zI8nC_qX#)6-u~Y|kC$h+misG68uAOmz>9T3zyln)%rjfe!fwlpf#q!u z3)o4)2%rG3t`lc5w6^j`PZ8^nBg(nwM|jj|si`r6!2Q^Q0ZCpkz?$w~3U*>?PT3X6 zAQMV>;XH+fz>qBl?X|B?xRMx(O#1w)2ZSiA^ys$`>$KE?zz(=CZFDClMLpWL;vE6u zTnV*s%Oqr0he7HvvnOqpjle6kjXInT;Ha+%YYWn_21Xc)N3gkuV8m@9fu~{pxM2Iw z%PVc1S@UhIjDjn7i*lL}qE(pI*(lq)P{+U7fu!DkW*5mIU# z5x6kZN_D`O&n~%lIef0t)ZIlCdtTuwF4wM_1KIgtMnf&^w;5HG*^HLm*ZQ${0gEFo zSxZ)+cySfN-eQ-Qayei6MX1XrC(PuN5oY2^twU7SxFj{D&g_c*{A5z@d&WcQI!L8W zamZi+%biHXY{nWK>6F~G3vmRu7bwN{sMu3V5vl9P1YwcxE*4v;R@zIQtfn}_6i{?7 zbrtl(T5e&su*##lyowL2RtWNOI*nLq!wTP#+fS<_W4AD-=scxw}a>xjT$K8m~ zjs*3?KPl!|Vlr7=+^KZ{uGB1qpYeYD7yhWNU~TMkBOS!AO3=uqdV#Kk^1#O3O_?H{ z;M3^ChE)}><|p@4n6n&%AmxnHCNK#sCX&*76_6!lV0N`Qf%v;AUd%A9{nh4t$UNNH zk>$76uB?Jf8rs}O4wT%*l2As3GLKw$n{9bw9NI{)ukT~Nv`RyC@P~wl^Xh2 zLx#RraTB?Lw;0M17g12$F)e9k*=%YRJZM3o#|(Pyncd^QTuX`xG#OA3p;3k+oW2Ge zYpmy(uTtG|oTA>>ybWu(@{_ybRd z2|TEpS6pSB-WLI6C0S3SGr25O*izdSG_P8~cKnZ$Loa_hxw(?HCRvR>3Mc^Z!ANrZ z3mt82>rzcVJkmD>#g!o(1~2U@l`KL}nXBX+uuEa5a@JuL{() zO-ZFaFsGM@Yj_1f3hutO*YghIDir+s2hVJ*X}jI>hh?FLOj3|*9nWMssw69 zDORWDfY-7#^DV3+b5^I<_Y8dv`v_!d!4fZ!fvpXA`V4B$J%_$(?~h39D*Buwf)jH(scJ;0Utb&-L{99A5CGDcqRj;( zT1`!M3AoWDlTHJVOmg6^oz|rJP;~J)_^664ib!?`UW3CBTTL9NymCMuL>>e8;b3i# zDy9)hiKCC^1T6{iIMI#%P6V}F)9%DCI4j;2+?Cpcp(m~u+r-W&+Lp%+MkZM_IZv&r zB#J_op`w63{{ZvE_qT%HG7E*R6g4}0J|=_2N7e_un!Y~p97q_P~m6%44 zSQff5;9UGF7qC?EIHfgtwnl2xBG2JT~^@ zw--VmGiv9jT4Ar4=M601O95i$yNVi}qsI+tqO%op`dLOXWsDh&*{nh`S~}FR)KauR zw+`6jQBVy?=sMtbMQJULT^dS-4KxJRsCC!WoENrL`P+#-aYvU^L9#a0tq7^i;oDpVSWWci>f{0x)mO8` z_~NbCGnDK4Y65eTBvNJ<8|AEa>qA4uiQrFf?7={>#FRw}sxcW<5rWzSz<%6f@^ywI zAgNKq#Pr9B)MzJw2o*DuvpHC|07=|W?7+mhM{AW>h!LqejadHxz+q%)@vF}zJI58J zeozMtB(#0;td3Nxv1KDo%iHn85&#hjB#{-^0rdng4aT}*b->*FX@s`OBfKbh@zC%X zQtrP{Q&M<=(v{ytFHIQ&jZ`V9snw5qE))bJX0#3?Cs+{;3%z~WfhkWdaf>w^?1DI?o8 zs-&_L-K%gdP#5D$pMb7Dj2i4wQgj&2!+=!nBnlHjT`?`7t0@4GYR9&?slZDlYE&l{ z(DgLZgAgkco!~SwmTn)0vdRrk%g=#d*#*N@VWQ zhj`|!N3IEB8r4Vzy*GhXr@&~h+fk)2#QsP_fkVwk6>@#f_B%Ua;P>dDjmUy zpi{(l8uY^gX=S${GBDcO)X-DI1Ty^YAQfg_^=n0_;Cg!DEbY|JGV{JtiY=1z!B!tg>m)BisYn|g{h!d>Iwe% zU_~}YazfttCf!D z>xC(F%>yc}49*gUfk-BsnDiZM(+tS-Nv$M!Ck(Qv0;|En;X-t-hwQ-{Y|=!Mg+|0W zF*T>4?EJ8`H$$m8MYQ6Z@~=O5=C*ZR@g!zW_?^f&t7%$zX`uTti6Rne^4E9_vV+BV zaN;$=PDABf%iJvc`W9O{+y0D~bKOf_utb#HO0SuXN`MCvMx#@Q<=3!z^uTklwGsX1))1dIi7J0)9b9P?a5 zZ4$dXp6ntiW@h0)y}g+9&$nO8pDo$tS#EdF65U?kTu1dMFAf$MxX}q7W;CH;P%Eai z!oEZHXP3Dz{&sh3?96~#cNAC$@Wj0h4L2QW!kDs!!%eiu8pj+UAdDZCDM}1N-|vSP z{C3J9Z9IDT&BoySJ%%fDypR^Nl1?CW>?gzyXCsaeXKf~+Uf(-y^nFV8# zgl*_Y@A1TKAJhSI7LoPDuVN$tgfq*9Zs4YRPQkOUI>TjeLAr|rZ*?skF6St34C zbSJ|I%)d!PQebZ=AH#`6#^9|Ov&JY0KQi_o-;2^JwCRM@M=W511gqQIh)nJ`N8M3c zm8ju}qPSI%N)Gl5sOana#uRtLXgkJoPY`%%*+GP=442Z-##gL3R> zO$TK#*@G|-MN&hKAewIR!3eKojYxK?@C}YqIW7VxGZVeV!kQi$ajp?dm@-FM2{kkX zajqn~m6Q$C+I6LPj0C;Rql7eo)|I6?^sWePx|)cW90`h~%>uO@>8($O6JA`C9YmE1 zbTqAS*3I*XZR;c41YRsy&|#f@?&d+4GQe+IQMi+{%oO_KRf`uL#k7+lF88Ar!jCKt zlPvG*$m+^pQ$Q*yr|iL7TgaXe9Dx4-amSpqpL!7)q{^aANvMA{I}VrwAH3YqA9Qy^ zZ3oII4!xL_PutfoCZJQMXCC|4ciJyPl~c-krb~bU5|9?OB-30&9)FhG$np1x>;Nmb zt|%T~=WO?zE*ixqnn^pZ@>Gq&?T>H;iyA6`2|AHlP-;dk-)(tL_`2MQ_FKaFk@ z96-47r2wFs#uy4UQmRJD43@U?AlTk&@uwf}Onq%^_TTA)N>@{%HP;HnJE};n1qV-# zGqhBpatJ&yHBM07AR5S~3d>fd3G3NRC3WvtWQq>Lr5NZmI(?KFnqe3r6zF;rTtO?S zaDZ#~40KN!5O75qiQBKP5?nhfG>DssuK|hV@=N8ZsjWK>J1W#vc~1k2N)rQ;@ls91 zJMk3bTw^ntE-Yjf+af7qwA3FAPccG#$QV~paGvfeLS#T#QioqKAGZtrA$`qoK`uTYM*ad&f_Y&L*Z6kR_YO$%;#N$?0a$B0*+Q`4|8vU4& z?%G-b20$0?S#+U84!onSFU3fWWTJ69y5Uq=gsBi_4p`^`Vf#h~*g>^GSm*`G%0o$c}uxa*UT*5o7 z#@t#(b}d?}NkBnhKMC+SOIZUD?t~f|Bmn@^q2o_daf2&;O2XG72?+1vksJL*Q$h}! z8t6x+DhHSmI@M6B29CR$?VpiTY5sS=Le8TSwWfrb(V35haGv)<#p$Cmdn|koV%)d6Y z&#a=nj!1({D8WvFhKvV@Ac8oKxN~OqjeBebi}!OqH&aTA@vZ=7c_cE+b#rGoa_?Cj z8YpH_R(k&c6$YoS2=5ZGIQ8lv;f1!MYgF~i=Oa^b6oA6Tl|fPtG_37xWCnmSt$zvh zz^Jo{te?8Ml_Vuq)u~;|Kp}w|5J4LF;H{nQv&hr=RyR9MO;>ksg*ao!3}u0+p`5h8 zco|hic5tuaQ`7fjSJ5Plw~zvbMQhr%tv(n}d6&3GdvmnH#fYw~r-=0GG23f}kp(qV zs?_K|z8JX2%pwRCC{|PJxc;sob8JrVIPjwmqq7rQ-w5N6GKqslA=xldU8jNjIQn7& z&1oT#Yu!jSAF~Pa`l=l%pL*A88X9USNB8z&MUjHyFQk`kV;fWxQb$j)aKudvkn6N;4MG5+t$6*IrD`;p zV&0Vp6AYq-TEt07jQ~1Px?)(GNh8`p+*?ylzuuT1mrkHHtc}vBPfnu?QuAYOVxWo_ zTGUsm`*1k~VGcnAYLl4FS~o%n6$Etc!q^{lUFc!Geqq~)1ikBrK2X|$iQ!cNqEyxT zc40*Ege5rP6!$K(iICKB)3*v9%_W7D09o~2e$kBD9iXc);lj0{!r0|T42pw^AP$GF z5~5*9Ksmt^+q1#3Nm*glTk`l}q0ZSL%piw9v|jG&20C7%*IUWM2*k(+q8U3`33RHH`}l&K%M+G@v}u$4XL!sT%(P!wTZK zQqn;5W3cTsrt#Z=Cfeg6&)zp``L>;+fs~qt{`+vg{5S$c@~6(MKLP#T7%2cN0|I=h zzdCzjeCp0dEpur?>@+Agy+`f*@jgwN!<*U^kc7C1l{D=gXnyg8v0p1lVU>Hb+*Z7N zaEmjrnPwN+e5N~{!O~DPkdMOS$AxfM8k60x1F*z&C zML3V$h}HlkDgkl4fI!yVF@u7qXg6j>FJ9XFSoaN6;=iVh*F({N*>HInIi+diGqSD zO7QT)ystL6O_t9xgj2Ok9S9r+dSF-EQ<#Yfk&?x-QwVW-Aw`ej7P7$VM{1&)D@6ZN^4HsPjd%<5=pns z5DoFbD_e=1Yus0Jjg3t;Q$jujVC9wK#^&B$645n1dLPRY>hc+mZDGMfx2TOh|Ryt>r7wgMri9n?Cl|ciX(xdqWNs`vxYoz3<^zohaI$ zMhA!6`!VGT`Gg^rX{&16)Q-Gj3#b}44ZH(h>Ox0Pz~8Xr5+Q4JSoD$>1qC}ge#{fR ziZ+T#IL1_@-A=>QdU3$LuA!01EfZ0-`Heqlp~dT|HQ^Fb-K>r?e^Rr?Cytx8(RA_P zaMrnsI}FGp4Ys#hEe48z%lBc#v8)r7uaZ-_bl})Wn`PrOvX;q5>yOldzlFz7jx360 zu)yydQ;5`&=1yGrj?waf^BX87hq{`gEme&_3vh3N{P2^N1ol1lQ*gzkhCZ(tcKsvC~?8g>L zhLhCw`AF2DAz}1oOnN^b7~;FTx5^{S=cGnl&iGlg$z74CiR5RXBBX=>d{0bEb#QGO zO9@DR{XVAHQk!T>GM>@6SJ2>hGUZd}yrXe*9_5-c3z+B(cK{NyFJ`3pP?5mly^-^3 z-{qD;<&xt0BNocig;F+(i0A+duIhH0*IZc*6{A{s(DH;X{TBBhr*jIYQcoR+w`|UD zb9rO+*<5?;a8_$?EeTUi;CyO6%q!&imfmH{W?iiD7Ew=_0&Djly9j5^^4$9|vU!O| zvy{T%`CGe@O4qkW6eFPk;eDlyworc;2 ziVqQThuT$9kK}aHwBt%gW>(E*ar#Ql9Hi8C0fLvdDRXQtBVe*23=J!2 z5=GUZAz!JX;D0fPepQ*f#FBifpb$p^h+DQQDkjf&UUzFKCOYjenlIGcX-XY9VDvXk z&E7GnG+=PdmQx&yG7ltzr>>oT{29ydM|M%0RNzk8AZjl*hC z)DE;bO$ETVxLI4|k#?}`J-Fmoo!Re`>OIBZB;vFzUU^XcuZk<)ait8Jb*3U*_BV)KVK2zEU=Z6MQ%#Rb=-8(do z8QV@EjW`dE5ZzhFa^eb>V!fJuy|~^<3^4DtxLwkM8ZgwS{4hfFxQ{fAWVvqe?#(MM z803dCg>Il~qo85?u%g0JZTEdb$!+gtAzUMUr#xJwQf{W_=s)~3BQ>G8&-m>r}V@je(q z1;KPHLs8j@Qd+1CMQQo;#BokCeJTnPeZ_?rt{|AmC5?d_R1?Gd>5Um$G8cdp#8(bi zQPUm+8C4u0%j;2h1lFvy-%>mY>M*M!zc(3tMsVHqOk$K%UFvCEW@n_^h^b}JVHJa$ zJkmhJ^sc}l9s&CO-*3pt z2?<&i08@bJgt3n9bJx6C;WXKrqRi-*P ziXTjJc!-kf+}*=81Io)sjMIY+N8gR*mquvS!1E!g9frF7hZBF@5?4c^!eJP*zHNia zB^+0`gAdz=R;i>PPKAYaW7MRINnV8fS z>*4p|9l!(rrl`d1=B0ae*9fL^HTdDF5la|E(#Ro@lkyhn`QbZAQc)nM8t6XUYWarF z72B@3iH~~_VXG*ud@w>p0cV7oOPM0OiPoY$3H3Tx?ZUjy(kb%kR)o9@-j2ExukXOv znI*R<$5qr2dLQ$`yt^^qD2ij`KcvK--6{8sc!QYP6Hq}(+abs=j7R3uBU7gkbU1R} zAY`c25%!EUEa5geoVJ@nge6ao9d>f})>I~@B2fO!DfH1=gd)vkprGuP*EYu1*@d0_ zYvxBWxBFOr@r2V~Nf`R50X05hP87kucd~ixE~11U@nbSZNAWM154xCXWfCRrw(?uM zl>;yx8@C5DMIyW;WzvgJY2rPwj%!==y|*bbs*zPaaK9|O7Syts{-4S!KFl-iZeG#a zAf;n%D0Qc%3)|j_97(Mk$y3Eo?!_HvgnhNuX|zHbuoVQFd@vI38#9keF(bqhr_=uV$z1?E}Ic9yb9H_TM|D^Ej))xG810cX2smN}Pj0G+hzDcUe< z7%RuAkoQ-}xAO7y{7VkQFq-)mL`t}fk}JfHnB9r`tjf`4RT13Cp@B4_jw9iK*%jng zaxEk!c!Ebx1bWjBYjlO4-fK{;wD0W=QBS{6MhA60*@ap>tAvAGMse3X5ls-cF{-K7 zil7A}sKEIVpi&Br-Bb-R+nmN*XqHD+ky4tkA5-B>LivTY>i3rKRa0NzfRYbnmr{~V zMsi4QR$E6{*a?WLnpELD#(CmdKkmh@gNW?F*S-2%#gS?du~L7B3kAs%QCmjEw3Nz) zh2Ug23@y-$V$=C`e6(%WV7 zM5V|I(l^WDPNxn?)qsPn=&3V2&zXQAj7U_*6VZ3n0>7|>T@EX2+lRDwvzQi29kLw* zMtWDaxEGn`D?O@OI~k$cL=3`=hqGKr{{W_2tW>87oJZVS#g_^~&Y{QJpFfQBw=Hv) zRm_%#`z)NW4YEkvMnlr04hc|QK*$^ePb*X9J{a*|FLQQt%9*ITv$~c#kR)2wO4orM zap}Kqx#r)SGJ|@pvPhUmDpQAJ4+Hla;tzQ4wOStW7^m89w>JH6c@E{=9Hv}(kC@pW zB%;VJ6GW6!QBRe+AGZi|3s|HAHeJba*~B+oD`}L9pOomp;||e0EpNqv>GszVV3CZQ z?$WBH#`TP^V>`zFZ#h=lg2Yf$w*>E^Swjfp^9=|ZopBk=Id_(& ziahIe&Fav)l;0h_bpVb9y?9`RsHo~l#s=b2(lj_|o+ej${!4vx-Gc+gB!_X{Htro6 zYw3XbK)<%l9@_RE@;#fG7;x9-UxqCKox$z|Qv$zFbd1tO80yi3#C#|S>47y4< zJEVbupa^*YupYgV*1p2flY( zk2afzKn|dQs^Anj8uVauz-+7o%bDQ2%q^{kCYD4iqqSEL(TbjnIX-ygSyfy(?57(1am(!EHn9;&ZF?=8gc5t12o>q3 z8(gt-E!=QlUP>jnmNjV{3Jt|P)a(`euuC*ISJFVRt2v~M03CnAjC{{S!9=NaApVzi24iwdy( zK}!@3>A3y4Xmd70CAw^Pk|!!8ie&_XcJLs4!}r$`X<8g`5rLrbrZX!2yVlGsC~6f~ zED0o6+lB)vU*(rEzMqPRU^D>F0bDn>wd z{B}#1C=uMoF0E~?rYuM-qJ@Wt?!sHV=P9wwUe4ys#PP3r8A^{eI|dpYuyYPqKT!s1 zx7KgvReJ6k&}cf2++&<`nSZHRW^*g2d!ck83L5tK;x#toYpCHChiu|<36W0}nzkymVCy3lds(3*H*7kB8j zAql7>u2B8cxZU1KF02J5M?cT+@|8y~a&~{6!5ZX{cMS;&moE_5n)!ia$6W{&;e+`X z^5+ZAa}ICj%);(jCo{=wmpfY9wxES(sgR8-XjZkw%#p_u1dRf!iU0)w7#E*sNtVR0 zMAf;Rg+&^b2k}$G5bkeVhY1ZGAo%#rb-&wIHi-+k9pM~uuO!x$*^PWAZ!-ujpXp$w zPzb_~3I;oBtvKGq@xyZ~iSDj$Zb@bvz!f||(!XvUc63-qoJIgu0m4k6k}9czEC}wZ z#P?L(M@r&X1Lgw=?rmudmiEZoreIyXFuF9PYNwzB6|D?l6%jdlXlufl<2tsQkTLYB zv5R!#F%*qTf!T%(VwKJW=CuPWX@IGTONt6=4M*HCD)Ef)B(eOj7-3HlhYoXW(`Az? zfLV}$80d8s`>TeIUoZavQR9WlEoxrfk5jPFeWPv-YZP=D6LEvY9EkS(Oa<5#w(Frf zVjH(;YF+EOYDP6Hm0AJ=4Mx9qA^0;WltYi^b!nJ%s{rGa{QGG^F{{T%6otP2hrP{;o#;G zqq7Z3ps9l>RYVP@DzuD42#f$6n$Tf?atSU+$~w31#7H5_EfU-k%ya^} zyC3iD!b#?31~pM6(j6AG4F3SJM_g0tHQ6on;4|AZaDKVIl?yCND#h(XYuP@cKzo%xroY5{aZoFsQI0E412Z6w+Iz`X?(2X)L~hRCUd$7Y4W@>Q zs6PJy988EIK`W>)O*}EBS}zKoB;(3iGKg#^Jmvw{y*dg}E7{cH89n{MJ8K+#3H~f7 zmPSa8IG-vEM-psbIo(WoIAb`xO(YYCnt0;eRSis(99Enw(+TD^EZYxu0H)ts0Z+dY z1ZR}W=glE1HPA0ph^BJ+gTxnXPz58zk%ovl$F>t-MaoLMMOj05(@aTr8DlQKS2a~) zDi^TRt`ZB_q?2T3q;dOjs`Y#OajPpH6f`&;K!HedR5eyXYOSDVsT9_fsWqv>eEMQ6 z#9)fEQ}*I`{{TWFfm?El0Zl&K49#TUEK1a(3i0A`)`yx_;L!)15~>6)SX7b)F(UlS z=OUVToJMC>e&{y_B$|5SNE?5ioHfB`7z%I{n|g;PymaG*cKZx{m0fw8D)E|KZ3t@>N0Z;K62|cG%_na+Jt!Gmtn|rKj!@Q6lJOJ1BVMMY7R|BZh zow!NfZ@ExNAs0&aoN8HjQ9(X9q$F)HUTGsD&^-ekm8}lrprP%qD}HB%qr2YCUNotx ztubQeG7{)XuXM&irvf_sF|jhx1aJVST+~4JQDoBV9V3P9;F1W=yMFoe7Z|xguzH*XpR!FFss76J0;Ya-`~A&7`FFm&-+Z$f zZL+D;BDEE&_jafisp~P7y-q8usO62t#j#NIqa}224_s_Pe{~d@&C8a%zMe~|%MLS0 z#z*_y;YGS6(VwYRkGVbUfc_y(0LI0(JBCu<0Wr@wo6Ci~4rJ%ogiCLJvaooUS`{jO zWy0Hh)F7j|a1Nw?5yJtqHA_W~V&W-oDME|EPhYbT#>}o7Fixh8O&AV7xL9#O)Mq&U z?`g!)j5+n|!ahXFcMji}u%LSBOb%VpNXXt*1A~5J2r_$_8bJ(hgSaG+CN3E&P4 zS-R#hM2AB7zAgQ&HCi?eEq^ zNSWPul_OBym=0_b)_TiAub|p=KMWVKw26QguB3HFBo!cW`!HSxL0u)Rz>3!3$umiF zxz)(m_(z5}EGi`rY6iv?QX9(6sWj{(#|dOuG876xoQef1MByF_)e0XB!;9to_szL=j{);x7?M^ zmRYnB_tEWWZlfo6dkau9`p^OoYK(hZC%dubxoxtvj4h5}Oqo>Me4&_cYhr(hRI+~( z)Nx#SKiJ=8<>q!?Xw4@HmBn-2M;bL=c>o2Je+mkU_SS>99zXIp3ZP1 zU5~NjWFusV!{l{f3X#BpjL!B`D|U(KKQ9l&`ajy1_g2>GE?_f7cpU4%8V=E3mEu?$ z7Kuv7Ad_9qr!PN^7c}b>ZP(yAVfmhG4Ev;5dP=Tzr>OSl+Wm3!8a`UNQ%f zy0X)u>M^_6N&f(t%fhg8ypD%Y?Bl}>Cyjogp4pqLRbbK--3*^NrvuyJfUO+%Ol6Gj zjZH;3kZ^w5BC28LC@6rDmqk}E{AL=;A8P!9px zKXw(xBE?PtNTDCM(*h%y*hyEMAHNIJNaDKUAh_<@7TEM! z6G|Q!D`$2{VJ#USh_0gpFCtBh>`IZYg0us(0^-bOR@kxuL)Wf7-Om>(jB;FEZ&MSt zfYA?z7~I30%^k_IwNhB>Xe+0NH_RO2Ws}>w-CQqwwCql`?8RZq-sa?)hdalXb2a>S z(cHBoVrUC)6iW22qZ0O3Yg$UeNdQ;EL~jk?gb?1K6rupHIP&HnYx#?r`C57G^EHm( zA)4JCh~7m_3Gv66FE8(M*`$v#fuouyG0O{zGC1NpG46h1=PZ{lgvVvIq)-Cw6bd>F zc~_kIa{mB1=A84Ga*HD7&nlMi(Q3%)MR|}=)sYyu1aVAHeZ79Vtq*_`nAwg3owb<{ zymulN8*dpX8Hia;nK?xv1~p=Vvl2(F^F8f(K3zi)l0&NF<6K(SL%LEGcw>xzflA8fgz*E6}y`LgoXd+Uf2 z8RS^?tZh)5P%t}*By}3rxVXYCv`x4KR$@=b7)|o>2}QaWuT4o+Nz|j6$D)Ij`mfry z&mQ*q_Pecg2|)m8LMj4q=_K>$o1#kVAPPtop~8ol?gk;dT~u@!hTe*SQB;j-`;Iqn z6cN^FzGAd$llfu{&5-2@TOHnJC*>*yc<|PpzrPwO5naZMLBj}Ox=gyNO~Ut5zbEAD$D)PSsOgMMX{(PSHQ}3DI9YLW8%7mZ;AyDBMgbVY;YyKFUI!NfnZcB4 zfRUtYUiLpF7QTdGcs7@D_g4|BNkLM)Dba_92SPi$g-DO-ohjLcYZEjo;fOK24fN8V zyB%H!33LFY(8c}B1QB^O{9AP+3GS|Lpi4O>fJ$xJSf5~_5y({T1FZ@Qjx;(}l*a7t zTX)mkRb)+RP9vrjI+>#(h#>U?t|$~M=9OD|hm_Jm^^x4fuMA4%g;!|QoCnMv-sds1 zwNwmk8dsgvng(E?M_#Np)b>;k+)H(0UPp+_Dl?6CxlqHf(-1A(k%r35Q6eA)g=lvF z01!Q+4<1}nD*{?V{Hrwfi~gXA5|VzMDMCNGV=X9#Qm(XC6s0N;h7&B&&q#aJr8e$Q z;_y9s97tr9p&`*j#GxcjPXWi{O5@r%&ugw*CJone;S_N+Qm3~HBTF?czR)pow|3f+ z4@@C@xPF|nz`KXyJx&K^xyfgE9M_?c}{qq4BE#tjwe!DSFk%MKM*QQ3VLAB%Yf)e)gy)DB|YnhN4JeB z4qD%fr9`MQqSL{E{5VYnu=j;(La{qR(ATiwYzULvz1By2-}gi@N*&56QK6yn)OO>M zUd3>yyj_lI#-M}!{n%JZL8K(9E~F4^9J0q9&8U#Jr$et$FdpIu0pXa1Ak`bHo|uXZ z!e|)ANFlMHeNkQ_zL-E1jp%nSX(sk;6am8R|n>vO)dG^jna7vQE z2~vx%6HniQYa+`CxkLq&6>v>A6TsK=z!`hU=2u>$YXjL{o;Y1&e9=kV$TtZABpwG( z+lnn1R7ENxgHK5QFP(i^6ZlZdylDYtOrlW=edG)0Uhw*l)H3t(Ts5^rI zI-bh#t`ww$j428u2;;Vpk{w7j)wQVy63cW@?gSwszZ?UC>R29%;HwG}KNb|5mbi_P zly2Lm5>t*a#HynRW-QH`n}FR)nhwlIcs{N<6*ks`Xaj-q!#VHnE$$U3BvsFt=sP|b zSC{9)Mn*f7HQ%=xuN?gK<%11cCsatvb!BVK+w{U3aX;InPhX!Aot-|+H6juvCEAxMz0mt51 z%SnD^00P5C#@5)(&2bx4Q*y7%x6>9?6ey^c!kZ;+=5rr7<(v-eC`DG{+HtRj5}5nC z*KXJRCtM?n;^f8M+{`ueM%+mC#Id}r>dpWiKpbn-VLD1-;bC~syVgeE5Y{&HA=G`H znENuEO%K#8e?0?G{JoUIqiq`>sf~#zKm`FF2geW#Xu*=+Ne0&>R2qP5#ACpMY9|yH z5>j@?wboo8zEs+ZvpawXRy)6L66Omc+eTt-vd1iEcskHHI(?M*;I?4m((SDYq^}=% zfRCDnjZd|H2Dlj_iSA*FB$A9tWZUKkuit`kQgM)~NK1oGe*+wO#7T1!Ud0&Q^Asml zI0WV5oi4$km8jbAZUgNad?2I%A) zO?YfQPocp(i)6mGn#GMJLL`ij;~&5F;WpE8Y?YxXHaH{fAF~}%u044`%K;Tm%*V`p z`(TW^Iqg#GAh?rjMuB(NSz|RZx5HIFgB31sm(R+)+w@YnHaB7JB6?DtSReMV-RQ>` zCCn6#3&nrbx2$p=tr0(%G(Q7?JoC%V%sB~~$~0`pEh2k*jarqeSNuY&@faf2z?JD% zO84vUAh+Fuo?$MuJniB+jibZWJm5_F&LtL{!)U4mg;wCG^0QMz@f~pUk10!}gEfXi z%)l@p(V?eMN3UL(X!51R8NVz|WpS)e4G?t-K`Zf6De%MVlZ3ZCwQDeHkfJvW_=@>j zpJoWSTAHBRF!)YxhLLtj0|fxCgOR6g4{sSQm5gw^-6a+#K6L_sKWOkcH*SIB0H_iH zRTbhXgwe$jn9Pg<6&r_#Zn#kn_@*(&x~_fXgVHMLUulC|9Rl zDY$+3yk)UhXMy!rTCZA+G;@AIvA9N`D3Dsnc*4ZAPw059ej^iBo7@zJ-_MW6V)v)o zuA#$mWr*6HppG1RGsgMl;ovZeOtyPOYdprr zTX$izb15tS5(v=aRcCJ8)yA3l)*}?>vGKpli@;;YjU<^*f^+$KEz1N}k8wF)tC>SH55w4_`{RYMv+fd+ zMrGRTO%H}3+;9?f70s8~Tv~x8x_5kbis;=w7>-MOc;Xhaph9XvQ9(*{ z#MaXQyA_M=6f_zY?e)jku)NW2AO_PwEYh!VqDLb|PNNGypnVf8!O&b4t5g~-dLGOs<^E}~v$!z`SdF_XMyh;p z;)qXrz57cVtj$8LT^FYe3hJC_`LG`HTG6X}q>k+BKF~GCeiym8w%Fi#nSh}j1w1@( zD=)mc$);PmDcPh};I z(c2!t(MlGgyeo#M%z^;U4&VrQEUJWi@HF?AK2>!T(FRwj3qXH}Q;)<`8y8C)fD$QO zHTha|7EPBEA~+Vw6SAGdyiv5&_UVNgzc4{$5qr_Oh!g^(_JP@mMIh@b6K03NXe^pX zJ6#C~A;OCJiO0r3@v@yZ>r6FMJXqJfWntE=G^egHH#k}Oqqk?B>7qo1$@?_>@zBb+ zPb%rKF)-|xaZ^@OV{$Y-xQgYBv2Id#C0%L8qYR6D(r8`ornR|$s5_XkPyqA@HCpMD?QsUoleeA|afG1+T(^-#wsKk6tTc;aiivMV6~tr#A{Fb6NZ z?rtQuFI7?=A~+R2o`$0Z%*!Nn9=I7u(y1ido#HW@x0pB#r$eqL5-JK-q;SCKSe7UJ zCxIVjF-)ad#YTCvk5c`5XcGM^mPQi8>4#TO`nJktld1YgQD_J8kaKEnZ8B z(Ikm_o;1P?^EJ!g4PDu`_4(+m8U_iwUmG z&&p;ur~ctu*@ZOIN^qwFY5=b+$?3??Qa*cSpBZx-OPO;Ow{olW>OwO0*}9v+=s=<9 zP72svM)7Qnt3xOfMr%-GKZqVb3|2nh<}*aG$kMyY6Jgz2OrU5ySPGvW96-b2q+14# zVR1`a)~ZZtNG0+A00}%tPCdAD_Gx8Bka{}${$xd-`g3?7U912OU~J)uHKsH*$k60) zc3RBpNI=ZG5Kz}qgLyuDZLbI+!Vm_{rhva%BH580NtLQm@RKK zpX*z-S$=h=978?Z2AzIV#J9}tZsP94GjFXa8y&UnzzfUCtZrmz+E~!F zN0;TV9X)Z3r!d?oW;+}MxA;$C^&ryqfyNJP z+DTl+Rqq&sA~2%(5PJ?Mi#olA0vgA8O6_3aR+tYoCThSLMA0ekoG%)5J_q(;K3$l# z-MNlo-CU@tO4L`Q1K4mtZ6sv^Q|n5wRF31`MJ8c-rCE;YJF}>%pr#5{ zunp@+QzM4(PWs!eqScK-ZITb)=dIRku>fC?!?wwZD=d1bWBV{19>rB@X(v0=ix^!s}-*vw2; z(y+O-l_=X!>r@5;i_@+gcQ-J!Zt>M+`L>@9zM}~wnhX1BKBfd|V_l?ENfh<<@x+sK zPRu5G*BnteijG}!jT^SMVDq+8@7?)a2`EKJnKCA|7#(J&G2U|s{qcOA=v6vJ+`P_a;Y z_DJR~u3ETD$RI5}p4o%#j~aU8B=;L7<^m(LzE+g2S{ACl-h>0hc#7f4Z+t@)bD0 z3KQB7!x^jX#-i8fZ zDt+;(@f7G1+qTUf)Wi%j=rlX<56P@$i$~^x7D&;E+nM92$%+wX4AC|P~$B$+SYRp`!f}Blp zkk?z)&Dz;DG$a8-O|%0J-g_%8{JS^LqmEN=p3VVcPwJMb8dPqsIVGjaTfS>`-pDQ_ z3e4woN_v`}G$7RA7kk`E97@%!dQfY^mHY5pHP0oo<;x71#PUlkJBF{xU-)V;m7t)4 zHlB!EPNl>wET1SesV5vZRzV(ZEyA{2Ww{`b(m-Fz)zInUG{FnpvOLc#p2lsya5j=S zFyL^9Beh`~-0b4@8hC%694Qdmpw^YIfc^O6tM1eaa}w6J=Ha53F$7byt!00ZST&UY z07-KhLj^-A?E;u`Lab>j6$}kHR8z3{aKgLWCApuziGNrn3l5{R2~txXv~(i7s74y& z-SOA9BHqwhq_S}XFG@^iv2KLU)ZIW0J1Kxx;z_TTgcZ;YdSLwWEb7X5Q~)XAOhuR4 zLmZ6kH&l~PjxN)h5NkVh$$8Z2Fnrl$mkK6s0#Kw=p){@xu2X0>nSTUiQ-D1<;$;Fz zCWQzNR-n_b5spbISYigIh^4AE!qoE4Mv#PBGLuyb^LNtML1RRfHrz#kGkPPQcP=1 zuok7HQ)Ygn=LkWRWzbnIvd_AG#JrWQSoFrloc6J)bwk4QM^zzBMzrT-Lv;{K*5!WsN4>q_UWhFk1&Fv zLmPJRMHD(~5B+7!-ZHBICk8-&JQlIGw9cTo%QIAIttCO^R@zbZ^Qq`ZPaFxzX0Xhr zib5QBNbZq!Dn_g7I$+*jw$a=>sCd;yU0d*|JaKD+0MalbD#Z)d7PC-mhY|3eap&0X zGG1xA$}X-xqI&{Sr%33|hgD`BrARts?2nsfweI4)g<9Oy06|r+Xgopv`r};NX`N@8 z{r-D?g=D+5*G8jC@TsMHC5x8Z+h(xD(6h$Mpi)NLMkk@*a9ncv%(Cl@vi%ZNb)Yo)yie}N zxl5CsV_W@_M-#1Li*cfYIFb2wVbtB$T)o&e?pA~zrkrsTM5TIxttPDqQ>{^H(hdih zJ!>7l%H?*sHd8zn@GN_sOV9yY3Jb0bSLRh~vVvHhI|2TXS@%h z6sDSBEMO#!A4<~&?O$+ZJq>YnCX$I($e;?1aj#C8%8;Pc)2=nAOen$=N=!_(jOoK% z3*T1qkU%GPo*E1or9~-$R}qDkqNNo1u*UI;cu>|wI~TTbB7guR3_Efb_WId~0i9*2 z;i~OFki+hD5<*b)9hhNe3SiG7Bvl;>ll~xTFl!kRA}?@K70=%Z0O>#$zr#;BqSm#k z#wOV^MG*k*aJ)JWClOBOvIR8SdUeNa9y@u2lS*VFv;j#yI$*?#V{-pSrlp<08);!?|M8g^aM zQ~v-+?Z<5667UpQ#RY#nMR4gPgzMcz#Gmmv{OO7c6G>%M3^S2;o!B>bCv1gI)jI4S zzqjni&?`nB;#voBN**Y@Y3tjB(L3EsCDe&XApoJ$jN1LfPCQBQ!mCSmzm-}*-ON;C ze~G&>WpkWtWlp^3V6c43PV#0e0O&Zkh6|A$v|D3UMH~Rf%2qHHKnMi@13)m6@?gvo zy>Nm`&nQ|_8yx4#DBFd9;&GR(juNA8A@2yNQ>y?tbQs0Nj;OZqpVpIBKft}XxJ^v* zmJ%yDG@|v5y4Sgj{X#rCdf{{kh@w|oXf`KNUKmMj1W}-jDcB83{v+dss0ao^KiWGn z#c&Zwsj8Knr0NYoPdW!Fy{V-mG#B&9}|2gz@+cSI04KapqLH zfmqmEOC`OV6`+)@Qb|;GQ>_nR!M4nY6iND1pU8InWKQwBRk{*{{cFKLGuRJ_0zWc% zXG6MHT}4T!UV{Wg&m)pbkiIzNalrxz!BTq^S6oOI2@pc0D>~}BRBM1#s^VnY5kL|k zul%;se9Gf1u(F=^Yci{G+<;alBA_ukR+`hqR|qc?GrGH$TYazIDvsu4?&OZO2U_hQ zanoHe?z744Y>|bWOB*{EatF-EiyqQ@aoOVx;UtYlo?goI!h6jp2wAoZNU6qF_VUUm znm37oiMEnQ6XDx}@QOwc6Ne^Yl-pfyGQvB?U7}Q7K=JJuZ%Z7uvm0q+D$(`mM`*!F za4bm2nkm^)?<)dh>RP*biXSAd!OViZh%dv^%6j`uW_ zd2OxB0(*LX+eThRWhpjk5w}o=0$t6}kdmM`QA$fJr?7$LCkP9_8j<{Bx4$Jh^Qoe2vSjY_g5( zwoA3#JL`~#UC*_4hWS-caV?5&%X4>l4JrYzhF-qXPkG%9-(iY^O(-kHSfBnlcFOuI zxh-XmDOk#+@gs*y(*-BX66_1eB0b^&y8x<@TJZSbb<~!M&eqbBo7-rVYqq*poDXQi ztfxJi1o~NIp|9zl!`N}SN>g1c%6$E9ETg?=>K?t2UTKnFTwaT-=)X-Lc!+)0Zk2oGR%t_B`$cVJ^+c7sZepkYreWHH<{ z*DS$E0*JcQ_KzGTy0R%d$pZ!R$rGO<#FvO!<6*j-XEK88QC{O6bRdu`8P ztt%RBEwq&&im2gQ>)FQ*{$u6aoUTQ_v#)gCAD$8N{jApS^*zX9t+)ZG?Zd+FnBdJV zK6y=F$5A#}?lRz-b~$9YCi8uM9f9 zyyxMb(<;nvBmSWp?~39k43{VdvMCyF{w3_xXYiWP|TO_jHZNpq%*}+zzUN;ag5w&V$k5fvr)B*)AcXLW(LBT^Kv+-Wh z(X^`_=W}m&-z3$wW}0J8BA6O%$n3{wvt1Em(U6*MqMjP@9tRzU{n0|q8I&~(FX670 zZqbVClfB4`o0+o32F~ZY`j{P9G;^pRlNV?s=3W%39B}q7*A-HMBuykmHK6E6YM=5r z%DBRrR)+-oBNvU`AUeUQJ!$*H$#)`xjvH`258sI(xO;RHqVI*xBwhe`kKKUlaK(G0 zMgb~>9cnm=dTKC2(`CeKD##W>D5UT|3?QbEv^lCSlpVt`vkJhE)B~u*^7nVv>gYiN zyOx#LhNB2!xE3y2FicKDvYjdL?EJB}lj&{*&pKBa}Azm-sig5IcQ)G3ea8*}TIpnQzxTT&_@Sw=Gg+Ps=1_>Uj`3Y2EAkOSLX~|q@|9W&*Bt@TI?&+{)7jg^%M1cAShmq!pp#uY zJvd?^8|v^dZOX7Y@jQvnoTStL0BLT;UZ(ji`I0agl!IE-1BGk1J-Oxd5+qTC0->nD zohW+Z8*?q`-y~Z?)|J!{IABudbH{ZZxbF56cSZ)gdq-_6gOQJ>fGVFYcy?kfK#8GA z3g{6lj^=LoH5M!?AT32Fq3Szv>0=@%bzNGd z9m1VPCW7tWK)P-mb>riKlU`d{vlf(XAh4;>95-K_AU9?RYDi7=r78)fM}RzWbhM?9 zD2Q_Dwnz&!j|iv3RmP_lLSw z1eSBCQHLhjQmQhh?xu(sOAarljSJSLwNYIu;e-+pHv+tP3^ga_{J$oVJNwm3X3)yc z8Z~Y^NgpYt2=&2?w>`-#pIwjlquHe2W!Nj=EyuB|@M| zI^q&&Og3I9rAhnL4PC4W>xC0$cIvZiebf|DUKnD@naD5W6Phufe!-yBntE`-&Qppm zVazTq;eGK(C=S5rPYt6MTM7x*au9Z}n=1_@;$h2)!@+5EiWSv@k~*m#YW#J==rah; z#15=Y0RW1F>4tAS=C@gFQ^X)KC97_rBm)u99^QuxoP#UB=V@fPw#?(Sxy-bG@jgsTHX*lGD- zeauCfCJ`$I&Rs}Tx zI45gRkTkEOVY;!-GW@%layiAto!m=#ZsCYoqLMRBz;V&F9SHEnE^L)%l&mNz3atp@ zGY2Xd+b!ZZmb5Lh+lZx7X_3f+2?SRI!1RLyL0~O+Os~E&eqO0V#~Pi?s&=`KMfpv1 zb?m`8En`KBR8nJQWuZC-Ab?M%28g2Wl08X!v2KEdfEUu5_}8-u)vFU88x8qJQ5?+- zizCKXIRL9EIv(9H%g?XQadP=hnb~U%1>A^E_pN_T4^I=&Xf@O>=bQO5I2KfLtmnE_ zUM$DM!&8BlQNtag{V@%-XkYlN*Yh|nrpX$%NZXeZg%lk4PRV(1WoRwnjbex>*sJAV z06cnPE>h)ezndVI`u5@CNlL6682Ly#x2H;Aeti^*H;j+Fz}n5(&C-OKN8 zd8Xr+a}||h`jv8w>Z(B_a|-pP74MsD@HVG9}P6r8ev|2mrN}q%xzgGg~52|h*4ziMqk3iv+N{cce(tn%YNtO znPzKcc$V3wUac-)e-i^mKRPh{YoODoOf`L{=Y)>#?~(bHk#1t7H&Hije3B^Y2%!Xi zcv~y)TMMQmINOH9F866T9FMhqybdv3QlyZHk+*k(hNn<_FiP50kpd$cgGyIk+F(aM za_s!D^55m|<|isePJohWL)d>jGOfA0nQbOxFT~q&z%Yns|f50b#vHome#m z0yypLI42x|7)zkqX{Yd>AAT008ij2!RBB+R;LMcbe+lu#&vzXRu=!nd+u@8(Jib=a zMbsa{aFnUlic@G6BdNk^SYR~5MVKl~rDUXvz@2n8!Ys1p3uk3!R#jTYKMGTi--0tG zRitRcB!Yl}hMsE;#$Pd>-*Jhm!=N6xYkqGjiF_0gu^#q$lFq?cD^$`!(^G*Q*Jv+t z>1~t;du7p^T>;#O?jr&++p}1%5?0+g0E5GgN&5yI$MsdDdJrocY4}@#_#Aqg6@;pf zdfq)mZQ4HDb&@AjyUOr0>0Z!(VZyj?7@EfmFYy}Dhh~^20bfisR=O!C#OE(D6pRSb=`L~0RGMJPtJBAiGy2MB-hzF&tb z5?S))gm?CTr*KJ-GL}=aPb-4KikgB*s3XS@2?<8}ha1?RIbp`U4R90sP4;2T8Tq(l z3S8RRwq6jF4v?#tMxpaj-HR#WHXZ{GZQ?}f|R5Mjw=}@P{@CO+~OQ9hQjZ!3x@dvQ{aD$U2c{11xOu|Go zsnFFjJ*&L~MAh<@>klTnPYO%Iktk^tgS!Oqh` z!1m+mA^Lm5q<)>qsqiC@>^PCFo_d6!Cap#2-JcQn;|Qka+0{*CjP4rsAKfv^&MgG> z@rWmgB$C2VH9#Z$K=kWayH5lC_F%N>^)~(NWQUAuJTNZg1(jv4oDDbt zc>cqVoJ1K(qPa#(W#g8)s(WIEEb|WXbU%eR5F`W9%D1DpW*(f9{{Tmpn@Lo!cPpv* zoqo&?=4%h?nPIqz3tZT~@COnpMqh{|d`D&$azPr)boNKtm5&6M~*| zzGyG7{A51wU|3(Nfq*qqdJbc-);UCOmms3~7*Oe>1M7`kNG(cSEOl6j1wqqqXN@td zSz?kUwzy!sg==53n8cGE%@o8jCII4BrI}Q;zHq#BP z6$YrsudX4mxe|nrvr-zl1(B_n}|-Whtu%{+Z~U#l&+$up}`G^@c`ng-zl%%gpX};X(+asZdFjp zCvF#6Oq2JPvjq&^Vd3fU!xU?Xlt4AobAdA(d1fq~*Xu5|{yaf#nn@LrfWr)-YqPvf zY1j@8Ut38cGO61lipKQe;BeoO43ZZLQA2*B(^YQYw~h&IL203pcPLv6D?!h%@8iZs zr6jrBkt!iyz)II%9B|>ZyS%rvD`hxjXB&exN{aS)U?Rj+2@HG&)+3?laH}f0Shpeh zYIkYG9vJhe3mp@-*9Dc}X35lL>PS|=46f)C;t6$%ZSNhg~(38*;A*FVd1E>yXbnmKO% z^4l%Ba4xOlos>l}AQM1nE2g+T%iPZSqa@N@+)QanQd!!(er2iqdp^t?brx=-;sm&| zojbWzfZFPGqj-wptDADE=4) zo=)Kxd%e!`)n`CHWK_{Sz^yc%j4|0tJr-qxf9bc3WCVAXw+?r29S5lY06Z#&X_=RK zJ>(o$!@~eFd6Mqm`gPO!!3GI5q-;i;PiIf~j25?Pu2r|uZmmwq6Ncoc97j6VgV)Em zZv!+omwoyL4@b;&jK>koLQ%ThZiQNjDcr66FW7t!=Y>{xQd-7iXxQv+D16lFFd`N< z(+5@sU*;6)>xEXikhqcUmP6iP4nx>^MTvhbU_gimE zPXqn-U}ZLynkxw+iwn-bqlZJPsd-@j2DHveHGM z&})ysuE7}(As`m2jwOd$4krzquEDM1F-qI+H364hKZsY z@f|Rp%LM&X$xKEbI4aPf;SPNqsGFFqr_m%mSVRt0vHf=!*3y{fD%R&Jjw5|zfgpRu73FNb)5Tww^gKuRsb!hvN)jF+DUZd{(u}%ByzV9iv%ON3};^s93 zb)|Id$87L)3GM0Two-=(3ePyrxsKoJ)u6S4W3@)gy(`AN1x5>wUbe7fd1JZel7zI9 z7BX!;PiX0Y`6?8Hxhhpsg1bP|ijW4Kp!#9K73^jyETUS-vX4?1k=l%Koa-zHkO{M(URceyRwG`ZD=-~FWQeAjWP{0x88QNa0!6Hh-FpCHas zDQDkpHq&o1ohe$WuV}BtQy%ELC}T|0Ag>I=Y^qkOSAh(trw~EMn|Q9P3!tdtUMA1UG(et5C0Za%Ku!*ERs{;G;mx^EqtaTuq)v%a{? z@1x4|3B#!b!!RE@AHsiO=zI>A;xBL&wu2QstzB19$G4~>(Dvb*!~Ufef!QKA8bVpr zgHe&;*Y@Z)mtMZ~%B~1!h!3QZkNTnFX`P z$_c6+zb!h~*AIE(+CnyGB3QQX-7XBq9kID-k*nq7GcIMiiKItz<%n946m(EE95CRs zxG~s$HOW~mMG^N3gbX+y(L>V%ZG+ioclmQjHr+SW!l!`*{-XRIzit=6QOiLqZGA%P zp~oK{Vmn7{KFwN?7q*&6<}mg7#s@lb+@4sWXM*O`nJjLIuG7&^YLTai@ffZqxy%%s z+iP(R)sqN?Qi>vw|iUJ4$v8uryz__vA<&7kn;fO7lnzdW!PRzZU+ z{=9Yb!{biF+tUE=PHmGgk~+&Ab!Sx@wt`8gh@r$z)8)CNX8AElu3(VCdu9AGP!^1j z5NbFbaDGhQ!s5sJrIK!qhw4T6qjS^K6D_z?o+4)5ZMBjBqPpeq>KZxDac6e`5LPvu z11f{4An_f9VZ9xqUgmKF-OOV(h_ygwV?@`WXCvSaB+l$7z0U&JK*CG2MYmd=e+>t2 z9K5xY!IiSyW)kkX1kn>!5(;YX_?v=-T@+V|B;s+d?Ur>6Nz0VT-Iw0G2&f58djUK? zf4qJBdF@r2``e=VF zEoP|*+n+4sQm^GMR}8t}2dUf4nC6aTv$oKU>;-pr;gw^{GIIyH6Z4JKvNf%w4IQ*2 zO1M4RvF#KNKcp6S`L^!%lUFz<;=n`JIO+iMgIUj#}`ANr)^3Z zs}9H`jT`HPAzw;7-MJ5VuHN06T^74Q6|W3WnA-1<4TtpOqK+n{@WR}(*__KO)6Uvy zr^5=&X%)=(PqcS23RHeB1M|QOc8che%-ZU29j0mN)!+l zgI)s-dE(7%0G`(Hye%N!lC4S9aO~2!e&3`!Br(RRO)5B30=j5H2DOs*iPRJdbm;@z zVU6o(jOJqX1ZXH|c;UHwBPL@jM#Mr{fF3ob9X7}z-dI+wSa#?z7-hywcDK&&-1p)Zt3qtJf7*rzg@UEVera2_( z8#(!nXa)*c*dPolzGD^GzWHZh)!Rin_G4495yq4Snw1_Mn2OHgF$a4X0K1kVn8fpw zA_fAW5yM;#;(|;)q!OIq>np+iXJRgaiUUnJ^!qU43S_$~Mzr0p3^nrT+-Hu=r^>3! zQO1D%oN(-fyIe};r~px@@U9ziKt(t}td^$`b^id7kj$nxX<3am6zf6L9TvzU7*h7?-y^9#Pi1wcC8E8;0aF@kbmD)@2rHn4rrxSGkqyvV2+z#xT6SrMH@>8j&y8q@<&4VGnj zl;;T|G=|<53{bDmdpmdohjx2eGh`$}-FL%{VJu2~Q(KglS71 zmSYHXUhUWr2T*DaY1fZTPs{v;XPMr_*B0B_2M1B)Y8unTS6X4g%ABiPSZ=c$W{k%e zMTrO{)|xRo_LJIbF=EGIYhlY7BoV?Rb&9grRx*?3B=xB$40`Oed$!JadO+=WIJ!@N za0UPx5zG(FNoAMEJZTyzNcAjwoHco-IMJF|L9XI9*N;kJ;hJVkmF1F867K|sdL9Zi zsKCss%jzUt-fMM{-Gkc1<3(EQD|-GB@$AHLyDfRnL)K{q?-wZykEr8b1CPIK6U*M+ zzUXsI-m7-hbhla(gQo6)pSWVju*&6PC6sX^h85-3TVHV?mj#)K;&4_de(wxIT-`Zz zy>1z+u-)u#_Jd4{4|BAhW+#drtf6!u>!%TgzzS0l?bz6q9)k&m)&-Smc_<_0H6I*H zWiR~ULVjUNVl2S4d4U3+WCvU)Gng+@O6k2%4xA1NrlA80(yBwSxs!5`MGZZ1Dg!_p zi0g#5&IHbt6*}QquZ9Ltp@p=nrgwqkgg5I+k*QjO4`vs7;T~i>v9SIub-${0@1h}n zOD^snIArq>Sni>?*iPB@pGMOUCfuyShY?&fd7gzUT||O_4-tdd!BQgg6hW7plKIf4 zgy}yGIkQ*qIen%^01Ic=(+#;_bfM8fAbFKVe*8Gm8snFx49!st$+t=xs3T7b zVGGS9@r429T6s#BE6XE)dGje{x)7VYQlW~}0YzXxzT8?S)Fev`cj2Ct3}c}u#}$5e z6qY>V`J5nbTX>yxWtQ2cgtk+uq^q}bHrHPj zVZe+dzXZ`j7HrgzR)g4biP_Xa`W4#T4-5#p4=XLLxutlX!PMcence1`k)J_rad`K6 zZ0rISYLbiBY7Sj_Nai2? zN|xG^Qly#@>xDKMyL(s!9mPLP04c)0I9h>1DxeBGJTZl#I{@L^jcy8s*zg920uoG= zNC^=o?Z8;dB}TLqG&mO}!!)H3)rtEsqVa_uLUchuJaCRU)On7Dxa+7GdQt#`DMXsZ zO*nx&>TY4=L0wqmkwr538MjF7x<~Es9e`t2@rQA8-~a&;spvYKDS!>6srk5`w8sgg z_tt7=pg~aPyHh|qlZ6L!@B>4L)qBQ5jzT3t8-8sx^rjVPi$Vo(r5MzT#OzLr4M{p2 zBw^m%h61S`gT(gXRPHU~JBTjY3`Yo9;SS$9Gy@hG3d*m{bjcNVic?Xkz*~!-sJbYm z?L)bnz#K2QoQTP&)M`gTfUS28g@x8Qg{K>oH?Wu(*?M6Bw}a= zC!j%`^PSBFtbDtb%ISTa)f!ae4X^#i2ctHK4~rg{kCZaocf3S`10AiDe@_7#4WJ5< z{{U7Rkz8M9`Hb1SqZ#HxktzQGw-_{4^%egB=&@^L`C?^RWxcdiVi9U-#M58D5*HM; zWHd8A`+PDTyks8luJgN9(!P;ObPR`S^B#Ie$lc8Oy6R>&*(IlWTJE^ufQ})5ik(jk zCAQ5zj%1EYuJZMiO6nveEp-C8bmln(cQJh(oCz7*u(p9BT2hqid_LSZ?0G=tw=FEq zD#21rl2DeXQ`im#ZA=s%KJrH8yVSf5Y7X3h=pQnF4$QMPo%{h9He;MgO~{T}*sN!Xr*08g-&vP6&ffy@%O_2X0fBg^6gP2X-sekMqHQr}8CROpN_`4=n(BPz8EU zKHjm)_W|W{ty&6vaEY!vxS7bKGSF9{Juuu`>$@42IW8RUprO=~2EToAE$(f$&@`*B zVAi_n`!PboffR%b)GZ{OAgtQ)npss^s7Z`z&=22+waWt|vuUqRKEDhYxpL-dWL=>~ zmF?X^DbrAJ0%==wZWXSY9^N08B(2j!Gn>iayg`Xpb&62oLicrg0YTs}*(R=6d>PBQ4%))s zLH$*4Vt8}uKZ#Xm*(IFq^;Uq6@a|>)8sJ>kfl*prRS62qgB-~#TFn`XU8PL{9<|dA zX1tz;F8YIjE%{-tfvZWA7JcV-m4i|130Y?|TDV(}Ix*T0h8-W)CRigykTfUpiV`r& z2^8_GMoDmWPvX;v?8Nzf?cJJ^>RKbj(xEzQini*SI#-l)_N`p`n;v1a=M7IRl`mUYdU^fneVTMMVQff(H?6QFYH6$unI8;-Q&iX!MTXygv-aV5dt zvT*0@Wm|8Wm~Guy0Iyo9H0#jde|-e^HI-JapbX-qpN>77%f8=oURO(AP2|k6Oe_)a z^9X*TLdV6bNjzviG{c@wLa=zkW|LV>xKq0sU9ew33Ngo=-fgmIyble&02+3fi#^8U zr&}PXalj73qATGju1m`;ZZa4-;rVmvv;JR!XR~M!J7y1UEKGMHP$!n!jHLV3u z`Bml_pFs67WRe+jR*-C@SXtKcO>R8pT%=oG|fOb@K__c7VzdG=2SGUQOl1orWW zGg~pXk+3vdl%|anf~rUWtAS7h1BVCl=vE$bFr~+La;nBLS`a^oQ>dmr0h{|7%P_$C z<<~1jj~3>dTM1blDbb569i>PlHkyKKhDJf`H!fs6(QD1zwa#}@$7>;Pp}I(>MN{}h zq0&XCP0HLjoH@&;-(g4wqan8*5LDVbWcz9(O430fnp9U3I^agg>gPXg?lLROZe``i z`YS8Tm6e1PU+LGzq)Qm!B9qNk;2NN4-~*Q2)F-yE%%_aUbSfk&g-}Qi*Hx~&TSfr% zJ{T>`e8iWzUB54;!ix~RxNv@Qt@>-}P+P}LHqi&spoxJ=gG%5Ufb^v`_+m9$o@pZB zd4?6+O_h>KTXy$uuXn4+tVq}vDOwGg?Au+D%@%)W4q*&)$cgncM;)Yu`DSS=wLjcW zp13$>XjHwp^0%6uMk?D0zpL1_kS)3?QNdrpH-OAMM;t%0OTPNs`h3y^yMbt}T_!+C z3_Eyw;46j$U6N|X@ZAcLO5!?pj=A*54ZO=NVM|qqT5;{hlx+Pe4P%m^F*PWEgy2Y( zpw&U4)YDz3w*@R`OO@V0H6N&hsO`YSQyr2`E7WwH=9W(6syH+nX{|qa#@!K%C|awI z7=mrlXbnK~Bay^*9~>bU^0RkPA!6JGHB;A4qaD*+ME1Qn87<059buJ&yHv)+(xb5U z5r`V~7TnuR{{W~ouWx03%tbl7Ahp^)y*80gk8TpAChC3CmMEvpYxWb1fwm~CNz*3F z?j@Dk)j%Ucwc-Xdm`^NItcbNuna89y9JhMcuq*qZwJur`%J%RSqneLu@yG!WfkpBRq z9mnaY>IFd{d`&SPO79kAk}l+B1V{*_I$`T?e-x4EYER57!vmKdVS3t89TG%a+g&yr zxIk4nh{NT7<;RgZGdY_y$^`eYyapej%$7N!ZFQ?{70{3kG_PD*Sv`f0O=v8#*cRRq zs6o@S?9hBLh8(~ZRy8B#Zx0+v9qWR@sX}UuI*;Flzi|E0)bfhDW$dghw{Mo!u#t{K zj(Fl}%CzJmb#)8_8lF6HiDxB$O?9UM+k}?eFh4aXR4uNd+z? zlEdl=mRLa*u7ZSmb{t6e_HZuSi2-21F|QvS1Ha~-tl=1KAdya(Ys+((-rXZsC}3*Q zWI97E7Cr)TjzH7yy;9 z0x0*A_48>~CtZJVz}&}~g}M4EVv#1As;*Z+Y15@~bXqCHM8rG2T46ez!{fqtnjZEW z`mAfUQMT*&NYHX zOLG)bIW?-O)Ns{%X^D0j0XkLDGWVB7Zg+?$9D3m$*>-nmVpy{!Fw75?_MMGU+tbqn zx#K>D9FpccBU3Vn#D%C79S`oN1zOBA9Jw@7TCttoqd;kZ`Q>3RV=IJ-fherofY-_m zbv>AK7O3xmIfIm?&h&g*DJVD*f!m1N*04qO>!w9{ZYbgzE$+6qv;dU{P9lVlvkwkb zy-D)1nq{mOQ4+~KLx@6XPMt+T_#83gFh~+BmQ{)2dkdK>sDe}Fe;teg_#74XpP1Im zm}bbcHI6ZK9UW_}K`O)0>rT&z#HH&6+eK&?ryk9|)tT+lco^PDLx%;51Ho94j{{OV zaEB(&(*6KvmPUQWSwK1(_TaUog4QRvJCP(2s_Q{P#=V;1vz+9ulIQmsY_|=uq}&C1 z6H!kBC_(Y?!MJXtn=LkSZDlc)0k!jV`>_ZcMwF3}nkTN`ORLp^0MoLuOm?u(nB0lv z?xHcrBxR-41~er7we-ca?e8qd%a+#`u|DAMyp`ia$M@o?hSEtFD!jM4Hn5Omc98)r z7y`5;cGMqQ;^pO8z>G^9+wA z3ZHspGL0W|VT9fbG?E_n_Re?&Y=2RNesfCjJ4xe;>)81tPG!BwKU7wkw>HTj-;Ku5G{OA!pF;njZ{N9J_fANACTk#Iy^Uf)x!ED+V+IpM;9j z(BeaNpVaQ>Ss8&|)Z^_T_w{#g+?Ll1K2v=~Mn5XD?(=>U0mC!-YD~kI`7<*1t3R4auel#Hmn&Hx=91Dy6I(g#B^-h} zFgUk)*48<)nDZAx-$^o0B5GCCd0AL+W!lF>r(7}eJc07RbUCj)TY}K@CAE$66R(;v zB0WF#C*6oN+$na&la>T@gG1qrEH@Yw%O{;5Jt{hA!#UuEJEWV6LO>!7DhVnJ3L}qS++$*%>t{ z82MJX9ejcrzNVEAw|E>Xcw%Z1PCv~srs$xT5$l;P@e=zN-RU%8uA71&R1mwSK zV6$FgKSs@_>!ip1bA^b{3Xiv)2BNQfA1>Yp|1djn&rL-YQPbhnHU8Mg2 z5IX75?k9Ox+0#RgJ9$%> zjc!%WEV=WRUo6Z}nc+hl#UR@yD??Cq1TZ7PhAZsjm*lg|r_1Kls3s?-j5;^n_Tts| z8VU~Ac zr3V{6MS2-s<-65#*|)eK%7LHxCy3|lYsOR4^2TD)Ey79y(`g|n-|)cs@*Mo`LzzJ; zP=1(R8sflLw-JJENkV+5f0~$rahFPaxZ`s42XfGX*<5Iv-cE4z6AO3t`$`1r^)Z8$ z*mGWAB(i1v*FCT@P^>#$03E2>AF~fUvzv2^2$e78v%gd2Vv23wv&BjKF`;i|Ewd}J zXKL4Sfv-()mTZ>ZNQsf!S_4Ju1wQ{%#r^9h_8sDinU_*b)1F-5I z5#N+^4qKZu24E%`55C;iE%jS2QW zlIzMZV!lq|XC3PKNUzK*p~Ac99?S_eXwHp8(-nqK&d^&ta%UNJ)>|-rWJuaue-XF} zuf$Ww7H(6S+2=OO*7p!x!zQG};lVWU;fPC{S1r|5j6FPZn=RkG?eCGLwSs&PXf!^Z zvysTLrqpFBb@*UDac*8VF`8*b9=vcu;?=FLe5%C&Bro_+XNbqoYL|)K0ygjrIN)k& z#7RV~C}>n=<@Zl*a@JEKf*6=hH9fTK!>=j2YnrUG4v48>qqrAq0oI#!s0EoNg@ zMESpjSJRFp8>m1AXCEO>lAJ_WlXo{c{#GO#)XhK(3KpTIel*3KbC=wOXH_z=dKv(y zZ8WcG>0h@Mou*Frj?Zq&vRlT|#t16HLGqgRR~I%*cLsTo!aM0H@ewMkffZ>KPcar0u~uV61-|P1G5Pw$?aUrBQJP1fUHiS3f7%<@$AC0cDaOv zLah|>1KvXVww*!hF%7-q%o;tR2+)q)DK(^O!fWjYO=lEJfmWUDvD6A%shK>nXROORSJ*~m=!eucz9!_Wip+}Sg*7v zZFLl}4*3=0k$P$v9>avMSSDAB;(|9;hGJ{6g?5MV)Pj0~LBcCZd$93B!Bn>8rw7t*8E52BsOMKpFpqUmyD0)+{98FvQ z04=#3CO>%p0NUT6oR!z(9JxKZ+t5NVZ`?1j)tgjhrhNA}l6J0-c6>}IW`E~jE&g)qZ zjR_x?5Hf z^Gv&5gS_*6dgCb03yK0xgnx*2#d40IP>3Yk1nsxwlvHcusKQ&TWxIk{fTaag;dR_0 zq9huXJBRJUSlF_XgloXl3=jtsm@qst%NzcnJL*OS>hyi9xutJD2=Gaa=i{DJfP*ue^%BLW^m6 zzo`bjn|w#Kc3sI6#4qjR+zRhd4-V1!<7V#9Ikg{0EgmJU2h69a!*`c+eYWWhcS9fz z3lqYkyHDl+08S#zvf1q}S2xP;3~yT1dU(^Q<57zSMRXHGu)=>@qR@Q;p#4LKG1n-q zu8da=8w?HC5K z$pZ-F1P{P_JTOKlC6+~c2GIWipQZ$q*G~ps&qdxL8pK z2vBS(01*LPLZo*RvX!rux{nM8n$k-fff;(9jmD#mMjf{~bXRdafkkOX@c#fj2c9nS z9_nBKi-UG}9}E)Hw2{|VwKedGmSnq*w4{o@aoQ`#0`nVoibHa%<^qy+3_E_zC=pF+ z=0#wvr-;-a3@BC?sYF^6qc4FSFi2LMMp89sFAXO+4b`A@E#`@;0pnVZAGa8_jkocs zS0MUy!s#u{VeOn(x*CEtBcT`?vN{mpsG-#V01)VKS`MIOL&)yPJw$O?O7S;$TB$Sy zp1qh_(f7cu2|qCa{#YMsVU{4^fw^eI$F~cuT$w7$H&%zQ#{w)#YjqF+m}@n-v}h^3 zS3p3g9W=n$oZ4QlUv#7CE)iM9)BuC1;tmqt<<{5MMhOzT zssW~egZ}^wd6zVuD$Ck(^4PeZ@vo?Qjt8bUu5zPh&SM@?@~G?DpR|3Qm|bl4 zBL=C;ri#zrLN>u|&23RCN_G zliA>VF{WPTXUw6uC0uQ}h-w{sLHo!2aU2sN5hr?D*{ac=)#J3D+zZjymtB%lwKZ0K zXnN#u;S^X&EHVX=i8}2kuV|-c4qLL^K=89~U@E<*_Yr}1_HoHI3lko_(^pVwz~fMv z?WbjDAgvgX+K(UKge(PRoIRx${;Z6TF|>JUa*CnQQP;F#9hLG2XbTO+G*;}cq<-uj zGRH9Q5kO_oujVk`%`J>mn~PtQZ0lT-Mc-oB^{7cv3aN)}@pu1HLx)q~WsKC}$yR>VFQK|(Q zPh1YNy^`7Y0>Qv0qlc)k_fdrug{J_gKv=(+jcvnh;5ER(;dg3D#canH%v?5BGG$^GCe70d~$e0oXv(@59b`z>-K#5nY3@6T)gr@z;pb zpLPl5-TkHHcM;S8+qF0aYbo!ek-r+1J|tlJI+*AQ+`5mm33m?IRk^6>jvKgPTZ?<- zhkR3cmtU2L{{S=g;;8p>)ETl=zL5$3p&C0xn?jZZEdeK~7`5`tgFag&vnJ+L+^ga^ zVVmwoO1bwhw2a9ak7L0_JA{f!)YsukbUNU66`|2ykAyDq9qqc3Hj2~SO6ftdz500* zX_OV+_)fJ1dj5F(HIC*!>iW!Yk~(ex>JLUAmN_KTUz2H>QaR%kQav>ohSvR(Q)_U; zyh{As9DjUqF{Fd2XSQROQsO(M91cflBWGOX(OpcS-k~DiRts{Jr*!A>f!KPCe6m}K zE-Y@KMuueWB!$2z=tiJ}p;KHUn8{&s(nli8YbYz-w;CQJ#{=au%ByCkpfK*;jao6; zUZV~|H5!9S8sqC{%Ar$^9d;jj;X{RM&VJm*$``_XoJ$T?((i%6BwG@7jFb3JPq5*| zkmoCLl~0!5!lvZLJEmfGy)~#lno|zjS?%+Pr{%o*1%2_AWOH5V+CJl7ju}&A?a7&w zWtpU({Y;t9^y}vXV6OiDb>F@f9%b4ZQ++)ULZZ~iGTgL9s{)4p& z2l^=H4*+%@hJfY_S&&}bxiQNej~=LNtpV4MQN!-Rdx+g1lvF0|p>f@zrLSCFhRG}FN+o<8ac3&z0dO*?vF4r@xa zC{i768ga0O*QoH?4`oj>X|CWXiq)K#c;;l~bmths|IMQJl@t8k)(U*&GGldV5m zGRgp^rkE?sR%gEYzUWe>q>9p=FzqRFAXH~1DL^Yq_16$DU8`1-0TX9uyAY=P&`43? z_##uh#+k%T7IYHUX118fl3L6iWQ^$`=yen{Blh8Jz17SSUs}mt^+c-UsKIV(wXu#> zRe~PyznQ{NH(fyEN*^3Ga*X1}Hk&Iuk}d4fA=hIQ_)k?lXmtm-5-6+eg@K6nkmYH! zx?3t%3jYArPnh+la$M3Txr|&wpQue76Rl~-12YIEy(w}O8<>cpYFueU$Fidpmo4+AMVRNe z7fF{-VU);{AiQ$zak!}p>kz2gTAou=(W32vH4&#z(GC!2G|O3{sLsWde{pkn9A`AWl; z1*F-A=n7l4!!^oKEQXW{KF^84zD)MnjqEowWz4bKv3R9)p_;VR{{V)Rpz$~p?Zv?Lxrn1s9D4qx0R+T77U*x{B`@b#1XvvCd6WajX^ zPx2GwNv_DI@j=(VJ=F96oPvu*FNw?aUvM|gu2*XvrreUJ6 z{{RGGSJt>}z{BZP5o_EkJAb@_Y4?mR2@6t|oD-1f9}|y+F6rf4w1!lC^s0{1qo4jG z$~bwr#}-FtB)8UgEKb{N73uQskdl7HTnbKIxzACgc4*_cmPt<2<^hOTE`;e|1s?9m`*c?b#yDC32B z#<6Z2%QH`p!Y#12+W|G8sUo~9jU|kC*R5wV9_`ozwY4e$p{^D~1WRZOTtG=-wvAfT zsO`ctn`PNl!buFWO4U?YfHgJk>Fa=si6n_O8cGs?vM4E7pErnG6|yo_qa-GkEl#KH z7)>`jLlva({bW*I*J_EOAxP{yX-#_LxsBsp$=xYtUAovkmTEib*Xk$YSSX5nkRE`>^ZG(4~}7s-GgN{k<@U zf>7p!#{fP5F=KH^#_=q0AUQ1FjFC23xK{O1tkj{44{s?wdsK^ z6~w|SApkRQ^y7=`s)>WP$w~zznPas6L>;HILxK_8NcW`(s;q1YryVe#Aw;z%IhwM$ z+82#GNy6o6E#;Ep5(ED}8_!^^M2r-luf zrCEI%QQ5wokWwf zWjfYJ%ehom`AQb68W3x(SaE9j;Vx-&ZzOSw{<1L&H&b5`g0S7jxomn6pg0uiLUhG_ zVsGMlBUww6~Z3=oSCF+1(+M!- z93*qK1##Hha)LNwE6*~38i$X=9ky!jKsXxW^zy~lih}dNR^=tF6h}(neGLH!COy{-J=ATt_Xc$cD8Xa8p9521h=yhe~^6iqw|4Ry}(5)B}P+ z(2@bwPSfjvnS7wbZ6RuwMHR1Rm^QTI@xmM!!tK?86Ljf>*^LFcbNEO&R5)TAweKyY zL9JAbDL4@da}*dE+&raJ=oIUQr!cR13-Hm!e%v@C6M#9&f|CkTj1S+57O+%> zxjK^r%_As9Qg^$Wdj6*Owy6mrD}R*Kqank%rSeG0G*P@TeSi;lq$ztg*}{nY)Kqw4a~TG0bpQO=O?Ax8`#zr70^kgDNF zm;+jR;YGs}wjsr^)#q!5$t@Q+w)w3nWI_J`aw0%<*R*Tu0m52rEmS$jU0f*%G#Cuy zQ<*MoZ}V7foT7;4Ml20Bn$xDeab#F-YebRD7LZhyI^wj;ZT_p8?5_(-jpaFwr6>WHZiXVs@^H zuM^ww7#r(V;DXOuNsnl6J37{p{MVEoGEAwmGDrDz8d zbi)^%a|v&+?fF{Gw+IO8Y(l-2a8tedd z)};6hHn~$HyHJwOcaY6B!@i~DZB2UAl1?RU5SEZ$R?ND89_N(I?^joH;IeP~VybLS za3Apz;5ovazm!K5i0(@x9iAW^N8Sb=@E7icj!igVHKaRb?omd&WNL9b=rC?({W74a z8c^~6>8=B~aJageJG<@EY}S;*h$BTL4F^u#MJ=-2o%5(6endP0?LIgj+3JK-91hM% z@*OFs{BWA{IlPYDq-~?YMQ{pGqGY3ww@h-Jx|S}mf1#n>iEGgb#9XYTBV$V&82F4KWV}3Fie2C zze+|KL$^1Gs3C>OMkE8kk;1+LxE%t=Y{urrC3-)PVU)}L^}oU4~)%yQZ8S#-|NT zgj`z7es0!{YFaW6Vb}7e7zkPplZtThlr5>ZQ>{2Tje0&iIYm!&F7Icvo-}$B-AEdY zNfjDnliem?cVw5!0D1zfG++fuuK|Hpd!lQs#aga76T?AFC!X@_G`^7oGRF%9Qb6KB zsR!eaHpx{^!93;JLPj29aOlq%voLh#46^D>qSjcEq;>BKg)9f+Uf%+6%e-N3p-TnW zDO1q(z!St%O*IwQ72a>0%?yN0#OqbxpkR0rjgkXzCop&sK5cEguNiwv z(4>)=A_nH0b-0mA%BuRR*G|)^IAzN+F;ytTa)xl=RJAqX@yKeO-3EbHC;g0?ZLFUf_Rj?O3z;~;k(AT zZKFIb-Ig>uh8?~bmMf-?o5>8_ojh?ypF+H73y*Ae_?sr*W4aVxv_iL&T(UDvEVK@$cRUr4kQux z-_ca1}EKA3iUAMOl3)%%r}b6#bZi_2&PmbU;JID%E$?wvO-gae_aI@b}m zCYbFRNe1ov)E4$1&NJWKwQ6m0n|Vu`v%6?$0Vh-9aJ~sv;{E%%nQ6wHbm?3q$sn%YMfR@0{mA(ca;4+B&21YvEps@pt%P^@TMTKFA)&2gT&^17l;Nj`@eBWbB@ zwh|~3G3gi>tLhTnE}ficE4j650o388X(ZFV^tP9iMY)!)udfQ}*m(SKyP9)Ew~A;Z zY8ezLI#5*833+5ih{g<*sp-QE;~Tx-W4dd97WTRom%n2VCq%v7%Psi+4`Y6%3nJ+#oLn3Yx>D^(Tz zuwr+4W4WLKngb@&!nC0uXv1d8N#f=I0GIta^w+SD--kL&gIUg_+9t&bwms5v(tW}C zz}BWqISjE?LQGr3=G1y&I7wrVu}RW%=BA0G@^cK!2-)s;nhA$Avi$_q$7 zVhuWa{Gof#=I$GNWt!8HX1em%=MaJGx!CdT0|Bl-oUG;*Gg|v=Z@ox0{;o&b0&vHd z?fH)PER`PCZLvC)k~RU*_ULe>b4zR2X;L9?Dv)Cdst<<|jRRYgcda-ky{1M#ytl== z>f-$b^fdnf&ELAb!#d^JCP&NJNto@7n5DdxnD7JTUDco(Yo;6!^Jg>LO7?!|bJlyA zW~)|whazOODcHADMinjp0L2=YkZ@q9OjaJ-+Fo+?v^>bEvo@GWmNK9l;8MF6128f$|ZOi2{XaW@na0{uPvv#15`_ z>p_Q~AoBGTc+hmMNwag8gK@h zAA!NnS-ojZq}#~_Lq_#gctGI8p%unb?%7FNf|I8ljy}6Y(%J8VkcA~-!9j?iuET)H z@}+&{>2#(uNo4&1+Yk5;LVP@Ni@dx^HM@hiax@ZCnSrrkE48poK&+(zVu}V_z0NICb*xAj0`--9lptFwu*u zkM`iBW`KHm-F^Znp}MbTb$b5+_?V$Mx{#+h!|N1 zF&lZlo>X}lk{9t1M!2f)8FEa_SlP>4n|4=XO;$Fpg}PTx9hiLGdxMohm|ELMmaU|h z9osYMIZ0w=^ZPZh#Rn$NoCm}(~raI)w zEE0GxVuNWz@~fS!c#R3bjQYfpExJ%E)t6os?8B9)_9;q}v^Ks20`q9a&8p0xhL7c; z!WwZwK$8l7-31Cr8Nm5|ZS{7lCXfDNFe0fM2TmVvZ;laX65HNeeM-vlGPOwPNa2X? z*xJtX#)OAjkSVJV+l*#06&p8=gjSJ$<0UQPw0fV;U$hJ%xXUvqoegd7R5LFXttuD~ z&YVH67hhXi=GHFKe5|$H7N)(G!)GCmdwVJ1dFAfxrta=7-HB^DnyaOF#z#&7aNuxr zDZgtQhqSn2U}6HW`9N+2cvnm{8`2#BtoBRpGAkqf(@5qxWF@8_{1kU*9PYzc*{6&ViOVaN;?GLOLUg>o>Ib z50Y*9ipe%+S#s>TQYgw$ilcSV{lsH7-ObgqO7iTEBE^Sf}PY z52Vm;tKq+`gX_W6`5YX;!1O3$Io4|{%`()>r?;B=-6Xd2Myx#AdNd5mCcbid1=$oOGv;9937VV3&sC;wXPvKnzq=9}IUZ<||tq{>pb~NoV?P zBLS$~MSCkl>ww<2H%K}`=fk&i9&eXf0F%;}uPmfcHhm0ia=Ig4VjMyWCNB7=v+9*s$(duB6j-k|Mbpy`IE zHCah5qr6d6iUPf9$6POR-u{JU8fq1RuU;5Weciea`e_e^l&Q0*X#)}{MQgI6ve>hl z4F3R@A-GZ=E89hCjt6r80G=8-Rl>_@YV%H!%WlnV#zGWO8fs1^_DeErzCspKhk3H8 z<+WvRn5a9G?NTvNcV{cQjW}RMXWo0@uP{x9zK&^`BG_`zVB_>y-2RKR-Ev|u-C#``Tlut%kW%XW>4M6ZlKnhw_qKlod<13D_QTe z4rIKGG|t$IW^MNNgXNE)E!y5Vb8{A7f12d2mE7A$Q6y}wBOQpq)}oy_cwjX46WZ;! zoeGdOB-8>rf;f*6hO*E>HO3Q$jwB{^= zgHIfUnkmwvor0Qci|3niJik7%{-R@1EFM`IKN|iZ2U>B*owMFlz2z&{x3rMU zm1Y95si;WawIFmA8u(+4xSNLj+3gb7464ch04_w-5wd$zD9kMRgD8gf5|dlqMNqV= zvXSG*xt$aSJ1r2sN*shEFoYx(5g?N;fx(6oDu;X(K09mRO$}BdgHNWS#@=klNcm02S9MT zSfGKotgZngb#=$fZ#-^fitJIrBpPbI7&R^{AfhBomWVVZ0G_-MzBBtO0sxK>e8MSveT5 z(;+6MH1YVsax4*4K(ZHalmIx|HeJ}i_tA$4Msz|QvP&MGMS z;UQSzjI>PQ;{Xs?n$s6a)G&%$VJfPC_UqFXt=BQcfo%EDGHrsSG_lXO;UKB|aGvv+ zea*|YwB|@%N`u}tj3I@4MGiLxVU{dC%;kiHl31uZc5v4bW;bqQ{R@(@Qh=${j3_cS zd5{lEN5VMWEFkx8sB|ph;$RMAyywnfdwH{NYq+_4QpViIp-d#`N`xYnz<0}SHzmev zo?cHfP!FnY!o9Sv4%QbXCAgP*odH@@^weWtNjG%Niqt1fz%_9qge3p~0O$aGq!aEq z=_*+&Clgf@e$jy)#Qo!hw2Y{yo4wi_ z;BhHz$n9HqL?WJD_4@`m;~KLgwvwz~2ELF%>`JVp(EV^0QBe;zetf0y@Ujx$* zk8in(*6A;AtgY^0u`?=4SxHEwJT|cMkbcpMiryJ>SMFtyeJp47Sv22HD!osM_zYYg z)m&NI+vj;Jz+|?%vxS-<`%c=hZN4E`d})Xs+W`+oB2=TaP16OAjK zX~!@PDYuMM%$D*&nXYYWl@g7N!0L~oJU9b{66POP8bfa3(CucW7>+vAkAnt7zDvk{>k(V^-lguD8r z>OrRwfuZ5!;}+T6Z$WSvlDclEm|)~n7lcU685@WM8eynrF*$gZh_9JI>*0ghO~s_8 zcTjJs6&hFf;clZ1LNeXrm1t3mq|5E4D?CSO-RIgqWvBc#!hY#gcXK0j)EdzK(S=e+ zGytp(=22Cz2Jk(exQYwS=VQRjA#JY_pd+;S)5BaO0!3kpAetNuhHD7TwDAK}nFwG` zn(4>mihkJ|!#^xRF2#2M1#4OySv<>{!EFt`RRzfUjN0Z4cp(O|Z89m5_VJ>kwx>$a zVTqha8t2y+1IxNn%EPdo!}G+p@2Cn2+9q4>5S0`yywF8^agSSgL$$Q)R#{^xN&Fxk zJ~hJFVrUqGNNC$e9Yt`1Ah<1RE#)3{-LGIe;G~AH6oipp-wXojAyhJM)Fn*?2$z~- zFP2=$t6u5ix=M7^1|MZ`G5{l_k+zHg&~(B4(l(ynWuZOww1GMTX@2y-7mRX}X+!Mh8xU8BAdLT$f*t3QXPfWUk{=PzMrwFgoHs_TOL?XvI|a zsmD-a-#{j!1-xCwjXbOf+u7TMu|Ia6cLl3L4{vYTh4)~X*i;&My)YHz0h&e{0s+A^ zsILhUv!PVjWD&&HH0YFa z4BU|$q+vFaDc7ZG!G;qU z4k`}Kk)MS6bmf{~EOVu+F$YC5;>!(^9D3lTynLC}0~TE_S~ z6?XFr;a}4g=&U6mFes0fp->ake#3eMWs3s z)7J{4xmW;;PVP^ZyaDmX+7*^I4B)8Jy+FlMNR3-zV+h;2w0O3Mj;MZC;0MD9C*Nm0 zZxspD>NH`8M6oH1!t6Itgdp(gfp?Zl0FHWvI#a5jTol{842ik4BNV|m%$KnX>p%6Q zCac%PQ?m{0u(q>{$d~kPJk)Q(-9`-ELe^Ic-Kp-*q=WN#<5J~O=4k5;4|uxA(TM83 zhX=Hwhytp5J+jrJ|2gz5yAwKyr^j+ ziWR1y_F(m;!Z-Yt=} z&e*``%b#brL`ekFqP$SDlV2jSr8U)lJu!xc7(zM{Y~_8fDMJjk;76@-^~yveSrx-8 zfmR$CbU4e%&XSb{(5Bg=ZF|J+{{V2qsa!{1y>o$u>A>vEuMRx17=cyx(kx71k*K5! zHEKO@N-!=YpxR2Wl#acl4SRVf3N4yyh{ot-BmG6}K0UZCmu3Jkilra$f;cx(gu2&s!2HrOO}r3(_Gr>7miyB`?P1EphaYIOt07{70;lh5hKs?)OU)iW9oE(0`G_Yk3|3ZEl*a8KSrG4wxxz zI?V^u%0{{-;r{@_a60OhR7obnUT;aj`xql9y|~Nn!>om44gv<~e}sR1iV;e9 z;bj%h6kQ?`x!Ooo6)i#sTH$0ecknE#eDOU<@I5~KAh$J0yuzv|O?v+TV+t&*9FoPl zz2!=ezxLy&5jdZ#rcXKurQC`|8C^XOAK8M?mP8aHji@802Fyh93A)ArJ~hIdD}f{| zgI&6h9^5Thi01sOA|A?aK8EZ&N%K$|<9z#Q((={ZwxlYZuHFK=;5>7eD8@m!QGxyV zby_re#!)qtj1PMgAsv8^-+@*%C@l8F(tFm_+H;|&g!9$q%y%v#mBQS@Dp(y#gFt@Y z&k<%#6z*-UgwJ{bC1X#Ohf;ccaFa3mT%SG6?sK^vAh(5>Cj!$cAxCXDP-)wRc|KzW ztp5N@c;ZW`hkGq}RgD{WZ4R7zV?q$BYEH?6TZjwN;R9D+8jhSIyAD&$?`=iKW11uo zl{HAz9-T?k7?UKou!z0A`@3xpjP!A^ijTL$A75uzGs4!^%<#h1U6rFgwD=4~YXd4Y zOzc9Ttxa`3pA2v$k1~w1mfMFy6Iu+<7?ymxJMQJK=3vp&Ys5-A>%(x=VO_pYX)x|5 zStnK%+dPdTl|7-W*9ooPY;N)FA87d@y3xMMA77Hg0e${q?{jGF@{W^nmVI&v&Wl1wUpBlCea_ zfVR+p;CB;HD<5v@1xguI)30Qx{nc*n`KO>_h={CLhK$F@LqX$)W>o^VSp|ejUP*Rq zr$>o9=&po7qlyTlx5cYLq?3n_U@w+0VB{U`*Ck%aD6Jp6l`50jX-MG zO?dtIt@2=Q`Jyx+h@nOAHKzemEB@}7wDQEQxRki56<*U?{>*3h!-k1T;qNw|XEcdCFBllX+uod7A7iY7WZQ_;qn)z$Q(@ZAGRz-q1K^s5-o}gnK!``F? zNK>)51}9KGF^;CEC)YxYcHNPYpC)B}mS0`v-PpU1BNexKU7hTNAZDi!yNe$MrYMM~ zPE5{Z%VXv_vnw%O(p;4@LoI4pg(U24bm`L1%-^2aG=nY5MN+|M<1qW5vpM~9kG z_6&H+=QL;~wSda&ad$~)bpyO|#=CbO9RTPtwcKr~#>zGvGUZ(J!$IG5^73ooW4a6ncJJ-k)(jc7-D{ zpc7n1MAHh9Tuw9x9BUQwenR*6#pZAsq}?HXXgKNUG3t+Jc?J#Zn@?y8m8RA}sT(n? zFzp}(Uk!V4Px3XLknSQ9D(xv<1zC^EJxSEpfEe}fC|N^qkXuI{!eUQ0&IP!iyyHLj zM)YwB?oogp}C{AUu zk0Q@A494Q;>uvdMBM~#G25X}wA&re_Ns-Ak{v2JmnY31d?=e{fV#Qi8Nb-i;<|np; z9)I^9>om;1gO+k@ZP!=#FP&Y;{T$U`2e1LT&xyuwbp<0*j#T~qJ?GFq;!+(`X-*^> z)3$>SYQ+Bl$rx7|h1WB4W!?SMhDjZZ&eg8@TSh;g9M;I8RBRNQc9Mgl0u+8n66Cyz zA1~~ZPV(wU^GNidEn1(2am>zq-!IE9^F+(zhThpiBN0t?`v;F{#OqFlr$RG5Km)`HUmo6I{!06pPqRde;n$g5RI7 zviS3C!qP~hn!6rG+7);LYp5J`KDZ_Am95r)mO+}xM%Gzokh5qBauk2*)OZowfE8$2 zO4e2l4$dZMk#d`d8)P)0s9{k|02unmO)cU`Roqeq`{_aZaFX(RNpE3n)t2f108o?u zoL`ILbRQFmZgRV|XvV_Eqj0S&U)_oF{F$3Gy10;3DF~!=17F*OB&9xbYaZ)mL^Oob zqz=u#f}OEl;X?`mGX+WtE`z{eTi6GbGS_pq;ay1`r?UlbVW`>(UZHqar;a6#I3ZRv z8lUPo(TmkYadSwaL-=ZB!c`@3mga4vH>rE+S^zzY7{JF~2r z7R7Ds>-trlh;2xwgX4fnlg}8EYl+$4VoMBaMLf+w81U0m=rQCt7grRlPmJ^S>TO|$ z(d87&E`JTPPnMtQl0o#VNf42>bvjmn_Ti_Q-AQMg+!1t$u|lYKoj^3ydJ;Hd*N`IF zM5$FfmXEfkok;P;Lz&%6oAVv*oq_;>?UJjiAOLw!9Y_M4IG#9VlC_l;3ZBr~m<{VblSIc_ecy{VNTq zh){H?rj#B!eVEQ?0gfb43o&#?G_4e{uis2Gu8V>pf~LYq!*7U=E=kGk^1B#&s8l>k zw5a)X@x`SCtsDupx0j+NI3E#;{{SSkxHiJ(g;kJ%r$fS(IDc9xlHLiDsAG?8bsAHt z_|r^5U8t>klxsG7y$NZs+hTwSL0lL@itS%6r>+I&mw|2qnE+L7tOkO##P?SVZ3{?f zDe|71zvF?cZj&P2k{MUesriWFe%uO#)68M7D3PQ^e@gd)0aLV+Yu1<}HIy(!BT-!m z_~2f5%oe<}%6FX8I@CiCdWdwXKPvsWS)b-DmSq!P?JYZPiV;o{K7jfSN%X~ZtwaH| z)3$Ut+7hKJV5#WFo-~c@;%Rd%{w%Q=eJzY-o`*-cJZt{Jpz$XLtvicp&veIPs4Y>@ z4i)vle3IE=hT1Tth>e4@aXRrnx}0|RGdA!|GVXok?2ScPh(1s}Pwm0ZfRyMN4z-Ys zsJP*IS(9Fl1G6ZGLve6MTV)iE_Y<&;00OF#Ni0tQ2ge6(d2Sq^D`<&VnV)>G)!W43 zKP2UMuuC>)n#!hmzDSgLVjV#3HPXFx!;dl6(qq~Cu^#K4;`vFY8SWV8NgaiZR@UKB z1xcwrrwbz#c|bKjQ}=(CGXehql~NC9<&DBuy^sT`RX>=*2*kq>Z~{uYF15#MYp2H< z1b1~EnAIpXIOJ$D8@l%-)Z!~Q0zkCY*N0^>J<9HZyl{rvKqQa-+fFW#RK=|6P@U!& zd;Fr|I*=*rQHu91%)`cP+|-T0RCwaeyj{@Bj69v$KO9q6UG1gub5XcRY4ENOu>r)X z20?G7s@>E&GB_Ch$}Yp(S|e)6WJ6wr8sXasst+7j{I_tDJE3h-b(D4T$b83sy_>oKpwoGOtY%g~EYoI5OslW`>lO@6cIE*+a zQnzxbuF%KxzzgwPnN(MWaU#|xLO+0{2^4ZWGWVxz9fa`WFz3r*jjR$ne5$KTYr_Cq zEwC1?0yt(qm@jQ|(9wYfNE&vGJ<6y-Exd}xC(JEnQr*`=4LdMLlx`zwJB1_tH#EdI zPNf->%t-CW+_y+`Xb_-7BDf%GD^3-{m5L2vRHDTseD zVhQ0{oPqWnDaMaK7t)^$#>`R)eC{53~$* zpaN^RKUk+$TyUplNc6@O_WD1py1LAm0=vjx5r^W<-aecGq4dLJlI(_EkwU~!$h*GW z9f*|_YKr-o{#ag|A%$4Y-(3ZawNK2d02L;tfPJ_@aVS|0sXkb>n1jW-E+n~?RyLXA z-&P9}5na#I?8Fw)HN>o4i-|FVutQ3DDm>5d2A-!6Wwkn> zgyvv(cPO@LPOl(3j*@Wgjhyo2b3ZbqR>!={@|W&mRrzF^pfi)ySFd34!?w;i?d_Ej zK;A+17y-$dL{ZxrL13k8xwyIQ9;Xfs>m<9}6$+$$2jz(il?sNFl6wARChKiv8<&2k z4S#MxP!2IDAOy30n2GPBj!`Qu zB8YBdT>_3cOUZLXJ6z|IOS(&v!YymIFm^@xaM5X&zX}b&Xi40hf7x6s`j1nVGh5sUx7%jpQR$wCVy69{ixOMBdgtBui-g~T>a{Ft;4*0e-v8@Y|O+fG;ej9S- z(d7`@*h4hZqgXU<@;P^BjjL8}rj7YwP`rqhh`UBk&?pUSN|EVG*B!k2cZ$>rS&VYD zZA$()%>eZy?!b+LgQR3@CZ8eH>n9OU4yHFQZa~U}F%XRMDiKX}I@jTa8BMYaaV(N+ zBb|F|pu!yP)kUlqYQc7B(a?g-G!(&%sbqY$a8gtuR`~mVCQR zi?<=mv#a`n2t<3ENfjx$npT`}mL)P>q;AE#p}C3Dy>O~o76`*iK%l7}0|TL-Y)x|V zsA&nWg*E>GEDDrY88N6BqAJbIiY!`I5`&^X#I+ z`*<6olHE4coeG+9sKXU*rjFrA<5p^(hY2FjXKc+Pc}Z1p4K<|(zn%*0LBUnrfW!qY`G6FdN00~;+jQ0!qDferZqMGxS zWwYlCR8q|im0-V7txwZPe^XEXP1yKj)m*#GfioHI!%?JUfRWg|KRiC6&8+h{N?f_n zXyK^C4PNrSwLRHZr0`Zgx%$Q0?%Ny0cbaso98-rz8G292`>Sc}rIyC_+Gs8{>_`?30G?tikJo$j5epPTJwy_ytpZ+~qd ziuNBZ7xgGv!v6pR5}p|F=QaBa&)H8guP$0-msgjU7edm++Q+zGxs15(*R+66(?TeH zaU*AX)!-tUNZDU(yI?olz3UPPI)Td%eDUa&G}1J3h8u%%rxA(mZbFTOlh=)LHg}O` zc|G*`UTv4%W%u@Etk#!Mv{J-tS~55czY&3b>%_=VQ0g_)ha4ZNNf?@^h}rm&;V5wB zMQ|~}ZtTUSMj=*}72td@L5;kKrP&roqkp_m(2m35hRvR6jV{!2P1L1-eiqyPR%@6w zwYJpSpwa39KMou?;^|neKBE-tWho>bA}(8-SC~iMGnm?}ek-!e8u0JpGeAaVu8pk6B-We5jV#9#|0#DhGL~=j5zUyUB#cP>E-(|>wjlOK; zd1+tM4f?Uyz|;IVkN*Hp{dF8@9+}q?P;iwp` zKHeB|a@76hrPCS;gk47(3Sy_X_fL{Jp2WwQX0OY)$Tu{3jYMnKqIDhHFNrFAF<^4e zV;q*kUGfwP2+SJnInyrD zACV|%Q9qp)P`-!}?;Q(2;{T z&=m>|Yb0SmW*fZia<sS~lN-G*|9SPEa z0ZITnFiO{#Z!i3fGsv5PZGa+Iv$TPSJQ*F0lBkkJl3pArHu0e9MuQ6>6U@wzpp9rK zdhqFmxqL_cKN$ed=kE<)&w%;CwwWb`ls(fTNw8CCATN%Cjyq+`7P+0=aKUkJmMsls znVBOL;54l(z#q2-BD0Pmx|`pvPfT^?B#J79(xm8d9P|C)Ae!{!=w$V_?9fFMLBL^N z(To#6DrL5pPIE5q=2)Dr_K-@o2k^F_j1#voGX;u)xC6sZ%5)fU@_s>O%$cCeWsaz0 zXN=P8ux((UyVpFQ(QXvzuXyaP}^Bd(Zi^ghJ}g4W0&$<9&2layD}k( z(pcU$+b16|uVJ9m5_`F)Ey=jKClOAJW`FJ{S-WXAd%OWfSA}rMd`)XXz(8ET&pD=T zn!(Fg(A=G|HQSXUvfRR_L8Vj>D^90QxW73XII}x=^M?RV&@2y42B06X=y1a2FKjGw zE_Q=ChW2})@xJwx1EJ7^PC6bvpkmSG?4~|jyq_tLchg9F>rzcOmWZI)nFkVI<0ckO(TqtMSHdB7Fr%WNl_q2g*GdC=jU)G!}oCnMhO_pE9o#pZO@}g|HiGTbe4kao4L*`!)N8-fx(As8jM?I8_ zCA`VL5(gDv4&P3`7%hKjwUJyFP)IZ#Y17ibb{iRNrzXr_FSuqFm$Ft0tprk#ODOCQ zt1tM24xmK zVzIlbjngPrHP?4SJb!isL2|0h$^zDk{#yBm%E!Y7GTY_ME$G8yu_2Vu6k+~&0pL=; z@MR_~%3N!>Q3UL-Um0C7>e~-~Rwl-;0!w<5mj;{A-;!pyS4s5zC(#yO=H= zhRFP(tI+B+z&y_7OWR*9s1C93M%-48I2I#XSF;Yx&2sG1EKB^kgtm9^ZU>@25J2$* z;6WH?%1Btmg`@5bS4x7sHj#wx^mBeL$?E2;ePPM?fuZkURuywZ{;90RuzYF>cE7-dQTU zm39SPdwhQEL0?;blH`Gr#B@y#sGg1uZ0doMY zX)GEtk5p>^0MmqgwQ(;j`|+6M7tlizb7hpX#jx(J&6}DE&~bsur-lSxU(JzbHhjTo zpv{!s3(|ytsSq1vP)BMKJ#a($f-jKXa<992I|)}J%pkokwWHd&+b<4{8T;_Nrn~o2 zuk%em;z+~C2v+I17FO$Ms@tInERkFysm<37dQ?J-?(#|bbMDN1Y&{s@OTDSQwW_HenCyq2xy?ucX}hjm4M{u*{*PcU-bi4s{E6{2U*k+>nR55M7t*DB`^ zX&|1 z@7LSJ$u*<1&Li@d71Vq{2Ns7bbM{%9T$8PKfH>Btpy`GVeU{5s%;1Jc44u@%v;+^c<+SDO4#*jJgTt+UH5&25*3uqH)truE;p<01NuaJHj|1_9{mRUXeiWQU~O9`A&YUcZv=lD#`3MBp*@H&|!NsZ7O$>$jzk~HlOm%;;Tl$e08()seRGDD z?VOjWJtzeYJ{a8hafKxbAka{8KMVpB$h=6}DaY4_I4-xZnJ5V=qLn1#`c^TDDrAF1 z(8ZEwN~)--Du4(yU1@}pU8NbOg5gvhwHyvMC$J3ggbcMj%YOBZa zfN)AcClY<6bA%;6RDtUe$t{fv35ym#EA;)?`V7)24I%}U1E@6}pJpNu_anUeV#c-O zrE&Ljb8^&<6^#P!EW`k+Fismxj8UQTCm6OH`&-5lHMs!QwA4_3Sc(y8n%x^~X+ECJ zZVx!orz46X=sQ??3?#I)xXwy0Ual-$p7Q5a`l=cfi2nc&8o$|xw3z{GIBk~32}BWu zjx}wa()KS-0|GwkS~^0pKA)d%oR71%UBK@Y-9Y8_eCg0J=*=W!CWbhz<`%&f3P!+F zXc~EZF!lDr&9Ad-`Qo{Dw}!#chFTFLGW@!5qP2Z-T1}Va=P+@5Z<|;M^x6 za6P!TJ&1zR+Si#D*6pqtuOd{DpK%G@R0?q#lk4!rR`6`IZdMNuQ^yfBTZ-iucd2NA zDO`>?4WfYhMlOACn2f?ly|9hvSxYv?q=kUs7xAvqP)5EOdGfC?Wn96^jbnE_*HXrY zNC92aqp0~;wCO?H!vuNDCA)0K&zLgk?S<}H-jot*tQ-Kq{1jrdgk0tG9NHBSNp!|} z5+XLSEJ>pN76!gvnqdhkyl4!F>quhI=H|Il@hMenUL1OO)N>ifY!|U8j^Ua}%c8PW zd4cO*(fZrb1mSvrx~T|5poEv?2` zGg;0H>!S~p`i_Uk!viR3QBFolCXY587>+%1j%y3};f*`2_w4DGQq*IOnSlq1QPo^SJy2t>kj{@8W+l2YPWqEa$%a+L% zqg%>COib+atTn3@3bZUJ2o*ZvX=Ig(VH~TJrK4PMH0kG0e@Kg!d3w?~k3Z+Z-#)&L z*;Su%+ba#L7^m>5+CC?)0cXG_X%X(h-59M+Jj+mi;fF>=W144KT-l9B(OZ&;Lr{>k zsoU9H1?K3Zi#NAAwF^>%_>>WYt(+@;MMsF}10f4owS(h=`u z9&iDzDhQy#xs+8^Pnb62Q(Y-adUeA-3#Jwc3b7@MEorDA@%ymqZPN(kN6@W)2c`vm zCsj{5BVx3cf>Xdk8{?ZVNhJexVC?OsX@*)v_7{>ywGsEM%jsQk>zZXta-)LMqwLcI zFF98{&Te2#moUrhlHndnE-xT?_A-D1tZ2(pbu}kIGzT1NfO(AvUYTp1N?(u?MKBqi zoJY8cxrZ^za{G*!THJTbnoDzGIiajKkVYhE_-YF7AnU+(;!`JjibH&$SFn-$@EGL5vUYfyIPH6-Ah4+10_b>drEpZnfr_ggt3?0~&X{U~FbOsN z`u0*Ps~D_Mnqf*)45?F(9CNQI(dK_~az0qSDJARNAF38oS)@Qo1BKtbu^<&HR)bwl zJTP&y8#&h2dnYo(cW&1($-=4#+_d9SyHV2vFL^&Mx#ev7!uHAuZ!?VED|Ngvj`k=d zX1H*yYtU2TD}r-a+gRnccGfV3OBoO%SA<8&AgTWV3s%43!Pf%U%7%f|FehR1gI^Ly zzR3k*t>CS0+?41zfkRQ}SRj&3e4ri!05-u{#l&`&@=G+Rk)Tk;h!rfsQ996g>JDho*Ov5l-*5%S0Yboc4m#r&VZe>!@Ntnn1ARzOsK>q*{ zI-1ayRQ~|gxp|=PM(Gf(Yp7wUAo}3;>`N^rZf(z(?YEvA41>MiseSdb#w8$;(mp#m zW3)$QoPv8uOi~tgT0Vl6sTzDRn%FEZ_H9AjnxX2*czvI<2>D9zM6#^pgAUmo9;$qg zr>F-7bE`vW?Qoi^9T;#iok93uXBzI-P$4W_ckHF}p5DD9#%|KLu&vFo-3yJ)*F*cThg;hu?QSs8c6&!KB1CI< zA;A?=4uoO|QSFM)LnL9T=Hfd+@xp6sv@6^zR)92TwNLKC`%Bf4q_=4IFygfN#W;@< zfpHQ@fJl+t+HQyHEeL4H)q0EujzY4Ls+!ae!-G#9#$H6$>}7%c!h*jK1Je=BYYt+D z>fC`R5IAlfo&;j)T?GzOjxtngj1Lcln!`4nZ9sO&x~Vz_>=<;U)|u6cxFixa2a2B0 zw+zDyfkp%l%4!ZdHfMK`vStd!qGk&)8h{Rgy*p1z;CC9w%eGXJeV$2U#jeps3YPXQmcIb23Tv(=O<#<)wVBe$~? zSw<}jMq?{cP~3enTF^^SEYQZq?V6%JwByK410Ey805{K*-J~o?jGfW2?ZttaSwib1 zjulvnflr$Z{LDns2rft}N0qvR+k+T$P@&2}?+b41g(TuK_)g||OnI%j%q{jAK>|qs z01Nv5`~+OOYWKN(n_e?gjm3OCMjY7`uVBK_>RGi?!{!*>?oT0Od1k%ajw{i;JTUaS zQRS~hk9yrVAIb(hM?NqmocW6p1KO5yII98};cQn88<8&HddDEz!{Bi;MrR^eODu@h zbl_?`JaFX8WwFg*7Ws@3PUApbM!&e@i+f0|CmFUbD^98%mB_~YSFr~3zm>WkE92>f zzh1X-_iW*$O%(KD*^XW08B)$rK*#{7WMT+k0gN{#nb?#gOd&TV61tf)vjQZp8k*=_|SEP?F!@%ta<>A5{-eRhd zs|n#xz~8W9Gkqj-6J5@rm#F!G>O64N$}jHja%-I5GR!BAB#g9iBkco9sI4k+KOw!% z<+e#>%t1pi?+mue>}od@2jT#r(zV0eV7XpU2k(<;P!tcFhfO(t)s_@_&79QwtCWqC zB5=H{V&q5n%Dg^~RzJ~@g49?-8 zn=P8s2nazWJ;sZ-uwg2<^UxT2FY3`!lZU^<=MTr2K%~Vy%1Y=BY6!%Sb7v!oC2&Ow zmah;-pyIa>2^BZ$%y%_O)Z$wVn$Am?xt1RCngGnjMw;nbW2?0Z71b8j^;@b52nV;f zgmfI{*4e(E>Ud0QXpUrBr-cdO*@cPD88X4L;^%t+Xz{6P`uO6wismzX=^RlaZrY&~ z3JTMv4#=^`9Z2G|srza9V~*QtAtp7A;8c>dM;+HVTHIUgSS}_65U<^V!>*?fE=PMl zV8}BZoX7~dUFc4P5TJZGVykhmIZ5^6ICh=%MW-4O=0sA1EO`HU-f zWtKaN@TFwSEW~ z8mM;D+ZeV$lH7qxh}Vy4>4iVzZ}k;OJ%XbVTLGl6P!Mh-$EGAD#k|rn^KCTn!xxwW zQq=$@OFMCh1wyewS`GB=JTP-DkWlIfh;KUZ(zpzdSi%aL4VCa3{&-h3!qX_en!aNR zL0$u=?ZqAy!V_-22?u~C1m(tisV**<6W+*5j@q0(tvPo3{@(t0(WLq%ZRn%s+CD&k zh<0J8%Lyg5ovql8q?0uW)PQ(>gBF#aG1zi%Al+xzQA;gWTbOpK{dSPalhHlnbRl1jOssNIIGswK>bNyeOpSWQ0B#GuHN+2xN__Z+d7;8 zI0eYmH7Zt~1pT;T<%7JLE-x8Gw+D4aNUJ%K#d-}rcy{8#$gO*V-t z*U%6+^v3$<_}W8xPyyH0d_v6rqUmo^wIudbpM-Mq$%Tyfu*X?0$f~d#l}AJ4+v|s| zo?{$S2#V^c8cLc4)_{H3XFq%BHTcm%jc`C@@n(R;b z3}o)edBeheOLn$wEdrI82gbiME^M1Ouxn(xOM&{8Ro98F4jCD?am*JvQ$sHYCqc={n+vxHwO1Ln)0pP_l*>0yj489dYaQ7g8piGiR~?N%%TSf_SP~v1Bj97 z5}*EvgNkdDvL=;bSZHasC>~XyXJes09Zoi%Z?+h=4l8X>iTDZg&%JK-xLHZefzzaX zRpU8jZEQ)oyFwwT)-%IU03EoFdBu&))`WSUriAJmx+y(Q4`x>X0Mp__1aTN(V#_IN zi9lij1BEmum`J%`&7ycMvgz)xt{l0FD2pkAl`h0^)Kf!TOqT`z?v-&O@26i@_d(hb?Vu-c(aVytVx6H%{W z7%R^=$;*77d7s@|2ENa~NleLKrL!o(D8GcT+|=!1ilf@EY_5ICxu2TzR+=n@rbSG? zISO0mb40}ql1EwUzV4~0$> z+&T~(LBO0VoRJ&Ng6f%hBB>bA)MK+BT;q*0WS-PRJj=357u~H#Tn*%|P>Yu=23ahM z749x2BBHgDR$*U7+6RCb6CPukT$rGHji3$Yy+GnV&%Yf`Wx1N>Q*PBoW7kbMYuk=@ zPXrdhz~kYUytnJEl;C+u#8eJA(4S!*H(3lF=J7x`c2s)cHc=!qLh@VfWi2Df-GCAY z<$+W4W#(UHy5?dUdbZ+fsHgVfvN@_NO97VHOwvZA?o_ES{$F-Hi)HB{N3PhnuiGvK zHl2pNYH3f*KGy>t#4b`a1WKh4YAgfpLf0meT zW>>6jmO&u%F$4|*lpm1C#_)w{7`N$)c3^eeB(aqhBAbBi*9vJGRgAUErES$5A&Xqj zNaBhlU=ld?g(F2!GzvWhJTMzB%97GqZsI^%b|ueNG{&u*cNIDnau239v#e4EaA;U+ zJ27;mqMsnnYQ=iu;X2#JkZo?#DK?_0FyfATjUe~!TyY=H*9-y^wo0bK#+O5$( zV&STI*QOjHk%G*v<*D31i2ne`5$`yps)A@Om~Cx^C<9p?g`7*5{X6`?(a*>B;H9ij@TI^cs9BMk7f>(g@n14bSRuy`zopV`$_J`V<1ZJluZag%uD$;T}>nlg3v* z^-don%K3B`?&N5slV+xZL{UN1)SNvz+BxUDu#ITtc^(Fwl(^NZ@*$B7D8GUAE?;5=4?~#+(P+hc%pW+Q1`H zHjE8$=A%IlvtvdkY8ZrWHi1qU?et~srcFG`e=Ke$4z; zYM`A!6~vG@7q16i=Xd`A85oBu{{TV2Adp;X(_Bk#%5NCfr@AACzc=~gsu-D8h@xV& zpg~@P9pl$bMm(wJ(zWA_#(zv2VuV5xb{W}6>6IKdlYo)Qs+H@Vb z3m7}5UmZToF|Dz0oQyXr_mH>vmrPY0dE)v zhtD?mqbST_iV{SVBN-3jTJ-#|O^W-sX(G4dLF;W?1$;4qxjOk}ds+AEC8`2DO4s*d z&&!{3upLcCDvxb4$u4beZe%BHQL)=zAEG@~3K3&4K8_0qNcu-(kGyq=s&^z_4;_-($Bf^{FW4ZDRV z?e*7XM_!naWm+(QDO^U zoka=o!&In*CWb=s@6-ddfEZSX#NulNRLw0~EvIaRk~IJvY1LFysRq6SA6UjAkWLLo z>S}y(O5kAxR+P>#{{WZ^R+}$D8ZUTZUfyP9>vNV+xs|Ftt}>=-1@86U$+7M z?TuxE-a3s#0&CiEXW2-*j!%*{sBh{wY}Fh|U`N7)V5g3&1lMIgawgZwz12aOK9nLp z?kE|Wm7v8d%+sc0%}Hp_Rho0BfCKkp>c6CLnQNd%C*g`CE??>%vs6-U(#J4^`wy55A)V3ssQ0fUlrDy>E01gG-&nYhz zO1#^Hu>SzJ67fE#Ks|B9ikWpN0a**&eN^G&sa<2Y9v_NNj{$;eg3bj*1ALxQrvZdn zY-!#!uSF(-P<|8~7Yb5Sad7t>5;L`ZdvRrO6U_?wj99x;HHbEVd7B+g3H*m=W)tt! zB9m6*{&=1hCxJ9LQI8mysX=&(fwe$7*B^I+G--(h(uxiuxR@#|N_AsRJ24cD(jB3y z2b6eq#c5e}9U_8ZOUT9d9nGMi;o5OAMFVe!zL?~3_iAL3w)PIejPFL#Tx-`B&L=4a z#IeGXO+3pSF{zQ6v{e99li(?ezTKwhUS@mJ#6$+j0}WCTbknq&vGE{u!H#Ut8<`|L zyO5sp-*Ebgg49Yu`A7Ic0;jL171=IXY0Ho_k0|=7loodE9RTUq5{!Xr*-`q=LxAh@ znTxWm>2Q|O{{Te>r0gev<4$6$JnsYrtU>JcNBbM6o8Uz-Te_?Rk2j zW#H7B85s#x9iV)8;aC1II@>cDWNBGIEY5iN0YET~Nl(;ql4(N8@(ct6oZPI4*>P>C zs$NFvB>^CM4K(Y7*;Z0n5|ECf~DrC00yUM`*gvU;V%so!bD#wcFuRi;&2}gy?S6vJB!TvX|o*8 zNs@5FDEAF^aiHuNR(W#z*_LQSBo0AP2bs^H>r}4tRV?$8i#F9LEF${ zw|9}lIF?x2v65&20Z&h}09LCqO-`LF)Sugi-g9wvcE)R4Ss!XrA-05i zefT=vCtVM1U^~IorJA7hQ)kEKV`WX&ZblX$FVcTyES$t__6e5FaF&Zx& zF+Nk3!C`3}vcx{3Riz5`>w<9Qj2eV)I&BA1&0Sl-YlqxiC1!&m2i>+#GM!33Wnz9E ze`u|vk(`lMl7*^ups)9)2wm8JPs$c~BX05Tqje1aW>xI_a91nKW3;q;yU!p}Xv_sk z8vFp$4L)M#2(BiQG@MS!31Hyppb%;I=}ZRQUR@KAlXnF+%+1{gJfySN$%T~+@SY|8q>39q!-N-{{T*k zIHhpZjLEbBC^&t*aNmY`1(>-Gtg^(CkPe`l>0h%7xuWfF^J!4Y<<=m|cmOF;@h1ZA zSrHZ_YM=o?Ct4_{?86Y>kOP^I@2aH{kitVL?vTvXYAt z8cLJ45YGEhSZ%?Sx;@ACzuLcjGDXUH_a%nzc+!^Hlmtb6W=P`{z!Es>jkyn1IPizO zKgiFyKHhz1d6TF9SIc($q!*cVWL`rSrnB2|(0t7qW$Wb{4_akh;U%Wcvd{yrzkV#f zS?5!50-0(D2ClX6#A`0yZnaeyr-94y*9kQHc6;RnE6T1TKg|4T&3SV3D!E&Q1jOtL zk-*nchbB#)W$A4dvs#mw#!876l-f>!^*;=Liu<+f2e-VO9OpFZA}_sk(y?;xxVsm8U+qdFb5sN+deWEOXMoW1UAZ7L)_sYEyrld^nMaw)egJ3DDcB1F-vvJpTaO zo1X2$^VaB5J843DLB=rxFA#up4An)|!y54chRFW_=uzv3K6%O9 zw=_~q9#LltlTu-UP=@|0C>r`u_~BKh^F;mC(ved{VXB|qjOKZibyO}W&J}!d9JlTr zcf4_AtBEJ$CmFM|VUFdd(v%H=0rK@VJmqC=CC4gfV#ejin6Xd^JLq)>$88uMqM+(3 zTwKDC-{ngrObC*Afu~xWZ=AVy4BizQ$8ZQX^VdXRcMAB10FMgcyKkMz23{>^gv8G@ zLP*d3w?;KzfdqY+lR|^qT^~@-<1>%4t8neIzLSc5Dmy)-7jV3n@q)#u!Dx7K(wJxS ztW7R&0tp#bXgtHT?kD$R#*)!499}|vpo3n+wBeVZLel2QN`Mv>Rqd(7g`<>TK$(r^ z!n?8#)eoFTEu@PqjK^Ap+GsfFD~Eq5Wk>pbw$V;93iPQazO^_S*0MpDGN7XlCvKYb z{IK@OZN8r+mSPr=S{l=~pXGtva)|Bg?<6fPL3K6A0q zMwJ_w=sQc3@xoIK?-C$R;v=9Zso_96Vms!%mz(oEqbs&#k?!{WRQ8g*O#RvxRb`^o z4wdPHIe#PbG{WlFHqC9VWk+!YwusIeI%v*>c};3|)bP~c-t;osQnhRu@H=|r0~VjD zea8@-)N4*7XN4({=K#uMwQz{8($j5ey0!lRhBuRC+}C+L(LPTr2_BZhAy$znDrvz~ z5&iJ10}qUnWw2x4+^a}bRfJps=nXW~;Aii` z0SFqrWUZd<3Q*Pxd?^|kPqjJzVYW=l_vuuC>>`VM0ohYQ_Z%Jn0P8D}Mr$P3*Ai=5 z&Q`S=8Yrj34@A6)qug6@VgNOvufq!7{y6PkYj8=75=P@eh;`oFDBx){tnTY%jH?4> z+`pG{-Gr9bsT@e+valz7l;}y+0fEV%<xWR8P8?al&o%>UKMI05yS!a;4tT7o#hZ)-J-155vX`pP2JO)f*G{o zN}M(_8+_|GxXdhawGQy1e((6e=sOyk`0I^6?%g4jlJ*2`JSWcn6+^VcmvzWD30<@?3VYkYr=P$d9Da;zB7yepODc&gPe00ON zI?N4*O?P=<<$L$~Sm~e!yIA}@#~9m$tGx*ZyeHT9d&m}r#R^ij8$~vIc!L6^#CM4$ z(PUT?%Eiqz?ZgUNHa7Cj5Ies?npGRg=qh!>d2F82-q}sjJ^K#uoi;`_KNFzFb8Gu- z&ohE3gllbXHh|$?IhurKA#ywcHkI_s}5P>djR!{?lSj~hgIFY5JIpxZD!eJ z#f{p}EN>WbM%<)V$FPhi%z6IHEzF|Jtsw+%*T)4pzdMRse7x?HVT{bnxYC7{Y4@Bx z3_8-12*FTg-`d?Y;*zXerF&o_aMssfPap+kTBC3Wwz&H3LZDY5xiqD9BexUh`D)lt zHKaw_IA6-l)g#P6*RKpC4J6Tmg!h41SJZ2Vpo2vT9dd;dQmM;11kg!r`&rjTVcEi` z0Q1b9FYP9^l^=CK4vnUusp!DagW3iPF8sMt>QPm71hF~+Ek0qNPeujog+h+v%jo{du!(le`LZL{Im`jRb&IPhQ0(a>4MfbA5SUQ^w`os zHQ3!7?8950tS&NZ)aE?4HYOE48%_>w?*4YcDb64S2vVW0os4@UP8&-|Fd^N%A3s^bt+ML6d zZVb$BwesuPOi<=< z$(BgRqY_L{$B1f=`mr8Ca@^_qlja?tipkJJ7pPLcg@S|7uY#z1OmY7JFPz$MeYndq zyuw);?aeSP#75#2(~BF1K81bdd7m3R|M{rC>!cLnRX zPDc^jkG)~`oB3=ls}}`SJf!9H;arVL6vNhfC{V7aQ>8H+(ZzC&49FcM1sP8Q4uoQ# z=AU_U4q0;F)7IkAW8AX$gm07hO##{m8lF1i?n3v%Zg1xcPFb5MHtg}-$uTn5X^A%t zpbbawz+-e>_a@;f@{DUyCBOYoyBBl%62Igol%dS?r6BeO()#MfgfSd&t9txsHYGk{)N(J0R!$4p2x zq7O`kc_S_!-?U|1LoKz=*vV4faMbMShi*lgo7-^{wHyJop3#6;cJj**4t&D2J(^)A zRdj7`cAXfp4X+S*;z*ADzG6YB{)*zG=`qupF^owpaG4@)2(EzZui9|fkes^pts3AM z$hnP~d^M8u00_--NTClO1-CC|YK2_eCkc zwm+=_DPADgh5%12+2&_8yoxQ|5F(TK&2?W*2A(+6-cKD_5tnf);=D)kV4p5r*~ObE z%r2s3L4&)K=J~0F3-6` z_Jh!V%rBm7yPWxX?Qc`P`go}%yT4I7)ak7_f;to9fSV`?Riosj#~i?CCHZQQd(C4aV#|3TG4Rnx`x$z znQiA+??qVdrqNHE;5uRs;_O#T14!eU{Cmw!rtMHpyMwJll}ZXlM?Dxk(|Sh)yBrQyOU%vjvByHLF=qEm+*doW+w`(b07=W;75 znP7){3US=jYK}a97--ESJi#sQ%xF)XaR3pfzq1ATN$)b;$@8H!NeM`7=K`K?@V3U+ zQ9`6suI`xgji|C)u5zrtgLa3hQVx9}iu%LZwraUWfwR9i*@Le1l2>%^ik=5R15>x{ z!xr-X+U-^xvi6fKgtRv>GFGCeO-8;1>w^5;kzB;L7S|*(+|B-givDcOq4o^zv> zMltZ=klZj?UeuxMd_6og-S7+YoMsg_BHP&5cLM2~pYDc6M$B`v*xx-8(zY%NG#R$R-SD{d#Wg)85*DkB#c_QXDkV! zj`y0bezJ8yscttUD0&T*sUEdGr=}acqmxC;Y}PV1_7mM_QbxmU^IXl{h}KYOOv<~r zAHp7nhfEpIIg7cqxQGz4n>i&@QUE%EuWdoXuHP;wHo&JnyF3OvHfBsacG;rYwOn2r z=S2SiQA*PRfjDMxu1OIQ&7#jQ`##M4j9)zgl!-;y70Wi^VO}us{{NwF(OG zUjgHR*>8Onq|rg3o=vLX;pz8bephU&tjcP4(4XQs;+qYVry(kbRQO3)#MGZ!4#D^k zjfQc1VflKV^$-*4J^CA=PP9sMepfV^gz9aUHW%8+UnQ zsnK^0KpwjG)Zs@oK`rkn_qD6TP~;93H6Q&B7|Jv_l?||Kw@dcUG;yXN^k*BkuSg=P zs|grZotSrJ?yn4L#8hzC4BJbKWyqg1yq+jvx0JN9$iYzsJ5P@R#Pq_>ROY;+newF0 zvOBSHYFwadZPiTbmJY@t^ysqKtB$cA(zg}bC(F( ziy|?h?Esqnm<1sd1zOg%;nPeb%_5UBYdoev%?y$4omGh69RXz|bYrv;)Kp+_kW)hq zE-5S22MHYEZPP~deO|4eZ9XZ@un2S;^`7mKus%8&j3B=$~R^C zUUvoM#$NX`!<4n`Dj3+@4J~d+r8d;6usSf@4us*S$=>bdxAznB{{S{-8BZ>AHd7&k zGqJt9OK5{H%`^=u8{ldZKN1?N09R5|Y)fHn3gO{QJRrv4Eou&&Ywju!U7*WKd76Go zT-Biw%VC=Do-?Zi^FgnO8xN)%T-AA*L6iMPQFPE<#eWj2?NXO8>~Si!K`Nl^*RIwa zFyZ!lm@>|M$a7opeyb|XbBp+35-nC+aMe-U^0?ze=tcwk<;crp$$6Gx%Ti`iO%=MR zgX&qzj`li{U%(>|QL7S0w5}Y$ZL9wP(>f@10f@s8Fg+FOU^~GVE^c*RTjBx~O$`<0 zD#TD6z^)$Eo_Niyzo^_toWp5qw(5^(2!-mUBc%%V14gG{APhUXF6utwTXNg9s0X2- zAmNwGGfjDtTxC)qt+B3+snqH_IE)g>FMfvh2nubFx!X~x+z3DZP{zvnlC&1iW2m1e z-4`frUFvc)C$!M)kLx((v6@*Tjvv~vGYeD0mgxA{;%gG9sUUT0ra%OuZT+d-8xx7_VdlGl4LBu>` zRRf74yiS-a^!a7nR{6gs-a&m~c)jAJ1elz0CMW2B!fEirUTI09l#(lv*n45Nmk4nx zOKt_}G$SP^956VZw5%g%ex{Mhs!G*i`)P@%fLq8Uhs#r4pj1}@Vr7t%LaSO3!iaTI!xl)cB2mQ}Q0D^W*H^r|GCuS4;fSa;3M))m znHMp^nOZ6|s-&8$4mhnZFB2@dcDV~Jti%Ze4LdgvUI!4po&AFU08{0wqck<&+=E?* z!o4wfZPMVctQOY&%S8||12MOxaT4i{$>#anRv4&SNdB4)cIC9fJ(cSm!j& z5p3>3hVD9th}0cAt$6xj&v$T=+o>g3HBG-x})vVx3%BaG$=YRFloMQUnEpwq58*OLgFujdtk ztsP1TravL_Kk%R3gBg9o6_F<-mj3`1MKBI|k}WOTH$E??pzXqWuiq|2xxZ_Bcw1V$ z+iELLqpdJTop=cr6j?gekj(sXh4TwJ?ceIHsLnt5*R$6OZ6+omacGKOLq|q575$XN zd3JA>=60L%eisA zi!V#K)USA@%J*t?ENBVP)9uAW&v#jP&NBXHw}Beg@+7m7w*qbCBy%e@ZxnCMi4sQY-2 zjy^LykqGBq&Y!2TnwnO$KW#zAg~rgjDI%Oiz%={pm7&!Vb{;!%<~>9^X_>{D@|l9g zR7n)blB0A}rlYdDd`1Xm(zU(3LTRHZY6xD%{{T8+rCVJDmU> zp1qpk*_Co9IyI8qOPpC+Z#9zBxM_+GzGF(CO)xuwEmKjXlV@Ai?$SuxBzQZCkXEB% zJb%4$HJERtk%I+lG1I0L-sM-hd@CjX*S4xg_qC!S)Bx+nOH^uf(+Kk@X3O&1lwq}% z3E|to{6WVxca*0oUg+DYM2vy4#(&0^WI$P=-yEBTYJC*HtURF2DfKn<8RN*hZ~wmxMHtT19%) zFjm^b)HZ};d1ay8E*JpJXucgkeg@_@6TV>A60nhNV=+Y-8xc1#cBML&H7BXT+@%ch z$0$V`KqLe5*9at`x|rmpE?iI;QcTL`&UmG@o#L7=l0<4U*N7emu+$O6VppEh?`zL) zA(h2h?Zp(H(;or<07<8Y2FcyYIA*V4BO31vaZ581RR9bETgsWqv|JHdm(?^@fFhzC}on|lM}LS1eOMvS7DvrK)_FJ9K)$kBXRpHi#W=Z zFqLBQwwLCpuW0zkG7%KgD*UFB3jO#YdIKzMG*vaPh8u~V<+Dhv(wlccP^{~>>^v}b z-gs{9Lc=^$Frpof7?JS6i$OsIi7d;gbP$3JhCo)JP;DE5!hQRslC43s5>FCwyvx6` zm&}_x#RJXIjdZ}sS^ljR%}|3+h^WPqD;Das;UC!qtD9vPnKa}c_7+vIZ%k5oL=SBp z)?2iehUubVU1+4&7M?+SC8hPWgwSy()|JB}JF#0XdFDHKMI&pKoeyHlfxl_PZBB)$ zJZOGUUF4qirkpv7gV04sw8SwDp#K09R-PR(%j7-DiBHX@p1->iZ($;;&}|d~opBB0 zsF6SwrD=jv3YSrHXE{PI?s z87afF2{UyUS=L=*#1%kgWgl?-v1N)8UYM0Gt*9q$0PQfYTWqNc!d*(m2Fm#1sqVIO zm{@WbvA^2nwN^mF*x3{>(qD ztp%o6V`fc2Dp+Yn16_M*PrnT8lF_7VTL}`W3ZyH$<`t*epr^+Uo1XaQGD_EEM6rlf zE2T*ViTedHH+Jb-jZYKu6A`+tf&d{o=}(R)+84F&VpL`ugH@y_i6`>ugjbfMHD`!Q z>SkryK-Y+>j<}H|nXRs=w@Anp6d&L3I7Q1S*`8?xaH{^B)!2;{G%RcIIDj<-xOPpg z!h({Ubc_uLtq-KO^I2{3u1ODXBvCxDn8Put3Kz{!KrvkVW&Z%xOUdUF85yM!_oq$U z2GOD6rBALLKI(HFyVyr(Y(y|UyA=U7NXpdcdvqTR2KJ?G>@pd1sg|*KZz-;TB7%O? zi`q7(w|dl}=2;&(d#BNHzfy!BBS<|PF_eeD*{S9~bRQ>&^-q4b$_dacY73Ho-60<7?B z<<>)c%(oeSQ;-;v+AD9VXEBpR)oKMaC5fOku9&nr2bUt{cdPP89OyTQ*B;CD?&P(uUtAq*Rj12U9|R9hh|6z}a?5Ad3PodK=l1(^xc;GG5JVH6XX$w<@KosFjKHUYy z(NG)r(!*qkDTI^ZvlWb3=4FS;8rFb5n zW(#Il^o0pn;f<7#385-JVNR9P4Vk7kcc$_PRYc059mi;|LMf=k)v^nTHSC$IwWXI6 zr0@r$I{59vm~)SNTdcnF;vACWyprWq1eQWKJ01(Br>zfMKBa+d(7?YaU>2wFsM-hJ ziavbN{{XC7#FIxWLo_YAJqqk_Xf*Jr#}|h&GQpb566yquMSBjTPeXvWlO>HD#bmbQ zx)*71{{V`p4%$<18c^c|UQQ7vQ9xMXGD{m=TdQicWng>-e>!3-)?lx@Pd2sm#&Wd! zyQ-1pMW=;H#Bv2{qbF2pM#g`bx-tq#sH6rvv5>7iPZ_VvxEk=m5eh`!Wfdz!*f5xfI&jjX_Te=E zE4DFJT97sZI{Lxf)ywOdW;V`f6Jtc$b>cqiR%uXsn8Q?F(T2-TLIxQgD{V2xu+fCU%R8}AuYL8!p> zCm4MKaGO;MYPgnBL0|BiVh98eQ&_?52jii|4sz)uP7r=n^*1qw&`Tf`>5sDQ z<1}scHG}V{{n*x97)z;u6b~V9yBf4jm+j@^t*v_x3^hkMJ7CcrKNzazjB!`|Sdt

GKxuU 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

)w~~ENF%eqwwXMF(jK<+}3-$o9 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ɞIjxFCw|Qjg6cW+*65-Jge%)iay)`x8$iaY5uo3 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

?6szY1%E{J(ZY7hJP`)%<#0ttx)5om zm^+r)L3kj7S72b2G;I(8*=wk;4y0h9?x96U_SsGAO0}&QnolvZGp}>WEf#Al7TMka z3n|nRH5L0t2D*}a>!8L>00V{+-$r1aWQgty^8$6RZ7{nhF<%pJGpfosD`*?Qc;Moy z;j$9pQqmk5drVr$VV8V{sK;#=i1ot2itNoB1_0D!>#JdHBf`k2{iNy#VZvA>c(*Kz z#8d%~QjlZk^Cvl}V%pwPq@8u+>4dEu#j6<}VNV<@B(~G3AZy!<$h9Sd9i!$n(!Dgr zBT%xD6FV-=;YcGx*0`D(%Z;(ng&j>R*BvSuckCZ6PMT8~?$pteidW!I?#HF|r9y@- zOSol-TU{x5wLjuRPKWkkJ=LdhiqW3+b=xNsgr-8Iq=(H?Y1g*6S8H@b5UIURjHiLe zlmf7x(p$u367CujDD>UKjSeS{S~X6JHSi+5KKxHTiW1XWH3HBT;8MTw`|yfsM|gH^ z94SpT^!so!kSmOONKlF;P<3StHhD*3?8FjAQHIf|(!H44lNyqAEZYHZ3`hWH+D}?* z!nLOybuMYaQiUZa2$8$UMMq$$?V-m&R*!LCn6PbW@fezDYx-(Ipxi;|KW-rI_K;YS z+I(>EYdfeaVVolDVjELJdSfO!5x0Yb{{S3F{&gXS-{GfIj39W}GbkW|!}G-zTFWOM znZ-LmsT&k=Jx`7!kof~8R)m$VwAV~X!*0nErZNB{5S3HAy8sGTL4}-fj1fZ0pbgJQ z-9h_spgKHk9e+_qn(2Y-P)ZX*x{r?>OB}2iqYX=G@faIInmUn|(LA>6h@D_l$+QZJ z3VP!*HFlH+t6HAiOze#i9#hdt{g}?et_Gos)C1{*8dzAUl+;1SLrRw2O#%3vXau-8X9!RV-=7J1v_dgcw#r)S6(VW731lKEdj*P&V!94%H&nXgbJKYlD3k>O31%9 z5^o_?4Rz3d!;LJTg$M;sr=|i*^ealGRGtvRUqw0;eOiZ38ve{AZvNP`n~R3vLF3zq zH-Y9pRunbpaH1*9ltmiuqbWZ(p~KYJBBFJtl-3(Pr1sgA(D!!)?NCh{bqfJbA85my zE#}GODzivRZmA6Bl{ykUcx#4q_R-8YD=bn}4=~|`d**^hjpQy18dHmDTvQbSL4O5(-Z-6wUPszVJs47iQ;TSPP8&JLEhKr5b!#QLubPoer%GsP zULKXh9xLhhwO!Aba|7vx)>%e-p4=s_Rcj-(tQSF`(z^CxC`HR|>nj>If;=c|QO>om zDOR^*m?bV14g^%kZ#Z(-E?aU{i;K1yy!&qvc9GshU%NW+@{w9`(+ud@qEN^|WK-!( zI63bpyX7~_GHcn(m~ECQ)uaWaJB*V{w!TCz;a0yk!f*=qMULFI`Z?lB&=N5A)RR?% zQ`hkcx@@+v*%@{C%)+Kr-ltv~3ZD~?rC|}FAP}|i9yo(8m7=$Lk1?lSnBx^JOOYcf zpxSg_Q`Z;OQ4yfleco?cf>*|xli`HU!9dx->PK!ql15`gsPNL7VkfB}ZP5I^nB=%j z>3XK(YDIlV+d_Egan?cInF|0n?IODHJv%?k8bP>?)K$|K0$P-jle&Q`wufAF z&>DglLPdWpZ)VUz9#%W3IGkh_VvOvnL8$D1HJ3@LRZ<2kz%=v;t zcX$PsTOZGJHZ@HB*YCh@z7vLLgpGfArK8-liQ~iK zM;w9UHU?jA9``c7l|-ZmX^0)+15?|tX1@#s&-wLCYnEhDv@wIL{H454?!bO(=C{q{ zNTRk#V^5F`NcfBb7ZKaAmFeEO(37ojwk@@u_3sW6IZ9fp0VcjDr)@iN+X&{%YYnKD zN#5e_QAVwHuWp!by|POiuH6!wjWns?JaDr2F#5Kk(JDxdPg?7*6No;hNjJuuX&*pz zr-mhUfG7mDyK7`pwJ>L?d0X+4$s|#QM2wnfpm9E!6+EVA(0Bpa zju|c|n?iRTYBbx4#8Jcso13rq*Bs9Y)HWN$=MyANBPsz>$7mg=3M_5hTm+S?R;Hc@ z?!wfCte}p02mHfRx>5KC@p|H1y3ob|BfOGQRduBvntk|cQHY)IOMry*cFx~4kjE5N z+qiCWdvKBjC-oMDnvaGFXU}SdAf;qGcT-XgHT{@Eg;ji{05v+`H7qS=hO>)Gl5xUC zF$+q74QLmpKCb5!40hr+{aH&IkaPpEcH&hb0E`bBp1wG&^#VmU&N1Ho+MX38_MCPl z-zRp5%hdQ|CFlaE8XalZ3aw!gz+{uIo;Yi1sg!Yg6E&?2W3r3sjzz6UOmLd6?R6nk zR}$MHBr|^&-8%T;xtKBXq>~|WAV%_PPLyx6jweX_hbqjhQ$x3faW%(v7zv?bYDOc9 zyNRV}0W{<3j)9=gce>F^Qf@%O)-8B~-EsBIpfE`3Kq`H4i6#J44MjfQxI69FCfs|4 z&iOwnTeB+W7a=8)MRr0w(zn4u_|p_yiESln$YOgZnq^KXBxZ2!GtvaD8*NL@gy&Ic-2&l?Q=ri(ACX)7HnPr0L*T0X_q!f z?RHA5Zw5BSya+{;ZAo`cY7 zfjM#&g^%K4r7;#^J6v5*9w+a??6wrOv3rTM0ShUo6Vnq}l0=h2XrEXzVcnynAS@Sd zqg5uFj~ph7F}Sg)Kb|JJxKK3!7S@9pjOkOUZ7GfMNBrfvXd@6AqvK=CYI|iL`ELQ#9WVkzS^FHLTi-b8dHX<6cJFB=W3ZKqeJ75 zs5q+VE8$#f(#)#tVM25yoGgaZ%C9e#c!aLM98j3TP>7n|2_<`JXha||CqM=>0JuO$za`RzXzeNsEgDnvANKYSzZHWm#XNMUF1gRE z^v7h2-cM3QVAWICwBi|OC5uTR>@82Y3_~lVAyIc4@D(}>+CAi*{C>AxRl>TQ4M2{?s7+uA6pcu@N$c_4~N{Z6FE8F9ZtdvHMHKTDY z!l$tKW1v$QUJ@d{a$cgnpLRYnHA3w|M+NL1rynbd)hbUO6vmP;tD^$M@yD>9)j>Yo zBUX3wDe|_Rai~^FT(c;pKsD*vjjRIW%%X@*52(V}VBSkpY9kM~_Tz-Xo_kILMHRZ1 z28N13t#s>MJaDW9BVu`D8rQcUEMh@L{{Trilf>e9)E*19MJPJq3t5rQI8Jgi0ozTU zQL2J?oNC@Pyft|K{7WTeV5&f=r9W;8^8Q74o#rc-+MyNIq#~gdQ(yAJ4ko5i30s6E zBBaQ&9$d_MiuOxfvJ&Pc?+L8{8-U_;285k^4it0uIatMPoSDkR$CcSW)|airf@;m$ zD_VB(!k%m9t3Ft>la@Jc$9l>Z^5G7y)T1apou}c7*$I|bk;!&C>%d@^+ozoNNv2yC z=+HAc{0GmB`*W>H@{^z^r;Z_-RYfo^;tN!<>yApqx6Q9$#}P?&BnCWd$6DdU(l7v# zsLsb5Ba^nI3X1EAB@wirq^Cf-o~#C^z*nX=%siuM+yUN6rs7V6;55XRw&kQ&Uo#U* zSAeD}aKy!_dVI!x4Y8QBwyeWi;EYj685^oeI*tb#L`!9@Dmu_=d@zpUX&!YU%?O~U z<%*N5C@9qNuF3V(r*jBcok&yE;#ebVbP`QNA)^3wrap!Qw+kz%??Lj4=s(Z*;%IHA zp5uKMh-+!?eZkcBsee7Uy@( zX$)4eF_PwB0R;a5rga5;c;Pjbx6;BQBo}R5_MYE{0lIhfPU#s5D8dD+A+d^%a!%|3 zv8wKF9!+-XiQ_{p!oeGc+@LoC4^J*J6hu!PuRz1j3GL~Fc}m&Ma+BsPB285;Nb^M} z;C(oNblcY+DJe-JH3KL!Gw*IvGA;B?YKxYiM+Y1>haM=izG z$I;tbvbiM9G_A0Bohnb=h4xuxxN_30i``M3)b84((2%Ez*QNptg`9h04OFVrI64an zZ(PU|x{fiu&sq~o(*|<;RlV+VsLET2qnhGdf)AXeWPro3%c1C77|vjx&i!({x;46p zD$1o4hI*Yr?WgU=Gd$LOi!L#DUCg&6_pCJ~O%HZYT9ICw3^)WNX-p*yyzr`1<=RiQ zhs;#&Wz+&{#N)2(BlnxZ0YVKp>8=}XoJ%~5M`co`p*w$eCz9^=I=pCRL8)>oJ#p2e zR@k4@trV#OAA#-VnHEWvPT}~pQHO1v)!tD(orfpey~b;rF2s>VUNw4ww04jQso({4 zrWhF>Q=RAc(AeeHlTSUvs>d8COEaDdDaX?ux%SuFOq=<7ia&9A{^rW^=1ivI-EC3U zSz7L0p<#_ksAXNixX=b+>kqu{nBCzx6}Y2Br-|cCs5X=PI@;L|6>DCQky5RIaKkck z10IQ0bLY3#-q>typRC=QP~>>gAVEO;&z zUGsIOQDt*;$+ppDw#dEQQ``;i$TTxKJXnqcfanG>`{(Z~z1XJg>`)xJT7Wo`l+@?8 zx<)|eMRGNTT5finVOLjm4T_LIu^R!{2|O~bHcv5gPE~i5XIEJ|D@tt~qq0O(hh=zb zX|4eO08-BFBKk$Udt`IC#}j#&_@0AIJ9)>NR{ritptyP3XRABt9G)yd!!enob0mXv zw_d@IqNT;S2BJwa8re#516yG6{IepRb-XO z3P2#!j=T;NycF9_1vx;P=5XkSBs%?DXcA8hdVUd^B%R{`po-`RZaRpukY836CcFk6 z9NoxQ{F5!zS&nO!-OFttw`Q}IrAZ~PoFfo71>jqOCW5rXT#opL3<4e}0lKn;g;PAB zEU7Mopx`hkoQ~#3lmKhCwe`o)-(8^z4CDpv0FS>JmG>Qr4y{qIN^tve(t;)01zMai zl(kc>%;AYhr70CIZ<-LtzltmQLa#fN|qYW*xg!o+pO9 zF$|(u?Nac9VYqi#TB3|pfZq*pN>TudCaT6_W8O*vwKSnW-^U$|H$4KH4FDL9Als;w zB>dIsg_g-rE~FF0c6Q^7DFTVkdBRdEWKRaWi|90`ZaywqL~EjsCm6bzw2YyN6*S>m zW0eS+wFaDUf&e7W=pg{BIoV~X2%|yfBZj!_QL!h>QgmbcJu%2YI#B7*;ZF6Yz-Ty= z`vw#atY;K-nhC%Ragc+p2`3SRI|_A{ zg4uhek!G5{W?fM{0sKeAY3qxnt+7gXOh*hw>S^T|o?@}0*YR)wD1xBMA3L;(2#A}4|h6}lgsnib7Tv5O& zK`feTsGkk0&7dl}3}xk8cu7(j&)tru^-b$ds(uy3YAWVgD0a781f`cv6W6ZT?Ik#w zxN8JtpP9zue0wl*#>m)Ya%R&I9oVAybvPT8*}h?Rk!{>JfS~Z*+3@0Ucb%`T!dhf@ zCYITJRF#JrWICU`;Dn$ARCEa+a=!7@+ox_Pphm+g%zMUdsz#@kjyr6cB zPOzGpCE>QFgFtu;M{gTU!S>f^)4+D)#X3Mpk|-ew)^gb*SkC2A<%!~ZaK6USv0$;P ztw$b}!pm&FD4{nO6xzarsV9lT?6T4C-?|ZqqCRE=v;G(%4Aai6pl)3$&{Cfn9Lpm@ zB84``N;6WMv59Y>%iwE!dOgH|uaxk|IlDcI%|43FJmAu!kAT43uG4j~o?u>5H&(b7 z{_Lc8EsC0B$b4nmWi2ErT~9uVEvm@{OtP{X)Q*+m!vt0+<OCpb6FtPyRJ1Y7rj-Xu_SYEtTWO0|^dzNdI9JoB zt~3l?w{DOLl`Vdt>PYaB!yukc<~JST8W4Emc;=ok5yepIX~6#Dgj3~gq`J_MH*QiZ z_IBfuT-`ubWF6#S>!l7Q8oF)Yp+Z&0g)*V%H6^phJ6z??V=UXYHwNsljXL0U)Ish< zw+dr&+nf+j6R91zFW$v)z@r2_c9Z#I7Z+B^6E)%j6jqJf;f5pzhm+~y!=s0{MC)#? zwPGvpB6$+Tck(iYpepIDX~LL7Zm;tx0g;6ilFX}3N#H#(HKmkSgim=4ky<&W5Y|9H zhy$h;rJ>7FQf5nwX$kHwQ$SB+55nFD1F1>4Qc8vcuY@PPP(cF|AeSooZH0lM0N0_$ zHmpXBC;$i32Jg&s+roc=0V0?V;)JVcMF+s*>QUJgok!|5lTEfrQETSZA0LhoDFaiW z;wpaZDv8S@DW?;u!fS#0n}E>iLU_|0P8dctfhm}fmOBQeLmodIbQ*VT8$iBe(v`;l z00=vFfvBM9c;XaQ4n+tKY6n0t?UBgZnH9x#38-Kgic*L8ei-6{4)Ot}g!W-XiAGZV zK-vfQ*AXz<#Z7$NK|OKplHk@T0y!7FVk<+_t|4Stl+5}DCrauu^}7+d4MLs=637|H zc4}x#SH$RlEFr;-M&EdmRGlVaNhBVOD^M}S1xxzS*QPKFD(x%fjOu(&B#;7ul7MMI zaZ1l9Y>`ULvzcfK97Z6KloG6dZBWy#f8&XDloL-d8ds(uWnYl4q@BNK3?bzO2t!pE z$SbhZLRVj0VTtbity<8ZUfguGB}SXRZ9)SO>0Vi+(rdyI!u&Gbtbb` zs*%?3M|NkzN!!d=4xxX}O9_ zt2aw#l$&|Z-L=q;7(4IBDO%oHL(NbH?-rK#AL9p9Z&AbS!PQfUEmxvZ=Fk$C(lXDs zRyh^d)LA2;qm61XX4dI)n=8xqj2aH^B6#nuO+E&n95VS{>8<6K&Ca2yD~B#`DM_Kq z(2};mOEBopcz)lr23onPoku*Te&L-L1v@kB>x36?3r}+L%}TQtWBwz@`|!fZ+_mhM6N8^0`D{h&mUbsJZCwMOyYODkQbSpvZxdSx)J$dCB)J-w0V0tWsUpC zVffyhej0&^%<~AlQDQ$gGT=c5tu65rr_y zo24pztUJM9zXjyaVa#(`vl-zQ(qCK0Yk2T*kx+^@)1W?4T67pwCQ+7VR`&N9MCz9^ zJc#y>K*MR$DQaF*AQ{`=X>s$y_ON0)d$n_$L9uV&= zZjqja0e(s^%oLE{!-mIR-7cHKoslK1vH_i zKwTs_;Uq$iV{ohvr$Q^B^gcLN%l#(R^9zk?tg(h1NguNS)HHhpbSlHI4_p`b4tU|p zY~hFi3I@>Dm}*T`NoyNntgPcqx@B!|bnkyLk&5@Hcd4%o5kxX6Dn&^P_lUOhs0qmL1R98ROC*tjDzIa~j3>BG=ogH6hZV10+z^5|+yW^> zs2!N(@P;5rf{oYqVxlc75Dbz_a^f-=mea<#T@>q=#oel_$xQ)2D`H!SKAme4g>m?g z?ZBlXS?7{T1Vs~ijZWsM@{hdyF-KimC=feiQd3MblV;h3x286@)>ITEnu_5)tF(+t zrsf8;28T>S$+fCTrxS^wCO7Y+I<0;+$C^uej+{E}iFB!B6Ir{7V|fHSTt)`(Hv?Y7 zjVd6G;|7M6I(B2=$U{b0h{!YqR+Jh6jIy$TLe!tOm~crxV-%7Tf^wKuETKW6&>U%) zpCeS2>)Wp!b}3Hb8n2(B{rJ?WNs9t14K(YHB_^0`oiqY%WT^~|=BsH+Q?S<&u+f8j z!G$%~9Yz(UMGXM20aJ}RI|?8b1nM>W@c#g)MSUisLtU-0y=pO*8^r*rQ(s>Ub(FMw z`hlpg+lb@b+5##Lg!W){j#0yiosEL2CxF(RX^9q4udsm2K}sDf{{S3d#zEXj+rZZ! zGWTj&sGvJW20l~DGP@+C$g&M8PMV$=>yoV@2g=}@_>5=;2~xm=^8WyRxcG!*Sc)3D z=z5cjETux5WeP|dqmP&F;$&-f6y7|#R1>G|!OKhk0Hu`5hMmKPT|B%+N85%)gx^bW zMM-GD3-+8mZDd@|6f3qja7$Et#8XdPc?$B-$cNf2JRCv5`WV8R?3qB3MMi}9b{u4y zxRwSXfdm@r4@^aKS7c%o5C}iwHS76&F~lY|2+Br=nswv*aVB_4P}m6?V~PyiW>GD^ zXv9dPY;*j2>5j=0Ln6g80s*Kx(S`w3I;{_0HNi_fz?j9Q+g3H;)Tv&Yc8ql}M;QLd z@SR@vJ;}H$Hnlu4wQ|F7U5%lqhi*A>8H%XXks7;LY6!*xkj5cHMI>wS$4pShO7VqX z(IkyGAs?0_Az$QX-9k2Yb^vRM$#${IOCs2;hohBvLa4NcQY# z_W~)#q-*wLaj^rvq1L`?efr{ejV=&M%2l@&)Y8A@gxb)>C3sK+*Ij>p6F?(zS;sjz zZt*vj*bzV^_E&~7=pBUxH3Pzx$1B{RMQzOIa5Sc!eR0TG)wfq|YQC88sty@MEfh5p z2NaX#p$uxH^7O=-NC03#{5o{)6vn3i08@Q8X-XctVlh@b$Cy@uMwG+SYd!U2A_!xk zU>FikIJ8CpF(6e91 zt|8vWwXUO0aWk&rRUat_P6H5%KE-W8H9Bj@6ez5ERZ%+>rCVzguo|BOg=FtQ%4@fU zc#g~=kX5P%mF%V^iR6SD8h}MX!omnOPI9Y8tVC4G2@*%4rnT+x#6$)KfiB z(@|f$5Hz=vC(Wi$KCWO)s9nIod~TkIUjur#3PPCB(5iS(RPBHbm; zoS+}5l^o6$L2V5eO+9d?+cnM%q*`6e8ETSI$Td88cwx}8B%H}b(Myf{ANY_gL z0A~>{PiF&nVmTPI?Tn$;%(5-3~O-x~O&AxYVAsIMS*s&=4DKMMjjxsX0t!A}8JEC5S#z zjqNq5B-9o)I@1yr1QuOgPJnfxranNTPW4of6?)dAt~xnRgq^bt`{gD@KPcO!cJSka zT)WB{pEKqWWtn6}+C%dJDyF=9f7H<9}RHJ z<}P}<%*$I^FVnzH4$uP;*+HU@zW_UMRA`?W0R8i~M4^#H@$2k8VZLGJ7%eRyEXd_| zl(F9+)rYCz588b&!|rcnl*>7(EmBD&lj2VwjtJQ=dIJ22IP3lPVPd2a$Gjkw+g-bO z4%~63f3o0-C9D8|WsY`weZW-X2QIsuRnFbi6+B1=qXh4B6^U4YsDFTJP6tbz+)Ab; zUhI*n;@{e4k$0#9oH%yll22;`Q4|x}28ROX?$B;x%y?G1 z;}Se*p`A@zhM4UPELxL_jb!&XayT`p8tH^R=nC6Lr059akE<-sR4Wo_0;t#i7+D5U z-4&AclnyGO>U=R_ALL+CAch(4Br!$}dq~g<^}!h7ipr{kbevhwPXS&XG0E=|0OByw z2GFXSnsyuxxVxI<)=4(5Jy~ED=-?#t-$-gzwKdoGVKS+nUm;?wNvZk1+-5l4$^)eU zpr;HdRS_vw2aO2>PeG0VPBDo}Tfj|#upxFJ5#3j_x0;YcLW7QB2%;EC*1b4!jZ(sXfq;k| z-g}pom*!$_BX|KZ?V9MKS104pu1_wwKtf9cxLg->&I*%{R zdvOyv?#U}hCygnE5)J!mMHZxDeN$l%_QUqwg zA0X91?Cr!+#w{WUerDB(75HNl$Ur*K_5Ii(K2b;-iFtTrC&9PO5FbvI!r1o0JH|8s zXlaNop$l1D{M00#mBO#46R<9J#yVlh6cvemX|9owkR(qbXO^RPn_V==cLBR^5`M#p zW|&BXs?xd+(!DVol7ZRH8LQLp#SG#qtjA=9z&>85Ph5J_`7`93PFl$`-+K9?Ar+0a zywTei{8sU6DIPLN7A5VW?Z=zFyW~vM+%9a(d0Q=&1K&t{*VeZ1jb296qSkg0im@ueiI z3;zI5Va?#NT^Jy7TChmSP13D$#ugJpTaB z{J^=T^!KUdjgG`x{sqwoj+}gJixZx+rOUG6l*2JHPNf}**SiFlZ~B^p&>T{EtnEC- z1!+^`uUttmkd&2yL6GPlwDpCtw`DD;)mW7tB$|`rX(6?R<(s_Jj2yp|LuU?OxEDXE zA+OjxFqbTk>A;>!6hW$;YyF&HyWU9hfQs`;|sxX&Ocl<(w!YDT_Rc7}PE$ zh^bwm8g};L0yi)U4LY1ohiKX~1XI%-X%xm(nhHrl8tob$!HGf;p_u8}h(&hMLDNc{ zYC52!lTp@~amOi1BWR%j6bG|`$4M?hBmgKpaT=*=1LKJnrS=3Z(wMC$3aL7Q0P_t1 z*It-c1aEaB&^FR_Cx;AfJ2>gyT|EMgyGIj=7G`CtAVnHdoN>@N!B**6@_6i+DGjUb z9(T~`uC(F*01SQIT-~)z00y-@F|ltQMAETRD0oz#-HuIkHuq7Tii%AK5snoBghfd{ zOivjhlHSosOl#8pxPA3T)MgO5_U!`o;eW!XM1+f1^vF70&dL)(v{m7@(PT2K-z(;Sop zDAJNkE{Zr}HK~%WY5}D&+@o>ZI$wKjN_8TmhM4Na%^#77-Jv~6#)>Rzi z&*21?)DDAAnC{t9siswpf+_NiYC6{&L@u>`6cB0GOlBAyxO1s1xOyHKCk4D{1d^K6 za6ASoOc~d7;3jS0EWfBIpj0Wsu)BziXaFRI{`JSp9ZByLm8mrA!%QiK6#(J8Z3(V` ze*7s)$4G!JQ!(2Rfy&aNpjVB1aU7sZXz|mjgQ|n^HSFPqJjcuy-r3~`AUm3k2KXrwPmy8@RIDbEmQvEpDt4_C6;ffcP+e@XFW+Z_+yev0~C*e z>=dp!E30`|%A1at_|7w*^v}%hsM{Oe{=EBpTQI7?>)Pq3P41$J1>fM+*&j zno^ii4XJhkHC;75ab2~ETa?7eZLQq61qnT)fEY0xF~*`oXn+kzTyUgth6uiH-p}v$ zVI0>FB_dji=mr&CW`igtOUAn<29P2+(E5-2W~jhExb<>HD0}( zJ4O;OoQ2#sYNK8s<%U!@fQ|_+4LJy|6q@QpCc4pvo;sh;4veQMnpoadV7mdSugVD@ zzXEI^XvAPG0Z;~-aKnNX{XXvAX9%cWhf%{!N?WiBbsXR~?x+CUcmovNqa~`raomv% z#R)(+IHsEQ8XDkb-PBoSsLieoAI}^hfk$9R+y*`>u>SzfTuxCTMrwmv8u>u&zzds+ z`I`IcCXc$Zf#^c~rMeH_g+B48cAVqwEk(L@sN>fjzbTstWVn^{JEKOBnIi{?9kl6% z#YhPwg3L{8(xmYHzZ^{4WFYO?QM3gV1G5`d-9)CKlB_x(-BF7&%>@Q>#am3=6*6~m zl1K_vQnV*e&l2W05n0&;LZ$8HXu_*jr>ha#4M*RJET=Ye_mF|!xFt7nRn%^;uMW;V zF}#Z)%(>5)W3$Wbq1zNuqis-;M2fpXZqjK|c#=uQZe5_#Z~|CSBB0`W*X0vs)*q*~ zRw3k3BU6hLpabo}>l~@ADopu49nX5hm`VJvp?(o z-l@9Pcjr3z@H=lE)^tks0Ifd+D$42D=&PH+Ew7eD{I~@9hH`+L#m1Z zY144)TvOK~`JfVSoj)vFd5=GGry%6*$$s5Kw)$p5^V-p*s9?v_>hYay-P zUrKqX^5GR}ZvEKrTsj;703-D){!n=T0FlFhFrO{*{{XkY%VtEE(#sZO%{MAzNr0)1 zsA{l-@{J8#>Uwk-VBO1@^PX^dubeMh8(2qq1T~zK=k3qgqlsWR25E^(}*1Z0Le#b>G=rg&v~q8=xp-l`c7Z4sPc*lHK}9N zk6lUB>%y(~3!jc~233{sODO!IK`LY;@i*?k?rrAh%qf=Tw2I0jTFGZlzwBv<&9)F!>GtVwZoZsb=UMY%GX>#!Q$^0%9fWyFpfpi9hFX`|D z_TgS%9?8|^)N4&KXBJkPD=0cp6JBym?t9Dl{-*L~CforaBmh>l3;@s?ni1j;ZX%xD zpo${ZRol9pE92>jbBPdK!vY``{YS2~=mG5%uiJtzXB?2*Gh3EJK){ngKj1MG<4!Ep z3c^y9B>^B%2;PQ3T(LDE>4_#}6_K>@9k}}bHU6t{^y6fG;VLOjs(54KhE($!D(g;| zT38_YjZC-!Sd5}%cWF!T0BSohxf^E5Q0*$)f$Sp?MzNvVt3|Gdw;N&zr{M?9*gP;w z5kpCJ5vH@~o-;P-gY6oD{73c-L3MD~4H}l+9k?kH1LZ+oXfY+nbkWAJhBFppA*k3j z@`2Zf9DNO_ETM%!9Xj}8%UuSM77`QZR&r}t3}d~KTg}v-BmD8Hr`UxQkVw?lffutI zmR2;Xnhz+h2TA&u9p9RO)qvto5ndCB9qP3!WRf-S8@}npYruBnk`XM$RFVhWJ2AOr zNTCs>38tV9Cmn$iYtWXf8gbKy!wGpq1PIMU)qWCif;0kxu4_PeW1#KYtMfMw++lY+ zm!$yXTulb#{d1us%iup|8rm?z2BS)o6)Zi{?2=N9MGR}igZxLQrZ89r*rJLD8ga*C zqA8StuApNqXg3qXUsL0P3UsEhTIw?rc~@On=ms?eL>*<6z z2o!{nhUp=lP$u9%(g669P7=n>>ahT7`XAYa6Vq)=@ih42Y>Fk4cA14%8q&R6{II53 zAoDVgI8xbJ*$(B49#d$fubQ7}KfeGkBx&wUr_JWvPia591n=$%i;YL!flT4t_hO*= zMx1bKlt>BT1F~e2T~=mpLEo%!M_MIA9?)<`*3t;krMM(T9~yCU(MB<4WYMQ~lrlAV z^zp~j{;Lak3E3Y4I`+0K+kf3%c}~9Xe0#JSBz5(YAeR2-fO&W#jswFENnRdb%EYAu zO&}yKdIjQrYxiL-wVXK}oOicC4eG9oTI~dpL)dhw@FN*ZYhGeTlIHGC@UQx6!$ZIV zFw~)UMu<5}g|%jo>%i&Rg?*z2OP0(pCcd0McJfsj$kV0^*h?T`w3yuv-KS57h8FgOLZ)(G>29#w3;zGRQ2mzMBHx2?S`Uit~_H~x^H!_xOw-QYZCc)v``kFF!pHB=VFv!tIJH;e%%c?U92J}5~C8Wy}2;Io1 z%eYi}dSWg6bloFO3RlYy5&Mo3=u(r-FhL2cHPh8S7FPqtnBvm zMXFRGrsdYYxXYp4s5BY_z>F#v4+}DsqFJ3! z$rCUn(CRD2P8Pv(vMQy)-n1%6jx|LBNGt<$huOmzLL?v{sF0qNpzBlNjcOf3$V$lkMG2n5r#nPQVFh|n2i;b1~ewS4G)cQq9avp&q764 z*RDF1Q#s`dd4x`tXY&JB@Y0>1mLikpWedm4uTS#E*^E!Q1w)-k#u!LIprY;~wdY8vbIVl9Qp8-Umauy2 zm?LYgD!dM!wAT7zlvhG^pr>!H1at%D5Y|;pCK8~Mbke^b z%qq7VRyUzz7%WQgr%K`mHA>K)1*kZW@AAThe(pCLMOY}%&=Flnt}ZA=CCzq4`9F!y05Jh8i_7PtZil3D;Ca3iGL0E$m;jSFn(!C=k zVmf3+`zlHZ+MjKZwe$B1AzG5nO`!C`!EE_;n7+CNE-n<56yUvIMH!)_{Hulgwl0xAOQ7wC=6$+-D1%CWWIN}*jl5ig8 zQLwhy4IpByOa|s*S(1tn>8B8M{Ej9|s(@VzH(tzj-Qk_>ZX;-5zSJHRm#nnCicQjtk1Dw!4NPP%pU#}%DqR*piAP{4!Pge>wzwEP9Q zj@n^FGM8mm8$VRLc*S{mF)CMoG=~;(JMak2xEPuMxR_5ES*pKi%Fy ziZEEt2*MXuRM^yNX-eVi$TP*vnRWNKnas!NZ(w(| zEGyhj2sIuY4LlA6TGAEe$n~t3wRvxU8=34sBP(uPl@iriYHMA<@uzMK%JDp9g#q1A z4wdo4YBirEzn;SBO1-?T6OO_S59NZbe`#>52zFOGsXcrvf|0GXX{BUy_VsYC5V1*b zuVJ#a3{3K>({7+wvj)A%wUkAa*!NYtj@j1YG$f7a&GPp70Au1#C*>;2o$ItDsWj+)&(cHjZFn;f}^kuP}~&Y1QA!wp;SPq&NY`hoBDCE%WSbd}rdpH~s$@6WoEEg2+%V_83Q`melWeuVXv=o}jCT9^b zb*_{Z)G)v+cPJ!tMmh~nqP5}M!|%b&((Wjfpjrl~pwMghh8xnM-M&6ND}kL+DjIf1 zAyrKbnTFxFQ>KUZV=<{9sL+!^uWmlKR&c~tqhCXe$i+sANIk!vJcWTNLnQ=(wCGnt zc=g7l0jR(OLTN_SP~kXcM%+%GI@c2JsR|ETA50X5RU|}^L7j9;ZdD^r9yrpqXkUo} zmBj7=SrG6+Q-mRk$iKo30In>xhUi4-A!4&=+nZqnUIg$SxSiA_g=z@l;6@{O#}$ul z1qh})8&t0Tqfb$br^s>2aY@2yqgs|$G$NxIzrzxDYU(zy-qj&M>Nwyx z6IeoV%1<17WDzw6&WE>;9CmpN%BDK76(YQRaE{_;EU}=~Snegh>?>2>DwQB_Jq1l^ zPw&?YZ_G69o^qq2c4D9;fYOA6PBb_*kmfR3-2m08T8eAOPqzX)rS8gw^YPusUKmw1 z!k8d%Hq8`(GjQ_LLH6Us5Nic-pyCT=3^551ZLL7B4nCMp(K(Q&&~>0A!-X*_9_-X; zpbC@Q+B`U7a~P2Wp)?+C4_^#RXB5{;+^u1~;WO|9(FxP&cZJbKr&9O;T%VMe1kxqu1@2fJZVX^6pOH7268Q`b(I zn1d8xqX{8u?po>yG$+Fmyfus%Wbz$HO?u+cLNuIanaho)yN-dsW;wLihO``b{Bbdf zD$){m?{Nw2Gdc;P(OYa zw53&4fGMYLy=jD#N6}NtcGjC)2NLF0VB>&3TQC8J78P5rr|{+e@`n9qPwJryNuvB-KV1G}9T^i5M4E`G_84sHbOUK8#1M zv;YuD?dgdwWr)$I`DT`m2Qg%p{i*Z^u(7bUD z+EqXmvshNv~k-#%ZqLz*R^DV~AC7Il;wJXk-$i$kEWys3ob}TyQGr2B(V- zI9U`5V`lQwpm@^|-4%?NFU4q0dpKd~AZI*HVrm*T)vbDd>_aM3gAENRM-h$vW3?6t z!v*4LQH;0L+#R9EmqJhO!qnKiA|6CX8r0l@JcKFmg{>qQ5L;_W}>iHX`t z6(m=$Tzy6E`^t*7S8Y8tuiN%w;|vV2a(xc?i5=eKL%N2wBysz&w=cYVcw=^Ep>4D$ zRj=lC!a%i^P>sM295up}f-sA)=m2g#dvFczwI>N+@@f*Ot0`uQ3OJxKc#bpcs08hG+gfbqEwA_u@dpkxa zxR%a1H|AH7TX6F6ZJreC`>>mxIrsknB+4v#LzgY&hbppe`Q?<==9g^?p8;A7N;Xy! z6IzbBcFK21IHXYZucU0iR#aJ>?gVZFiEhAfq(@lDodBudri25nJt^CbTELN%f;D9d zhej1NrlZEDryXj6Bw%g?24*K((x82n!AUxRu5r3_oF`$WHqdGU(9=+Q`cz^QwWMa_ zr7N>u+)U+Mu~EBr)f5%nDbl_;b@I2jInI2L-%T3WW$8&C=4PNPO8H0Ki`H>LC>2&w zv29^-cRVX)43adafGX9$y5iKxJ-W$xRKuC`jEgMFgJxeDsV`Hb9>Ll9;Er1^P0IEs zFXcN>_adTf#&OoahsXP%#J1UA(c8d5&Y0a_BPNT&=~x^2De# zr|_zFc~N20m(Pe%(p&Z?g<(FK({pX(TM}+PgCnPpRYkF&w3> z^QAdRg$M5qT)=D{e|X@|^J}c~;LCLDZx|E;yPlnfoIM3FHY-aAsKdN+4F-S@zX*HD zLy#V%RQx)eK=&Ym-%u4Q27^}f=bH3pxFs($S;1o?!42zhI| zx(xupxhIIA?%GK;3Kxn006akNJ9#^np#wrb><|(o#fVSU70VzXZ67xS+olmkAr4rQ z#PHU*Q6-JxA?67l(l&wA9BwO1UibzK#YWodMSd7+LD?P@+d`Fto>?W31zsBQ{kT^R zjO+~8ak?cawWucxw?l4MWKoAx#fJ)F8{EW9)iQ#@wF6pVlmailTZV`f6R9FwDu@+h z=vr&Lj60^!zaruW5aoFNDJKT-S<{U{QhCDICJ+@MxGP8->y^ygQ zZzPgVo|sV;y%k!7yT}qX{vvo#dXb3{Ba2cxjywSBM~@6~cgY!L8%0HR?BR}tMir1S znP-0PfDlQeC_3r>cv+TZvt79dMLoO)cw_4fy@df$wa7JNg;$x6a0Q)+J=xcCijz*i zo-cxPf-S|muI-%mo)bBomg@kqfDjjn{v%({3G)29dz-Yj?&upsrvrmLxsb`4+&Cq+ zD{k`*K=kTqf_L{>PD@zrf=Ka`Mmp2?VPw}67z!-Tu!r3{Q)yGojx0D25fdw+A7ToNQ_+<2eN;(KdlgQ2KAPmTpryT$o-ZIuezWJr_( zoORUk82QLC?pD-Nr-gAm(HR}qFs_ z<5sY3ChAZ)QAb0L#Q>1^n?}yQxZJJY9f~}lRQx(&=x<1=gTC&s<3Z_(u4LXgkgcr& z)SBby(9GbqXf>hfjQ4LT+M<;{Qcn$VuHGgss2fKb^~I8!nweE7G>QnILR01°VF z7?yu9AaLRb1CHEGRR~e$r2y>25k^~yp;262O0EJ5gjdd~r1LdMG+sTJiJY^RE9GIr zxX~&F3+YPNw--P1(d{Ih_00>OW){2h>j_lCgj7v9Ag`!hJx`_uxwu86DtXL=GTDV( zIvYl2ULVUZx0!de{FRvdmCkS&?q|1KiIk5#P>o`@TK+d;DmzI298=u+&lBgl_HoY~ z!6`F7`QK@v2AU#v1yHe!TVDQi!rt9mdv(k6hO^3>edLHn*)B$m#PwLkK<#!u81j#} zIrW{y>yumGB=D`o)7kDenMAOnq8)YtCm ziLFr1?R7nM&<+@qdEp_}GOww359kBnu(B#_mn zy$5gGj}@81$zRo!>6%$&qOsKL;xV+4)o6O{7k*up^_y?eM~LQe`|a@j=^Z@O?e9fOY^ryVztTfo9Fu_zpC$M@j_TwF{Q z!6>XNxctY^bjN4}5G8KqfQzm#VuTR{LNQ%7(6RLW_)7i#z@vhI=u{I^>)VK_7(&d& zD!P(&Bi9l4?sl&2qLl;5bo4m)OduwhCPd97zo>xg#zGFY>x`n1rkW6S zBYbpQ%!>BAh7HQE3ib+7Sb)tx#Yp`RivvvwJU$qj+Sp5~0#u4K zH$&4Ai+5HC$^hWH*0ke-RxwgF5(<9~op|HQI6>WTB{)voK%gNN6*bdBaJCC(nVE|G zqN7TI{r2HSy{d@Bj;Cd6NaIt-^BA5>FKqIk>siNhCVx8r0La=B8@jLKW82&I zcH@y=WggtXbFAVqah)j<+t{J6(nv<-GM)AbWzX& z+2Mo~g&G{a{{SBHO_eDlyjY@+LxhI*^6NOvt}{F73rlq&mD#wGPmU8i$tGd$bw~P}hziFEr7Zqfi^S3Q^W*GJ_PY(^X|YmVWYuJjSM`zcKX2VKgl>3c2#H z*~1);0Rk{AOQxiQqT*$Pd!%s!TAP^u9eUT(4MGfU2huW$oqPEiOHtl|03B;j*l?#R z%Vh6Nv#JGAr8TX3_+X8;R#{b+G7nh{OcQTp ztwBl?uHCZG)2IXMF%7hH%NKUcdJ(`bx_V(>)AzD1xJ3m{*PVQ#oOK7XpyM6Q!!%Gp zPU%E@LXXD$2c zk8fNtf;0TmOycI>B(Ms$_P~-<3W9ZFPZLwa3hk}nj?_hN&9Eq4r%IaClZ;vAF=J zlv`|vT&j%{F+8B$#@D#8ws)i4%NUL{rnCfXN&!;Z(0p-ga#l%|az`k(cbMjoqfFcG zxPFZJj6uj-ta>)))3$k0s5v13$jxod8#*F^} zgjcQ`TU0%jsr#`6`7f(MI0K3Kb<3v-RXN`% zmc~0d4!b&&+{?|`r?~vdVUno&ESOvaVa2Eo0MUAJCk*WFN%IWA#F7Z@ z?a7W9$IBXecA8hWw+gvB@_f2!^O&uql&n%(+9KC`Pa=_3rlN~eUra5^@;tuLgXdSa z@#+t7muT`H+JH?7@x#N7v~&yr*)H-H(#%{7*qZ2af|H#s${dyL{88WM_b}e(1$Tuy#;4=+95rous%t#0ExC6mirUdncG9s>9nSzs;&eQ8 z@WMQ=nsVH#?B|)`i!;BsB1=mab$Aj%#jZGp0=ghPM!lGdzIpeOQci?$1Zr2ne7q;E zm}RmSv8`PGk^cbXetR~@hcSDFo%2jBZ)yNy)u#2~MH*Mo8ex}t%~o8yZt-R4 z&v4^tAdd09NYoDuH@SB6bfJgyN=ZWwX4p2%`*

?wflL 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°qztSJ?Kb{t^`Ulqzw;G5rE2^Xv2uv-s(K45B zDbVo^(ucE#5nr%^1+;ngtaJfL1d>f?I*;3p*#7{h2e0qI?qUA`T>k*`tNSo>?h@3D zvu8uZ*9c3MIhfdIb{B33(pv_CPaq(yjanM%Kt+BeU?;g517tbOdA?qSVW0kDBT4{H ztd!~D;6^iN{{Y(CfA=@%hZnft{x4bo0JVSm914NnvF6$d@We?qDA7vVg<;!3d~=6+ zLe>oPlrre90vl0 zb_U!ODIfvir{9D>_t(&VSRrlK{*T*&iSy$jf&gNpZBM*e8g1I79Z$f4`!U$=JLRBL zv0Nx4g-`iobMTM<0Gs`T5n24d^qf6QIY{=|O-hVa1aa9tT|j3BpaM^U#{pRsssKVA z%+%M955MllZa?>n{`CB@^dB_;0PJjeO42ALkl0t4&zOnWcc5)v9lUfOem5g55!^#E ziI!NN-eAJ2%F9k38WG|vi0!za_OIuONBWcckINO*Q$JScSIjkc$5zzA{&`)N<# zj4uTL0Dcue%)kAU{{W)FLpT*PG71>#qA@^dKnLMWDY9SDm02mbq3UarKP02)H7o4mEtN)h?>#DnKw_Z(&p5`2Fw zT^K6~bQ4s>;Hcby>e|;`1}9TdPKawm`!ND=lhgK$O$Ywm`u_YDlZ>jN z4_{1f>3g-0yO2B0xG+(o9CGvU`iw|ELGk^V=H8f-fQg)_07t7+iQ*153xT7t0M~U+ zB2F@YyY}O=eCO0*DmccVRL;vIJNZxmnkgO{W8%e?9GWVs)`waipO!l>%kUqwA1}y% zzJngeIdEzwq+#A~+Ejx=2Tu%2tsG>Vgak+`Ka0>}JAd{60P8=NKDqw@UN2lNUQ?(> zfvW=+(OJoaX~j6@l#7iprY;5F9@Y(MOOzxE7wp1=ES Tf7m}Eik$l)Bx!1cVW0omaL;A^ literal 0 HcmV?d00001 diff --git a/src/components/ArchivePanel.svelte b/src/components/ArchivePanel.svelte new file mode 100644 index 0000000..22939c2 --- /dev/null +++ b/src/components/ArchivePanel.svelte @@ -0,0 +1,151 @@ + + +

diff --git a/src/components/ConfigCarrier.astro b/src/components/ConfigCarrier.astro new file mode 100644 index 0000000..68b3dde --- /dev/null +++ b/src/components/ConfigCarrier.astro @@ -0,0 +1,7 @@ +--- + +import { siteConfig } from "../config"; +--- + +
+
diff --git a/src/components/Footer.astro b/src/components/Footer.astro new file mode 100644 index 0000000..fe39b38 --- /dev/null +++ b/src/components/Footer.astro @@ -0,0 +1,21 @@ +--- + +import { profileConfig } from "../config"; +import { url } from "../utils/url-utils"; + +const currentYear = new Date().getFullYear(); +--- + + +
+ +
+
+ © {currentYear} {profileConfig.name}. All Rights Reserved. / + RSS / + Sitemap
+ Powered by + Astro & + Fuwari +
+
\ No newline at end of file diff --git a/src/components/GlobalStyles.astro b/src/components/GlobalStyles.astro new file mode 100644 index 0000000..853d812 --- /dev/null +++ b/src/components/GlobalStyles.astro @@ -0,0 +1,3 @@ +--- + +--- diff --git a/src/components/LightDarkSwitch.svelte b/src/components/LightDarkSwitch.svelte new file mode 100644 index 0000000..c200bd6 --- /dev/null +++ b/src/components/LightDarkSwitch.svelte @@ -0,0 +1,99 @@ + + + + diff --git a/src/components/Navbar.astro b/src/components/Navbar.astro new file mode 100644 index 0000000..9fe6144 --- /dev/null +++ b/src/components/Navbar.astro @@ -0,0 +1,141 @@ +--- +import { Icon } from "astro-icon/components"; +import { navBarConfig, siteConfig } from "../config"; +import { LinkPresets } from "../constants/link-presets"; +import { LinkPreset, type NavBarLink } from "../types/config"; +import { url } from "../utils/url-utils"; +import LightDarkSwitch from "./LightDarkSwitch.svelte"; +import Search from "./Search.svelte"; +import DisplaySettings from "./widget/DisplaySettings.svelte"; +import NavMenuPanel from "./widget/NavMenuPanel.astro"; + +const className = Astro.props.class; + +let links: NavBarLink[] = navBarConfig.links.map( + (item: NavBarLink | LinkPreset): NavBarLink => { + if (typeof item === "number") { + return LinkPresets[item]; + } + return item; + }, +); +--- + + + + +{import.meta.env.PROD && } diff --git a/src/components/PostCard.astro b/src/components/PostCard.astro new file mode 100644 index 0000000..a7a7143 --- /dev/null +++ b/src/components/PostCard.astro @@ -0,0 +1,110 @@ +--- +import type { CollectionEntry } from "astro:content"; +import path from "node:path"; +import { Icon } from "astro-icon/components"; +import I18nKey from "../i18n/i18nKey"; +import { i18n } from "../i18n/translation"; +import { getDir } from "../utils/url-utils"; +import ImageWrapper from "./misc/ImageWrapper.astro"; +import PostMetadata from "./PostMeta.astro"; + +interface Props { + class?: string; + entry: CollectionEntry<"posts">; + title: string; + url: string; + published: Date; + updated?: Date; + tags: string[]; + category: string | null; + image: string; + description: string; + draft: boolean; + style: string; +} +const { + entry, + title, + url, + published, + updated, + tags, + category, + image, + description, + style, +} = Astro.props; +const className = Astro.props.class; + +const hasCover = image !== undefined && image !== null && image !== ""; + +const coverWidth = "28%"; + +const { remarkPluginFrontmatter } = await entry.render(); +--- +
+
+ + {title} + + + + + + + + +
+ { description || remarkPluginFrontmatter.excerpt } +
+ + +
+
+ {remarkPluginFrontmatter.words} {" " + i18n(remarkPluginFrontmatter.words === 1 ? I18nKey.wordCount : I18nKey.wordsCount)} +
+
|
+
+ {remarkPluginFrontmatter.minutes} {" " + i18n(remarkPluginFrontmatter.minutes === 1 ? I18nKey.minuteCount : I18nKey.minutesCount)} +
+
+ +
+ + {hasCover && +
+
+ + +
+ + +
} + + {!hasCover && + + + + + } +
+
+ + diff --git a/src/components/PostMeta.astro b/src/components/PostMeta.astro new file mode 100644 index 0000000..488e85e --- /dev/null +++ b/src/components/PostMeta.astro @@ -0,0 +1,82 @@ +--- +import { Icon } from "astro-icon/components"; +import I18nKey from "../i18n/i18nKey"; +import { i18n } from "../i18n/translation"; +import { formatDateToYYYYMMDD } from "../utils/date-utils"; +import { getCategoryUrl, getTagUrl } from "../utils/url-utils"; + +interface Props { + class: string; + published: Date; + updated?: Date; + tags: string[]; + category: string | null; + hideTagsForMobile?: boolean; + hideUpdateDate?: boolean; +} +const { + published, + updated, + tags, + category, + hideTagsForMobile = false, + hideUpdateDate = false, +} = Astro.props; +const className = Astro.props.class; +--- + +
+ +
+
+ +
+ {formatDateToYYYYMMDD(published)} +
+ + + {!hideUpdateDate && updated && updated.getTime() !== published.getTime() && ( +
+
+ +
+ {formatDateToYYYYMMDD(updated)} +
+ )} + + + + + +
+
+ +
+
+ {(tags && tags.length > 0) && tags.map((tag, i) => ( +
/
+ + {tag.trim()} + + ))} + {!(tags && tags.length > 0) &&
{i18n(I18nKey.noTags)}
} +
+
+
\ No newline at end of file diff --git a/src/components/PostPage.astro b/src/components/PostPage.astro new file mode 100644 index 0000000..4e46ed4 --- /dev/null +++ b/src/components/PostPage.astro @@ -0,0 +1,28 @@ +--- +import type { CollectionEntry } from "astro:content"; +import { getPostUrlBySlug } from "@utils/url-utils"; +import PostCard from "./PostCard.astro"; + +const { page } = Astro.props; + +let delay = 0; +const interval = 50; +--- +
+ {page.data.map((entry: CollectionEntry<"posts">) => ( + + ))} +
\ No newline at end of file diff --git a/src/components/Search.svelte b/src/components/Search.svelte new file mode 100644 index 0000000..9b114b9 --- /dev/null +++ b/src/components/Search.svelte @@ -0,0 +1,198 @@ + + + + + + + + + +
+ + +
+ + +
+ + + {#each result as item} + +
+ {item.meta.title} +
+
+ {@html item.excerpt} +
+
+ {/each} +
+ + diff --git a/src/components/control/BackToTop.astro b/src/components/control/BackToTop.astro new file mode 100644 index 0000000..0a93af4 --- /dev/null +++ b/src/components/control/BackToTop.astro @@ -0,0 +1,49 @@ +--- +import { Icon } from "astro-icon/components"; +--- + + + + + + + diff --git a/src/components/control/ButtonLink.astro b/src/components/control/ButtonLink.astro new file mode 100644 index 0000000..6977512 --- /dev/null +++ b/src/components/control/ButtonLink.astro @@ -0,0 +1,43 @@ +--- +interface Props { + badge?: string; + url?: string; + label?: string; +} +const { badge, url, label } = Astro.props; +--- + + + diff --git a/src/components/control/ButtonTag.astro b/src/components/control/ButtonTag.astro new file mode 100644 index 0000000..3af7533 --- /dev/null +++ b/src/components/control/ButtonTag.astro @@ -0,0 +1,13 @@ +--- +interface Props { + size?: string; + dot?: boolean; + href?: string; + label?: string; +} +const { dot, href, label }: Props = Astro.props; +--- + + {dot &&
} + +
diff --git a/src/components/control/Pagination.astro b/src/components/control/Pagination.astro new file mode 100644 index 0000000..6afb544 --- /dev/null +++ b/src/components/control/Pagination.astro @@ -0,0 +1,84 @@ +--- +import type { Page } from "astro"; +import { Icon } from "astro-icon/components"; +import { url } from "../../utils/url-utils"; + +interface Props { + page: Page; + class?: string; + style?: string; +} + +const { page, style } = Astro.props; + +const HIDDEN = -1; + +const className = Astro.props.class; + +const ADJ_DIST = 2; +const VISIBLE = ADJ_DIST * 2 + 1; + +// for test +let count = 1; +let l = page.currentPage; +let r = page.currentPage; +while (0 < l - 1 && r + 1 <= page.lastPage && count + 2 <= VISIBLE) { + count += 2; + l--; + r++; +} +while (0 < l - 1 && count < VISIBLE) { + count++; + l--; +} +while (r + 1 <= page.lastPage && count < VISIBLE) { + count++; + r++; +} + +let pages: number[] = []; +if (l > 1) pages.push(1); +if (l === 3) pages.push(2); +if (l > 3) pages.push(HIDDEN); +for (let i = l; i <= r; i++) pages.push(i); +if (r < page.lastPage - 2) pages.push(HIDDEN); +if (r === page.lastPage - 2) pages.push(page.lastPage - 1); +if (r < page.lastPage) pages.push(page.lastPage); + +const getPageUrl = (p: number) => { + if (p === 1) return "/"; + return `/${p}/`; +}; +--- + +
+ + + +
+ {pages.map((p) => { + if (p == HIDDEN) + return ; + if (p == page.currentPage) + return
+ {p} +
+ return {p} + })} +
+ + + +
\ No newline at end of file diff --git a/src/components/misc/ImageWrapper.astro b/src/components/misc/ImageWrapper.astro new file mode 100644 index 0000000..1d3487b --- /dev/null +++ b/src/components/misc/ImageWrapper.astro @@ -0,0 +1,54 @@ +--- +import path from "node:path"; + +interface Props { + id?: string; + src: string; + class?: string; + alt?: string; + position?: string; + basePath?: string; +} + +import { Image } from "astro:assets"; +import { url } from "../../utils/url-utils"; + +const { id, src, alt, position = "center", basePath = "/" } = Astro.props; +const className = Astro.props.class; + +const isLocal = !( + src.startsWith("/") || + src.startsWith("http") || + src.startsWith("https") || + src.startsWith("data:") +); +const isPublic = src.startsWith("/"); + +// TODO temporary workaround for images dynamic import +// https://github.com/withastro/astro/issues/3373 +// biome-ignore lint/suspicious/noImplicitAnyLet: +let img; +if (isLocal) { + const files = import.meta.glob("../../**", { + import: "default", + }); + let normalizedPath = path + .normalize(path.join("../../", basePath, src)) + .replace(/\\/g, "/"); + const file = files[normalizedPath]; + if (!file) { + console.error( + `\n[ERROR] Image file not found: ${normalizedPath.replace("../../", "src/")}`, + ); + } + img = await file(); +} + +const imageClass = "w-full h-full object-cover"; +const imageStyle = `object-position: ${position}`; +--- +
+
+ {isLocal && img && {alt} + {!isLocal && {alt} +
diff --git a/src/components/misc/License.astro b/src/components/misc/License.astro new file mode 100644 index 0000000..52b4742 --- /dev/null +++ b/src/components/misc/License.astro @@ -0,0 +1,43 @@ +--- +import { Icon } from "astro-icon/components"; +import { licenseConfig, profileConfig } from "../../config"; +import I18nKey from "../../i18n/i18nKey"; +import { i18n } from "../../i18n/translation"; +import { formatDateToYYYYMMDD } from "../../utils/date-utils"; + +interface Props { + title: string; + slug: string; + pubDate: Date; + class: string; +} + +const { title, pubDate } = Astro.props; +const className = Astro.props.class; +const profileConf = profileConfig; +const licenseConf = licenseConfig; +const postUrl = decodeURIComponent(Astro.url.toString()); +--- +
+
+ {title} +
+ + {postUrl} + +
+
+
{i18n(I18nKey.author)}
+
{profileConf.name}
+
+
+
{i18n(I18nKey.publishedAt)}
+
{formatDateToYYYYMMDD(pubDate)}
+
+
+
{i18n(I18nKey.license)}
+ {licenseConf.name} +
+
+ +
diff --git a/src/components/misc/Markdown.astro b/src/components/misc/Markdown.astro new file mode 100644 index 0000000..33415d0 --- /dev/null +++ b/src/components/misc/Markdown.astro @@ -0,0 +1,43 @@ +--- +import "@fontsource-variable/jetbrains-mono"; +import "@fontsource-variable/jetbrains-mono/wght-italic.css"; + +interface Props { + class: string; +} +const className = Astro.props.class; +--- +
+ + + +
+ + diff --git a/src/components/widget/Categories.astro b/src/components/widget/Categories.astro new file mode 100644 index 0000000..b44e9da --- /dev/null +++ b/src/components/widget/Categories.astro @@ -0,0 +1,35 @@ +--- +import I18nKey from "../../i18n/i18nKey"; +import { i18n } from "../../i18n/translation"; +import { getCategoryList } from "../../utils/content-utils"; +import ButtonLink from "../control/ButtonLink.astro"; +import WidgetLayout from "./WidgetLayout.astro"; + +const categories = await getCategoryList(); + +const COLLAPSED_HEIGHT = "7.5rem"; +const COLLAPSE_THRESHOLD = 5; + +const isCollapsed = categories.length >= COLLAPSE_THRESHOLD; + +interface Props { + class?: string; + style?: string; +} +const className = Astro.props.class; +const style = Astro.props.style; +--- + + + {categories.map((c) => + + {c.name.trim()} + + )} + \ No newline at end of file diff --git a/src/components/widget/DisplaySettings.svelte b/src/components/widget/DisplaySettings.svelte new file mode 100644 index 0000000..886b661 --- /dev/null +++ b/src/components/widget/DisplaySettings.svelte @@ -0,0 +1,93 @@ + + +
+
+
+ {i18n(I18nKey.themeColor)} + +
+
+
+ {hue} +
+
+
+
+ +
+
+ + + diff --git a/src/components/widget/NavMenuPanel.astro b/src/components/widget/NavMenuPanel.astro new file mode 100644 index 0000000..cf141e3 --- /dev/null +++ b/src/components/widget/NavMenuPanel.astro @@ -0,0 +1,32 @@ +--- +import { Icon } from "astro-icon/components"; +import { type NavBarLink } from "../../types/config"; +import { url } from "../../utils/url-utils"; + +interface Props { + links: NavBarLink[]; +} + +const links = Astro.props.links; +--- + diff --git a/src/components/widget/Profile.astro b/src/components/widget/Profile.astro new file mode 100644 index 0000000..22eddca --- /dev/null +++ b/src/components/widget/Profile.astro @@ -0,0 +1,39 @@ +--- +import { Icon } from "astro-icon/components"; +import { profileConfig } from "../../config"; +import { url } from "../../utils/url-utils"; +import ImageWrapper from "../misc/ImageWrapper.astro"; + +const config = profileConfig; +--- +
+ +
+ + +
+ +
+
+
{config.name}
+
+
{config.bio}
+
+ {config.links.length > 1 && config.links.map(item => + + + + )} + {config.links.length == 1 && + + {config.links[0].name} + } +
+
+
+ diff --git a/src/components/widget/SideBar.astro b/src/components/widget/SideBar.astro new file mode 100644 index 0000000..f3bafc2 --- /dev/null +++ b/src/components/widget/SideBar.astro @@ -0,0 +1,22 @@ +--- +import type { MarkdownHeading } from "astro"; +import Categories from "./Categories.astro"; +import Profile from "./Profile.astro"; +import Tag from "./Tags.astro"; + +interface Props { + class?: string; + headings?: MarkdownHeading[]; +} + +const className = Astro.props.class; +--- + diff --git a/src/components/widget/TOC.astro b/src/components/widget/TOC.astro new file mode 100644 index 0000000..6cb2fab --- /dev/null +++ b/src/components/widget/TOC.astro @@ -0,0 +1,268 @@ +--- +import type { MarkdownHeading } from "astro"; +import { siteConfig } from "../../config"; +import { url } from "../../utils/url-utils"; + +interface Props { + class?: string; + headings: MarkdownHeading[]; +} + +let { headings = [] } = Astro.props; + +let minDepth = 10; +for (const heading of headings) { + minDepth = Math.min(minDepth, heading.depth); +} + +const className = Astro.props.class; +const isPostsRoute = Astro.url.pathname.startsWith(url("/posts/")); + +const removeTailingHash = (text: string) => { + let lastIndexOfHash = text.lastIndexOf("#"); + if (lastIndexOfHash !== text.length - 1) { + return text; + } + + return text.substring(0, lastIndexOfHash); +}; + +let heading1Count = 1; + +const maxLevel = siteConfig.toc.depth; +--- +{isPostsRoute && + + {headings.filter((heading) => heading.depth < minDepth + maxLevel).map((heading) => + +
+ {heading.depth == minDepth && heading1Count++} + {heading.depth == minDepth + 1 &&
} + {heading.depth == minDepth + 2 &&
} +
+
{removeTailingHash(heading.text)}
+
+ )} +
+
} + + \ No newline at end of file diff --git a/src/components/widget/Tags.astro b/src/components/widget/Tags.astro new file mode 100644 index 0000000..5ed0b62 --- /dev/null +++ b/src/components/widget/Tags.astro @@ -0,0 +1,31 @@ +--- + +import I18nKey from "../../i18n/i18nKey"; +import { i18n } from "../../i18n/translation"; +import { getTagList } from "../../utils/content-utils"; +import { getTagUrl } from "../../utils/url-utils"; +import ButtonTag from "../control/ButtonTag.astro"; +import WidgetLayout from "./WidgetLayout.astro"; + +const tags = await getTagList(); + +const COLLAPSED_HEIGHT = "7.5rem"; + +const isCollapsed = tags.length >= 20; + +interface Props { + class?: string; + style?: string; +} +const className = Astro.props.class; +const style = Astro.props.style; +--- + +
+ {tags.map(t => ( + + {t.name.trim()} + + ))} +
+
\ No newline at end of file diff --git a/src/components/widget/WidgetLayout.astro b/src/components/widget/WidgetLayout.astro new file mode 100644 index 0000000..870dcfb --- /dev/null +++ b/src/components/widget/WidgetLayout.astro @@ -0,0 +1,60 @@ +--- +import { Icon } from "astro-icon/components"; +import I18nKey from "../../i18n/i18nKey"; +import { i18n } from "../../i18n/translation"; + +interface Props { + id: string; + name?: string; + isCollapsed?: boolean; + collapsedHeight?: string; + class?: string; + style?: string; +} +const { id, name, isCollapsed, collapsedHeight, style } = Astro.props; +const className = Astro.props.class; +--- + +
{name}
+
+ +
+ {isCollapsed &&
+ +
} +
+ + + + diff --git a/src/config.ts b/src/config.ts new file mode 100644 index 0000000..c7b2d11 --- /dev/null +++ b/src/config.ts @@ -0,0 +1,90 @@ +import type { + ExpressiveCodeConfig, + LicenseConfig, + NavBarConfig, + ProfileConfig, + SiteConfig, +} from "./types/config"; +import { LinkPreset } from "./types/config"; + +export const siteConfig: SiteConfig = { + title: "Fuwari", + subtitle: "Demo Site", + lang: "en", // Language code, e.g. 'en', 'zh_CN', 'ja', etc. + themeColor: { + hue: 250, // Default hue for the theme color, from 0 to 360. e.g. red: 0, teal: 200, cyan: 250, pink: 345 + fixed: false, // Hide the theme color picker for visitors + }, + banner: { + enable: false, + src: "assets/images/demo-banner.png", // Relative to the /src directory. Relative to the /public directory if it starts with '/' + position: "center", // Equivalent to object-position, only supports 'top', 'center', 'bottom'. 'center' by default + credit: { + enable: false, // Display the credit text of the banner image + text: "", // Credit text to be displayed + url: "", // (Optional) URL link to the original artwork or artist's page + }, + }, + toc: { + enable: true, // Display the table of contents on the right side of the post + depth: 2, // Maximum heading depth to show in the table, from 1 to 3 + }, + favicon: [ + // Leave this array empty to use the default favicon + // { + // src: '/favicon/icon.png', // Path of the favicon, relative to the /public directory + // theme: 'light', // (Optional) Either 'light' or 'dark', set only if you have different favicons for light and dark mode + // sizes: '32x32', // (Optional) Size of the favicon, set only if you have favicons of different sizes + // } + ], +}; + +export const navBarConfig: NavBarConfig = { + links: [ + LinkPreset.Home, + LinkPreset.Archive, + LinkPreset.About, + { + name: "GitHub", + url: "https://github.com/saicaca/fuwari", // Internal links should not include the base path, as it is automatically added + external: true, // Show an external link icon and will open in a new tab + }, + ], +}; + +export const profileConfig: ProfileConfig = { + avatar: "assets/images/demo-avatar.png", // Relative to the /src directory. Relative to the /public directory if it starts with '/' + name: "Lorem Ipsum", + bio: "Lorem ipsum dolor sit amet, consectetur adipiscing elit.", + links: [ + { + name: "Twitter", + icon: "fa6-brands:twitter", // Visit https://icones.js.org/ for icon codes + // You will need to install the corresponding icon set if it's not already included + // `pnpm add @iconify-json/` + url: "https://twitter.com", + }, + { + name: "Steam", + icon: "fa6-brands:steam", + url: "https://store.steampowered.com", + }, + { + name: "GitHub", + icon: "fa6-brands:github", + url: "https://github.com/saicaca/fuwari", + }, + ], +}; + +export const licenseConfig: LicenseConfig = { + enable: true, + name: "CC BY-NC-SA 4.0", + url: "https://creativecommons.org/licenses/by-nc-sa/4.0/", +}; + +export const expressiveCodeConfig: ExpressiveCodeConfig = { + // Note: Some styles (such as background color) are being overridden, see the astro.config.mjs file. + // Please select a dark theme, as this blog theme currently only supports dark background color + theme: "github-dark", +}; diff --git a/src/constants/constants.ts b/src/constants/constants.ts new file mode 100644 index 0000000..896150d --- /dev/null +++ b/src/constants/constants.ts @@ -0,0 +1,17 @@ +export const PAGE_SIZE = 8; + +export const LIGHT_MODE = "light", + DARK_MODE = "dark", + AUTO_MODE = "auto"; +export const DEFAULT_THEME = AUTO_MODE; + +// Banner height unit: vh +export const BANNER_HEIGHT = 35; +export const BANNER_HEIGHT_EXTEND = 30; +export const BANNER_HEIGHT_HOME = BANNER_HEIGHT + BANNER_HEIGHT_EXTEND; + +// The height the main panel overlaps the banner, unit: rem +export const MAIN_PANEL_OVERLAPS_BANNER_HEIGHT = 3.5; + +// Page width: rem +export const PAGE_WIDTH = 75; diff --git a/src/constants/icon.ts b/src/constants/icon.ts new file mode 100644 index 0000000..f03efba --- /dev/null +++ b/src/constants/icon.ts @@ -0,0 +1,44 @@ +import type { Favicon } from "@/types/config.ts"; + +export const defaultFavicons: Favicon[] = [ + { + src: "/favicon/favicon-light-32.png", + theme: "light", + sizes: "32x32", + }, + { + src: "/favicon/favicon-light-128.png", + theme: "light", + sizes: "128x128", + }, + { + src: "/favicon/favicon-light-180.png", + theme: "light", + sizes: "180x180", + }, + { + src: "/favicon/favicon-light-192.png", + theme: "light", + sizes: "192x192", + }, + { + src: "/favicon/favicon-dark-32.png", + theme: "dark", + sizes: "32x32", + }, + { + src: "/favicon/favicon-dark-128.png", + theme: "dark", + sizes: "128x128", + }, + { + src: "/favicon/favicon-dark-180.png", + theme: "dark", + sizes: "180x180", + }, + { + src: "/favicon/favicon-dark-192.png", + theme: "dark", + sizes: "192x192", + }, +]; diff --git a/src/constants/link-presets.ts b/src/constants/link-presets.ts new file mode 100644 index 0000000..bb7db5d --- /dev/null +++ b/src/constants/link-presets.ts @@ -0,0 +1,18 @@ +import I18nKey from "@i18n/i18nKey"; +import { i18n } from "@i18n/translation"; +import { LinkPreset, type NavBarLink } from "@/types/config"; + +export const LinkPresets: { [key in LinkPreset]: NavBarLink } = { + [LinkPreset.Home]: { + name: i18n(I18nKey.home), + url: "/", + }, + [LinkPreset.About]: { + name: i18n(I18nKey.about), + url: "/about/", + }, + [LinkPreset.Archive]: { + name: i18n(I18nKey.archive), + url: "/archive/", + }, +}; diff --git a/src/content/.obsidian/app.json b/src/content/.obsidian/app.json new file mode 100644 index 0000000..ddece05 --- /dev/null +++ b/src/content/.obsidian/app.json @@ -0,0 +1,44 @@ +{ + "showInlineTitle": false, + "promptDelete": true, + "showIndentGuide": false, + "attachmentFolderPath": "./attachments", + "userIgnoreFilters": null, + "focusNewTab": false, + "mobilePullAction": "command-palette:open", + "trashOption": "system", + "alwaysUpdateLinks": true, + "useMarkdownLinks": true, + "mobileToolbarCommands": [ + "editor:undo", + "editor:redo", + "editor:insert-wikilink", + "editor:insert-embed", + "editor:insert-tag", + "editor:attach-file", + "editor:set-heading", + "editor:toggle-bold", + "editor:toggle-italics", + "editor:toggle-strikethrough", + "editor:toggle-highlight", + "editor:toggle-code", + "editor:toggle-blockquote", + "editor:insert-link", + "editor:toggle-bullet-list", + "editor:toggle-numbered-list", + "editor:toggle-checklist-status", + "editor:indent-list", + "editor:unindent-list", + "astro-composer:standardize-properties", + "astro-composer:convert-wikilinks-astro", + "seo:seo-run-current", + "editor:configure-toolbar" + ], + "newFileLocation": "root", + "newFileFolderPath": "", + "newLinkFormat": "relative", + "mobileQuickRibbonItem": "", + "vimMode": false, + "readableLineLength": true, + "defaultViewMode": "source" +} \ No newline at end of file diff --git a/src/content/.obsidian/appearance.json b/src/content/.obsidian/appearance.json new file mode 100644 index 0000000..fa82656 --- /dev/null +++ b/src/content/.obsidian/appearance.json @@ -0,0 +1,10 @@ +{ + "cssTheme": "Oxygen", + "showViewHeader": true, + "showRibbon": false, + "enabledCssSnippets": [ + "astro-modular-styling" + ], + "theme": "system", + "accentColor": "" +} \ No newline at end of file diff --git a/src/content/.obsidian/backlink.json b/src/content/.obsidian/backlink.json new file mode 100644 index 0000000..48ee913 --- /dev/null +++ b/src/content/.obsidian/backlink.json @@ -0,0 +1,3 @@ +{ + "backlinkInDocument": true +} \ No newline at end of file diff --git a/src/content/.obsidian/bookmarks.json b/src/content/.obsidian/bookmarks.json new file mode 100644 index 0000000..c3ef621 --- /dev/null +++ b/src/content/.obsidian/bookmarks.json @@ -0,0 +1,10 @@ +{ + "items": [ + { + "type": "file", + "ctime": 1755331588238, + "path": "_formatting-reference.md", + "title": "Formatting Reference" + } + ] +} \ No newline at end of file diff --git a/src/content/.obsidian/community-plugins.json b/src/content/.obsidian/community-plugins.json new file mode 100644 index 0000000..4364ad4 --- /dev/null +++ b/src/content/.obsidian/community-plugins.json @@ -0,0 +1,22 @@ +[ + "seo", + "property-over-file-name", + "oxygen-settings", + "vault-cms", + "astro-composer", + "settings-search", + "editing-toolbar", + "image-manager", + "bases-cms", + "home-base", + "obsidian-git", + "zenmode", + "tag-wrangler", + "explorer-focus", + "ui-tweaker", + "alias-file-name-history", + "obsidian42-brat", + "omnisearch", + "data-files-editor", + "file-name-history" +] \ No newline at end of file diff --git a/src/content/.obsidian/core-plugins.json b/src/content/.obsidian/core-plugins.json new file mode 100644 index 0000000..16e2a61 --- /dev/null +++ b/src/content/.obsidian/core-plugins.json @@ -0,0 +1,33 @@ +{ + "file-explorer": true, + "global-search": true, + "switcher": true, + "graph": false, + "backlink": false, + "canvas": false, + "outgoing-link": false, + "tag-pane": true, + "footnotes": false, + "properties": false, + "page-preview": false, + "daily-notes": false, + "templates": false, + "note-composer": false, + "command-palette": true, + "slash-command": true, + "editor-status": true, + "bookmarks": true, + "markdown-importer": false, + "zk-prefixer": false, + "random-note": false, + "outline": true, + "word-count": true, + "slides": false, + "audio-recorder": false, + "workspaces": false, + "file-recovery": true, + "publish": false, + "sync": false, + "bases": true, + "webviewer": false +} \ No newline at end of file diff --git a/src/content/.obsidian/graph.json b/src/content/.obsidian/graph.json new file mode 100644 index 0000000..1fd6d8d --- /dev/null +++ b/src/content/.obsidian/graph.json @@ -0,0 +1,30 @@ +{ + "collapse-filter": true, + "search": "path:posts/", + "showTags": false, + "showAttachments": false, + "hideUnresolved": false, + "showOrphans": true, + "collapse-color-groups": true, + "colorGroups": [ + { + "query": "", + "color": { + "a": 1, + "rgb": 14701138 + } + } + ], + "collapse-display": true, + "showArrow": false, + "textFadeMultiplier": 0, + "nodeSizeMultiplier": 1, + "lineSizeMultiplier": 1, + "collapse-forces": true, + "centerStrength": 0.518713248970312, + "repelStrength": 10, + "linkStrength": 1, + "linkDistance": 250, + "scale": 1.0147822288211785, + "close": true +} \ No newline at end of file diff --git a/src/content/.obsidian/hotkeys.json b/src/content/.obsidian/hotkeys.json new file mode 100644 index 0000000..17edb10 --- /dev/null +++ b/src/content/.obsidian/hotkeys.json @@ -0,0 +1,274 @@ +{ + "app:go-back": [ + { + "modifiers": [ + "Mod", + "Alt" + ], + "key": "ArrowLeft" + }, + { + "modifiers": [ + "Alt" + ], + "key": "ArrowLeft" + } + ], + "app:go-forward": [ + { + "modifiers": [ + "Mod", + "Alt" + ], + "key": "ArrowRight" + }, + { + "modifiers": [ + "Alt" + ], + "key": "ArrowRight" + } + ], + "homepage:open-homepage": [ + { + "modifiers": [ + "Mod" + ], + "key": "M" + } + ], + "app:toggle-left-sidebar": [ + { + "modifiers": [ + "Alt", + "Mod" + ], + "key": "Z" + } + ], + "app:toggle-right-sidebar": [ + { + "modifiers": [ + "Alt", + "Mod" + ], + "key": "X" + } + ], + "obsidian-git:push": [ + { + "modifiers": [ + "Mod", + "Shift" + ], + "key": "S" + } + ], + "insert-unsplash-image:insert": [ + { + "modifiers": [ + "Mod" + ], + "key": "'" + } + ], + "custom-save:save": [], + "editor:insert-callout": [ + { + "modifiers": [ + "Mod", + "Shift" + ], + "key": "C" + } + ], + "astro-composer:rename-note": [ + { + "modifiers": [ + "Mod" + ], + "key": "R" + } + ], + "astro-composer:rename-content": [ + { + "modifiers": [ + "Mod" + ], + "key": "R" + } + ], + "editor:toggle-fold-properties": [ + { + "modifiers": [ + "Alt", + "Mod" + ], + "key": "P" + } + ], + "seo:seo-open-global": [ + { + "modifiers": [ + "Mod", + "Shift" + ], + "key": "A" + } + ], + "insert-unsplash-image:insert-in-frontmatter": [ + { + "modifiers": [ + "Mod", + "Shift" + ], + "key": "'" + } + ], + "astro-modular-settings:open-settings": [ + { + "modifiers": [ + "Mod", + "Shift" + ], + "key": "," + } + ], + "seo:open-global": [ + { + "modifiers": [ + "Mod", + "Shift" + ], + "key": "A" + } + ], + "oxygen-settings:toggle-minimal-focus-mode": [ + { + "modifiers": [ + "Alt", + "Mod" + ], + "key": "F" + } + ], + "zenmode:exit-zen-mode": [], + "oxygen-settings:toggle-zen-mode": [ + { + "modifiers": [ + "Mod", + "Shift" + ], + "key": "Z" + } + ], + "oxygen-settings:toggle-tab-containers": [ + { + "modifiers": [ + "Alt", + "Mod" + ], + "key": "S" + } + ], + "app:toggle-ribbon": [ + { + "modifiers": [ + "Alt", + "Mod" + ], + "key": "A" + } + ], + "zenmode:toggle-zen-mode": [ + { + "modifiers": [ + "Mod", + "Shift" + ], + "key": "Z" + } + ], + "app:reload": [ + { + "modifiers": [ + "Mod", + "Shift" + ], + "key": "R" + } + ], + "theme:toggle-light-dark": [ + { + "modifiers": [ + "Mod", + "Shift" + ], + "key": "M" + } + ], + "astro-composer:open-project-terminal": [ + { + "modifiers": [ + "Mod", + "Shift" + ], + "key": "D" + } + ], + "editing-toolbar:workplace-fullscreen-focus": [], + "editing-toolbar:fullscreen-focus": [], + "editing-toolbar:hide-show-menu": [ + { + "modifiers": [ + "Mod", + "Shift" + ], + "key": "E" + } + ], + "astro-composer:edit-astro-config": [ + { + "modifiers": [ + "Mod", + "Shift" + ], + "key": "," + } + ], + "image-manager:search-image": [ + { + "modifiers": [ + "Mod" + ], + "key": "'" + } + ], + "image-manager:insert-remote-image-to-property": [ + { + "modifiers": [ + "Mod", + "Shift" + ], + "key": "'" + } + ], + "ui-tweaker:toggle-tab-bar": [ + { + "modifiers": [ + "Alt", + "Mod" + ], + "key": "S" + } + ], + "omnisearch:show-modal": [ + { + "modifiers": [ + "Mod", + "Shift" + ], + "key": "O" + } + ] +} \ No newline at end of file diff --git a/src/content/.obsidian/plugins/alias-file-name-history/data.json b/src/content/.obsidian/plugins/alias-file-name-history/data.json new file mode 100644 index 0000000..16a2ca2 --- /dev/null +++ b/src/content/.obsidian/plugins/alias-file-name-history/data.json @@ -0,0 +1,20 @@ +{ + "ignoreRegexes": [ + "^_", + "^Untitled$", + "^Untitled \\d+$" + ], + "timeoutSeconds": 5, + "caseSensitive": false, + "autoCreateFrontmatter": true, + "includeFolders": [], + "excludeFolders": [], + "fileExtensions": [ + "md" + ], + "trackFolderRenames": "index", + "excludePropertyName": "", + "propertyName": "", + "propertyValue": true, + "propertyExcludes": false +} \ No newline at end of file diff --git a/src/content/.obsidian/plugins/alias-file-name-history/main.js b/src/content/.obsidian/plugins/alias-file-name-history/main.js new file mode 100644 index 0000000..8d848fd --- /dev/null +++ b/src/content/.obsidian/plugins/alias-file-name-history/main.js @@ -0,0 +1,512 @@ +/* +THIS IS A GENERATED/BUNDLED FILE BY ESBUILD +if you want to view the source, please visit the github repository of this plugin +*/ + +var __create = Object.create; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __getProtoOf = Object.getPrototypeOf; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( + // If the importer is in node compatibility mode or this is not an ESM + // file that has been converted to a CommonJS file using a Babel- + // compatible transform (i.e. "__esModule" has not been set), then set + // "default" to the CommonJS "module.exports" for node compatibility. + isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, + mod +)); +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/main.ts +var main_exports = {}; +__export(main_exports, { + default: () => AliasFilenameHistoryPlugin +}); +module.exports = __toCommonJS(main_exports); +var import_obsidian4 = require("obsidian"); + +// src/settings.ts +var DEFAULT_SETTINGS = { + ignoreRegexes: ["^_", "^Untitled$", "^Untitled \\d+$"], + timeoutSeconds: 5, + caseSensitive: false, + autoCreateFrontmatter: true, + includeFolders: [], + excludeFolders: [], + fileExtensions: ["md"], + trackFolderRenames: "", + excludePropertyName: "" +}; + +// src/ui/settings-tab.ts +var import_obsidian2 = require("obsidian"); + +// src/utils/settings-compat.ts +var import_obsidian = require("obsidian"); +var Obsidian = __toESM(require("obsidian"), 1); +function createSettingsGroup(containerEl, heading, manifestId) { + if ((0, import_obsidian.requireApiVersion)("1.11.0")) { + const ObsidianTyped = Obsidian; + const SettingGroupCtor = ObsidianTyped.SettingGroup; + const group = new SettingGroupCtor(containerEl); + if (heading) { + group.setHeading(heading); + } + return { + addSetting(cb) { + group.addSetting(cb); + } + }; + } else { + if (manifestId) { + containerEl.addClass(`${manifestId}-settings-compat`); + } + const groupEl = containerEl.createDiv("setting-group"); + if (heading) { + const headingEl = groupEl.createDiv("setting-group-heading"); + headingEl.createEl("h3", { text: heading }); + } + return { + addSetting(cb) { + const setting = new import_obsidian.Setting(groupEl); + cb(setting); + } + }; + } +} + +// src/ui/settings-tab.ts +var AliasFilenameHistorySettingTab = class extends import_obsidian2.PluginSettingTab { + constructor(app, plugin) { + super(app, plugin); + this.plugin = plugin; + } + display() { + const { containerEl } = this; + containerEl.empty(); + const saveSettings = () => { + void this.plugin.saveSettings(); + }; + const generalGroup = createSettingsGroup(containerEl, void 0, "alias-file-name-history"); + generalGroup.addSetting((setting) => { + setting.setName("Timeout seconds").setDesc("Time in seconds the name must be stable before adding aliases.").addSlider( + (slider) => slider.setLimits(1, 20, 1).setValue(this.plugin.settings.timeoutSeconds).setDynamicTooltip().onChange((value) => { + this.plugin.settings.timeoutSeconds = value; + saveSettings(); + }) + ); + }); + generalGroup.addSetting((setting) => { + setting.setName("Case-sensitive uniqueness").setDesc("If enabled, treat note and Note as different aliases.").addToggle( + (toggle) => toggle.setValue(this.plugin.settings.caseSensitive).onChange((value) => { + this.plugin.settings.caseSensitive = value; + saveSettings(); + }) + ); + }); + generalGroup.addSetting((setting) => { + setting.setName("Auto-create properties").setDesc("Automatically create properties with aliases if missing.").addToggle( + (toggle) => toggle.setValue(this.plugin.settings.autoCreateFrontmatter).onChange((value) => { + this.plugin.settings.autoCreateFrontmatter = value; + saveSettings(); + }) + ); + }); + generalGroup.addSetting((setting) => { + setting.setName("File extensions").setDesc("Comma-separated list of file extensions to track.").addText( + (text) => text.setPlaceholder("md, txt").setValue(this.plugin.settings.fileExtensions.join(",")).onChange((value) => { + this.plugin.settings.fileExtensions = value.split(",").map((s) => s.trim()).filter((s) => s); + saveSettings(); + }) + ); + }); + const filteringGroup = createSettingsGroup(containerEl, "Filtering", "alias-file-name-history"); + const foldersGroup = createSettingsGroup(containerEl, "Folders", "alias-file-name-history"); + const advancedGroup = createSettingsGroup(containerEl, "Advanced", "alias-file-name-history"); + filteringGroup.addSetting((setting) => { + setting.setName("Ignore regex patterns").setDesc( + "Comma-separated regex patterns for file names or immediate parent folder names to ignore (e.g., ^_ for underscore prefixes, ^untitled$ for untitled). Leave empty to disable." + ).addText( + (text) => text.setPlaceholder("^_, ^untitled$, ^untitled \\d+$").setValue(this.plugin.settings.ignoreRegexes.join(",")).onChange((value) => { + this.plugin.settings.ignoreRegexes = value.split(",").map((s) => s.trim()).filter((s) => s); + saveSettings(); + }) + ); + }); + filteringGroup.addSetting((setting) => { + setting.setName("Exclude property name").setDesc( + "Name of a boolean property to check in files. Files with this property set to true will be excluded from tracking. Takes priority over folder filtering." + ).addText( + (text) => text.setPlaceholder("skip-rename-tracking").setValue(this.plugin.settings.excludePropertyName).onChange((value) => { + this.plugin.settings.excludePropertyName = value; + saveSettings(); + }) + ); + }); + foldersGroup.addSetting((setting) => { + setting.setName("Include folders").setDesc( + "Comma-separated list of folder paths to include. If empty, all folders are included. Use {vault} or {root} to include only files directly in the vault root (no subfolders)." + ).addText( + (text) => text.setValue(this.plugin.settings.includeFolders.join(",")).onChange((value) => { + this.plugin.settings.includeFolders = value.split(",").map((s) => s.trim()).filter((s) => s); + saveSettings(); + }) + ); + }); + foldersGroup.addSetting((setting) => { + setting.setName("Exclude folders").setDesc( + 'Comma-separated list of folder paths to exclude. Supports wildcards: use "folder/*" to exclude direct children, "folder/**" to exclude all descendants. Use {vault} or {root} to exclude files directly in the vault root.' + ).addText( + (text) => text.setValue(this.plugin.settings.excludeFolders.join(",")).onChange((value) => { + this.plugin.settings.excludeFolders = value.split(",").map((s) => s.trim()).filter((s) => s); + saveSettings(); + }) + ); + }); + advancedGroup.addSetting((setting) => { + setting.setName("Track folder renames for specific file name").setDesc( + // eslint-disable-next-line obsidianmd/ui/sentence-case + "If a markdown file matches this file name, store old immediate parent folder names as aliases when parent folders are renamed." + ).addText( + (text) => text.setPlaceholder("index").setValue(this.plugin.settings.trackFolderRenames).onChange((value) => { + this.plugin.settings.trackFolderRenames = value; + saveSettings(); + }) + ); + }); + } +}; + +// src/utils/alias-processor.ts +var import_obsidian3 = require("obsidian"); +var AliasProcessor = class { + constructor(app, settings) { + this.app = app; + this.settings = settings; + } + async processAliasesManually(path, queue) { + const file = this.app.vault.getFileByPath(path); + if (!file) { + return; + } + const regexes = []; + for (const regexStr of this.settings.ignoreRegexes) { + try { + regexes.push(new RegExp(regexStr)); + } catch (e) { + console.error(`Invalid ignore regex: ${regexStr}`, e); + } + } + const toAdd = []; + const currentBasename = file.basename; + const currentBasenameLower = currentBasename.toLowerCase(); + for (const name of queue) { + if (regexes.some((re) => re.test(name))) { + continue; + } + const nameLower = name.toLowerCase(); + if (this.settings.caseSensitive && name === currentBasename || !this.settings.caseSensitive && nameLower === currentBasenameLower) { + continue; + } + toAdd.push(name); + } + if (toAdd.length === 0) { + return; + } + let content = await this.app.vault.read(file); + const frontmatterRegex = /^---\n([\s\S]*?)\n---\n/; + const match = content.match(frontmatterRegex); + let frontmatter = {}; + let frontmatterText = ""; + let bodyContent = content; + if (match) { + frontmatterText = match[1]; + bodyContent = content.slice(match[0].length); + try { + const parsed = (0, import_obsidian3.parseYaml)(frontmatterText); + frontmatter = parsed && typeof parsed === "object" ? parsed : {}; + } catch (e) { + console.error(`Error parsing properties:`, e); + frontmatter = {}; + } + } else { + bodyContent = content; + } + let aliases = frontmatter.aliases; + if (!Array.isArray(aliases)) { + const hasFrontmatter = Object.keys(frontmatter).length > 0; + if (hasFrontmatter && !this.settings.autoCreateFrontmatter) { + return; + } + aliases = []; + } + const aliasesArray = aliases; + const existing = new Set( + this.settings.caseSensitive ? aliasesArray : aliasesArray.map((a) => a.toLowerCase()) + ); + let added = false; + for (const name of toAdd) { + const checkName = this.settings.caseSensitive ? name : name.toLowerCase(); + if (!existing.has(checkName)) { + aliasesArray.push(name); + existing.add(checkName); + added = true; + } + } + if (!added) { + return; + } + frontmatter.aliases = aliasesArray; + const newFrontmatterText = (0, import_obsidian3.stringifyYaml)(frontmatter).trim(); + const newContent = `--- +${newFrontmatterText} +--- +${bodyContent}`; + await this.app.vault.modify(file, newContent); + } + async processAliases(path, queue) { + const file = this.app.vault.getFileByPath(path); + if (!file) return; + const regexes = []; + for (const regexStr of this.settings.ignoreRegexes) { + try { + regexes.push(new RegExp(regexStr)); + } catch (e) { + console.error(`Invalid ignore regex: ${regexStr}`, e); + } + } + const toAdd = []; + const currentBasename = file.basename; + const currentBasenameLower = currentBasename.toLowerCase(); + for (const name of queue) { + if (regexes.some((re) => re.test(name))) { + continue; + } + const nameLower = name.toLowerCase(); + if (this.settings.caseSensitive && name === currentBasename || !this.settings.caseSensitive && nameLower === currentBasenameLower) { + continue; + } + toAdd.push(name); + } + if (toAdd.length === 0) { + return; + } + if (file.extension !== "md") { + await this.processAliasesManually(path, queue); + return; + } + await this.app.fileManager.processFrontMatter(file, (fm) => { + let aliases = fm.aliases; + if (!Array.isArray(aliases)) { + const hasFrontmatter = Object.keys(fm).length > 0; + if (hasFrontmatter && !this.settings.autoCreateFrontmatter) { + return; + } + aliases = []; + fm.aliases = aliases; + } + const aliasesArray = aliases; + const existing = new Set( + this.settings.caseSensitive ? aliasesArray : aliasesArray.map((a) => a.toLowerCase()) + ); + for (const name of toAdd) { + const checkName = this.settings.caseSensitive ? name : name.toLowerCase(); + if (!existing.has(checkName)) { + aliasesArray.push(name); + existing.add(checkName); + } + } + }); + } +}; + +// src/utils/path-utils.ts +function getBasename(path) { + const name = path.split("/").pop() || ""; + return name.replace(/\.[^/.]+$/, ""); +} +function getImmediateParentName(path) { + const parts = path.split("/"); + parts.pop(); + return parts.pop() || ""; +} + +// src/main.ts +var AliasFilenameHistoryPlugin = class extends import_obsidian4.Plugin { + constructor() { + super(...arguments); + this.debounceMap = /* @__PURE__ */ new Map(); + } + async onload() { + await this.loadSettings(); + this.aliasProcessor = new AliasProcessor(this.app, this.settings); + this.addSettingTab(new AliasFilenameHistorySettingTab(this.app, this)); + this.registerEvent( + this.app.vault.on("rename", (file, oldPath) => { + this.handleRename(file, oldPath); + }) + ); + } + onunload() { + for (const entry of this.debounceMap.values()) { + if (entry.timeoutId !== 0) { + window.clearTimeout(entry.timeoutId); + } + } + this.debounceMap.clear(); + } + async loadSettings() { + const loadedData = await this.loadData(); + this.settings = Object.assign({}, DEFAULT_SETTINGS, loadedData); + } + async saveSettings() { + await this.saveData(this.settings); + } + isPathInFolder(path, folder) { + if (folder.includes("{vault}") || folder.includes("{root}")) { + const resolvedFolder = folder.replace(/\{vault\}|\{root\}/g, ""); + if (resolvedFolder === "" || resolvedFolder === "/") { + const isVaultRoot = !path.includes("/"); + return isVaultRoot; + } + return path.startsWith(resolvedFolder + "/") || path === resolvedFolder; + } + return path.startsWith(folder + "/") || path === folder; + } + isPathExcluded(path, excludePattern) { + if (excludePattern.includes("{vault}") || excludePattern.includes("{root}")) { + const resolvedPattern = excludePattern.replace(/\{vault\}|\{root\}/g, ""); + if (resolvedPattern === "" || resolvedPattern === "/") { + return !path.includes("/"); + } + excludePattern = resolvedPattern; + } + if (excludePattern.endsWith("/**")) { + const baseFolder = excludePattern.slice(0, -3); + return path.startsWith(baseFolder + "/") || path === baseFolder; + } else if (excludePattern.endsWith("/*")) { + const baseFolder = excludePattern.slice(0, -2); + if (!path.startsWith(baseFolder + "/")) { + return path === baseFolder; + } + const pathAfterBase = path.slice(baseFolder.length + 1); + return pathAfterBase.includes("/"); + } + return path.startsWith(excludePattern + "/") || path === excludePattern; + } + handleRename(newFile, oldPath) { + if (!(newFile instanceof import_obsidian4.TFile)) return; + if (!this.settings.fileExtensions.includes(newFile.extension)) return; + const oldBasename = getBasename(oldPath); + const newBasename = newFile.basename; + const oldImmediateParentName = getImmediateParentName(oldPath); + const newImmediateParentName = getImmediateParentName(newFile.path); + const isNameChange = this.settings.caseSensitive ? oldBasename !== newBasename : oldBasename.toLowerCase() !== newBasename.toLowerCase(); + const isFolderChange = oldImmediateParentName !== newImmediateParentName && !isNameChange; + if (!isNameChange && !isFolderChange) { + return; + } + const path = newFile.path; + if (this.settings.excludePropertyName && this.settings.excludePropertyName.trim() !== "") { + const cache = this.app.metadataCache.getFileCache(newFile); + const frontmatter = cache == null ? void 0 : cache.frontmatter; + if (frontmatter && frontmatter[this.settings.excludePropertyName] === true) { + return; + } + } + if (this.settings.includeFolders.length > 0) { + if (!this.settings.includeFolders.some((f) => this.isPathInFolder(path, f))) { + return; + } + } + const isIndexFileForFolderRename = isFolderChange && this.settings.trackFolderRenames && this.settings.trackFolderRenames.trim() !== "" && (this.settings.caseSensitive ? newFile.basename === this.settings.trackFolderRenames : newFile.basename.toLowerCase() === this.settings.trackFolderRenames.toLowerCase()); + for (const excludePattern of this.settings.excludeFolders) { + if (this.isPathExcluded(path, excludePattern)) { + if (isIndexFileForFolderRename && excludePattern.endsWith("/*") && !excludePattern.endsWith("/**")) { + const baseFolder = excludePattern.slice(0, -2); + if (path.startsWith(baseFolder + "/")) { + const pathAfterBase = path.slice(baseFolder.length + 1); + const pathParts = pathAfterBase.split("/"); + if (pathParts.length === 2) { + continue; + } + } + } + return; + } + } + const regexes = []; + for (const regexStr of this.settings.ignoreRegexes) { + try { + regexes.push(new RegExp(regexStr)); + } catch (e) { + console.error(`Invalid ignore regex: ${regexStr}`, e); + } + } + let toQueue = null; + if (isNameChange) { + if (regexes.some((re) => re.test(oldBasename) || re.test(newBasename))) { + return; + } + toQueue = oldBasename; + } else if (isFolderChange && this.settings.trackFolderRenames && this.settings.trackFolderRenames.trim() !== "") { + const currentBasename = newFile.basename; + const matchesFilename = this.settings.caseSensitive ? currentBasename === this.settings.trackFolderRenames : currentBasename.toLowerCase() === this.settings.trackFolderRenames.toLowerCase(); + if (!matchesFilename) { + return; + } + if (oldImmediateParentName === "" || newImmediateParentName === "") { + return; + } + if (regexes.some((re) => re.test(oldImmediateParentName) || re.test(newImmediateParentName))) { + return; + } + toQueue = oldImmediateParentName; + } + if (!toQueue) return; + let existingEntry = this.debounceMap.get(newFile.path); + if (!existingEntry) { + existingEntry = this.debounceMap.get(oldPath); + if (existingEntry) { + this.debounceMap.delete(oldPath); + } + } + if (existingEntry) { + if (existingEntry.timeoutId !== 0) { + window.clearTimeout(existingEntry.timeoutId); + } + toQueue = Array.from(existingEntry.queue)[0]; + } + const entry = { + queue: /* @__PURE__ */ new Set([toQueue]), + timeoutId: 0, + currentPath: newFile.path + }; + entry.timeoutId = window.setTimeout(() => { + void (async () => { + try { + await this.aliasProcessor.processAliases(entry.currentPath, entry.queue); + } catch (error) { + console.error("Error processing aliases:", error); + } + this.debounceMap.delete(entry.currentPath); + })(); + }, this.settings.timeoutSeconds * 1e3); + this.debounceMap.set(newFile.path, entry); + } +}; +//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsic3JjL21haW4udHMiLCAic3JjL3NldHRpbmdzLnRzIiwgInNyYy91aS9zZXR0aW5ncy10YWIudHMiLCAic3JjL3V0aWxzL3NldHRpbmdzLWNvbXBhdC50cyIsICJzcmMvdXRpbHMvYWxpYXMtcHJvY2Vzc29yLnRzIiwgInNyYy91dGlscy9wYXRoLXV0aWxzLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJpbXBvcnQgeyBQbHVnaW4sIFRBYnN0cmFjdEZpbGUsIFRGaWxlIH0gZnJvbSAnb2JzaWRpYW4nO1xuaW1wb3J0IHsgQWxpYXNGaWxlbmFtZUhpc3RvcnlTZXR0aW5ncywgREVGQVVMVF9TRVRUSU5HUyB9IGZyb20gJy4vc2V0dGluZ3MnO1xuaW1wb3J0IHsgQWxpYXNGaWxlbmFtZUhpc3RvcnlTZXR0aW5nVGFiIH0gZnJvbSAnLi91aS9zZXR0aW5ncy10YWInO1xuaW1wb3J0IHsgQWxpYXNQcm9jZXNzb3IgfSBmcm9tICcuL3V0aWxzL2FsaWFzLXByb2Nlc3Nvcic7XG5pbXBvcnQgeyBnZXRCYXNlbmFtZSwgZ2V0SW1tZWRpYXRlUGFyZW50TmFtZSB9IGZyb20gJy4vdXRpbHMvcGF0aC11dGlscyc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEFsaWFzRmlsZW5hbWVIaXN0b3J5UGx1Z2luIGV4dGVuZHMgUGx1Z2luIHtcbiAgc2V0dGluZ3M6IEFsaWFzRmlsZW5hbWVIaXN0b3J5U2V0dGluZ3M7XG4gIHByaXZhdGUgZGVib3VuY2VNYXA6IE1hcDxzdHJpbmcsIHsgcXVldWU6IFNldDxzdHJpbmc+OyB0aW1lb3V0SWQ6IG51bWJlcjsgY3VycmVudFBhdGg6IHN0cmluZyB9PiA9IG5ldyBNYXAoKTtcbiAgcHJpdmF0ZSBhbGlhc1Byb2Nlc3NvcjogQWxpYXNQcm9jZXNzb3I7XG5cbiAgYXN5bmMgb25sb2FkKCkge1xuICAgIGF3YWl0IHRoaXMubG9hZFNldHRpbmdzKCk7XG4gICAgdGhpcy5hbGlhc1Byb2Nlc3NvciA9IG5ldyBBbGlhc1Byb2Nlc3Nvcih0aGlzLmFwcCwgdGhpcy5zZXR0aW5ncyk7XG4gICAgdGhpcy5hZGRTZXR0aW5nVGFiKG5ldyBBbGlhc0ZpbGVuYW1lSGlzdG9yeVNldHRpbmdUYWIodGhpcy5hcHAsIHRoaXMpKTtcbiAgICB0aGlzLnJlZ2lzdGVyRXZlbnQoXG4gICAgICB0aGlzLmFwcC52YXVsdC5vbigncmVuYW1lJywgKGZpbGU6IFRBYnN0cmFjdEZpbGUsIG9sZFBhdGg6IHN0cmluZykgPT4ge1xuICAgICAgICB0aGlzLmhhbmRsZVJlbmFtZShmaWxlLCBvbGRQYXRoKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIG9udW5sb2FkKCkge1xuICAgIC8vIENsZWFyIGFueSBwZW5kaW5nIHRpbWVvdXRzXG4gICAgZm9yIChjb25zdCBlbnRyeSBvZiB0aGlzLmRlYm91bmNlTWFwLnZhbHVlcygpKSB7XG4gICAgICBpZiAoZW50cnkudGltZW91dElkICE9PSAwKSB7XG4gICAgICAgIHdpbmRvdy5jbGVhclRpbWVvdXQoZW50cnkudGltZW91dElkKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5kZWJvdW5jZU1hcC5jbGVhcigpO1xuICB9XG5cbiAgYXN5bmMgbG9hZFNldHRpbmdzKCkge1xuICAgIGNvbnN0IGxvYWRlZERhdGEgPSAoYXdhaXQgdGhpcy5sb2FkRGF0YSgpKSBhcyBQYXJ0aWFsPEFsaWFzRmlsZW5hbWVIaXN0b3J5U2V0dGluZ3M+IHwgbnVsbDtcbiAgICB0aGlzLnNldHRpbmdzID0gT2JqZWN0LmFzc2lnbih7fSwgREVGQVVMVF9TRVRUSU5HUywgbG9hZGVkRGF0YSk7XG4gIH1cblxuICBhc3luYyBzYXZlU2V0dGluZ3MoKSB7XG4gICAgYXdhaXQgdGhpcy5zYXZlRGF0YSh0aGlzLnNldHRpbmdzKTtcbiAgfVxuXG4gIHByaXZhdGUgaXNQYXRoSW5Gb2xkZXIocGF0aDogc3RyaW5nLCBmb2xkZXI6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIC8vIEhhbmRsZSB2YXVsdCByb290IHZhcmlhYmxlXG4gICAgaWYgKGZvbGRlci5pbmNsdWRlcygne3ZhdWx0fScpIHx8IGZvbGRlci5pbmNsdWRlcygne3Jvb3R9JykpIHtcbiAgICAgIGNvbnN0IHJlc29sdmVkRm9sZGVyID0gZm9sZGVyLnJlcGxhY2UoL1xce3ZhdWx0XFx9fFxce3Jvb3RcXH0vZywgJycpO1xuICAgICAgLy8gSWYgdGhlIGZvbGRlciBpcyBqdXN0IHRoZSB2YXJpYWJsZSwgaXQgbWVhbnMgaW5jbHVkZSBvbmx5IHZhdWx0IHJvb3QgZmlsZXNcbiAgICAgIGlmIChyZXNvbHZlZEZvbGRlciA9PT0gJycgfHwgcmVzb2x2ZWRGb2xkZXIgPT09ICcvJykge1xuICAgICAgICAvLyBJbmNsdWRlIG9ubHkgZmlsZXMgZGlyZWN0bHkgaW4gdGhlIHZhdWx0IHJvb3QgKG5vIHN1YmZvbGRlcnMpXG4gICAgICAgIGNvbnN0IGlzVmF1bHRSb290ID0gIXBhdGguaW5jbHVkZXMoJy8nKTtcbiAgICAgICAgcmV0dXJuIGlzVmF1bHRSb290O1xuICAgICAgfVxuICAgICAgLy8gT3RoZXJ3aXNlLCByZXBsYWNlIHRoZSB2YXJpYWJsZSBhbmQgY2hlY2sgbm9ybWFsbHlcbiAgICAgIHJldHVybiBwYXRoLnN0YXJ0c1dpdGgocmVzb2x2ZWRGb2xkZXIgKyAnLycpIHx8IHBhdGggPT09IHJlc29sdmVkRm9sZGVyO1xuICAgIH1cbiAgICBcbiAgICAvLyBOb3JtYWwgZm9sZGVyIG1hdGNoaW5nXG4gICAgcmV0dXJuIHBhdGguc3RhcnRzV2l0aChmb2xkZXIgKyAnLycpIHx8IHBhdGggPT09IGZvbGRlcjtcbiAgfVxuXG4gIHByaXZhdGUgaXNQYXRoRXhjbHVkZWQocGF0aDogc3RyaW5nLCBleGNsdWRlUGF0dGVybjogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgLy8gSGFuZGxlIHZhdWx0IHJvb3QgdmFyaWFibGVcbiAgICBpZiAoZXhjbHVkZVBhdHRlcm4uaW5jbHVkZXMoJ3t2YXVsdH0nKSB8fCBleGNsdWRlUGF0dGVybi5pbmNsdWRlcygne3Jvb3R9JykpIHtcbiAgICAgIGNvbnN0IHJlc29sdmVkUGF0dGVybiA9IGV4Y2x1ZGVQYXR0ZXJuLnJlcGxhY2UoL1xce3ZhdWx0XFx9fFxce3Jvb3RcXH0vZywgJycpO1xuICAgICAgaWYgKHJlc29sdmVkUGF0dGVybiA9PT0gJycgfHwgcmVzb2x2ZWRQYXR0ZXJuID09PSAnLycpIHtcbiAgICAgICAgLy8gRXhjbHVkZSBvbmx5IGZpbGVzIGRpcmVjdGx5IGluIHRoZSB2YXVsdCByb290IChubyBzdWJmb2xkZXJzKVxuICAgICAgICByZXR1cm4gIXBhdGguaW5jbHVkZXMoJy8nKTtcbiAgICAgIH1cbiAgICAgIGV4Y2x1ZGVQYXR0ZXJuID0gcmVzb2x2ZWRQYXR0ZXJuO1xuICAgIH1cblxuICAgIC8vIEhhbmRsZSB3aWxkY2FyZHNcbiAgICBpZiAoZXhjbHVkZVBhdHRlcm4uZW5kc1dpdGgoJy8qKicpKSB7XG4gICAgICAvLyBSZWN1cnNpdmUgZXhjbHVzaW9uOiBkb2NzLyoqIG1hdGNoZXMgZG9jcyBhbmQgYWxsIHN1YmZvbGRlcnNcbiAgICAgIGNvbnN0IGJhc2VGb2xkZXIgPSBleGNsdWRlUGF0dGVybi5zbGljZSgwLCAtMyk7XG4gICAgICByZXR1cm4gcGF0aC5zdGFydHNXaXRoKGJhc2VGb2xkZXIgKyAnLycpIHx8IHBhdGggPT09IGJhc2VGb2xkZXI7XG4gICAgfSBlbHNlIGlmIChleGNsdWRlUGF0dGVybi5lbmRzV2l0aCgnLyonKSkge1xuICAgICAgLy8gRGlyZWN0IGNoaWxkcmVuIG9ubHk6IGRvY3MvKiBtYXRjaGVzIGRvY3Mvc3ViZm9sZGVyIGJ1dCBub3QgZG9jcy9zdWJmb2xkZXIvbmVzdGVkXG4gICAgICAvLyBTaG91bGQgZXhjbHVkZSBmaWxlcyBpbiBzdWJmb2xkZXJzLCBidXQgTk9UIGZpbGVzIGRpcmVjdGx5IGluIHRoZSBiYXNlIGZvbGRlclxuICAgICAgY29uc3QgYmFzZUZvbGRlciA9IGV4Y2x1ZGVQYXR0ZXJuLnNsaWNlKDAsIC0yKTtcbiAgICAgIGlmICghcGF0aC5zdGFydHNXaXRoKGJhc2VGb2xkZXIgKyAnLycpKSB7XG4gICAgICAgIHJldHVybiBwYXRoID09PSBiYXNlRm9sZGVyO1xuICAgICAgfVxuICAgICAgY29uc3QgcGF0aEFmdGVyQmFzZSA9IHBhdGguc2xpY2UoYmFzZUZvbGRlci5sZW5ndGggKyAxKTtcbiAgICAgIC8vIEV4Y2x1ZGUgaWYgcGF0aCBpcyBpbiBhIHN1YmZvbGRlciAoaGFzIGF0IGxlYXN0IG9uZSBzbGFzaClcbiAgICAgIC8vIERvbid0IGV4Y2x1ZGUgZmlsZXMgZGlyZWN0bHkgaW4gdGhlIGJhc2UgZm9sZGVyIChubyBzbGFzaClcbiAgICAgIHJldHVybiBwYXRoQWZ0ZXJCYXNlLmluY2x1ZGVzKCcvJyk7XG4gICAgfVxuICAgIFxuICAgIC8vIE5vcm1hbCBmb2xkZXIgbWF0Y2hpbmdcbiAgICByZXR1cm4gcGF0aC5zdGFydHNXaXRoKGV4Y2x1ZGVQYXR0ZXJuICsgJy8nKSB8fCBwYXRoID09PSBleGNsdWRlUGF0dGVybjtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlUmVuYW1lKG5ld0ZpbGU6IFRBYnN0cmFjdEZpbGUsIG9sZFBhdGg6IHN0cmluZykge1xuICAgIGlmICghKG5ld0ZpbGUgaW5zdGFuY2VvZiBURmlsZSkpIHJldHVybjtcbiAgICBpZiAoIXRoaXMuc2V0dGluZ3MuZmlsZUV4dGVuc2lvbnMuaW5jbHVkZXMobmV3RmlsZS5leHRlbnNpb24pKSByZXR1cm47XG5cbiAgICBjb25zdCBvbGRCYXNlbmFtZSA9IGdldEJhc2VuYW1lKG9sZFBhdGgpO1xuICAgIGNvbnN0IG5ld0Jhc2VuYW1lID0gbmV3RmlsZS5iYXNlbmFtZTtcbiAgICBjb25zdCBvbGRJbW1lZGlhdGVQYXJlbnROYW1lID0gZ2V0SW1tZWRpYXRlUGFyZW50TmFtZShvbGRQYXRoKTtcbiAgICBjb25zdCBuZXdJbW1lZGlhdGVQYXJlbnROYW1lID0gZ2V0SW1tZWRpYXRlUGFyZW50TmFtZShuZXdGaWxlLnBhdGgpO1xuXG4gICAgY29uc3QgaXNOYW1lQ2hhbmdlID0gdGhpcy5zZXR0aW5ncy5jYXNlU2Vuc2l0aXZlXG4gICAgICA/IG9sZEJhc2VuYW1lICE9PSBuZXdCYXNlbmFtZVxuICAgICAgOiBvbGRCYXNlbmFtZS50b0xvd2VyQ2FzZSgpICE9PSBuZXdCYXNlbmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgIGNvbnN0IGlzRm9sZGVyQ2hhbmdlID0gb2xkSW1tZWRpYXRlUGFyZW50TmFtZSAhPT0gbmV3SW1tZWRpYXRlUGFyZW50TmFtZSAmJiAhaXNOYW1lQ2hhbmdlO1xuXG4gICAgaWYgKCFpc05hbWVDaGFuZ2UgJiYgIWlzRm9sZGVyQ2hhbmdlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgcGF0aCA9IG5ld0ZpbGUucGF0aDtcbiAgICBcbiAgICAvLyBBcHBseSBmaWx0ZXJpbmcgY2hlY2tzIHRvIGJvdGggZmlsZSBuYW1lIGNoYW5nZXMgYW5kIGZvbGRlciByZW5hbWVzXG4gICAgLy8gUHJpb3JpdHk6IFByb3BlcnR5IGV4Y2x1c2lvbiAtPiBJbmNsdWRlIGZvbGRlcnMgLT4gRXhjbHVkZSBmb2xkZXJzXG4gICAgXG4gICAgLy8gMS4gQ2hlY2sgcHJvcGVydHktYmFzZWQgZXhjbHVzaW9uIGZpcnN0IChoaWdoZXN0IHByaW9yaXR5KVxuICAgIGlmICh0aGlzLnNldHRpbmdzLmV4Y2x1ZGVQcm9wZXJ0eU5hbWUgJiYgdGhpcy5zZXR0aW5ncy5leGNsdWRlUHJvcGVydHlOYW1lLnRyaW0oKSAhPT0gJycpIHtcbiAgICAgIGNvbnN0IGNhY2hlID0gdGhpcy5hcHAubWV0YWRhdGFDYWNoZS5nZXRGaWxlQ2FjaGUobmV3RmlsZSk7XG4gICAgICBjb25zdCBmcm9udG1hdHRlciA9IGNhY2hlPy5mcm9udG1hdHRlcjtcbiAgICAgIGlmIChmcm9udG1hdHRlciAmJiBmcm9udG1hdHRlclt0aGlzLnNldHRpbmdzLmV4Y2x1ZGVQcm9wZXJ0eU5hbWVdID09PSB0cnVlKSB7XG4gICAgICAgIHJldHVybjsgLy8gRXhjbHVkZSB0aGlzIGZpbGVcbiAgICAgIH1cbiAgICB9XG4gICAgXG4gICAgLy8gMi4gQ2hlY2sgaW5jbHVkZSBmb2xkZXJzIChpZiBpbmNsdWRlRm9sZGVycyBpcyBub3QgZW1wdHksIG9ubHkgaW5jbHVkZSB0aG9zZSlcbiAgICBpZiAodGhpcy5zZXR0aW5ncy5pbmNsdWRlRm9sZGVycy5sZW5ndGggPiAwKSB7XG4gICAgICBpZiAoIXRoaXMuc2V0dGluZ3MuaW5jbHVkZUZvbGRlcnMuc29tZShmID0+IHRoaXMuaXNQYXRoSW5Gb2xkZXIocGF0aCwgZikpKSB7XG4gICAgICAgIHJldHVybjsgLy8gTm90IGluIGFueSBpbmNsdWRlZCBmb2xkZXJcbiAgICAgIH1cbiAgICB9XG4gICAgXG4gICAgLy8gMy4gQ2hlY2sgZXhjbHVkZSBmb2xkZXJzICh3aXRoIHdpbGRjYXJkIHN1cHBvcnQpXG4gICAgLy8gU3BlY2lhbCBjYXNlOiBpZiB0cmFja2luZyBmb2xkZXIgcmVuYW1lcyBmb3IgYSBzcGVjaWZpYyBmaWxlIG5hbWUsIGFsbG93IGl0IGV2ZW4gaW4gZXhjbHVkZWQgc3ViZm9sZGVyc1xuICAgIC8vIHVubGVzcyB1c2luZyByZWN1cnNpdmUgZXhjbHVzaW9uICgqKikgb3IgdGhlIGZpbGUgaXMgbmVzdGVkIGRlZXBlciB0aGFuIG9uZSBsZXZlbFxuICAgIGNvbnN0IGlzSW5kZXhGaWxlRm9yRm9sZGVyUmVuYW1lID0gaXNGb2xkZXJDaGFuZ2UgJiYgXG4gICAgICB0aGlzLnNldHRpbmdzLnRyYWNrRm9sZGVyUmVuYW1lcyAmJiBcbiAgICAgIHRoaXMuc2V0dGluZ3MudHJhY2tGb2xkZXJSZW5hbWVzLnRyaW0oKSAhPT0gJycgJiZcbiAgICAgICh0aGlzLnNldHRpbmdzLmNhc2VTZW5zaXRpdmUgXG4gICAgICAgID8gbmV3RmlsZS5iYXNlbmFtZSA9PT0gdGhpcy5zZXR0aW5ncy50cmFja0ZvbGRlclJlbmFtZXNcbiAgICAgICAgOiBuZXdGaWxlLmJhc2VuYW1lLnRvTG93ZXJDYXNlKCkgPT09IHRoaXMuc2V0dGluZ3MudHJhY2tGb2xkZXJSZW5hbWVzLnRvTG93ZXJDYXNlKCkpO1xuICAgIFxuICAgIGZvciAoY29uc3QgZXhjbHVkZVBhdHRlcm4gb2YgdGhpcy5zZXR0aW5ncy5leGNsdWRlRm9sZGVycykge1xuICAgICAgaWYgKHRoaXMuaXNQYXRoRXhjbHVkZWQocGF0aCwgZXhjbHVkZVBhdHRlcm4pKSB7XG4gICAgICAgIC8vIElmIHRoaXMgaXMgYW4gaW5kZXggZmlsZSBmb3IgZm9sZGVyIHJlbmFtZSB0cmFja2luZywgYW5kIHRoZSBwYXR0ZXJuIGlzIC8qIChub3QgLyoqKSxcbiAgICAgICAgLy8gYWxsb3cgaXQgdGhyb3VnaCBvbmx5IGlmIGl0J3MgaW4gYSBkaXJlY3QgY2hpbGQgZm9sZGVyIChvbmUgbGV2ZWwgZGVlcClcbiAgICAgICAgaWYgKGlzSW5kZXhGaWxlRm9yRm9sZGVyUmVuYW1lICYmIGV4Y2x1ZGVQYXR0ZXJuLmVuZHNXaXRoKCcvKicpICYmICFleGNsdWRlUGF0dGVybi5lbmRzV2l0aCgnLyoqJykpIHtcbiAgICAgICAgICAvLyBDaGVjayBpZiB0aGUgZmlsZSBpcyBpbiBhIGRpcmVjdCBjaGlsZCAob25seSBvbmUgbGV2ZWwgZGVlcClcbiAgICAgICAgICBjb25zdCBiYXNlRm9sZGVyID0gZXhjbHVkZVBhdHRlcm4uc2xpY2UoMCwgLTIpO1xuICAgICAgICAgIGlmIChwYXRoLnN0YXJ0c1dpdGgoYmFzZUZvbGRlciArICcvJykpIHtcbiAgICAgICAgICAgIGNvbnN0IHBhdGhBZnRlckJhc2UgPSBwYXRoLnNsaWNlKGJhc2VGb2xkZXIubGVuZ3RoICsgMSk7XG4gICAgICAgICAgICBjb25zdCBwYXRoUGFydHMgPSBwYXRoQWZ0ZXJCYXNlLnNwbGl0KCcvJyk7XG4gICAgICAgICAgICAvLyBJZiB0aGVyZSdzIG9ubHkgb25lIHBhdGggcGFydCBiZWZvcmUgdGhlIGZpbGVuYW1lLCBpdCdzIGEgZGlyZWN0IGNoaWxkXG4gICAgICAgICAgICAvLyBwYXRoUGFydHMgd2lsbCBiZSBsaWtlIFsnc3ViZm9sZGVyJywgJ2ZpbGVuYW1lLm1kJ10gLSB3ZSB3YW50IGV4YWN0bHkgMiBwYXJ0c1xuICAgICAgICAgICAgaWYgKHBhdGhQYXJ0cy5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgICAgICAgY29udGludWU7IC8vIFNraXAgdGhpcyBleGNsdXNpb24gLSBpdCdzIGEgZGlyZWN0IGNoaWxkIGluZGV4IGZpbGVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuOyAvLyBFeGNsdWRlZCBieSBmb2xkZXIgcGF0dGVyblxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIENoZWNrIGlnbm9yZSByZWdleGVzXG4gICAgY29uc3QgcmVnZXhlczogUmVnRXhwW10gPSBbXTtcbiAgICBmb3IgKGNvbnN0IHJlZ2V4U3RyIG9mIHRoaXMuc2V0dGluZ3MuaWdub3JlUmVnZXhlcykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmVnZXhlcy5wdXNoKG5ldyBSZWdFeHAocmVnZXhTdHIpKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihgSW52YWxpZCBpZ25vcmUgcmVnZXg6ICR7cmVnZXhTdHJ9YCwgZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbGV0IHRvUXVldWU6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICAgIGlmIChpc05hbWVDaGFuZ2UpIHtcbiAgICAgIGlmIChyZWdleGVzLnNvbWUocmUgPT4gcmUudGVzdChvbGRCYXNlbmFtZSkgfHwgcmUudGVzdChuZXdCYXNlbmFtZSkpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRvUXVldWUgPSBvbGRCYXNlbmFtZTtcbiAgICB9IGVsc2UgaWYgKGlzRm9sZGVyQ2hhbmdlICYmIHRoaXMuc2V0dGluZ3MudHJhY2tGb2xkZXJSZW5hbWVzICYmIHRoaXMuc2V0dGluZ3MudHJhY2tGb2xkZXJSZW5hbWVzLnRyaW0oKSAhPT0gJycpIHtcbiAgICAgIC8vIENoZWNrIGlmIHRoZSBjdXJyZW50IGZpbGUgbmFtZSBtYXRjaGVzIHRoZSBzcGVjaWZpZWQgbmFtZSAod2l0aG91dCBleHRlbnNpb24pXG4gICAgICBjb25zdCBjdXJyZW50QmFzZW5hbWUgPSBuZXdGaWxlLmJhc2VuYW1lO1xuICAgICAgY29uc3QgbWF0Y2hlc0ZpbGVuYW1lID0gdGhpcy5zZXR0aW5ncy5jYXNlU2Vuc2l0aXZlIFxuICAgICAgICA/IGN1cnJlbnRCYXNlbmFtZSA9PT0gdGhpcy5zZXR0aW5ncy50cmFja0ZvbGRlclJlbmFtZXNcbiAgICAgICAgOiBjdXJyZW50QmFzZW5hbWUudG9Mb3dlckNhc2UoKSA9PT0gdGhpcy5zZXR0aW5ncy50cmFja0ZvbGRlclJlbmFtZXMudG9Mb3dlckNhc2UoKTtcbiAgICAgIFxuICAgICAgaWYgKCFtYXRjaGVzRmlsZW5hbWUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgXG4gICAgICBpZiAob2xkSW1tZWRpYXRlUGFyZW50TmFtZSA9PT0gJycgfHwgbmV3SW1tZWRpYXRlUGFyZW50TmFtZSA9PT0gJycpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKHJlZ2V4ZXMuc29tZShyZSA9PiByZS50ZXN0KG9sZEltbWVkaWF0ZVBhcmVudE5hbWUpIHx8IHJlLnRlc3QobmV3SW1tZWRpYXRlUGFyZW50TmFtZSkpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRvUXVldWUgPSBvbGRJbW1lZGlhdGVQYXJlbnROYW1lO1xuICAgIH1cblxuICAgIGlmICghdG9RdWV1ZSkgcmV0dXJuO1xuXG4gICAgLy8gQ2hlY2sgaWYgdGhlcmUncyBhbHJlYWR5IGEgcGVuZGluZyB0aW1lb3V0IGZvciB0aGlzIGZpbGVcbiAgICAvLyBXZSBuZWVkIHRvIGNoZWNrIGJvdGggdGhlIG5ldyBwYXRoIGFuZCB0aGUgb2xkIHBhdGggc2luY2UgdGhlIGZpbGUgd2FzIGp1c3QgcmVuYW1lZFxuICAgIGxldCBleGlzdGluZ0VudHJ5ID0gdGhpcy5kZWJvdW5jZU1hcC5nZXQobmV3RmlsZS5wYXRoKTtcbiAgICBpZiAoIWV4aXN0aW5nRW50cnkpIHtcbiAgICAgIC8vIENoZWNrIGlmIHRoZXJlJ3MgYSB0aW1lb3V0IGZvciB0aGUgb2xkIHBhdGggKHRoZSBmaWxlIHdhcyBqdXN0IHJlbmFtZWQgZnJvbSB0aGVyZSlcbiAgICAgIGV4aXN0aW5nRW50cnkgPSB0aGlzLmRlYm91bmNlTWFwLmdldChvbGRQYXRoKTtcbiAgICAgIGlmIChleGlzdGluZ0VudHJ5KSB7XG4gICAgICAgIC8vIFJlbW92ZSB0aGUgb2xkIGVudHJ5IHNpbmNlIHdlJ3JlIHVwZGF0aW5nIGl0IHdpdGggdGhlIG5ldyBwYXRoXG4gICAgICAgIHRoaXMuZGVib3VuY2VNYXAuZGVsZXRlKG9sZFBhdGgpO1xuICAgICAgfVxuICAgIH1cbiAgICBcbiAgICBpZiAoZXhpc3RpbmdFbnRyeSkge1xuICAgICAgLy8gRmlsZSB3YXMgcmVuYW1lZCBhZ2FpbiBiZWZvcmUgdGltZW91dCBleHBpcmVkIC0gY2FuY2VsIHRoZSBwcmV2aW91cyB0aW1lb3V0XG4gICAgICBpZiAoZXhpc3RpbmdFbnRyeS50aW1lb3V0SWQgIT09IDApIHtcbiAgICAgICAgd2luZG93LmNsZWFyVGltZW91dChleGlzdGluZ0VudHJ5LnRpbWVvdXRJZCk7XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIFVzZSB0aGUgb3JpZ2luYWwgc3RhYmxlIG5hbWUgZnJvbSB0aGUgcHJldmlvdXMgdGltZW91dCwgbm90IHRoZSB0ZW1wb3JhcnkgbmFtZVxuICAgICAgdG9RdWV1ZSA9IEFycmF5LmZyb20oZXhpc3RpbmdFbnRyeS5xdWV1ZSlbMF07IC8vIFVzZSB0aGUgb3JpZ2luYWwgc3RhYmxlIG5hbWVcbiAgICB9XG5cbiAgICAvLyBDcmVhdGUgZW50cnkgdG8gdHJhY2sgdGhlIHRpbWVvdXRcbiAgICBjb25zdCBlbnRyeSA9IHsgXG4gICAgICBxdWV1ZTogbmV3IFNldDxzdHJpbmc+KFt0b1F1ZXVlXSksIFxuICAgICAgdGltZW91dElkOiAwLCBcbiAgICAgIGN1cnJlbnRQYXRoOiBuZXdGaWxlLnBhdGggXG4gICAgfTtcblxuICAgIC8vIFNldCB0aW1lb3V0IHRvIGFjdHVhbGx5IHN0b3JlIHRoZSBhbGlhcyBhZnRlciB0aGUgZGVib3VuY2UgcGVyaW9kXG4gICAgZW50cnkudGltZW91dElkID0gd2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdm9pZCAoYXN5bmMgKCkgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGF3YWl0IHRoaXMuYWxpYXNQcm9jZXNzb3IucHJvY2Vzc0FsaWFzZXMoZW50cnkuY3VycmVudFBhdGgsIGVudHJ5LnF1ZXVlKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBwcm9jZXNzaW5nIGFsaWFzZXM6JywgZXJyb3IpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZGVib3VuY2VNYXAuZGVsZXRlKGVudHJ5LmN1cnJlbnRQYXRoKTtcbiAgICAgIH0pKCk7XG4gICAgfSwgdGhpcy5zZXR0aW5ncy50aW1lb3V0U2Vjb25kcyAqIDEwMDApO1xuXG4gICAgdGhpcy5kZWJvdW5jZU1hcC5zZXQobmV3RmlsZS5wYXRoLCBlbnRyeSk7XG4gIH1cbn1cbiIsICJleHBvcnQgaW50ZXJmYWNlIEFsaWFzRmlsZW5hbWVIaXN0b3J5U2V0dGluZ3Mge1xyXG4gIGlnbm9yZVJlZ2V4ZXM6IHN0cmluZ1tdO1xyXG4gIHRpbWVvdXRTZWNvbmRzOiBudW1iZXI7XHJcbiAgY2FzZVNlbnNpdGl2ZTogYm9vbGVhbjtcclxuICBhdXRvQ3JlYXRlRnJvbnRtYXR0ZXI6IGJvb2xlYW47XHJcbiAgaW5jbHVkZUZvbGRlcnM6IHN0cmluZ1tdO1xyXG4gIGV4Y2x1ZGVGb2xkZXJzOiBzdHJpbmdbXTtcclxuICBmaWxlRXh0ZW5zaW9uczogc3RyaW5nW107XHJcbiAgdHJhY2tGb2xkZXJSZW5hbWVzOiBzdHJpbmc7XHJcbiAgZXhjbHVkZVByb3BlcnR5TmFtZTogc3RyaW5nO1xyXG59XHJcblxyXG5leHBvcnQgY29uc3QgREVGQVVMVF9TRVRUSU5HUzogQWxpYXNGaWxlbmFtZUhpc3RvcnlTZXR0aW5ncyA9IHtcclxuICBpZ25vcmVSZWdleGVzOiBbJ15fJywgJ15VbnRpdGxlZCQnLCAnXlVudGl0bGVkIFxcXFxkKyQnXSxcclxuICB0aW1lb3V0U2Vjb25kczogNSxcclxuICBjYXNlU2Vuc2l0aXZlOiBmYWxzZSxcclxuICBhdXRvQ3JlYXRlRnJvbnRtYXR0ZXI6IHRydWUsXHJcbiAgaW5jbHVkZUZvbGRlcnM6IFtdLFxyXG4gIGV4Y2x1ZGVGb2xkZXJzOiBbXSxcclxuICBmaWxlRXh0ZW5zaW9uczogWydtZCddLFxyXG4gIHRyYWNrRm9sZGVyUmVuYW1lczogJycsXHJcbiAgZXhjbHVkZVByb3BlcnR5TmFtZTogJycsXHJcbn07IiwgImltcG9ydCB7IEFwcCwgUGx1Z2luLCBQbHVnaW5TZXR0aW5nVGFiIH0gZnJvbSAnb2JzaWRpYW4nO1xyXG5pbXBvcnQgeyBBbGlhc0ZpbGVuYW1lSGlzdG9yeVNldHRpbmdzIH0gZnJvbSAnLi4vc2V0dGluZ3MnO1xyXG5pbXBvcnQgeyBjcmVhdGVTZXR0aW5nc0dyb3VwIH0gZnJvbSAnLi4vdXRpbHMvc2V0dGluZ3MtY29tcGF0JztcclxuXHJcbmludGVyZmFjZSBBbGlhc0ZpbGVuYW1lSGlzdG9yeVBsdWdpbiBleHRlbmRzIFBsdWdpbiB7XHJcbiAgc2V0dGluZ3M6IEFsaWFzRmlsZW5hbWVIaXN0b3J5U2V0dGluZ3M7XHJcbiAgc2F2ZVNldHRpbmdzKCk6IFByb21pc2U8dm9pZD47XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBBbGlhc0ZpbGVuYW1lSGlzdG9yeVNldHRpbmdUYWIgZXh0ZW5kcyBQbHVnaW5TZXR0aW5nVGFiIHtcclxuICBwbHVnaW46IEFsaWFzRmlsZW5hbWVIaXN0b3J5UGx1Z2luO1xyXG5cclxuICBjb25zdHJ1Y3RvcihhcHA6IEFwcCwgcGx1Z2luOiBBbGlhc0ZpbGVuYW1lSGlzdG9yeVBsdWdpbikge1xyXG4gICAgc3VwZXIoYXBwLCBwbHVnaW4pO1xyXG4gICAgdGhpcy5wbHVnaW4gPSBwbHVnaW47XHJcbiAgfVxyXG5cclxuICBkaXNwbGF5KCk6IHZvaWQge1xyXG4gICAgY29uc3QgeyBjb250YWluZXJFbCB9ID0gdGhpcztcclxuICAgIGNvbnRhaW5lckVsLmVtcHR5KCk7XHJcblxyXG4gICAgLy8gSGVscGVyIHRvIHNhdmUgc2V0dGluZ3Mgd2l0aG91dCByZXR1cm5pbmcgYSBwcm9taXNlXHJcbiAgICBjb25zdCBzYXZlU2V0dGluZ3MgPSAoKTogdm9pZCA9PiB7XHJcbiAgICAgIHZvaWQgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7XHJcbiAgICB9O1xyXG5cclxuICAgIGNvbnN0IGdlbmVyYWxHcm91cCA9IGNyZWF0ZVNldHRpbmdzR3JvdXAoY29udGFpbmVyRWwsIHVuZGVmaW5lZCwgJ2FsaWFzLWZpbGUtbmFtZS1oaXN0b3J5Jyk7XHJcblxyXG4gICAgLy8gR2VuZXJhbCBiZWhhdmlvciBzZXR0aW5ncyAoZ3JvdXBlZCwgbm8gaGVhZGluZylcclxuICAgIGdlbmVyYWxHcm91cC5hZGRTZXR0aW5nKChzZXR0aW5nKSA9PiB7XHJcbiAgICAgIHNldHRpbmdcclxuICAgICAgICAuc2V0TmFtZSgnVGltZW91dCBzZWNvbmRzJylcclxuICAgICAgICAuc2V0RGVzYygnVGltZSBpbiBzZWNvbmRzIHRoZSBuYW1lIG11c3QgYmUgc3RhYmxlIGJlZm9yZSBhZGRpbmcgYWxpYXNlcy4nKVxyXG4gICAgICAgIC5hZGRTbGlkZXIoKHNsaWRlcikgPT5cclxuICAgICAgICAgIHNsaWRlclxyXG4gICAgICAgICAgICAuc2V0TGltaXRzKDEsIDIwLCAxKVxyXG4gICAgICAgICAgICAuc2V0VmFsdWUodGhpcy5wbHVnaW4uc2V0dGluZ3MudGltZW91dFNlY29uZHMpXHJcbiAgICAgICAgICAgIC5zZXREeW5hbWljVG9vbHRpcCgpXHJcbiAgICAgICAgICAgIC5vbkNoYW5nZSgodmFsdWUpID0+IHtcclxuICAgICAgICAgICAgICB0aGlzLnBsdWdpbi5zZXR0aW5ncy50aW1lb3V0U2Vjb25kcyA9IHZhbHVlO1xyXG4gICAgICAgICAgICAgIHNhdmVTZXR0aW5ncygpO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICk7XHJcbiAgICB9KTtcclxuXHJcbiAgICBnZW5lcmFsR3JvdXAuYWRkU2V0dGluZygoc2V0dGluZykgPT4ge1xyXG4gICAgICBzZXR0aW5nXHJcbiAgICAgICAgLnNldE5hbWUoJ0Nhc2Utc2Vuc2l0aXZlIHVuaXF1ZW5lc3MnKVxyXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBvYnNpZGlhbm1kL3VpL3NlbnRlbmNlLWNhc2VcclxuICAgICAgICAuc2V0RGVzYygnSWYgZW5hYmxlZCwgdHJlYXQgbm90ZSBhbmQgTm90ZSBhcyBkaWZmZXJlbnQgYWxpYXNlcy4nKVxyXG4gICAgICAgIC5hZGRUb2dnbGUoKHRvZ2dsZSkgPT5cclxuICAgICAgICAgIHRvZ2dsZVxyXG4gICAgICAgICAgICAuc2V0VmFsdWUodGhpcy5wbHVnaW4uc2V0dGluZ3MuY2FzZVNlbnNpdGl2ZSlcclxuICAgICAgICAgICAgLm9uQ2hhbmdlKCh2YWx1ZSkgPT4ge1xyXG4gICAgICAgICAgICAgIHRoaXMucGx1Z2luLnNldHRpbmdzLmNhc2VTZW5zaXRpdmUgPSB2YWx1ZTtcclxuICAgICAgICAgICAgICBzYXZlU2V0dGluZ3MoKTtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICApO1xyXG4gICAgfSk7XHJcblxyXG4gICAgZ2VuZXJhbEdyb3VwLmFkZFNldHRpbmcoKHNldHRpbmcpID0+IHtcclxuICAgICAgc2V0dGluZ1xyXG4gICAgICAgIC5zZXROYW1lKCdBdXRvLWNyZWF0ZSBwcm9wZXJ0aWVzJylcclxuICAgICAgICAuc2V0RGVzYygnQXV0b21hdGljYWxseSBjcmVhdGUgcHJvcGVydGllcyB3aXRoIGFsaWFzZXMgaWYgbWlzc2luZy4nKVxyXG4gICAgICAgIC5hZGRUb2dnbGUoKHRvZ2dsZSkgPT5cclxuICAgICAgICAgIHRvZ2dsZVxyXG4gICAgICAgICAgICAuc2V0VmFsdWUodGhpcy5wbHVnaW4uc2V0dGluZ3MuYXV0b0NyZWF0ZUZyb250bWF0dGVyKVxyXG4gICAgICAgICAgICAub25DaGFuZ2UoKHZhbHVlKSA9PiB7XHJcbiAgICAgICAgICAgICAgdGhpcy5wbHVnaW4uc2V0dGluZ3MuYXV0b0NyZWF0ZUZyb250bWF0dGVyID0gdmFsdWU7XHJcbiAgICAgICAgICAgICAgc2F2ZVNldHRpbmdzKCk7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgKTtcclxuICAgIH0pO1xyXG5cclxuICAgIGdlbmVyYWxHcm91cC5hZGRTZXR0aW5nKChzZXR0aW5nKSA9PiB7XHJcbiAgICAgIHNldHRpbmdcclxuICAgICAgICAuc2V0TmFtZSgnRmlsZSBleHRlbnNpb25zJylcclxuICAgICAgICAuc2V0RGVzYygnQ29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgZmlsZSBleHRlbnNpb25zIHRvIHRyYWNrLicpXHJcbiAgICAgICAgLmFkZFRleHQoKHRleHQpID0+XHJcbiAgICAgICAgICB0ZXh0XHJcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBvYnNpZGlhbm1kL3VpL3NlbnRlbmNlLWNhc2VcclxuICAgICAgICAgICAgLnNldFBsYWNlaG9sZGVyKCdtZCwgdHh0JylcclxuICAgICAgICAgICAgLnNldFZhbHVlKHRoaXMucGx1Z2luLnNldHRpbmdzLmZpbGVFeHRlbnNpb25zLmpvaW4oJywnKSlcclxuICAgICAgICAgICAgLm9uQ2hhbmdlKCh2YWx1ZSkgPT4ge1xyXG4gICAgICAgICAgICAgIHRoaXMucGx1Z2luLnNldHRpbmdzLmZpbGVFeHRlbnNpb25zID0gdmFsdWVcclxuICAgICAgICAgICAgICAgIC5zcGxpdCgnLCcpXHJcbiAgICAgICAgICAgICAgICAubWFwKChzKSA9PiBzLnRyaW0oKSlcclxuICAgICAgICAgICAgICAgIC5maWx0ZXIoKHMpID0+IHMpO1xyXG4gICAgICAgICAgICAgIHNhdmVTZXR0aW5ncygpO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICk7XHJcbiAgICB9KTtcclxuXHJcbiAgICBjb25zdCBmaWx0ZXJpbmdHcm91cCA9IGNyZWF0ZVNldHRpbmdzR3JvdXAoY29udGFpbmVyRWwsICdGaWx0ZXJpbmcnLCAnYWxpYXMtZmlsZS1uYW1lLWhpc3RvcnknKTtcclxuICAgIGNvbnN0IGZvbGRlcnNHcm91cCA9IGNyZWF0ZVNldHRpbmdzR3JvdXAoY29udGFpbmVyRWwsICdGb2xkZXJzJywgJ2FsaWFzLWZpbGUtbmFtZS1oaXN0b3J5Jyk7XHJcbiAgICBjb25zdCBhZHZhbmNlZEdyb3VwID0gY3JlYXRlU2V0dGluZ3NHcm91cChjb250YWluZXJFbCwgJ0FkdmFuY2VkJywgJ2FsaWFzLWZpbGUtbmFtZS1oaXN0b3J5Jyk7XHJcblxyXG4gICAgLy8gRmlsdGVyaW5nIHNldHRpbmdzXHJcbiAgICBmaWx0ZXJpbmdHcm91cC5hZGRTZXR0aW5nKChzZXR0aW5nKSA9PiB7XHJcbiAgICAgIHNldHRpbmdcclxuICAgICAgICAuc2V0TmFtZSgnSWdub3JlIHJlZ2V4IHBhdHRlcm5zJylcclxuICAgICAgICAuc2V0RGVzYyhcclxuICAgICAgICAgICdDb21tYS1zZXBhcmF0ZWQgcmVnZXggcGF0dGVybnMgZm9yIGZpbGUgbmFtZXMgb3IgaW1tZWRpYXRlIHBhcmVudCBmb2xkZXIgbmFtZXMgdG8gaWdub3JlIChlLmcuLCBeXyBmb3IgdW5kZXJzY29yZSBwcmVmaXhlcywgXnVudGl0bGVkJCBmb3IgdW50aXRsZWQpLiBMZWF2ZSBlbXB0eSB0byBkaXNhYmxlLidcclxuICAgICAgICApXHJcbiAgICAgICAgLmFkZFRleHQoKHRleHQpID0+XHJcbiAgICAgICAgICB0ZXh0XHJcbiAgICAgICAgICAgIC5zZXRQbGFjZWhvbGRlcignXl8sIF51bnRpdGxlZCQsIF51bnRpdGxlZCBcXFxcZCskJylcclxuICAgICAgICAgICAgLnNldFZhbHVlKHRoaXMucGx1Z2luLnNldHRpbmdzLmlnbm9yZVJlZ2V4ZXMuam9pbignLCcpKVxyXG4gICAgICAgICAgICAub25DaGFuZ2UoKHZhbHVlKSA9PiB7XHJcbiAgICAgICAgICAgICAgdGhpcy5wbHVnaW4uc2V0dGluZ3MuaWdub3JlUmVnZXhlcyA9IHZhbHVlXHJcbiAgICAgICAgICAgICAgICAuc3BsaXQoJywnKVxyXG4gICAgICAgICAgICAgICAgLm1hcCgocykgPT4gcy50cmltKCkpXHJcbiAgICAgICAgICAgICAgICAuZmlsdGVyKChzKSA9PiBzKTtcclxuICAgICAgICAgICAgICBzYXZlU2V0dGluZ3MoKTtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICApO1xyXG4gICAgfSk7XHJcblxyXG4gICAgZmlsdGVyaW5nR3JvdXAuYWRkU2V0dGluZygoc2V0dGluZykgPT4ge1xyXG4gICAgICBzZXR0aW5nXHJcbiAgICAgICAgLnNldE5hbWUoJ0V4Y2x1ZGUgcHJvcGVydHkgbmFtZScpXHJcbiAgICAgICAgLnNldERlc2MoXHJcbiAgICAgICAgICAnTmFtZSBvZiBhIGJvb2xlYW4gcHJvcGVydHkgdG8gY2hlY2sgaW4gZmlsZXMuIEZpbGVzIHdpdGggdGhpcyBwcm9wZXJ0eSBzZXQgdG8gdHJ1ZSB3aWxsIGJlIGV4Y2x1ZGVkIGZyb20gdHJhY2tpbmcuIFRha2VzIHByaW9yaXR5IG92ZXIgZm9sZGVyIGZpbHRlcmluZy4nXHJcbiAgICAgICAgKVxyXG4gICAgICAgIC5hZGRUZXh0KCh0ZXh0KSA9PlxyXG4gICAgICAgICAgdGV4dFxyXG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgb2JzaWRpYW5tZC91aS9zZW50ZW5jZS1jYXNlXHJcbiAgICAgICAgICAgIC5zZXRQbGFjZWhvbGRlcignc2tpcC1yZW5hbWUtdHJhY2tpbmcnKVxyXG4gICAgICAgICAgICAuc2V0VmFsdWUodGhpcy5wbHVnaW4uc2V0dGluZ3MuZXhjbHVkZVByb3BlcnR5TmFtZSlcclxuICAgICAgICAgICAgLm9uQ2hhbmdlKCh2YWx1ZSkgPT4ge1xyXG4gICAgICAgICAgICAgIHRoaXMucGx1Z2luLnNldHRpbmdzLmV4Y2x1ZGVQcm9wZXJ0eU5hbWUgPSB2YWx1ZTtcclxuICAgICAgICAgICAgICBzYXZlU2V0dGluZ3MoKTtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICApO1xyXG4gICAgfSk7XHJcblxyXG4gICAgLy8gRm9sZGVyIGluY2x1ZGUvZXhjbHVkZSBzZXR0aW5nc1xyXG4gICAgZm9sZGVyc0dyb3VwLmFkZFNldHRpbmcoKHNldHRpbmcpID0+IHtcclxuICAgICAgc2V0dGluZ1xyXG4gICAgICAgIC5zZXROYW1lKCdJbmNsdWRlIGZvbGRlcnMnKVxyXG4gICAgICAgIC5zZXREZXNjKFxyXG4gICAgICAgICAgJ0NvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIGZvbGRlciBwYXRocyB0byBpbmNsdWRlLiBJZiBlbXB0eSwgYWxsIGZvbGRlcnMgYXJlIGluY2x1ZGVkLiBVc2Uge3ZhdWx0fSBvciB7cm9vdH0gdG8gaW5jbHVkZSBvbmx5IGZpbGVzIGRpcmVjdGx5IGluIHRoZSB2YXVsdCByb290IChubyBzdWJmb2xkZXJzKS4nXHJcbiAgICAgICAgKVxyXG4gICAgICAgIC5hZGRUZXh0KCh0ZXh0KSA9PlxyXG4gICAgICAgICAgdGV4dFxyXG4gICAgICAgICAgICAuc2V0VmFsdWUodGhpcy5wbHVnaW4uc2V0dGluZ3MuaW5jbHVkZUZvbGRlcnMuam9pbignLCcpKVxyXG4gICAgICAgICAgICAub25DaGFuZ2UoKHZhbHVlKSA9PiB7XHJcbiAgICAgICAgICAgICAgdGhpcy5wbHVnaW4uc2V0dGluZ3MuaW5jbHVkZUZvbGRlcnMgPSB2YWx1ZVxyXG4gICAgICAgICAgICAgICAgLnNwbGl0KCcsJylcclxuICAgICAgICAgICAgICAgIC5tYXAoKHMpID0+IHMudHJpbSgpKVxyXG4gICAgICAgICAgICAgICAgLmZpbHRlcigocykgPT4gcyk7XHJcbiAgICAgICAgICAgICAgc2F2ZVNldHRpbmdzKCk7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgKTtcclxuICAgIH0pO1xyXG5cclxuICAgIGZvbGRlcnNHcm91cC5hZGRTZXR0aW5nKChzZXR0aW5nKSA9PiB7XHJcbiAgICAgIHNldHRpbmdcclxuICAgICAgICAuc2V0TmFtZSgnRXhjbHVkZSBmb2xkZXJzJylcclxuICAgICAgICAuc2V0RGVzYyhcclxuICAgICAgICAgICdDb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBmb2xkZXIgcGF0aHMgdG8gZXhjbHVkZS4gU3VwcG9ydHMgd2lsZGNhcmRzOiB1c2UgXCJmb2xkZXIvKlwiIHRvIGV4Y2x1ZGUgZGlyZWN0IGNoaWxkcmVuLCBcImZvbGRlci8qKlwiIHRvIGV4Y2x1ZGUgYWxsIGRlc2NlbmRhbnRzLiBVc2Uge3ZhdWx0fSBvciB7cm9vdH0gdG8gZXhjbHVkZSBmaWxlcyBkaXJlY3RseSBpbiB0aGUgdmF1bHQgcm9vdC4nXHJcbiAgICAgICAgKVxyXG4gICAgICAgIC5hZGRUZXh0KCh0ZXh0KSA9PlxyXG4gICAgICAgICAgdGV4dFxyXG4gICAgICAgICAgICAuc2V0VmFsdWUodGhpcy5wbHVnaW4uc2V0dGluZ3MuZXhjbHVkZUZvbGRlcnMuam9pbignLCcpKVxyXG4gICAgICAgICAgICAub25DaGFuZ2UoKHZhbHVlKSA9PiB7XHJcbiAgICAgICAgICAgICAgdGhpcy5wbHVnaW4uc2V0dGluZ3MuZXhjbHVkZUZvbGRlcnMgPSB2YWx1ZVxyXG4gICAgICAgICAgICAgICAgLnNwbGl0KCcsJylcclxuICAgICAgICAgICAgICAgIC5tYXAoKHMpID0+IHMudHJpbSgpKVxyXG4gICAgICAgICAgICAgICAgLmZpbHRlcigocykgPT4gcyk7XHJcbiAgICAgICAgICAgICAgc2F2ZVNldHRpbmdzKCk7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgKTtcclxuICAgIH0pO1xyXG5cclxuICAgIC8vIEFkdmFuY2VkIC8gbmljaGUgb3B0aW9uc1xyXG4gICAgYWR2YW5jZWRHcm91cC5hZGRTZXR0aW5nKChzZXR0aW5nKSA9PiB7XHJcbiAgICAgIHNldHRpbmdcclxuICAgICAgICAuc2V0TmFtZSgnVHJhY2sgZm9sZGVyIHJlbmFtZXMgZm9yIHNwZWNpZmljIGZpbGUgbmFtZScpXHJcbiAgICAgICAgLnNldERlc2MoXHJcbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgb2JzaWRpYW5tZC91aS9zZW50ZW5jZS1jYXNlXHJcbiAgICAgICAgICAnSWYgYSBtYXJrZG93biBmaWxlIG1hdGNoZXMgdGhpcyBmaWxlIG5hbWUsIHN0b3JlIG9sZCBpbW1lZGlhdGUgcGFyZW50IGZvbGRlciBuYW1lcyBhcyBhbGlhc2VzIHdoZW4gcGFyZW50IGZvbGRlcnMgYXJlIHJlbmFtZWQuJ1xyXG4gICAgICAgIClcclxuICAgICAgICAuYWRkVGV4dCgodGV4dCkgPT5cclxuICAgICAgICAgIHRleHRcclxuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG9ic2lkaWFubWQvdWkvc2VudGVuY2UtY2FzZVxyXG4gICAgICAgICAgICAuc2V0UGxhY2Vob2xkZXIoJ2luZGV4JylcclxuICAgICAgICAgICAgLnNldFZhbHVlKHRoaXMucGx1Z2luLnNldHRpbmdzLnRyYWNrRm9sZGVyUmVuYW1lcylcclxuICAgICAgICAgICAgLm9uQ2hhbmdlKCh2YWx1ZSkgPT4ge1xyXG4gICAgICAgICAgICAgIHRoaXMucGx1Z2luLnNldHRpbmdzLnRyYWNrRm9sZGVyUmVuYW1lcyA9IHZhbHVlO1xyXG4gICAgICAgICAgICAgIHNhdmVTZXR0aW5ncygpO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICk7XHJcbiAgICB9KTtcclxuXHJcbiAgfVxyXG59XHJcbiIsICIvKipcclxuICogQ29tcGF0aWJpbGl0eSB1dGlsaXRpZXMgZm9yIHNldHRpbmdzXHJcbiAqIFByb3ZpZGVzIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgZm9yIFNldHRpbmdHcm91cCAocmVxdWlyZXMgQVBJIDEuMTEuMCspXHJcbiAqL1xyXG5pbXBvcnQgeyBTZXR0aW5nLCByZXF1aXJlQXBpVmVyc2lvbiB9IGZyb20gJ29ic2lkaWFuJztcclxuaW1wb3J0ICogYXMgT2JzaWRpYW4gZnJvbSAnb2JzaWRpYW4nO1xyXG5cclxuaW50ZXJmYWNlIFNldHRpbmdHcm91cEluc3RhbmNlIHtcclxuICBzZXRIZWFkaW5nKGhlYWRpbmc6IHN0cmluZyk6IHZvaWQ7XHJcbiAgYWRkU2V0dGluZyhjYjogKHNldHRpbmc6IFNldHRpbmcpID0+IHZvaWQpOiB2b2lkO1xyXG59XHJcblxyXG4vKipcclxuICogSW50ZXJmYWNlIHRoYXQgd29ya3Mgd2l0aCBib3RoIFNldHRpbmdHcm91cCBhbmQgZmFsbGJhY2sgY29udGFpbmVyXHJcbiAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIFNldHRpbmdzQ29udGFpbmVyIHtcclxuICBhZGRTZXR0aW5nKGNiOiAoc2V0dGluZzogU2V0dGluZykgPT4gdm9pZCk6IHZvaWQ7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBDcmVhdGVzIGEgc2V0dGluZ3MgY29udGFpbmVyIHRoYXQgdXNlcyBTZXR0aW5nR3JvdXAgaWYgYXZhaWxhYmxlIChBUEkgMS4xMS4wKyksXHJcbiAqIG90aGVyd2lzZSBmYWxscyBiYWNrIHRvIGNyZWF0aW5nIGEgaGVhZGluZyBhbmQgdXNpbmcgdGhlIGNvbnRhaW5lciBkaXJlY3RseS5cclxuICpcclxuICogVXNlcyByZXF1aXJlQXBpVmVyc2lvbignMS4xMS4wJykgdG8gY2hlY2sgaWYgU2V0dGluZ0dyb3VwIGlzIGF2YWlsYWJsZS5cclxuICogVGhpcyBpcyB0aGUgb2ZmaWNpYWwgT2JzaWRpYW4gQVBJIG1ldGhvZCBmb3IgdmVyc2lvbiBjaGVja2luZy5cclxuICpcclxuICogQHBhcmFtIGNvbnRhaW5lckVsIC0gVGhlIGNvbnRhaW5lciBlbGVtZW50IGZvciBzZXR0aW5nc1xyXG4gKiBAcGFyYW0gaGVhZGluZyAtIFRoZSBoZWFkaW5nIHRleHQgZm9yIHRoZSBzZXR0aW5ncyBncm91cFxyXG4gKiBAcGFyYW0gbWFuaWZlc3RJZCAtIFRoZSBwbHVnaW4ncyBtYW5pZmVzdCBJRCBmb3IgQ1NTIHNjb3BpbmcgKHJlcXVpcmVkIGZvciBmYWxsYmFjayBtb2RlKVxyXG4gKiBAcmV0dXJucyBBIGNvbnRhaW5lciB0aGF0IGNhbiBiZSB1c2VkIHRvIGFkZCBzZXR0aW5nc1xyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVNldHRpbmdzR3JvdXAoXHJcbiAgY29udGFpbmVyRWw6IEhUTUxFbGVtZW50LFxyXG4gIGhlYWRpbmc/OiBzdHJpbmcsXHJcbiAgbWFuaWZlc3RJZD86IHN0cmluZ1xyXG4pOiBTZXR0aW5nc0NvbnRhaW5lciB7XHJcbiAgLy8gQ2hlY2sgaWYgU2V0dGluZ0dyb3VwIGlzIGF2YWlsYWJsZSAoQVBJIDEuMTEuMCspXHJcbiAgLy8gcmVxdWlyZUFwaVZlcnNpb24gaXMgdGhlIG9mZmljaWFsIE9ic2lkaWFuIEFQSSBtZXRob2QgZm9yIHZlcnNpb24gY2hlY2tpbmdcclxuICBpZiAocmVxdWlyZUFwaVZlcnNpb24oJzEuMTEuMCcpKSB7XHJcbiAgICAvLyBVc2UgU2V0dGluZ0dyb3VwIC0gaXQncyBndWFyYW50ZWVkIHRvIGV4aXN0IGF0IHJ1bnRpbWUgaWYgcmVxdWlyZUFwaVZlcnNpb24gcmV0dXJucyB0cnVlLlxyXG4gICAgLy8gV2UgYWNjZXNzIGl0IHZpYSB0aGUgbmFtZXNwYWNlIGltcG9ydCB0byBhdm9pZCByZXF1aXJpbmcgdGhlIHR5cGUgaW4gb2xkZXIgQVBJIGQudHMgZmlsZXMuXHJcbiAgICB0eXBlIE9ic2lkaWFuV2l0aFNldHRpbmdHcm91cCA9IHR5cGVvZiBPYnNpZGlhbiAmIHtcclxuICAgICAgU2V0dGluZ0dyb3VwOiBuZXcgKGNvbnRhaW5lckVsOiBIVE1MRWxlbWVudCkgPT4gU2V0dGluZ0dyb3VwSW5zdGFuY2U7XHJcbiAgICB9O1xyXG4gICAgY29uc3QgT2JzaWRpYW5UeXBlZCA9IE9ic2lkaWFuIGFzIHVua25vd24gYXMgT2JzaWRpYW5XaXRoU2V0dGluZ0dyb3VwO1xyXG4gICAgY29uc3QgU2V0dGluZ0dyb3VwQ3RvciA9IE9ic2lkaWFuVHlwZWQuU2V0dGluZ0dyb3VwO1xyXG4gICAgY29uc3QgZ3JvdXAgPSBuZXcgU2V0dGluZ0dyb3VwQ3Rvcihjb250YWluZXJFbCk7XHJcbiAgICBpZiAoaGVhZGluZykge1xyXG4gICAgICBncm91cC5zZXRIZWFkaW5nKGhlYWRpbmcpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgYWRkU2V0dGluZyhjYjogKHNldHRpbmc6IFNldHRpbmcpID0+IHZvaWQpIHtcclxuICAgICAgICBncm91cC5hZGRTZXR0aW5nKGNiKTtcclxuICAgICAgfSxcclxuICAgIH07XHJcbiAgfSBlbHNlIHtcclxuICAgIC8vIEZhbGxiYWNrIHBhdGggKGVpdGhlciBBUEkgPCAxLjExLjAgb3IgU2V0dGluZ0dyb3VwIG5vdCBmb3VuZClcclxuICAgIC8vIEFkZCBzY29waW5nIGNsYXNzIHRvIGNvbnRhaW5lckVsIHRvIHNjb3BlIENTUyB0byBvbmx5IHRoaXMgcGx1Z2luJ3Mgc2V0dGluZ3NcclxuICAgIGlmIChtYW5pZmVzdElkKSB7XHJcbiAgICAgIGNvbnRhaW5lckVsLmFkZENsYXNzKGAke21hbmlmZXN0SWR9LXNldHRpbmdzLWNvbXBhdGApO1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICAvLyBGYWxsYmFjazogY3JlYXRlIGEgZGVkaWNhdGVkIGNvbnRhaW5lciB0byBrZWVwIGhlYWRpbmcgKyBzZXR0aW5ncyB0b2dldGhlclxyXG4gICAgY29uc3QgZ3JvdXBFbCA9IGNvbnRhaW5lckVsLmNyZWF0ZURpdignc2V0dGluZy1ncm91cCcpO1xyXG4gICAgaWYgKGhlYWRpbmcpIHtcclxuICAgICAgY29uc3QgaGVhZGluZ0VsID0gZ3JvdXBFbC5jcmVhdGVEaXYoJ3NldHRpbmctZ3JvdXAtaGVhZGluZycpO1xyXG4gICAgICBoZWFkaW5nRWwuY3JlYXRlRWwoJ2gzJywgeyB0ZXh0OiBoZWFkaW5nIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB7XHJcbiAgICAgIGFkZFNldHRpbmcoY2I6IChzZXR0aW5nOiBTZXR0aW5nKSA9PiB2b2lkKSB7XHJcbiAgICAgICAgY29uc3Qgc2V0dGluZyA9IG5ldyBTZXR0aW5nKGdyb3VwRWwpO1xyXG4gICAgICAgIGNiKHNldHRpbmcpO1xyXG4gICAgICB9LFxyXG4gICAgfTtcclxuICB9XHJcbn1cclxuXHJcblxyXG4iLCAiaW1wb3J0IHsgQXBwLCBzdHJpbmdpZnlZYW1sLCBwYXJzZVlhbWwgfSBmcm9tICdvYnNpZGlhbic7XHJcbmltcG9ydCB7IEFsaWFzRmlsZW5hbWVIaXN0b3J5U2V0dGluZ3MgfSBmcm9tICcuLi9zZXR0aW5ncyc7XHJcblxyXG5leHBvcnQgY2xhc3MgQWxpYXNQcm9jZXNzb3Ige1xyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBhcHA6IEFwcCxcclxuICAgIHByaXZhdGUgc2V0dGluZ3M6IEFsaWFzRmlsZW5hbWVIaXN0b3J5U2V0dGluZ3NcclxuICApIHt9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgcHJvY2Vzc0FsaWFzZXNNYW51YWxseShwYXRoOiBzdHJpbmcsIHF1ZXVlOiBTZXQ8c3RyaW5nPik6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgY29uc3QgZmlsZSA9IHRoaXMuYXBwLnZhdWx0LmdldEZpbGVCeVBhdGgocGF0aCk7XHJcbiAgICBpZiAoIWZpbGUpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHJlZ2V4ZXM6IFJlZ0V4cFtdID0gW107XHJcbiAgICBmb3IgKGNvbnN0IHJlZ2V4U3RyIG9mIHRoaXMuc2V0dGluZ3MuaWdub3JlUmVnZXhlcykge1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIHJlZ2V4ZXMucHVzaChuZXcgUmVnRXhwKHJlZ2V4U3RyKSk7XHJcbiAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKGBJbnZhbGlkIGlnbm9yZSByZWdleDogJHtyZWdleFN0cn1gLCBlKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHRvQWRkOiBzdHJpbmdbXSA9IFtdO1xyXG4gICAgY29uc3QgY3VycmVudEJhc2VuYW1lID0gZmlsZS5iYXNlbmFtZTtcclxuICAgIGNvbnN0IGN1cnJlbnRCYXNlbmFtZUxvd2VyID0gY3VycmVudEJhc2VuYW1lLnRvTG93ZXJDYXNlKCk7XHJcblxyXG4gICAgZm9yIChjb25zdCBuYW1lIG9mIHF1ZXVlKSB7XHJcbiAgICAgIGlmIChyZWdleGVzLnNvbWUocmUgPT4gcmUudGVzdChuYW1lKSkpIHtcclxuICAgICAgICBjb250aW51ZTtcclxuICAgICAgfVxyXG4gICAgICBjb25zdCBuYW1lTG93ZXIgPSBuYW1lLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgIGlmIChcclxuICAgICAgICAodGhpcy5zZXR0aW5ncy5jYXNlU2Vuc2l0aXZlICYmIG5hbWUgPT09IGN1cnJlbnRCYXNlbmFtZSkgfHxcclxuICAgICAgICAoIXRoaXMuc2V0dGluZ3MuY2FzZVNlbnNpdGl2ZSAmJiBuYW1lTG93ZXIgPT09IGN1cnJlbnRCYXNlbmFtZUxvd2VyKVxyXG4gICAgICApIHtcclxuICAgICAgICBjb250aW51ZTtcclxuICAgICAgfVxyXG4gICAgICB0b0FkZC5wdXNoKG5hbWUpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0b0FkZC5sZW5ndGggPT09IDApIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFJlYWQgZmlsZSBjb250ZW50XHJcbiAgICBsZXQgY29udGVudCA9IGF3YWl0IHRoaXMuYXBwLnZhdWx0LnJlYWQoZmlsZSk7XHJcblxyXG4gICAgLy8gUGFyc2UgZnJvbnRtYXR0ZXJcclxuICAgIGNvbnN0IGZyb250bWF0dGVyUmVnZXggPSAvXi0tLVxcbihbXFxzXFxTXSo/KVxcbi0tLVxcbi87XHJcbiAgICBjb25zdCBtYXRjaCA9IGNvbnRlbnQubWF0Y2goZnJvbnRtYXR0ZXJSZWdleCk7XHJcblxyXG4gICAgbGV0IGZyb250bWF0dGVyOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHt9O1xyXG4gICAgbGV0IGZyb250bWF0dGVyVGV4dCA9ICcnO1xyXG4gICAgbGV0IGJvZHlDb250ZW50ID0gY29udGVudDtcclxuXHJcbiAgICBpZiAobWF0Y2gpIHtcclxuICAgICAgZnJvbnRtYXR0ZXJUZXh0ID0gbWF0Y2hbMV07XHJcbiAgICAgIGJvZHlDb250ZW50ID0gY29udGVudC5zbGljZShtYXRjaFswXS5sZW5ndGgpO1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIGNvbnN0IHBhcnNlZCA9IHBhcnNlWWFtbChmcm9udG1hdHRlclRleHQpIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgbnVsbCB8IHVuZGVmaW5lZDtcclxuICAgICAgICBmcm9udG1hdHRlciA9IHBhcnNlZCAmJiB0eXBlb2YgcGFyc2VkID09PSAnb2JqZWN0JyA/IHBhcnNlZCA6IHt9O1xyXG4gICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcihgRXJyb3IgcGFyc2luZyBwcm9wZXJ0aWVzOmAsIGUpO1xyXG4gICAgICAgIGZyb250bWF0dGVyID0ge307XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGJvZHlDb250ZW50ID0gY29udGVudDtcclxuICAgIH1cclxuXHJcbiAgICAvLyBHZXQgb3IgY3JlYXRlIGFsaWFzZXMgYXJyYXlcclxuICAgIGxldCBhbGlhc2VzID0gZnJvbnRtYXR0ZXIuYWxpYXNlcztcclxuICAgIGlmICghQXJyYXkuaXNBcnJheShhbGlhc2VzKSkge1xyXG4gICAgICBjb25zdCBoYXNGcm9udG1hdHRlciA9IE9iamVjdC5rZXlzKGZyb250bWF0dGVyKS5sZW5ndGggPiAwO1xyXG4gICAgICBpZiAoaGFzRnJvbnRtYXR0ZXIgJiYgIXRoaXMuc2V0dGluZ3MuYXV0b0NyZWF0ZUZyb250bWF0dGVyKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIGFsaWFzZXMgPSBbXTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBhbGlhc2VzQXJyYXkgPSBhbGlhc2VzIGFzIHN0cmluZ1tdO1xyXG4gICAgY29uc3QgZXhpc3RpbmcgPSBuZXcgU2V0PHN0cmluZz4oXHJcbiAgICAgIHRoaXMuc2V0dGluZ3MuY2FzZVNlbnNpdGl2ZSA/IGFsaWFzZXNBcnJheSA6IGFsaWFzZXNBcnJheS5tYXAoKGE6IHN0cmluZykgPT4gYS50b0xvd2VyQ2FzZSgpKVxyXG4gICAgKTtcclxuXHJcbiAgICBsZXQgYWRkZWQgPSBmYWxzZTtcclxuICAgIGZvciAoY29uc3QgbmFtZSBvZiB0b0FkZCkge1xyXG4gICAgICBjb25zdCBjaGVja05hbWUgPSB0aGlzLnNldHRpbmdzLmNhc2VTZW5zaXRpdmUgPyBuYW1lIDogbmFtZS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICBpZiAoIWV4aXN0aW5nLmhhcyhjaGVja05hbWUpKSB7XHJcbiAgICAgICAgYWxpYXNlc0FycmF5LnB1c2gobmFtZSk7XHJcbiAgICAgICAgZXhpc3RpbmcuYWRkKGNoZWNrTmFtZSk7XHJcbiAgICAgICAgYWRkZWQgPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCFhZGRlZCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgLy8gVXBkYXRlIGZyb250bWF0dGVyXHJcbiAgICBmcm9udG1hdHRlci5hbGlhc2VzID0gYWxpYXNlc0FycmF5O1xyXG5cclxuICAgIC8vIFN0cmluZ2lmeSBmcm9udG1hdHRlclxyXG4gICAgY29uc3QgbmV3RnJvbnRtYXR0ZXJUZXh0ID0gc3RyaW5naWZ5WWFtbChmcm9udG1hdHRlcikudHJpbSgpO1xyXG5cclxuICAgIC8vIFJlY29uc3RydWN0IGZpbGUgY29udGVudFxyXG4gICAgY29uc3QgbmV3Q29udGVudCA9IGAtLS1cXG4ke25ld0Zyb250bWF0dGVyVGV4dH1cXG4tLS1cXG4ke2JvZHlDb250ZW50fWA7XHJcblxyXG4gICAgLy8gV3JpdGUgYmFjayB0byBmaWxlXHJcbiAgICBhd2FpdCB0aGlzLmFwcC52YXVsdC5tb2RpZnkoZmlsZSwgbmV3Q29udGVudCk7XHJcbiAgfVxyXG5cclxuICBhc3luYyBwcm9jZXNzQWxpYXNlcyhwYXRoOiBzdHJpbmcsIHF1ZXVlOiBTZXQ8c3RyaW5nPik6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgY29uc3QgZmlsZSA9IHRoaXMuYXBwLnZhdWx0LmdldEZpbGVCeVBhdGgocGF0aCk7XHJcbiAgICBpZiAoIWZpbGUpIHJldHVybjtcclxuXHJcbiAgICBjb25zdCByZWdleGVzOiBSZWdFeHBbXSA9IFtdO1xyXG4gICAgZm9yIChjb25zdCByZWdleFN0ciBvZiB0aGlzLnNldHRpbmdzLmlnbm9yZVJlZ2V4ZXMpIHtcclxuICAgICAgdHJ5IHtcclxuICAgICAgICByZWdleGVzLnB1c2gobmV3IFJlZ0V4cChyZWdleFN0cikpO1xyXG4gICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcihgSW52YWxpZCBpZ25vcmUgcmVnZXg6ICR7cmVnZXhTdHJ9YCwgZSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBjb25zdCB0b0FkZDogc3RyaW5nW10gPSBbXTtcclxuICAgIGNvbnN0IGN1cnJlbnRCYXNlbmFtZSA9IGZpbGUuYmFzZW5hbWU7XHJcbiAgICBjb25zdCBjdXJyZW50QmFzZW5hbWVMb3dlciA9IGN1cnJlbnRCYXNlbmFtZS50b0xvd2VyQ2FzZSgpO1xyXG5cclxuICAgIGZvciAoY29uc3QgbmFtZSBvZiBxdWV1ZSkge1xyXG4gICAgICBpZiAocmVnZXhlcy5zb21lKHJlID0+IHJlLnRlc3QobmFtZSkpKSB7XHJcbiAgICAgICAgY29udGludWU7XHJcbiAgICAgIH1cclxuICAgICAgY29uc3QgbmFtZUxvd2VyID0gbmFtZS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICBpZiAoXHJcbiAgICAgICAgKHRoaXMuc2V0dGluZ3MuY2FzZVNlbnNpdGl2ZSAmJiBuYW1lID09PSBjdXJyZW50QmFzZW5hbWUpIHx8XHJcbiAgICAgICAgKCF0aGlzLnNldHRpbmdzLmNhc2VTZW5zaXRpdmUgJiYgbmFtZUxvd2VyID09PSBjdXJyZW50QmFzZW5hbWVMb3dlcilcclxuICAgICAgKSB7XHJcbiAgICAgICAgY29udGludWU7XHJcbiAgICAgIH1cclxuICAgICAgdG9BZGQucHVzaChuYW1lKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodG9BZGQubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICAvLyBVc2UgbWFudWFsIHByb2Nlc3NpbmcgZm9yIG5vbi1tZCBmaWxlcywgb3IgYXMgZmFsbGJhY2tcclxuICAgIGlmIChmaWxlLmV4dGVuc2lvbiAhPT0gJ21kJykge1xyXG4gICAgICBhd2FpdCB0aGlzLnByb2Nlc3NBbGlhc2VzTWFudWFsbHkocGF0aCwgcXVldWUpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgYXdhaXQgdGhpcy5hcHAuZmlsZU1hbmFnZXIucHJvY2Vzc0Zyb250TWF0dGVyKGZpbGUsIChmbTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pID0+IHtcclxuICAgICAgbGV0IGFsaWFzZXMgPSBmbS5hbGlhc2VzO1xyXG4gICAgICBpZiAoIUFycmF5LmlzQXJyYXkoYWxpYXNlcykpIHtcclxuICAgICAgICAvLyBJZiB0aGVyZSdzIG5vIGZyb250bWF0dGVyIGF0IGFsbCwgd2UgbmVlZCB0byBjcmVhdGUgaXQgdG8gYWRkIGFsaWFzZXNcclxuICAgICAgICAvLyBJZiB0aGVyZSdzIGZyb250bWF0dGVyIGJ1dCBubyBhbGlhc2VzIHByb3BlcnR5LCByZXNwZWN0IHRoZSBhdXRvQ3JlYXRlRnJvbnRtYXR0ZXIgc2V0dGluZ1xyXG4gICAgICAgIGNvbnN0IGhhc0Zyb250bWF0dGVyID0gT2JqZWN0LmtleXMoZm0pLmxlbmd0aCA+IDA7XHJcbiAgICAgICAgaWYgKGhhc0Zyb250bWF0dGVyICYmICF0aGlzLnNldHRpbmdzLmF1dG9DcmVhdGVGcm9udG1hdHRlcikge1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBhbGlhc2VzID0gW107XHJcbiAgICAgICAgZm0uYWxpYXNlcyA9IGFsaWFzZXM7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNvbnN0IGFsaWFzZXNBcnJheSA9IGFsaWFzZXMgYXMgc3RyaW5nW107XHJcbiAgICAgIGNvbnN0IGV4aXN0aW5nID0gbmV3IFNldDxzdHJpbmc+KFxyXG4gICAgICAgIHRoaXMuc2V0dGluZ3MuY2FzZVNlbnNpdGl2ZSA/IGFsaWFzZXNBcnJheSA6IGFsaWFzZXNBcnJheS5tYXAoKGE6IHN0cmluZykgPT4gYS50b0xvd2VyQ2FzZSgpKVxyXG4gICAgICApO1xyXG5cclxuICAgICAgZm9yIChjb25zdCBuYW1lIG9mIHRvQWRkKSB7XHJcbiAgICAgICAgY29uc3QgY2hlY2tOYW1lID0gdGhpcy5zZXR0aW5ncy5jYXNlU2Vuc2l0aXZlID8gbmFtZSA6IG5hbWUudG9Mb3dlckNhc2UoKTtcclxuICAgICAgICBpZiAoIWV4aXN0aW5nLmhhcyhjaGVja05hbWUpKSB7XHJcbiAgICAgICAgICBhbGlhc2VzQXJyYXkucHVzaChuYW1lKTtcclxuICAgICAgICAgIGV4aXN0aW5nLmFkZChjaGVja05hbWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG59XHJcbiIsICJleHBvcnQgZnVuY3Rpb24gZ2V0QmFzZW5hbWUocGF0aDogc3RyaW5nKTogc3RyaW5nIHtcclxuICBjb25zdCBuYW1lID0gcGF0aC5zcGxpdCgnLycpLnBvcCgpIHx8ICcnO1xyXG4gIHJldHVybiBuYW1lLnJlcGxhY2UoL1xcLlteLy5dKyQvLCAnJyk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRJbW1lZGlhdGVQYXJlbnROYW1lKHBhdGg6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgY29uc3QgcGFydHMgPSBwYXRoLnNwbGl0KCcvJyk7XHJcbiAgcGFydHMucG9wKCk7IC8vIFJlbW92ZSBmaWxlIG5hbWVcclxuICByZXR1cm4gcGFydHMucG9wKCkgfHwgJyc7IC8vIEdldCBpbW1lZGlhdGUgcGFyZW50IGZvbGRlciBuYW1lIG9yICcnIGlmIHJvb3RcclxufVxyXG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBQUFBLG1CQUE2Qzs7O0FDWXRDLElBQU0sbUJBQWlEO0FBQUEsRUFDNUQsZUFBZSxDQUFDLE1BQU0sY0FBYyxpQkFBaUI7QUFBQSxFQUNyRCxnQkFBZ0I7QUFBQSxFQUNoQixlQUFlO0FBQUEsRUFDZix1QkFBdUI7QUFBQSxFQUN2QixnQkFBZ0IsQ0FBQztBQUFBLEVBQ2pCLGdCQUFnQixDQUFDO0FBQUEsRUFDakIsZ0JBQWdCLENBQUMsSUFBSTtBQUFBLEVBQ3JCLG9CQUFvQjtBQUFBLEVBQ3BCLHFCQUFxQjtBQUN2Qjs7O0FDdEJBLElBQUFDLG1CQUE4Qzs7O0FDSTlDLHNCQUEyQztBQUMzQyxlQUEwQjtBQTBCbkIsU0FBUyxvQkFDZCxhQUNBLFNBQ0EsWUFDbUI7QUFHbkIsVUFBSSxtQ0FBa0IsUUFBUSxHQUFHO0FBTS9CLFVBQU0sZ0JBQWdCO0FBQ3RCLFVBQU0sbUJBQW1CLGNBQWM7QUFDdkMsVUFBTSxRQUFRLElBQUksaUJBQWlCLFdBQVc7QUFDOUMsUUFBSSxTQUFTO0FBQ1gsWUFBTSxXQUFXLE9BQU87QUFBQSxJQUMxQjtBQUNBLFdBQU87QUFBQSxNQUNMLFdBQVcsSUFBZ0M7QUFDekMsY0FBTSxXQUFXLEVBQUU7QUFBQSxNQUNyQjtBQUFBLElBQ0Y7QUFBQSxFQUNGLE9BQU87QUFHTCxRQUFJLFlBQVk7QUFDZCxrQkFBWSxTQUFTLEdBQUcsVUFBVSxrQkFBa0I7QUFBQSxJQUN0RDtBQUdBLFVBQU0sVUFBVSxZQUFZLFVBQVUsZUFBZTtBQUNyRCxRQUFJLFNBQVM7QUFDWCxZQUFNLFlBQVksUUFBUSxVQUFVLHVCQUF1QjtBQUMzRCxnQkFBVSxTQUFTLE1BQU0sRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUFBLElBQzVDO0FBRUEsV0FBTztBQUFBLE1BQ0wsV0FBVyxJQUFnQztBQUN6QyxjQUFNLFVBQVUsSUFBSSx3QkFBUSxPQUFPO0FBQ25DLFdBQUcsT0FBTztBQUFBLE1BQ1o7QUFBQSxJQUNGO0FBQUEsRUFDRjtBQUNGOzs7QURuRU8sSUFBTSxpQ0FBTixjQUE2QyxrQ0FBaUI7QUFBQSxFQUduRSxZQUFZLEtBQVUsUUFBb0M7QUFDeEQsVUFBTSxLQUFLLE1BQU07QUFDakIsU0FBSyxTQUFTO0FBQUEsRUFDaEI7QUFBQSxFQUVBLFVBQWdCO0FBQ2QsVUFBTSxFQUFFLFlBQVksSUFBSTtBQUN4QixnQkFBWSxNQUFNO0FBR2xCLFVBQU0sZUFBZSxNQUFZO0FBQy9CLFdBQUssS0FBSyxPQUFPLGFBQWE7QUFBQSxJQUNoQztBQUVBLFVBQU0sZUFBZSxvQkFBb0IsYUFBYSxRQUFXLHlCQUF5QjtBQUcxRixpQkFBYSxXQUFXLENBQUMsWUFBWTtBQUNuQyxjQUNHLFFBQVEsaUJBQWlCLEVBQ3pCLFFBQVEsZ0VBQWdFLEVBQ3hFO0FBQUEsUUFBVSxDQUFDLFdBQ1YsT0FDRyxVQUFVLEdBQUcsSUFBSSxDQUFDLEVBQ2xCLFNBQVMsS0FBSyxPQUFPLFNBQVMsY0FBYyxFQUM1QyxrQkFBa0IsRUFDbEIsU0FBUyxDQUFDLFVBQVU7QUFDbkIsZUFBSyxPQUFPLFNBQVMsaUJBQWlCO0FBQ3RDLHVCQUFhO0FBQUEsUUFDZixDQUFDO0FBQUEsTUFDTDtBQUFBLElBQ0osQ0FBQztBQUVELGlCQUFhLFdBQVcsQ0FBQyxZQUFZO0FBQ25DLGNBQ0csUUFBUSwyQkFBMkIsRUFFbkMsUUFBUSx1REFBdUQsRUFDL0Q7QUFBQSxRQUFVLENBQUMsV0FDVixPQUNHLFNBQVMsS0FBSyxPQUFPLFNBQVMsYUFBYSxFQUMzQyxTQUFTLENBQUMsVUFBVTtBQUNuQixlQUFLLE9BQU8sU0FBUyxnQkFBZ0I7QUFDckMsdUJBQWE7QUFBQSxRQUNmLENBQUM7QUFBQSxNQUNMO0FBQUEsSUFDSixDQUFDO0FBRUQsaUJBQWEsV0FBVyxDQUFDLFlBQVk7QUFDbkMsY0FDRyxRQUFRLHdCQUF3QixFQUNoQyxRQUFRLDBEQUEwRCxFQUNsRTtBQUFBLFFBQVUsQ0FBQyxXQUNWLE9BQ0csU0FBUyxLQUFLLE9BQU8sU0FBUyxxQkFBcUIsRUFDbkQsU0FBUyxDQUFDLFVBQVU7QUFDbkIsZUFBSyxPQUFPLFNBQVMsd0JBQXdCO0FBQzdDLHVCQUFhO0FBQUEsUUFDZixDQUFDO0FBQUEsTUFDTDtBQUFBLElBQ0osQ0FBQztBQUVELGlCQUFhLFdBQVcsQ0FBQyxZQUFZO0FBQ25DLGNBQ0csUUFBUSxpQkFBaUIsRUFDekIsUUFBUSxtREFBbUQsRUFDM0Q7QUFBQSxRQUFRLENBQUMsU0FDUixLQUVHLGVBQWUsU0FBUyxFQUN4QixTQUFTLEtBQUssT0FBTyxTQUFTLGVBQWUsS0FBSyxHQUFHLENBQUMsRUFDdEQsU0FBUyxDQUFDLFVBQVU7QUFDbkIsZUFBSyxPQUFPLFNBQVMsaUJBQWlCLE1BQ25DLE1BQU0sR0FBRyxFQUNULElBQUksQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLEVBQ25CLE9BQU8sQ0FBQyxNQUFNLENBQUM7QUFDbEIsdUJBQWE7QUFBQSxRQUNmLENBQUM7QUFBQSxNQUNMO0FBQUEsSUFDSixDQUFDO0FBRUQsVUFBTSxpQkFBaUIsb0JBQW9CLGFBQWEsYUFBYSx5QkFBeUI7QUFDOUYsVUFBTSxlQUFlLG9CQUFvQixhQUFhLFdBQVcseUJBQXlCO0FBQzFGLFVBQU0sZ0JBQWdCLG9CQUFvQixhQUFhLFlBQVkseUJBQXlCO0FBRzVGLG1CQUFlLFdBQVcsQ0FBQyxZQUFZO0FBQ3JDLGNBQ0csUUFBUSx1QkFBdUIsRUFDL0I7QUFBQSxRQUNDO0FBQUEsTUFDRixFQUNDO0FBQUEsUUFBUSxDQUFDLFNBQ1IsS0FDRyxlQUFlLGlDQUFpQyxFQUNoRCxTQUFTLEtBQUssT0FBTyxTQUFTLGNBQWMsS0FBSyxHQUFHLENBQUMsRUFDckQsU0FBUyxDQUFDLFVBQVU7QUFDbkIsZUFBSyxPQUFPLFNBQVMsZ0JBQWdCLE1BQ2xDLE1BQU0sR0FBRyxFQUNULElBQUksQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLEVBQ25CLE9BQU8sQ0FBQyxNQUFNLENBQUM7QUFDbEIsdUJBQWE7QUFBQSxRQUNmLENBQUM7QUFBQSxNQUNMO0FBQUEsSUFDSixDQUFDO0FBRUQsbUJBQWUsV0FBVyxDQUFDLFlBQVk7QUFDckMsY0FDRyxRQUFRLHVCQUF1QixFQUMvQjtBQUFBLFFBQ0M7QUFBQSxNQUNGLEVBQ0M7QUFBQSxRQUFRLENBQUMsU0FDUixLQUVHLGVBQWUsc0JBQXNCLEVBQ3JDLFNBQVMsS0FBSyxPQUFPLFNBQVMsbUJBQW1CLEVBQ2pELFNBQVMsQ0FBQyxVQUFVO0FBQ25CLGVBQUssT0FBTyxTQUFTLHNCQUFzQjtBQUMzQyx1QkFBYTtBQUFBLFFBQ2YsQ0FBQztBQUFBLE1BQ0w7QUFBQSxJQUNKLENBQUM7QUFHRCxpQkFBYSxXQUFXLENBQUMsWUFBWTtBQUNuQyxjQUNHLFFBQVEsaUJBQWlCLEVBQ3pCO0FBQUEsUUFDQztBQUFBLE1BQ0YsRUFDQztBQUFBLFFBQVEsQ0FBQyxTQUNSLEtBQ0csU0FBUyxLQUFLLE9BQU8sU0FBUyxlQUFlLEtBQUssR0FBRyxDQUFDLEVBQ3RELFNBQVMsQ0FBQyxVQUFVO0FBQ25CLGVBQUssT0FBTyxTQUFTLGlCQUFpQixNQUNuQyxNQUFNLEdBQUcsRUFDVCxJQUFJLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxFQUNuQixPQUFPLENBQUMsTUFBTSxDQUFDO0FBQ2xCLHVCQUFhO0FBQUEsUUFDZixDQUFDO0FBQUEsTUFDTDtBQUFBLElBQ0osQ0FBQztBQUVELGlCQUFhLFdBQVcsQ0FBQyxZQUFZO0FBQ25DLGNBQ0csUUFBUSxpQkFBaUIsRUFDekI7QUFBQSxRQUNDO0FBQUEsTUFDRixFQUNDO0FBQUEsUUFBUSxDQUFDLFNBQ1IsS0FDRyxTQUFTLEtBQUssT0FBTyxTQUFTLGVBQWUsS0FBSyxHQUFHLENBQUMsRUFDdEQsU0FBUyxDQUFDLFVBQVU7QUFDbkIsZUFBSyxPQUFPLFNBQVMsaUJBQWlCLE1BQ25DLE1BQU0sR0FBRyxFQUNULElBQUksQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLEVBQ25CLE9BQU8sQ0FBQyxNQUFNLENBQUM7QUFDbEIsdUJBQWE7QUFBQSxRQUNmLENBQUM7QUFBQSxNQUNMO0FBQUEsSUFDSixDQUFDO0FBR0Qsa0JBQWMsV0FBVyxDQUFDLFlBQVk7QUFDcEMsY0FDRyxRQUFRLDZDQUE2QyxFQUNyRDtBQUFBO0FBQUEsUUFFQztBQUFBLE1BQ0YsRUFDQztBQUFBLFFBQVEsQ0FBQyxTQUNSLEtBRUcsZUFBZSxPQUFPLEVBQ3RCLFNBQVMsS0FBSyxPQUFPLFNBQVMsa0JBQWtCLEVBQ2hELFNBQVMsQ0FBQyxVQUFVO0FBQ25CLGVBQUssT0FBTyxTQUFTLHFCQUFxQjtBQUMxQyx1QkFBYTtBQUFBLFFBQ2YsQ0FBQztBQUFBLE1BQ0w7QUFBQSxJQUNKLENBQUM7QUFBQSxFQUVIO0FBQ0Y7OztBRXBNQSxJQUFBQyxtQkFBOEM7QUFHdkMsSUFBTSxpQkFBTixNQUFxQjtBQUFBLEVBQzFCLFlBQ1UsS0FDQSxVQUNSO0FBRlE7QUFDQTtBQUFBLEVBQ1A7QUFBQSxFQUVILE1BQWMsdUJBQXVCLE1BQWMsT0FBbUM7QUFDcEYsVUFBTSxPQUFPLEtBQUssSUFBSSxNQUFNLGNBQWMsSUFBSTtBQUM5QyxRQUFJLENBQUMsTUFBTTtBQUNUO0FBQUEsSUFDRjtBQUVBLFVBQU0sVUFBb0IsQ0FBQztBQUMzQixlQUFXLFlBQVksS0FBSyxTQUFTLGVBQWU7QUFDbEQsVUFBSTtBQUNGLGdCQUFRLEtBQUssSUFBSSxPQUFPLFFBQVEsQ0FBQztBQUFBLE1BQ25DLFNBQVMsR0FBRztBQUNWLGdCQUFRLE1BQU0seUJBQXlCLFFBQVEsSUFBSSxDQUFDO0FBQUEsTUFDdEQ7QUFBQSxJQUNGO0FBRUEsVUFBTSxRQUFrQixDQUFDO0FBQ3pCLFVBQU0sa0JBQWtCLEtBQUs7QUFDN0IsVUFBTSx1QkFBdUIsZ0JBQWdCLFlBQVk7QUFFekQsZUFBVyxRQUFRLE9BQU87QUFDeEIsVUFBSSxRQUFRLEtBQUssUUFBTSxHQUFHLEtBQUssSUFBSSxDQUFDLEdBQUc7QUFDckM7QUFBQSxNQUNGO0FBQ0EsWUFBTSxZQUFZLEtBQUssWUFBWTtBQUNuQyxVQUNHLEtBQUssU0FBUyxpQkFBaUIsU0FBUyxtQkFDeEMsQ0FBQyxLQUFLLFNBQVMsaUJBQWlCLGNBQWMsc0JBQy9DO0FBQ0E7QUFBQSxNQUNGO0FBQ0EsWUFBTSxLQUFLLElBQUk7QUFBQSxJQUNqQjtBQUVBLFFBQUksTUFBTSxXQUFXLEdBQUc7QUFDdEI7QUFBQSxJQUNGO0FBR0EsUUFBSSxVQUFVLE1BQU0sS0FBSyxJQUFJLE1BQU0sS0FBSyxJQUFJO0FBRzVDLFVBQU0sbUJBQW1CO0FBQ3pCLFVBQU0sUUFBUSxRQUFRLE1BQU0sZ0JBQWdCO0FBRTVDLFFBQUksY0FBdUMsQ0FBQztBQUM1QyxRQUFJLGtCQUFrQjtBQUN0QixRQUFJLGNBQWM7QUFFbEIsUUFBSSxPQUFPO0FBQ1Qsd0JBQWtCLE1BQU0sQ0FBQztBQUN6QixvQkFBYyxRQUFRLE1BQU0sTUFBTSxDQUFDLEVBQUUsTUFBTTtBQUMzQyxVQUFJO0FBQ0YsY0FBTSxhQUFTLDRCQUFVLGVBQWU7QUFDeEMsc0JBQWMsVUFBVSxPQUFPLFdBQVcsV0FBVyxTQUFTLENBQUM7QUFBQSxNQUNqRSxTQUFTLEdBQUc7QUFDVixnQkFBUSxNQUFNLDZCQUE2QixDQUFDO0FBQzVDLHNCQUFjLENBQUM7QUFBQSxNQUNqQjtBQUFBLElBQ0YsT0FBTztBQUNMLG9CQUFjO0FBQUEsSUFDaEI7QUFHQSxRQUFJLFVBQVUsWUFBWTtBQUMxQixRQUFJLENBQUMsTUFBTSxRQUFRLE9BQU8sR0FBRztBQUMzQixZQUFNLGlCQUFpQixPQUFPLEtBQUssV0FBVyxFQUFFLFNBQVM7QUFDekQsVUFBSSxrQkFBa0IsQ0FBQyxLQUFLLFNBQVMsdUJBQXVCO0FBQzFEO0FBQUEsTUFDRjtBQUNBLGdCQUFVLENBQUM7QUFBQSxJQUNiO0FBRUEsVUFBTSxlQUFlO0FBQ3JCLFVBQU0sV0FBVyxJQUFJO0FBQUEsTUFDbkIsS0FBSyxTQUFTLGdCQUFnQixlQUFlLGFBQWEsSUFBSSxDQUFDLE1BQWMsRUFBRSxZQUFZLENBQUM7QUFBQSxJQUM5RjtBQUVBLFFBQUksUUFBUTtBQUNaLGVBQVcsUUFBUSxPQUFPO0FBQ3hCLFlBQU0sWUFBWSxLQUFLLFNBQVMsZ0JBQWdCLE9BQU8sS0FBSyxZQUFZO0FBQ3hFLFVBQUksQ0FBQyxTQUFTLElBQUksU0FBUyxHQUFHO0FBQzVCLHFCQUFhLEtBQUssSUFBSTtBQUN0QixpQkFBUyxJQUFJLFNBQVM7QUFDdEIsZ0JBQVE7QUFBQSxNQUNWO0FBQUEsSUFDRjtBQUVBLFFBQUksQ0FBQyxPQUFPO0FBQ1Y7QUFBQSxJQUNGO0FBR0EsZ0JBQVksVUFBVTtBQUd0QixVQUFNLHlCQUFxQixnQ0FBYyxXQUFXLEVBQUUsS0FBSztBQUczRCxVQUFNLGFBQWE7QUFBQSxFQUFRLGtCQUFrQjtBQUFBO0FBQUEsRUFBVSxXQUFXO0FBR2xFLFVBQU0sS0FBSyxJQUFJLE1BQU0sT0FBTyxNQUFNLFVBQVU7QUFBQSxFQUM5QztBQUFBLEVBRUEsTUFBTSxlQUFlLE1BQWMsT0FBbUM7QUFDcEUsVUFBTSxPQUFPLEtBQUssSUFBSSxNQUFNLGNBQWMsSUFBSTtBQUM5QyxRQUFJLENBQUMsS0FBTTtBQUVYLFVBQU0sVUFBb0IsQ0FBQztBQUMzQixlQUFXLFlBQVksS0FBSyxTQUFTLGVBQWU7QUFDbEQsVUFBSTtBQUNGLGdCQUFRLEtBQUssSUFBSSxPQUFPLFFBQVEsQ0FBQztBQUFBLE1BQ25DLFNBQVMsR0FBRztBQUNWLGdCQUFRLE1BQU0seUJBQXlCLFFBQVEsSUFBSSxDQUFDO0FBQUEsTUFDdEQ7QUFBQSxJQUNGO0FBRUEsVUFBTSxRQUFrQixDQUFDO0FBQ3pCLFVBQU0sa0JBQWtCLEtBQUs7QUFDN0IsVUFBTSx1QkFBdUIsZ0JBQWdCLFlBQVk7QUFFekQsZUFBVyxRQUFRLE9BQU87QUFDeEIsVUFBSSxRQUFRLEtBQUssUUFBTSxHQUFHLEtBQUssSUFBSSxDQUFDLEdBQUc7QUFDckM7QUFBQSxNQUNGO0FBQ0EsWUFBTSxZQUFZLEtBQUssWUFBWTtBQUNuQyxVQUNHLEtBQUssU0FBUyxpQkFBaUIsU0FBUyxtQkFDeEMsQ0FBQyxLQUFLLFNBQVMsaUJBQWlCLGNBQWMsc0JBQy9DO0FBQ0E7QUFBQSxNQUNGO0FBQ0EsWUFBTSxLQUFLLElBQUk7QUFBQSxJQUNqQjtBQUVBLFFBQUksTUFBTSxXQUFXLEdBQUc7QUFDdEI7QUFBQSxJQUNGO0FBR0EsUUFBSSxLQUFLLGNBQWMsTUFBTTtBQUMzQixZQUFNLEtBQUssdUJBQXVCLE1BQU0sS0FBSztBQUM3QztBQUFBLElBQ0Y7QUFFQSxVQUFNLEtBQUssSUFBSSxZQUFZLG1CQUFtQixNQUFNLENBQUMsT0FBZ0M7QUFDbkYsVUFBSSxVQUFVLEdBQUc7QUFDakIsVUFBSSxDQUFDLE1BQU0sUUFBUSxPQUFPLEdBQUc7QUFHM0IsY0FBTSxpQkFBaUIsT0FBTyxLQUFLLEVBQUUsRUFBRSxTQUFTO0FBQ2hELFlBQUksa0JBQWtCLENBQUMsS0FBSyxTQUFTLHVCQUF1QjtBQUMxRDtBQUFBLFFBQ0Y7QUFDQSxrQkFBVSxDQUFDO0FBQ1gsV0FBRyxVQUFVO0FBQUEsTUFDZjtBQUVBLFlBQU0sZUFBZTtBQUNyQixZQUFNLFdBQVcsSUFBSTtBQUFBLFFBQ25CLEtBQUssU0FBUyxnQkFBZ0IsZUFBZSxhQUFhLElBQUksQ0FBQyxNQUFjLEVBQUUsWUFBWSxDQUFDO0FBQUEsTUFDOUY7QUFFQSxpQkFBVyxRQUFRLE9BQU87QUFDeEIsY0FBTSxZQUFZLEtBQUssU0FBUyxnQkFBZ0IsT0FBTyxLQUFLLFlBQVk7QUFDeEUsWUFBSSxDQUFDLFNBQVMsSUFBSSxTQUFTLEdBQUc7QUFDNUIsdUJBQWEsS0FBSyxJQUFJO0FBQ3RCLG1CQUFTLElBQUksU0FBUztBQUFBLFFBQ3hCO0FBQUEsTUFDRjtBQUFBLElBQ0YsQ0FBQztBQUFBLEVBQ0g7QUFDRjs7O0FDckxPLFNBQVMsWUFBWSxNQUFzQjtBQUNoRCxRQUFNLE9BQU8sS0FBSyxNQUFNLEdBQUcsRUFBRSxJQUFJLEtBQUs7QUFDdEMsU0FBTyxLQUFLLFFBQVEsYUFBYSxFQUFFO0FBQ3JDO0FBRU8sU0FBUyx1QkFBdUIsTUFBc0I7QUFDM0QsUUFBTSxRQUFRLEtBQUssTUFBTSxHQUFHO0FBQzVCLFFBQU0sSUFBSTtBQUNWLFNBQU8sTUFBTSxJQUFJLEtBQUs7QUFDeEI7OztBTEhBLElBQXFCLDZCQUFyQixjQUF3RCx3QkFBTztBQUFBLEVBQS9EO0FBQUE7QUFFRSxTQUFRLGNBQTJGLG9CQUFJLElBQUk7QUFBQTtBQUFBLEVBRzNHLE1BQU0sU0FBUztBQUNiLFVBQU0sS0FBSyxhQUFhO0FBQ3hCLFNBQUssaUJBQWlCLElBQUksZUFBZSxLQUFLLEtBQUssS0FBSyxRQUFRO0FBQ2hFLFNBQUssY0FBYyxJQUFJLCtCQUErQixLQUFLLEtBQUssSUFBSSxDQUFDO0FBQ3JFLFNBQUs7QUFBQSxNQUNILEtBQUssSUFBSSxNQUFNLEdBQUcsVUFBVSxDQUFDLE1BQXFCLFlBQW9CO0FBQ3BFLGFBQUssYUFBYSxNQUFNLE9BQU87QUFBQSxNQUNqQyxDQUFDO0FBQUEsSUFDSDtBQUFBLEVBQ0Y7QUFBQSxFQUVBLFdBQVc7QUFFVCxlQUFXLFNBQVMsS0FBSyxZQUFZLE9BQU8sR0FBRztBQUM3QyxVQUFJLE1BQU0sY0FBYyxHQUFHO0FBQ3pCLGVBQU8sYUFBYSxNQUFNLFNBQVM7QUFBQSxNQUNyQztBQUFBLElBQ0Y7QUFDQSxTQUFLLFlBQVksTUFBTTtBQUFBLEVBQ3pCO0FBQUEsRUFFQSxNQUFNLGVBQWU7QUFDbkIsVUFBTSxhQUFjLE1BQU0sS0FBSyxTQUFTO0FBQ3hDLFNBQUssV0FBVyxPQUFPLE9BQU8sQ0FBQyxHQUFHLGtCQUFrQixVQUFVO0FBQUEsRUFDaEU7QUFBQSxFQUVBLE1BQU0sZUFBZTtBQUNuQixVQUFNLEtBQUssU0FBUyxLQUFLLFFBQVE7QUFBQSxFQUNuQztBQUFBLEVBRVEsZUFBZSxNQUFjLFFBQXlCO0FBRTVELFFBQUksT0FBTyxTQUFTLFNBQVMsS0FBSyxPQUFPLFNBQVMsUUFBUSxHQUFHO0FBQzNELFlBQU0saUJBQWlCLE9BQU8sUUFBUSx1QkFBdUIsRUFBRTtBQUUvRCxVQUFJLG1CQUFtQixNQUFNLG1CQUFtQixLQUFLO0FBRW5ELGNBQU0sY0FBYyxDQUFDLEtBQUssU0FBUyxHQUFHO0FBQ3RDLGVBQU87QUFBQSxNQUNUO0FBRUEsYUFBTyxLQUFLLFdBQVcsaUJBQWlCLEdBQUcsS0FBSyxTQUFTO0FBQUEsSUFDM0Q7QUFHQSxXQUFPLEtBQUssV0FBVyxTQUFTLEdBQUcsS0FBSyxTQUFTO0FBQUEsRUFDbkQ7QUFBQSxFQUVRLGVBQWUsTUFBYyxnQkFBaUM7QUFFcEUsUUFBSSxlQUFlLFNBQVMsU0FBUyxLQUFLLGVBQWUsU0FBUyxRQUFRLEdBQUc7QUFDM0UsWUFBTSxrQkFBa0IsZUFBZSxRQUFRLHVCQUF1QixFQUFFO0FBQ3hFLFVBQUksb0JBQW9CLE1BQU0sb0JBQW9CLEtBQUs7QUFFckQsZUFBTyxDQUFDLEtBQUssU0FBUyxHQUFHO0FBQUEsTUFDM0I7QUFDQSx1QkFBaUI7QUFBQSxJQUNuQjtBQUdBLFFBQUksZUFBZSxTQUFTLEtBQUssR0FBRztBQUVsQyxZQUFNLGFBQWEsZUFBZSxNQUFNLEdBQUcsRUFBRTtBQUM3QyxhQUFPLEtBQUssV0FBVyxhQUFhLEdBQUcsS0FBSyxTQUFTO0FBQUEsSUFDdkQsV0FBVyxlQUFlLFNBQVMsSUFBSSxHQUFHO0FBR3hDLFlBQU0sYUFBYSxlQUFlLE1BQU0sR0FBRyxFQUFFO0FBQzdDLFVBQUksQ0FBQyxLQUFLLFdBQVcsYUFBYSxHQUFHLEdBQUc7QUFDdEMsZUFBTyxTQUFTO0FBQUEsTUFDbEI7QUFDQSxZQUFNLGdCQUFnQixLQUFLLE1BQU0sV0FBVyxTQUFTLENBQUM7QUFHdEQsYUFBTyxjQUFjLFNBQVMsR0FBRztBQUFBLElBQ25DO0FBR0EsV0FBTyxLQUFLLFdBQVcsaUJBQWlCLEdBQUcsS0FBSyxTQUFTO0FBQUEsRUFDM0Q7QUFBQSxFQUVRLGFBQWEsU0FBd0IsU0FBaUI7QUFDNUQsUUFBSSxFQUFFLG1CQUFtQix3QkFBUTtBQUNqQyxRQUFJLENBQUMsS0FBSyxTQUFTLGVBQWUsU0FBUyxRQUFRLFNBQVMsRUFBRztBQUUvRCxVQUFNLGNBQWMsWUFBWSxPQUFPO0FBQ3ZDLFVBQU0sY0FBYyxRQUFRO0FBQzVCLFVBQU0seUJBQXlCLHVCQUF1QixPQUFPO0FBQzdELFVBQU0seUJBQXlCLHVCQUF1QixRQUFRLElBQUk7QUFFbEUsVUFBTSxlQUFlLEtBQUssU0FBUyxnQkFDL0IsZ0JBQWdCLGNBQ2hCLFlBQVksWUFBWSxNQUFNLFlBQVksWUFBWTtBQUMxRCxVQUFNLGlCQUFpQiwyQkFBMkIsMEJBQTBCLENBQUM7QUFFN0UsUUFBSSxDQUFDLGdCQUFnQixDQUFDLGdCQUFnQjtBQUNwQztBQUFBLElBQ0Y7QUFFQSxVQUFNLE9BQU8sUUFBUTtBQU1yQixRQUFJLEtBQUssU0FBUyx1QkFBdUIsS0FBSyxTQUFTLG9CQUFvQixLQUFLLE1BQU0sSUFBSTtBQUN4RixZQUFNLFFBQVEsS0FBSyxJQUFJLGNBQWMsYUFBYSxPQUFPO0FBQ3pELFlBQU0sY0FBYywrQkFBTztBQUMzQixVQUFJLGVBQWUsWUFBWSxLQUFLLFNBQVMsbUJBQW1CLE1BQU0sTUFBTTtBQUMxRTtBQUFBLE1BQ0Y7QUFBQSxJQUNGO0FBR0EsUUFBSSxLQUFLLFNBQVMsZUFBZSxTQUFTLEdBQUc7QUFDM0MsVUFBSSxDQUFDLEtBQUssU0FBUyxlQUFlLEtBQUssT0FBSyxLQUFLLGVBQWUsTUFBTSxDQUFDLENBQUMsR0FBRztBQUN6RTtBQUFBLE1BQ0Y7QUFBQSxJQUNGO0FBS0EsVUFBTSw2QkFBNkIsa0JBQ2pDLEtBQUssU0FBUyxzQkFDZCxLQUFLLFNBQVMsbUJBQW1CLEtBQUssTUFBTSxPQUMzQyxLQUFLLFNBQVMsZ0JBQ1gsUUFBUSxhQUFhLEtBQUssU0FBUyxxQkFDbkMsUUFBUSxTQUFTLFlBQVksTUFBTSxLQUFLLFNBQVMsbUJBQW1CLFlBQVk7QUFFdEYsZUFBVyxrQkFBa0IsS0FBSyxTQUFTLGdCQUFnQjtBQUN6RCxVQUFJLEtBQUssZUFBZSxNQUFNLGNBQWMsR0FBRztBQUc3QyxZQUFJLDhCQUE4QixlQUFlLFNBQVMsSUFBSSxLQUFLLENBQUMsZUFBZSxTQUFTLEtBQUssR0FBRztBQUVsRyxnQkFBTSxhQUFhLGVBQWUsTUFBTSxHQUFHLEVBQUU7QUFDN0MsY0FBSSxLQUFLLFdBQVcsYUFBYSxHQUFHLEdBQUc7QUFDckMsa0JBQU0sZ0JBQWdCLEtBQUssTUFBTSxXQUFXLFNBQVMsQ0FBQztBQUN0RCxrQkFBTSxZQUFZLGNBQWMsTUFBTSxHQUFHO0FBR3pDLGdCQUFJLFVBQVUsV0FBVyxHQUFHO0FBQzFCO0FBQUEsWUFDRjtBQUFBLFVBQ0Y7QUFBQSxRQUNGO0FBQ0E7QUFBQSxNQUNGO0FBQUEsSUFDRjtBQUdBLFVBQU0sVUFBb0IsQ0FBQztBQUMzQixlQUFXLFlBQVksS0FBSyxTQUFTLGVBQWU7QUFDbEQsVUFBSTtBQUNGLGdCQUFRLEtBQUssSUFBSSxPQUFPLFFBQVEsQ0FBQztBQUFBLE1BQ25DLFNBQVMsR0FBRztBQUNWLGdCQUFRLE1BQU0seUJBQXlCLFFBQVEsSUFBSSxDQUFDO0FBQUEsTUFDdEQ7QUFBQSxJQUNGO0FBRUEsUUFBSSxVQUF5QjtBQUM3QixRQUFJLGNBQWM7QUFDaEIsVUFBSSxRQUFRLEtBQUssUUFBTSxHQUFHLEtBQUssV0FBVyxLQUFLLEdBQUcsS0FBSyxXQUFXLENBQUMsR0FBRztBQUNwRTtBQUFBLE1BQ0Y7QUFDQSxnQkFBVTtBQUFBLElBQ1osV0FBVyxrQkFBa0IsS0FBSyxTQUFTLHNCQUFzQixLQUFLLFNBQVMsbUJBQW1CLEtBQUssTUFBTSxJQUFJO0FBRS9HLFlBQU0sa0JBQWtCLFFBQVE7QUFDaEMsWUFBTSxrQkFBa0IsS0FBSyxTQUFTLGdCQUNsQyxvQkFBb0IsS0FBSyxTQUFTLHFCQUNsQyxnQkFBZ0IsWUFBWSxNQUFNLEtBQUssU0FBUyxtQkFBbUIsWUFBWTtBQUVuRixVQUFJLENBQUMsaUJBQWlCO0FBQ3BCO0FBQUEsTUFDRjtBQUVBLFVBQUksMkJBQTJCLE1BQU0sMkJBQTJCLElBQUk7QUFDbEU7QUFBQSxNQUNGO0FBQ0EsVUFBSSxRQUFRLEtBQUssUUFBTSxHQUFHLEtBQUssc0JBQXNCLEtBQUssR0FBRyxLQUFLLHNCQUFzQixDQUFDLEdBQUc7QUFDMUY7QUFBQSxNQUNGO0FBQ0EsZ0JBQVU7QUFBQSxJQUNaO0FBRUEsUUFBSSxDQUFDLFFBQVM7QUFJZCxRQUFJLGdCQUFnQixLQUFLLFlBQVksSUFBSSxRQUFRLElBQUk7QUFDckQsUUFBSSxDQUFDLGVBQWU7QUFFbEIsc0JBQWdCLEtBQUssWUFBWSxJQUFJLE9BQU87QUFDNUMsVUFBSSxlQUFlO0FBRWpCLGFBQUssWUFBWSxPQUFPLE9BQU87QUFBQSxNQUNqQztBQUFBLElBQ0Y7QUFFQSxRQUFJLGVBQWU7QUFFakIsVUFBSSxjQUFjLGNBQWMsR0FBRztBQUNqQyxlQUFPLGFBQWEsY0FBYyxTQUFTO0FBQUEsTUFDN0M7QUFHQSxnQkFBVSxNQUFNLEtBQUssY0FBYyxLQUFLLEVBQUUsQ0FBQztBQUFBLElBQzdDO0FBR0EsVUFBTSxRQUFRO0FBQUEsTUFDWixPQUFPLG9CQUFJLElBQVksQ0FBQyxPQUFPLENBQUM7QUFBQSxNQUNoQyxXQUFXO0FBQUEsTUFDWCxhQUFhLFFBQVE7QUFBQSxJQUN2QjtBQUdBLFVBQU0sWUFBWSxPQUFPLFdBQVcsTUFBTTtBQUN4QyxZQUFNLFlBQVk7QUFDaEIsWUFBSTtBQUNGLGdCQUFNLEtBQUssZUFBZSxlQUFlLE1BQU0sYUFBYSxNQUFNLEtBQUs7QUFBQSxRQUN6RSxTQUFTLE9BQU87QUFDZCxrQkFBUSxNQUFNLDZCQUE2QixLQUFLO0FBQUEsUUFDbEQ7QUFDQSxhQUFLLFlBQVksT0FBTyxNQUFNLFdBQVc7QUFBQSxNQUMzQyxHQUFHO0FBQUEsSUFDTCxHQUFHLEtBQUssU0FBUyxpQkFBaUIsR0FBSTtBQUV0QyxTQUFLLFlBQVksSUFBSSxRQUFRLE1BQU0sS0FBSztBQUFBLEVBQzFDO0FBQ0Y7IiwKICAibmFtZXMiOiBbImltcG9ydF9vYnNpZGlhbiIsICJpbXBvcnRfb2JzaWRpYW4iLCAiaW1wb3J0X29ic2lkaWFuIl0KfQo= diff --git a/src/content/.obsidian/plugins/alias-file-name-history/manifest.json b/src/content/.obsidian/plugins/alias-file-name-history/manifest.json new file mode 100644 index 0000000..afafcc6 --- /dev/null +++ b/src/content/.obsidian/plugins/alias-file-name-history/manifest.json @@ -0,0 +1 @@ +{"id":"alias-file-name-history","name":"Alias File Name History","version":"0.2.4","minAppVersion":"0.15.0","description":"Store file name history into the aliases property of your notes.","author":"David V. Kimball","authorUrl":"https://davidvkimball.com","fundingUrl":"https://patreon.com/davidvkimball","isDesktopOnly":false} \ No newline at end of file diff --git a/src/content/.obsidian/plugins/alias-file-name-history/styles.css b/src/content/.obsidian/plugins/alias-file-name-history/styles.css new file mode 100644 index 0000000..91c6148 --- /dev/null +++ b/src/content/.obsidian/plugins/alias-file-name-history/styles.css @@ -0,0 +1,11 @@ +/* Group settings compatibility styling for older Obsidian builds (< 1.11.0) */ +/* Scoped to only this plugin's settings container to avoid affecting other plugins */ +.alias-file-name-history-settings-compat .setting-group-heading h3 { + margin: 0 0 0.75rem; + padding-bottom: 0.5rem; + padding-top: 0.5rem; + font-size: 1rem; + font-weight: 600; + border-bottom: none !important; +} + diff --git a/src/content/.obsidian/plugins/astro-composer/data.json b/src/content/.obsidian/plugins/astro-composer/data.json new file mode 100644 index 0000000..ea00017 --- /dev/null +++ b/src/content/.obsidian/plugins/astro-composer/data.json @@ -0,0 +1,56 @@ +{ + "defaultTemplate": "---\ntitle: \"{{title}}\"\ndate: {{date}}\ndescription: \"\"\ntags: []\nimage: \"\"\nimageAlt: \"\"\nimageOG: false\nhideCoverImage: false\nhideTOC: false\ntargetKeyword: \"\"\ndraft: true\n---", + "autoInsertProperties": true, + "dateFormat": "YYYY-MM-DD", + "enableCopyHeadingLink": true, + "copyHeadingLinkFormat": "astro", + "addTrailingSlashToLinks": true, + "enableOpenTerminalCommand": true, + "terminalProjectRootPath": "/home/fzzin/Programming/TS/homesite/homepage", + "terminalApplicationName": "", + "enableTerminalDebugLogging": false, + "enableTerminalRibbonIcon": true, + "enableOpenConfigFileCommand": true, + "configFilePath": "/home/fzzin/Programming/TS/homesite/homepage/src/config.ts", + "enableConfigRibbonIcon": true, + "contentTypes": [ + { + "id": "content-type-1772371679330-qy41e2hsz", + "name": "Posts", + "folder": "posts", + "linkBasePath": "/posts/", + "template": "---\ntitle: \"{{title}}\"\nupdated: {{date}}\npublished: \"\"\ntags: []\ncategory: \"\"\ndraft: true\ndescription: \"\"\nimage: \"\"\n---\n", + "enabled": true, + "creationMode": "folder", + "indexFileName": "index", + "ignoreSubfolders": false, + "enableUnderscorePrefix": false + }, + { + "id": "content-type-1772371679330-0e6t69ph9", + "name": "Pages", + "folder": "spec", + "linkBasePath": "/", + "template": "---\ntitle:{{title}}\npublished: \"\"\ntags:[]\ncategory: \"\"\ndraft: TRUE\n---\n", + "enabled": true, + "creationMode": "file", + "indexFileName": "index", + "ignoreSubfolders": false, + "enableUnderscorePrefix": false + } + ], + "migrationCompleted": true, + "helpButtonReplacement": { + "enabled": true, + "commandId": "astro-composer:edit-astro-config", + "iconId": "rocket" + }, + "showMdxFilesInExplorer": false, + "processBackgroundFileChanges": true, + "syncDraftDate": false, + "draftProperty": "", + "draftLogic": "true-is-draft", + "publishDateField": "", + "updateModifiedDate": false, + "modifiedDateField": "" +} \ No newline at end of file diff --git a/src/content/.obsidian/plugins/astro-composer/main.js b/src/content/.obsidian/plugins/astro-composer/main.js new file mode 100644 index 0000000..5497487 --- /dev/null +++ b/src/content/.obsidian/plugins/astro-composer/main.js @@ -0,0 +1,4446 @@ +/* +THIS IS A GENERATED/BUNDLED FILE BY ESBUILD +if you want to view the source, please visit the github repository of this plugin +*/ + +"use strict"; +var __create = Object.create; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __getProtoOf = Object.getPrototypeOf; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( + // If the importer is in node compatibility mode or this is not an ESM + // file that has been converted to a CommonJS file using a Babel- + // compatible transform (i.e. "__esModule" has not been set), then set + // "default" to the CommonJS "module.exports" for node compatibility. + isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, + mod +)); +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/main.ts +var main_exports = {}; +__export(main_exports, { + default: () => AstroComposerPlugin +}); +module.exports = __toCommonJS(main_exports); +var import_obsidian15 = require("obsidian"); + +// src/types.ts +var KNOWN_ARRAY_KEYS = ["tags", "aliases", "cssclasses"]; +var CONSTANTS = { + DEBOUNCE_MS: 500, + STAT_MTIME_THRESHOLD: 5e3, + EDITOR_STABILIZE_DELAY: 100, + FILE_EXPLORER_REVEAL_DELAY: 200 +}; + +// src/settings.ts +var DEFAULT_SETTINGS = { + defaultTemplate: '---\ntitle: "{{title}}"\ndate: {{date}}\ntags: []\n---\n', + autoInsertProperties: true, + dateFormat: "YYYY-MM-DD", + enableCopyHeadingLink: true, + copyHeadingLinkFormat: "obsidian", + addTrailingSlashToLinks: false, + enableOpenTerminalCommand: false, + terminalProjectRootPath: "", + terminalApplicationName: "", + enableTerminalDebugLogging: false, + enableTerminalRibbonIcon: false, + enableOpenConfigFileCommand: false, + configFilePath: "", + enableConfigRibbonIcon: false, + contentTypes: [], + migrationCompleted: false, + helpButtonReplacement: { + enabled: false, + commandId: "edit-astro-config", + iconId: "rocket" + }, + showMdxFilesInExplorer: false, + processBackgroundFileChanges: true, + syncDraftDate: false, + draftProperty: "", + draftLogic: "true-is-draft", + publishDateField: "" +}; + +// src/commands/index.ts +var import_obsidian5 = require("obsidian"); + +// src/utils/file-operations.ts +var import_obsidian = require("obsidian"); + +// src/utils/path-matching.ts +function matchesFolderPattern(filePath, folderPattern) { + const normalizedFilePath = filePath.toLowerCase(); + const normalizedPattern = folderPattern.toLowerCase().replace(/^\/|\/$/g, ""); + if (!normalizedPattern || normalizedPattern.trim() === "") { + return !normalizedFilePath.includes("/") || normalizedFilePath.split("/").length === 1; + } + if (!normalizedPattern.includes("*")) { + return normalizedFilePath === normalizedPattern || normalizedFilePath.startsWith(normalizedPattern + "/"); + } + const escapedPattern = normalizedPattern.replace(/[.+?^${}()|[\]\\]/g, "\\$&").replace(/\*/g, "[^/]+"); + const regexPattern = `^${escapedPattern}(?:/|$)`; + const regex = new RegExp(regexPattern); + return regex.test(normalizedFilePath); +} +function getPatternDepth(folderPattern) { + if (!folderPattern || folderPattern.trim() === "") return 0; + return folderPattern.split("/").length; +} +function sortByPatternSpecificity(types) { + return [...types].sort((a, b) => { + const depthA = getPatternDepth(a.folder); + const depthB = getPatternDepth(b.folder); + return depthB - depthA; + }); +} + +// src/utils/string-utils.ts +function toKebabCase(str) { + return str.replace(/([a-z0-9])([A-Z])/g, "$1-$2").replace(/([A-Z])([A-Z][a-z])/g, "$1-$2$3").toLowerCase().replace(/[^a-z0-9\s-]/g, "").trim().replace(/\s+/g, "-").replace(/-+/g, "-").replace(/^-|-$/g, ""); +} + +// src/utils/file-operations.ts +var FileOperations = class { + constructor(app, settings, plugin) { + this.app = app; + this.settings = settings; + this.plugin = plugin; + } + // Get fresh settings from plugin if available, otherwise use stored settings + getSettings() { + var _a; + if ((_a = this.plugin) == null ? void 0 : _a.settings) { + return this.plugin.settings; + } + return this.settings; + } + generateFilename(title, enableUnderscorePrefix = false) { + const kebabTitle = toKebabCase(title); + const safeKebabTitle = kebabTitle || "untitled"; + const prefix = enableUnderscorePrefix ? "_" : ""; + return `${prefix}${safeKebabTitle}`; + } + determineType(file) { + const filePath = file.path; + const settings = this.getSettings(); + const contentTypes = settings.contentTypes || []; + const sortedTypes = sortByPatternSpecificity(contentTypes); + for (const contentType of sortedTypes) { + if (!contentType.enabled) continue; + if (!contentType.folder || contentType.folder.trim() === "") { + if (!filePath.includes("/") || filePath.split("/").length === 1) { + return contentType.id; + } + } else if (matchesFolderPattern(filePath, contentType.folder)) { + if (contentType.ignoreSubfolders) { + const pathSegments = filePath.split("/"); + const pathDepth = pathSegments.length; + const patternSegments = contentType.folder.split("/"); + const expectedDepth = patternSegments.length; + if (contentType.creationMode === "folder") { + const folderDepth = pathDepth - 1; + if (folderDepth === expectedDepth || folderDepth === expectedDepth + 1) { + return contentType.id; + } + } else { + if (pathDepth === expectedDepth) { + return contentType.id; + } + } + } else { + return contentType.id; + } + } + } + return "note"; + } + getContentType(typeId) { + const settings = this.getSettings(); + const contentTypes = settings.contentTypes || []; + return contentTypes.find((ct) => ct.id === typeId) || null; + } + /** + * Helper to get content type for a given file path + */ + getContentTypeByPath(filePath) { + const dummyFile = { path: filePath }; + const typeId = this.determineType(dummyFile); + if (typeId === "note") return null; + return this.getContentType(typeId); + } + getTitleKey(type) { + if (type === "note") return "title"; + const contentType = this.getContentType(type); + if (!contentType) return "title"; + const template = contentType.template; + const lines = template.split("\n"); + let inProperties = false; + for (const line of lines) { + const trimmed = line.trim(); + if (trimmed === "---") { + inProperties = !inProperties; + continue; + } + if (inProperties) { + const match = trimmed.match(/^(\w+):\s*(.+)$/); + if (match) { + const key = match[1]; + const value = match[2]; + if (value.includes("{{title}}")) { + return key; + } + } + } + } + return "title"; + } + async createFile(options) { + var _a; + const { file, title, type } = options; + if (!title) { + new import_obsidian.Notice(`Title is required to create a ${type}.`); + return null; + } + const contentType = this.getContentType(type); + if (!contentType && type !== "note") { + new import_obsidian.Notice(`Content type ${type} not found.`); + return null; + } + const kebabTitle = toKebabCase(title); + const enableUnderscorePrefix = (contentType == null ? void 0 : contentType.enableUnderscorePrefix) || false; + const prefix = enableUnderscorePrefix ? "_" : ""; + let targetFolder = ""; + if (type === "note") { + targetFolder = ""; + } else if (contentType) { + const originalDir = ((_a = file.parent) == null ? void 0 : _a.path) || ""; + if (originalDir === "" || originalDir === "/") { + targetFolder = contentType.folder || ""; + } else { + targetFolder = originalDir; + } + } + if (targetFolder) { + const folder = this.app.vault.getAbstractFileByPath(targetFolder); + if (!(folder instanceof import_obsidian.TFolder)) { + await this.app.vault.createFolder(targetFolder); + } + } + const creationMode = (contentType == null ? void 0 : contentType.creationMode) || "file"; + if (creationMode === "folder") { + return this.createFolderStructure(file, kebabTitle, prefix, targetFolder, type, contentType); + } else { + return this.createFileStructure(file, kebabTitle, prefix, targetFolder, contentType); + } + } + async createFolderStructure(file, kebabTitle, prefix, targetFolder, type, contentType) { + const folderName = `${prefix}${kebabTitle}`; + let folderPath; + if (targetFolder) { + folderPath = `${targetFolder}/${folderName}`; + } else { + const currentDir = file.parent ? file.parent.path : ""; + if (currentDir && currentDir !== "/") { + folderPath = `${currentDir}/${folderName}`; + } else { + folderPath = folderName; + } + } + try { + const folder = this.app.vault.getAbstractFileByPath(folderPath); + if (!(folder instanceof import_obsidian.TFolder)) { + await this.app.vault.createFolder(folderPath); + } + } catch (e) { + } + const indexFileName = (contentType == null ? void 0 : contentType.indexFileName) || "index"; + const extension = (contentType == null ? void 0 : contentType.useMdxExtension) ? ".mdx" : ".md"; + const fileName = `${indexFileName}${extension}`; + const newPath = `${folderPath}/${fileName}`; + const existingFile = this.app.vault.getAbstractFileByPath(newPath); + if (existingFile instanceof import_obsidian.TFile) { + new import_obsidian.Notice(`File already exists at ${newPath}.`); + return null; + } + if (this.plugin) { + this.plugin.pluginCreatedFiles.set(newPath, Date.now()); + } + try { + await this.app.fileManager.renameFile(file, newPath); + const newFile = this.app.vault.getAbstractFileByPath(newPath); + if (!(newFile instanceof import_obsidian.TFile)) { + return null; + } + setTimeout(() => { + const fileExplorer = this.app.workspace.getLeavesOfType("file-explorer")[0]; + if (fileExplorer && fileExplorer.view) { + const view = fileExplorer.view; + if (view && typeof view === "object" && "tree" in view) { + const fileTree = view.tree; + if (fileTree && newFile instanceof import_obsidian.TFile && typeof fileTree.revealFile === "function") { + fileTree.revealFile(newFile); + } + } + } + }, 200); + const leaf = this.app.workspace.getLeaf(false); + await leaf.openFile(newFile); + const positionCursor = () => { + var _a; + const view = leaf.view; + if (view && "editor" in view) { + const editor = view.editor; + if (editor) { + const content = editor.getValue(); + if (content) { + const lines = content.split("\n"); + const lastLine = lines.length - 1; + const lastLineLength = ((_a = lines[lastLine]) == null ? void 0 : _a.length) || 0; + editor.setCursor({ line: lastLine, ch: lastLineLength }); + editor.focus(); + return true; + } + } + } + return false; + }; + setTimeout(() => { + if (!positionCursor()) { + setTimeout(() => { + positionCursor(); + }, 200); + } + }, 100); + return newFile; + } catch (error) { + const errorMessage = error instanceof Error ? error.message : String(error); + new import_obsidian.Notice(`Failed to create folder structure: ${errorMessage}.`); + return null; + } + } + async createFileStructure(file, kebabTitle, prefix, targetFolder, contentType) { + const extension = (contentType == null ? void 0 : contentType.useMdxExtension) ? ".mdx" : ".md"; + const newName = `${prefix}${kebabTitle}${extension}`; + let newPath; + if (targetFolder) { + newPath = `${targetFolder}/${newName}`; + } else { + const currentDir = file.parent ? file.parent.path : ""; + if (currentDir && currentDir !== "/") { + newPath = `${currentDir}/${newName}`; + } else { + newPath = newName; + } + } + const existingFile = this.app.vault.getAbstractFileByPath(newPath); + if (existingFile instanceof import_obsidian.TFile && existingFile !== file) { + new import_obsidian.Notice(`File with name "${newName}" already exists.`); + return null; + } + if (this.plugin) { + this.plugin.pluginCreatedFiles.set(newPath, Date.now()); + } + try { + await this.app.fileManager.renameFile(file, newPath); + const newFile = this.app.vault.getAbstractFileByPath(newPath); + if (!(newFile instanceof import_obsidian.TFile)) { + new import_obsidian.Notice("Failed to locate renamed file."); + return null; + } + const leaf = this.app.workspace.getLeaf(false); + await leaf.openFile(newFile); + const positionCursor = () => { + var _a; + const view = leaf.view; + if (view && "editor" in view) { + const editor = view.editor; + if (editor) { + const content = editor.getValue(); + if (content) { + const lines = content.split("\n"); + const lastLine = lines.length - 1; + const lastLineLength = ((_a = lines[lastLine]) == null ? void 0 : _a.length) || 0; + editor.setCursor({ line: lastLine, ch: lastLineLength }); + editor.focus(); + return true; + } + } + } + return false; + }; + setTimeout(() => { + if (!positionCursor()) { + setTimeout(() => { + positionCursor(); + }, 200); + } + }, 100); + return newFile; + } catch (error) { + const errorMessage = error instanceof Error ? error.message : String(error); + new import_obsidian.Notice(`Failed to rename file: ${errorMessage}.`); + return null; + } + } + async renameFile(options) { + const { file, title, type } = options; + if (!title) { + new import_obsidian.Notice(`Title is required to rename the content.`); + return null; + } + const contentType = this.getContentType(type); + if (!contentType && type !== "note") { + new import_obsidian.Notice(`Content type ${type} not found.`); + return null; + } + const kebabTitle = toKebabCase(title); + const prefix = ""; + const creationMode = (contentType == null ? void 0 : contentType.creationMode) || "file"; + if (creationMode === "folder") { + return this.renameFolderStructure(file, kebabTitle, prefix, type, contentType); + } else { + return this.renameFileStructure(file, kebabTitle, prefix, contentType); + } + } + async renameFolderStructure(file, kebabTitle, prefix, type, contentType) { + const indexFileName = (contentType == null ? void 0 : contentType.indexFileName) || "index"; + const isIndex = file.basename === indexFileName; + if (isIndex) { + if (!file.parent) { + new import_obsidian.Notice("Cannot rename: file has no parent folder."); + return null; + } + prefix = file.parent.name.startsWith("_") ? "_" : ""; + const newFolderName = `${prefix}${kebabTitle}`; + const parentFolder = file.parent.parent; + if (!parentFolder) { + new import_obsidian.Notice("Cannot rename: parent folder has no parent."); + return null; + } + let newFolderPath; + if (parentFolder.path === "" || parentFolder.path === "/") { + newFolderPath = newFolderName; + } else { + newFolderPath = `${parentFolder.path}/${newFolderName}`; + } + const existingFolder = this.app.vault.getAbstractFileByPath(newFolderPath); + if (existingFolder instanceof import_obsidian.TFolder) { + new import_obsidian.Notice(`Folder already exists at ${newFolderPath}.`); + return null; + } + try { + await this.app.fileManager.renameFile(file.parent, newFolderPath); + } catch (error) { + const errorMessage = error instanceof Error ? error.message : String(error); + new import_obsidian.Notice(`Failed to rename folder: ${errorMessage}.`); + return null; + } + const newFilePath = `${newFolderPath}/${file.name}`; + const newFile = this.app.vault.getAbstractFileByPath(newFilePath); + if (!(newFile instanceof import_obsidian.TFile)) { + new import_obsidian.Notice("Failed to locate renamed file."); + return null; + } + return newFile; + } else { + if (!file.parent) { + new import_obsidian.Notice("Cannot rename: file has no parent folder."); + return null; + } + prefix = file.basename.startsWith("_") ? "_" : ""; + const extension = file.extension; + const newName = `${prefix}${kebabTitle}.${extension}`; + const newPath = `${file.parent.path}/${newName}`; + const existingFile = this.app.vault.getAbstractFileByPath(newPath); + if (existingFile instanceof import_obsidian.TFile && existingFile !== file) { + new import_obsidian.Notice(`File already exists at ${newPath}.`); + return null; + } + await this.app.fileManager.renameFile(file, newPath); + const newFile = this.app.vault.getAbstractFileByPath(newPath); + if (!(newFile instanceof import_obsidian.TFile)) { + new import_obsidian.Notice("Failed to locate renamed file."); + return null; + } + return newFile; + } + } + async renameFileStructure(file, kebabTitle, prefix, contentType) { + if (!file.parent) { + new import_obsidian.Notice("Cannot rename: file has no parent folder."); + return null; + } + const indexFileName = (contentType == null ? void 0 : contentType.indexFileName) || ""; + const isIndex = indexFileName && indexFileName.trim() !== "" && file.basename === indexFileName; + if (isIndex) { + prefix = file.parent.name.startsWith("_") ? "_" : ""; + const newFolderName = `${prefix}${kebabTitle}`; + const parentFolder = file.parent.parent; + if (!parentFolder) { + new import_obsidian.Notice("Cannot rename: parent folder has no parent."); + return null; + } + let newFolderPath; + if (parentFolder.path === "" || parentFolder.path === "/") { + newFolderPath = newFolderName; + } else { + newFolderPath = `${parentFolder.path}/${newFolderName}`; + } + const existingFolder = this.app.vault.getAbstractFileByPath(newFolderPath); + if (existingFolder instanceof import_obsidian.TFolder) { + new import_obsidian.Notice(`Folder already exists at ${newFolderPath}.`); + return null; + } + const newFilePath = `${newFolderPath}/${file.name}`; + if (this.plugin) { + this.plugin.pluginCreatedFiles.set(newFilePath, Date.now()); + } + try { + await this.app.fileManager.renameFile(file.parent, newFolderPath); + } catch (error) { + console.error("FileOperations: Folder rename failed:", error); + const errorMessage = error instanceof Error ? error.message : String(error); + new import_obsidian.Notice(`Failed to rename folder: ${errorMessage}.`); + return null; + } + const newFile2 = this.app.vault.getAbstractFileByPath(newFilePath); + if (!(newFile2 instanceof import_obsidian.TFile)) { + new import_obsidian.Notice("Failed to locate renamed file."); + return null; + } + return newFile2; + } + prefix = file.basename.startsWith("_") ? "_" : ""; + const extension = file.extension; + const newName = `${prefix}${kebabTitle}.${extension}`; + let newPath; + if (file.parent.path === "" || file.parent.path === "/") { + newPath = newName; + } else { + newPath = `${file.parent.path}/${newName}`; + } + const existingFile = this.app.vault.getAbstractFileByPath(newPath); + if (existingFile instanceof import_obsidian.TFile && existingFile !== file) { + new import_obsidian.Notice(`File already exists at ${newPath}.`); + return null; + } + if (this.plugin) { + this.plugin.pluginCreatedFiles.set(newPath, Date.now()); + } + try { + await this.app.fileManager.renameFile(file, newPath); + } catch (error) { + console.error("FileOperations: File rename failed:", error); + const errorMessage = error instanceof Error ? error.message : String(error); + new import_obsidian.Notice(`Failed to rename file: ${errorMessage}.`); + return null; + } + const newFile = this.app.vault.getAbstractFileByPath(newPath); + if (!(newFile instanceof import_obsidian.TFile)) { + new import_obsidian.Notice("Failed to locate renamed file."); + return null; + } + return newFile; + } +}; + +// src/utils/template-parsing.ts +var import_obsidian2 = require("obsidian"); +var TemplateParser = class { + constructor(app, settings, plugin) { + this.app = app; + this.settings = settings; + this.plugin = plugin; + } + // Get fresh settings from plugin if available, otherwise use stored settings + getSettings() { + var _a; + if ((_a = this.plugin) == null ? void 0 : _a.settings) { + return this.plugin.settings; + } + return this.settings; + } + /** + * Convert a string to kebab-case for slug generation + */ + toKebabCase(str) { + return str.toLowerCase().replace(/[^a-z0-9\s-]/g, "").trim().replace(/\s+/g, "-").replace(/-+/g, "-").replace(/^-|-$/g, ""); + } + parseFrontmatter(content) { + let propertiesEnd = 0; + let propertiesText = ""; + const existingProperties = {}; + if (content.startsWith("---")) { + propertiesEnd = content.indexOf("\n---", 3); + if (propertiesEnd === -1) { + propertiesEnd = content.length; + } else { + propertiesEnd += 4; + } + propertiesText = content.slice(4, propertiesEnd - 4).trim(); + try { + let currentKey = null; + const arrayKeys = /* @__PURE__ */ new Set(); + propertiesText.split("\n").forEach((line) => { + const trimmedLine = line.trim(); + const match = trimmedLine.match(/^([a-zA-Z_][a-zA-Z0-9_-]*):\s*(.*)$/); + if (match) { + const [, key, value] = match; + currentKey = key; + const trimmedValue = value ? value.trim() : ""; + const bracketArrayMatch = trimmedValue.match(/^\[(.*)\]$/); + if (bracketArrayMatch) { + const arrayContent = bracketArrayMatch[1].trim(); + existingProperties[key] = []; + arrayKeys.add(key); + if (arrayContent) { + const items = []; + let currentItem = ""; + let inQuotes = false; + let quoteChar = ""; + for (let i = 0; i < arrayContent.length; i++) { + const char = arrayContent[i]; + if (!inQuotes && (char === '"' || char === "'")) { + inQuotes = true; + quoteChar = char; + } else if (inQuotes && char === quoteChar) { + if (i > 0 && arrayContent[i - 1] === "\\") { + currentItem += char; + } else { + inQuotes = false; + quoteChar = ""; + } + } else if (!inQuotes && char === ",") { + const trimmedItem = currentItem.trim(); + if (trimmedItem) { + const unquoted = trimmedItem.replace(/^["']|["']$/g, ""); + items.push(unquoted); + } + currentItem = ""; + } else { + currentItem += char; + } + } + if (currentItem.trim()) { + const trimmedItem = currentItem.trim(); + const unquoted = trimmedItem.replace(/^["']|["']$/g, ""); + items.push(unquoted); + } + existingProperties[key] = items; + } + } else { + const isKnownArrayKey = KNOWN_ARRAY_KEYS.includes(key); + const isEmptyArray = !trimmedValue || trimmedValue === ""; + const isArrayProperty = isKnownArrayKey || isEmptyArray; + if (isArrayProperty) { + existingProperties[key] = []; + arrayKeys.add(key); + } else { + const unquotedValue = trimmedValue.replace(/^["']|["']$/g, ""); + existingProperties[key] = [unquotedValue]; + } + } + } else if (currentKey && trimmedLine.startsWith("- ")) { + const isArrayProperty = arrayKeys.has(currentKey); + if (isArrayProperty) { + const item = trimmedLine.replace(/^-\s*/, ""); + if (item) existingProperties[currentKey].push(item); + } + } else if (trimmedLine && !trimmedLine.startsWith("- ") && !trimmedLine.startsWith("#")) { + const keyMatch = trimmedLine.match(/^([^:]+):\s*(.*)$/); + if (keyMatch) { + const [, key, value] = keyMatch; + if (!existingProperties[key]) { + existingProperties[key] = [value ? value.trim() : ""]; + } + } + } + }); + KNOWN_ARRAY_KEYS.forEach((key) => { + if (propertiesText.includes(key + ":") && !existingProperties[key]) { + existingProperties[key] = []; + } + }); + } catch (e) { + new import_obsidian2.Notice("Falling back to template due to parsing error."); + } + } + const bodyContent = content.slice(propertiesEnd); + return { + properties: existingProperties, + propertiesText, + propertiesEnd, + bodyContent + }; + } + parseTemplate(templateString, title) { + const templateLines = templateString.split("\n"); + const templateProps = []; + const templateValues = {}; + let inProperties = false; + for (let i = 0; i < templateLines.length; i++) { + const line = templateLines[i].trim(); + if (line === "---") { + inProperties = !inProperties; + if (!inProperties) { + break; + } + continue; + } + if (inProperties) { + const match = line.match(/^(\w+):\s*(.*)$/); + if (match) { + const [, key, value] = match; + templateProps.push(key); + const isKnownArrayKey = KNOWN_ARRAY_KEYS.includes(key); + const isEmptyArray = !value || value.trim() === "" || value.trim() === "[]"; + const isArrayProperty = isKnownArrayKey || isEmptyArray; + if (isArrayProperty) { + if (value && value.startsWith("[")) { + const items = value.replace(/[[\]]/g, "").split(",").map((t) => t.trim()).filter((t) => t); + templateValues[key] = items; + } else { + templateValues[key] = []; + for (let j = i + 1; j < templateLines.length; j++) { + const nextLine = templateLines[j].trim(); + if (nextLine.startsWith("- ")) { + const item = nextLine.replace(/^-\s*/, "").trim(); + if (item) { + const arrayValue = templateValues[key]; + if (Array.isArray(arrayValue)) { + arrayValue.push(item); + } + } + } else if (nextLine === "---" || nextLine && !nextLine.startsWith("- ") && nextLine.includes(":")) { + break; + } + } + } + } else { + const slug = this.toKebabCase(title); + const settings = this.getSettings(); + const stringValue = (value || "").replace(/\{\{title\}\}/g, title).replace(/\{\{date\}\}/g, window.moment(/* @__PURE__ */ new Date()).format(settings.dateFormat)).replace(/\{\{slug\}\}/g, slug); + templateValues[key] = stringValue; + } + } + } + } + return { templateProps, templateValues }; + } + buildFrontmatterContent(finalProps, arrayKeys) { + let newContent = "---\n"; + for (const key in finalProps) { + const isArrayProperty = KNOWN_ARRAY_KEYS.includes(key) || arrayKeys && arrayKeys.has(key); + if (isArrayProperty) { + newContent += `${key}: +`; + if (finalProps[key].length > 0) { + finalProps[key].forEach((item) => { + newContent += ` - ${item} +`; + }); + } + } else { + newContent += `${key}: ${finalProps[key][0] || ""} +`; + } + } + newContent += "---"; + return newContent; + } + async updateTitleInFrontmatter(file, newTitle, type) { + const titleKey = this.getTitleKey(type); + const hasTitleInTemplate = this.templateHasTitle(type); + if (!hasTitleInTemplate) { + return; + } + const content = await this.app.vault.read(file); + let propertiesEnd = 0; + let propertiesText = ""; + let hasFrontmatter = false; + if (content.startsWith("---")) { + hasFrontmatter = true; + propertiesEnd = content.indexOf("\n---", 3); + if (propertiesEnd === -1) { + propertiesEnd = content.length; + } else { + propertiesEnd += 4; + } + propertiesText = content.slice(4, propertiesEnd - 4).trim(); + } + const propOrder = []; + const existing = {}; + let currentKey = null; + let titleKeyPosition = -1; + const arrayKeys = /* @__PURE__ */ new Set(); + propertiesText.split("\n").forEach((line, index) => { + const trimmedLine = line.trim(); + const match = trimmedLine.match(/^([a-zA-Z_][a-zA-Z0-9_-]*):\s*(.*)$/); + if (match) { + const [, key, value] = match; + propOrder.push(key); + currentKey = key; + if (key === titleKey) { + titleKeyPosition = index; + } + const isKnownArrayKey = KNOWN_ARRAY_KEYS.includes(key); + const isEmptyArray = !value || value.trim() === "" || value.trim() === "[]"; + const isArrayProperty = isKnownArrayKey || isEmptyArray; + if (isArrayProperty) { + existing[key] = []; + arrayKeys.add(key); + } else { + existing[key] = value ? value.trim() : ""; + } + } else if (currentKey && arrayKeys.has(currentKey) && trimmedLine.startsWith("- ")) { + const item = trimmedLine.replace(/^-\s*/, ""); + if (item) existing[currentKey].push(item); + } else if (trimmedLine && !trimmedLine.startsWith("- ") && !trimmedLine.startsWith("#")) { + const keyMatch = trimmedLine.match(/^([^:]+):\s*(.*)$/); + if (keyMatch) { + const [, key, value] = keyMatch; + if (!propOrder.includes(key)) { + propOrder.push(key); + existing[key] = value ? value.trim() : ""; + } + } + } + }); + let titleVal; + if (newTitle.includes('"') || newTitle.includes("'") || newTitle.includes("\n") || newTitle.includes("\\")) { + titleVal = `'${newTitle.replace(/'/g, "''")}'`; + } else if (newTitle.includes(" ") || newTitle.includes(":") || newTitle.includes("#") || newTitle.includes("@")) { + titleVal = `"${newTitle.replace(/"/g, '\\"')}"`; + } else { + titleVal = newTitle; + } + existing[titleKey] = titleVal; + if ("slug" in existing) { + const newSlug = this.toKebabCase(newTitle); + existing["slug"] = newSlug; + } + if (titleKeyPosition === -1) { + propOrder.push(titleKey); + } + if (!hasFrontmatter) { + return; + } + let newContent = "---\n"; + for (const key of propOrder) { + const val = existing[key]; + if (Array.isArray(val)) { + newContent += `${key}: +`; + if (val.length > 0) { + val.forEach((item) => { + newContent += ` - ${item} +`; + }); + } + } else { + newContent += `${key}: ${val || ""} +`; + } + } + newContent += "---\n"; + const bodyContent = content.slice(propertiesEnd); + newContent += bodyContent; + await this.app.vault.modify(file, newContent); + } + getTitleKey(type) { + if (type === "note") return "title"; + const settings = this.getSettings(); + const contentTypes = settings.contentTypes || []; + const contentType = contentTypes.find((ct) => ct.id === type); + if (!contentType) return "title"; + const template = contentType.template; + const lines = template.split("\n"); + let inProperties = false; + for (const line of lines) { + const trimmed = line.trim(); + if (trimmed === "---") { + inProperties = !inProperties; + continue; + } + if (inProperties) { + const match = trimmed.match(/^(\w+):\s*(.+)$/); + if (match) { + const key = match[1]; + const value = match[2]; + if (value.includes("{{title}}")) { + return key; + } + } + } + } + return "title"; + } + // Check if the template for this content type has {{title}} + templateHasTitle(type) { + if (type === "note") return true; + const settings = this.getSettings(); + const contentTypes = settings.contentTypes || []; + const contentType = contentTypes.find((ct) => ct.id === type); + if (!contentType) return true; + const template = contentType.template; + return template.includes("{{title}}"); + } +}; + +// src/utils/link-conversion.ts +var import_obsidian3 = require("obsidian"); +var LinkConverter = class { + constructor(settings, plugin) { + this.settings = settings; + this.plugin = plugin; + } + // Get fresh settings from plugin if available, otherwise use stored settings + getSettings() { + var _a; + if ((_a = this.plugin) == null ? void 0 : _a.settings) { + return this.plugin.settings; + } + return this.settings; + } + // Local toKebabCase removed, using imported one instead + getAstroUrlFromInternalLink(link) { + const hashIndex = link.indexOf("#"); + let path = hashIndex >= 0 ? link.slice(0, hashIndex) : link; + const anchor = hashIndex >= 0 ? link.slice(hashIndex) : ""; + path = decodeURIComponent(path); + path = path.replace(/\.(md|mdx)$/, ""); + const fileExtension = link.endsWith(".mdx") ? ".mdx" : ".md"; + const contentTypeInfo = this.getContentTypeForPath(path + fileExtension); + let basePath = contentTypeInfo.basePath || ""; + let contentFolder = contentTypeInfo.contentFolder || ""; + let indexFileName = contentTypeInfo.indexFileName || ""; + if (contentFolder) { + path = path.slice(contentFolder.length + 1); + } + let addTrailingSlash = false; + const parts = path.split("/"); + const lastPart = parts[parts.length - 1]; + if (indexFileName && indexFileName.trim() !== "" && lastPart === indexFileName) { + parts.pop(); + path = parts.join("/"); + addTrailingSlash = true; + } else if ((!indexFileName || indexFileName.trim() === "") && lastPart === "index") { + parts.pop(); + path = parts.join("/"); + addTrailingSlash = true; + } + const slugParts = path.split("/").map((part) => toKebabCase(part)); + const slug = slugParts.join("/"); + if (basePath) { + if (!basePath.startsWith("/")) { + basePath = "/" + basePath; + } + if (!basePath.endsWith("/")) { + basePath += "/"; + } + } else { + basePath = "/"; + } + const settings = this.getSettings(); + const shouldAddTrailingSlash = (settings.addTrailingSlashToLinks || addTrailingSlash) && !anchor; + return `${basePath}${slug}${shouldAddTrailingSlash ? "/" : ""}${anchor}`; + } + getAstroUrlFromInternalLinkWithContext(link, currentFilePath, currentFileContentType) { + const hashIndex = link.indexOf("#"); + let path = hashIndex >= 0 ? link.slice(0, hashIndex) : link; + const anchor = hashIndex >= 0 ? link.slice(hashIndex) : ""; + path = decodeURIComponent(path); + path = path.replace(/\.(md|mdx)$/, ""); + let basePath = ""; + let contentFolder = ""; + let indexFileName = ""; + const fileExtension = link.endsWith(".mdx") ? ".mdx" : ".md"; + const targetContentType = this.getContentTypeForPath(path + fileExtension); + if (!targetContentType.basePath && currentFileContentType.basePath) { + basePath = currentFileContentType.basePath; + indexFileName = currentFileContentType.indexFileName; + contentFolder = currentFileContentType.contentFolder; + } else { + basePath = targetContentType.basePath; + indexFileName = targetContentType.indexFileName; + contentFolder = targetContentType.contentFolder; + } + if (contentFolder) { + path = path.slice(contentFolder.length + 1); + } + let addTrailingSlash = false; + const parts = path.split("/"); + const lastPart = parts[parts.length - 1]; + if (indexFileName && indexFileName.trim() !== "" && lastPart === indexFileName) { + parts.pop(); + path = parts.join("/"); + addTrailingSlash = true; + } else if ((!indexFileName || indexFileName.trim() === "") && lastPart === "index") { + parts.pop(); + path = parts.join("/"); + addTrailingSlash = true; + } + const slugParts = path.split("/").map((part) => toKebabCase(part)); + const slug = slugParts.join("/"); + if (basePath) { + if (!basePath.startsWith("/")) { + basePath = "/" + basePath; + } + if (!basePath.endsWith("/")) { + basePath += "/"; + } + } else { + basePath = "/"; + } + const settings = this.getSettings(); + const shouldAddTrailingSlash = (settings.addTrailingSlashToLinks || addTrailingSlash) && !anchor; + return `${basePath}${slug}${shouldAddTrailingSlash ? "/" : ""}${anchor}`; + } + isInConfiguredContentDirectory(filePath) { + const settings = this.getSettings(); + const contentTypes = settings.contentTypes || []; + const sortedTypes = sortByPatternSpecificity(contentTypes); + for (const contentType of sortedTypes) { + if (!contentType.enabled) continue; + if (!contentType.folder || contentType.folder.trim() === "") { + if (!filePath.includes("/") || filePath.split("/").length === 1) { + return true; + } + } else if (matchesFolderPattern(filePath, contentType.folder)) { + if (contentType.ignoreSubfolders) { + const pathSegments = filePath.split("/"); + const pathDepth = pathSegments.length; + const patternSegments = contentType.folder.split("/"); + const expectedDepth = patternSegments.length; + if (contentType.creationMode === "folder") { + const folderDepth = pathDepth - 1; + if (folderDepth === expectedDepth || folderDepth === expectedDepth + 1) { + return true; + } + } else { + if (pathDepth === expectedDepth) { + return true; + } + } + } else { + return true; + } + } + } + return false; + } + getContentTypeForPath(filePath) { + const settings = this.getSettings(); + const contentTypes = settings.contentTypes || []; + const sortedTypes = sortByPatternSpecificity(contentTypes); + for (const contentType of sortedTypes) { + if (!contentType.enabled) continue; + if (!contentType.folder || contentType.folder.trim() === "") { + if (!filePath.includes("/") || filePath.split("/").length === 1) { + return { + basePath: contentType.linkBasePath || "", + creationMode: contentType.creationMode, + indexFileName: contentType.indexFileName || "", + contentFolder: "" + }; + } + } else if (matchesFolderPattern(filePath, contentType.folder)) { + if (contentType.ignoreSubfolders) { + const pathSegments = filePath.split("/"); + const pathDepth = pathSegments.length; + const patternSegments = contentType.folder.split("/"); + const expectedDepth = patternSegments.length; + if (contentType.creationMode === "folder") { + const folderDepth = pathDepth - 1; + if (folderDepth === expectedDepth || folderDepth === expectedDepth + 1) { + return { + basePath: contentType.linkBasePath || "", + creationMode: contentType.creationMode, + indexFileName: contentType.indexFileName || "", + contentFolder: contentType.folder + }; + } + } else { + if (pathDepth === expectedDepth) { + return { + basePath: contentType.linkBasePath || "", + creationMode: contentType.creationMode, + indexFileName: contentType.indexFileName || "", + contentFolder: contentType.folder + }; + } + } + } else { + return { + basePath: contentType.linkBasePath || "", + creationMode: contentType.creationMode, + indexFileName: contentType.indexFileName || "", + contentFolder: contentType.folder + }; + } + } + } + return { + basePath: "", + creationMode: "file", + indexFileName: "", + contentFolder: "" + }; + } + convertWikilinksForAstro(editor, file) { + var _a, _b; + if (!(file instanceof import_obsidian3.TFile)) { + new import_obsidian3.Notice("No active file."); + return; + } + const cursor = editor.getCursor(); + const originalLine = cursor.line; + const originalCh = cursor.ch; + const originalContent = editor.getValue(); + const originalLineCount = originalContent.split("\n").length; + const originalLineLength = ((_a = originalContent.split("\n")[originalLine]) == null ? void 0 : _a.length) || 0; + const content = editor.getValue(); + let newContent = content; + let convertedCount = 0; + let skippedCount = 0; + const skippedLinks = []; + const currentFileContentType = this.getContentTypeForPath(file.path); + const imageExtensions = /\.(png|jpg|jpeg|gif|svg)$/i; + const canConvertLink = (linkText) => { + if (imageExtensions.test(linkText)) { + return false; + } + if (linkText.match(/^https?:\/\//)) { + return false; + } + if (!linkText.includes(".md") && !linkText.includes(".mdx") && !linkText.match(/^[a-zA-Z0-9_-]+(\/[a-zA-Z0-9_-]+)*$/)) { + return false; + } + let targetPath; + if (linkText.endsWith(".md") || linkText.endsWith(".mdx")) { + targetPath = linkText; + } else { + targetPath = linkText + ".md"; + } + const isInConfiguredDirectory = this.isInConfiguredContentDirectory(targetPath); + const isSimpleFilename = !targetPath.includes("/"); + const hasCurrentContentType = currentFileContentType.basePath !== "" || currentFileContentType.creationMode !== "file" || currentFileContentType.indexFileName !== ""; + return isInConfiguredDirectory || isSimpleFilename && hasCurrentContentType; + }; + newContent = newContent.replace( + /\[\[([^\]|]+)(\|([^\]]+))?\]\]/g, + (match, linkText, _pipe, displayText) => { + if (imageExtensions.test(linkText)) { + skippedCount++; + skippedLinks.push(linkText); + return match; + } + if (!canConvertLink(linkText)) { + skippedCount++; + skippedLinks.push(linkText); + return match; + } + const display = displayText || linkText.replace(/\.(md|mdx)$/, ""); + const url = this.getAstroUrlFromInternalLinkWithContext(linkText, file.path, currentFileContentType); + convertedCount++; + return `[${display}](${url})`; + } + ); + newContent = newContent.replace( + /\[([^\]]+)\]\(([^)]+\.(md|mdx)[^)]*)\)/g, + (match, displayText, link) => { + if (link.match(/^https?:\/\//) || imageExtensions.test(link)) { + skippedCount++; + skippedLinks.push(link); + return match; + } + if (!canConvertLink(link)) { + skippedCount++; + skippedLinks.push(link); + return match; + } + const url = this.getAstroUrlFromInternalLinkWithContext(link, file.path, currentFileContentType); + convertedCount++; + return `[${displayText}](${url})`; + } + ); + newContent = newContent.replace( + /!\[(.*?)\]\(([^)]+)\)/g, + (match) => { + skippedCount++; + return match; + } + ); + newContent = newContent.replace(/\{\{([^}]+)\}\}/g, (match, fileName) => { + if (imageExtensions.test(fileName)) { + skippedCount++; + skippedLinks.push(fileName); + return match; + } + if (!canConvertLink(fileName)) { + skippedCount++; + skippedLinks.push(fileName); + return match; + } + const url = this.getAstroUrlFromInternalLinkWithContext(fileName, file.path, currentFileContentType); + convertedCount++; + return `[Embedded: ${fileName}](${url})`; + }); + editor.setValue(newContent); + const newLineCount = newContent.split("\n").length; + const newLineLength = ((_b = newContent.split("\n")[originalLine]) == null ? void 0 : _b.length) || 0; + let newLine = originalLine; + let newCh = originalCh; + if (newLineCount !== originalLineCount) { + if (newLine >= newLineCount) { + newLine = Math.max(0, newLineCount - 1); + } + } + if (newLineLength !== originalLineLength) { + if (newCh > newLineLength) { + newCh = Math.max(0, newLineLength); + } + } + editor.setCursor({ line: newLine, ch: newCh }); + if (convertedCount > 0 && skippedCount === 0) { + new import_obsidian3.Notice(`Converted ${convertedCount} internal link${convertedCount > 1 ? "s" : ""} for Astro.`); + } else if (convertedCount > 0 && skippedCount > 0) { + new import_obsidian3.Notice(`Converted ${convertedCount} link${convertedCount > 1 ? "s" : ""} for Astro. Skipped ${skippedCount} link${skippedCount > 1 ? "s" : ""} outside configured content directories.`); + } else if (skippedCount > 0) { + new import_obsidian3.Notice(`No links converted. All ${skippedCount} link${skippedCount > 1 ? "s" : ""} are outside configured content directories or are images/external links.`); + } else { + new import_obsidian3.Notice("No internal links found to convert."); + } + } +}; + +// src/ui/title-modal.ts +var import_obsidian4 = require("obsidian"); +var TitleModal = class extends import_obsidian4.Modal { + constructor(app, file, plugin, type, isRename = false, isNewNote = false) { + super(app); + this.file = file; + this.plugin = plugin; + this.type = type; + this.isRename = isRename; + this.isNewNote = isNewNote; + const settings = plugin.settings; + this.fileOps = new FileOperations(app, settings, plugin); + this.templateParser = new TemplateParser(app, settings); + } + async getCurrentTitleAsync() { + if (!this.file) { + return ""; + } + try { + const content = await this.app.vault.read(this.file); + const titleKey = this.fileOps.getTitleKey(this.type); + const { properties } = this.templateParser.parseFrontmatter(content); + if (titleKey in properties) { + const titleValue = properties[titleKey]; + if (Array.isArray(titleValue) && titleValue.length > 0) { + return String(titleValue[0]); + } + if (titleValue !== null && titleValue !== void 0) { + return String(titleValue); + } + } + } catch (error) { + console.error("Error reading file for title:", error); + } + return this.getFallbackTitle(); + } + getCurrentTitle() { + if (!this.file) { + return ""; + } + const titleKey = this.fileOps.getTitleKey(this.type); + const cache = this.app.metadataCache.getFileCache(this.file); + if ((cache == null ? void 0 : cache.frontmatter) && titleKey in cache.frontmatter) { + const titleValue = cache.frontmatter[titleKey]; + if (typeof titleValue === "string") { + return titleValue; + } + if (Array.isArray(titleValue) && titleValue.length > 0) { + const firstValue = titleValue[0]; + if (typeof firstValue === "string") { + return firstValue; + } + if (firstValue != null) { + if (typeof firstValue === "number" || typeof firstValue === "boolean") { + return String(firstValue); + } + if (typeof firstValue === "string") { + return firstValue; + } + } + } + if (titleValue == null) { + return ""; + } + if (typeof titleValue === "number" || typeof titleValue === "boolean") { + return String(titleValue); + } + if (typeof titleValue === "string") { + return titleValue; + } + return ""; + } + return this.getFallbackTitle(); + } + getFallbackTitle() { + if (!this.file) { + return ""; + } + let basename = this.file.basename; + if (this.file.parent && this.type !== "note") { + const contentType = this.fileOps.getContentType(this.type); + const indexFileName = (contentType == null ? void 0 : contentType.indexFileName) || ""; + if (indexFileName.trim() !== "" && basename === indexFileName) { + basename = this.file.parent.name; + } + } + if (basename.startsWith("_")) { + basename = basename.slice(1); + } + return basename.replace(/-/g, " ").split(" ").map((word) => word.charAt(0).toUpperCase() + word.slice(1)).join(" "); + } + /** + * Extracts a suggested title from the file basename for newly created files. + * This is used when a file is created from a link (e.g., [[sEfsleif]]). + * Preserves the original text as much as possible. + */ + getSuggestedTitleFromBasename() { + if (!this.file) { + return ""; + } + let basename = this.file.basename; + if (this.file.parent && this.type !== "note") { + const contentType = this.fileOps.getContentType(this.type); + const indexFileName = (contentType == null ? void 0 : contentType.indexFileName) || ""; + if (indexFileName.trim() !== "" && basename === indexFileName) { + basename = this.file.parent.name; + } + } + if (basename.startsWith("_")) { + basename = basename.slice(1); + } + return basename; + } + onOpen() { + const { contentEl } = this; + contentEl.empty(); + const isMobile = window.innerWidth <= 768 || import_obsidian4.Platform.isMobile; + if (isMobile) { + this.modalEl.addClass("astro-composer-mobile-modal"); + } + if (this.isRename) { + const typeName = this.getTypeDisplayName(); + if (this.type === "note") { + contentEl.createEl("h2", { text: "Rename content" }); + contentEl.createEl("p", { text: "Enter a title for this content:" }); + } else { + contentEl.createEl("h2", { text: `Rename ${typeName} content` }); + contentEl.createEl("p", { text: `Enter new title for your ${typeName} content:` }); + } + this.titleInput = contentEl.createEl("input", { + type: "text", + placeholder: "New Title", + cls: "astro-composer-title-input" + }); + void this.getCurrentTitleAsync().then((title) => { + this.titleInput.value = title; + }); + } else if (this.isNewNote) { + const typeName = this.getTypeDisplayName(); + if (this.type === "note") { + contentEl.createEl("h2", { text: "New content" }); + contentEl.createEl("p", { text: "Enter a title for this content:" }); + } else { + contentEl.createEl("h2", { text: `Create new ${typeName} content` }); + contentEl.createEl("p", { text: `Enter a title for your new ${typeName} content:` }); + } + this.titleInput = contentEl.createEl("input", { + type: "text", + placeholder: "New Title", + cls: "astro-composer-title-input" + }); + } else { + const typeName = this.getTypeDisplayName(); + if (this.type === "note") { + contentEl.createEl("h2", { text: "New content" }); + contentEl.createEl("p", { text: "Enter a title for this content:" }); + } else { + contentEl.createEl("h2", { text: `Create new ${typeName} content` }); + contentEl.createEl("p", { text: `Enter a title for your new ${typeName} content:` }); + } + this.titleInput = contentEl.createEl("input", { + type: "text", + placeholder: "New Title", + cls: "astro-composer-title-input" + }); + if (this.file) { + const suggestedTitle = this.getSuggestedTitleFromBasename(); + if (suggestedTitle) { + this.titleInput.value = suggestedTitle; + } + } + } + this.titleInput.focus(); + if (this.isNewNote) { + setTimeout(() => { + this.titleInput.setSelectionRange(0, 0); + }, 0); + } + const buttonContainer = contentEl.createDiv({ cls: "astro-composer-button-container" }); + const cancelButton = buttonContainer.createEl("button", { text: "Cancel", cls: "astro-composer-cancel-button" }); + cancelButton.onclick = () => this.close(); + const submitButton = buttonContainer.createEl("button", { text: this.isRename ? "Rename" : "Create", cls: ["astro-composer-create-button", "mod-cta"] }); + submitButton.onclick = () => this.submit(); + this.titleInput.addEventListener("keypress", (e) => { + if (e.key === "Enter") void this.submit(); + }); + } + async submit() { + const title = this.titleInput.value.trim(); + if (!title) { + new import_obsidian4.Notice("Please enter a title."); + return; + } + try { + let newFile = null; + if (this.isRename) { + newFile = await this.fileOps.renameFile({ file: this.file, title, type: this.type }); + if (newFile) { + await this.templateParser.updateTitleInFrontmatter(newFile, title, this.type); + } else { + this.close(); + return; + } + } else if (this.isNewNote) { + if (this.file) { + newFile = await this.fileOps.createFile({ file: this.file, title, type: this.type }); + const shouldInsertProperties = this.plugin.settings.autoInsertProperties; + if (newFile && shouldInsertProperties) { + await this.addPropertiesToFile(newFile, title, this.type); + this.positionCursorAtEnd(newFile); + } + } + } else if (this.file) { + newFile = await this.fileOps.createFile({ file: this.file, title, type: this.type }); + const shouldInsertProperties = this.plugin.settings.autoInsertProperties; + if (newFile && shouldInsertProperties) { + await this.addPropertiesToFile(newFile, title, this.type); + this.positionCursorAtEnd(newFile); + } + } else { + newFile = await this.createNewFile(title); + } + if (!newFile) { + new import_obsidian4.Notice(`Failed to ${this.isRename ? "rename" : "create"} ${this.type}.`); + this.close(); + return; + } + } catch (error) { + console.error("TitleModal: Error during process:", error); + const errorMessage = error instanceof Error ? error.message : String(error); + new import_obsidian4.Notice(`Error ${this.isRename ? "renaming" : "creating"} ${this.type}: ${errorMessage}.`); + this.close(); + return; + } + this.close(); + } + getTypeDisplayName() { + if (this.type === "note") { + return "Content"; + } + const contentType = this.fileOps.getContentType(this.type); + return contentType ? contentType.name : "Content"; + } + async createNewFile(title) { + var _a, _b; + let targetFolder; + const originalDir = ((_b = (_a = this.file) == null ? void 0 : _a.parent) == null ? void 0 : _b.path) || ""; + if (this.type !== "note") { + const contentType2 = this.fileOps.getContentType(this.type); + if (originalDir === "" || originalDir === "/") { + targetFolder = (contentType2 == null ? void 0 : contentType2.folder) || ""; + } else { + targetFolder = originalDir; + } + } else { + targetFolder = originalDir; + } + const filename = this.fileOps.generateFilename(title); + const contentType = this.fileOps.getContentType(this.type); + const extension = (contentType == null ? void 0 : contentType.useMdxExtension) ? ".mdx" : ".md"; + const filePath = targetFolder ? `${targetFolder}/${filename}${extension}` : `${filename}${extension}`; + if (this.plugin) { + this.plugin.pluginCreatedFiles.set(filePath, Date.now()); + } + let initialContent = ""; + if (this.plugin.settings.autoInsertProperties) { + initialContent = this.generateInitialContent(title); + } + try { + const newFile = await this.app.vault.create(filePath, initialContent); + const leaf = this.app.workspace.getLeaf(); + await leaf.openFile(newFile); + const positionCursor = () => { + var _a2; + const view = leaf.view; + if (view instanceof import_obsidian4.MarkdownView && view.editor) { + const editor = view.editor; + const content = editor.getValue(); + if (content) { + const lines = content.split("\n"); + const lastLine = lines.length - 1; + const lastLineLength = ((_a2 = lines[lastLine]) == null ? void 0 : _a2.length) || 0; + editor.setCursor({ line: lastLine, ch: lastLineLength }); + editor.focus(); + return true; + } + } + return false; + }; + setTimeout(() => { + if (!positionCursor()) { + setTimeout(() => { + positionCursor(); + }, 200); + } + }, 100); + return newFile; + } catch (error) { + const errorMessage = error instanceof Error ? error.message : String(error); + throw new Error(`Failed to create file: ${errorMessage}`); + } + } + generateInitialContent(title) { + const now = /* @__PURE__ */ new Date(); + const dateString = window.moment(now).format(this.plugin.settings.dateFormat); + const slug = toKebabCase(title); + let template; + if (this.type === "note") { + const escapedTitle = this.escapeYamlString(title); + template = `--- +title: ${escapedTitle} +date: ${dateString} +--- +`; + } else { + const contentType = this.fileOps.getContentType(this.type); + if (!contentType) { + const escapedTitle = this.escapeYamlString(title); + template = `--- +title: ${escapedTitle} +date: ${dateString} +--- +`; + } else { + template = contentType.template; + } + } + template = template.replace(/\{\{title\}\}/g, title); + template = template.replace(/\{\{date\}\}/g, dateString); + template = template.replace(/\{\{slug\}\}/g, slug); + return template; + } + async addPropertiesToFile(file, title, type) { + const now = /* @__PURE__ */ new Date(); + const dateString = window.moment(now).format(this.plugin.settings.dateFormat); + const slug = toKebabCase(title); + let template; + if (type === "note") { + const escapedTitle = this.escapeYamlString(title); + template = `--- +title: ${escapedTitle} +date: ${dateString} +--- +`; + } else { + const contentType = this.fileOps.getContentType(type); + if (!contentType) { + const escapedTitle = this.escapeYamlString(title); + template = `--- +title: ${escapedTitle} +date: ${dateString} +--- +`; + } else { + template = contentType.template; + } + } + template = template.replace(/\{\{title\}\}/g, title); + template = template.replace(/\{\{date\}\}/g, dateString); + template = template.replace(/\{\{slug\}\}/g, slug); + await this.app.vault.modify(file, template); + } + positionCursorAtEnd(file) { + const positionCursor = () => { + var _a; + const view = this.app.workspace.getActiveViewOfType(import_obsidian4.MarkdownView); + if (view && view.file === file && view.editor) { + const editor = view.editor; + const content = editor.getValue(); + if (content) { + const lines = content.split("\n"); + const lastLine = lines.length - 1; + const lastLineLength = ((_a = lines[lastLine]) == null ? void 0 : _a.length) || 0; + editor.setCursor({ line: lastLine, ch: lastLineLength }); + editor.focus(); + return true; + } + } + return false; + }; + setTimeout(() => { + if (!positionCursor()) { + setTimeout(() => { + positionCursor(); + }, 200); + } + }, 100); + } + escapeYamlString(str) { + if (str.includes('"') || str.includes("'") || str.includes("\n") || str.includes("\\")) { + return `'${str.replace(/'/g, "''")}'`; + } else if (str.includes(" ") || str.includes(":") || str.includes("#") || str.includes("@")) { + return `"${str.replace(/"/g, '\\"')}"`; + } else { + return str; + } + } + onClose() { + const { contentEl } = this; + contentEl.empty(); + } +}; + +// src/commands/index.ts +function registerCommands(plugin, settings) { + const isMobile = import_obsidian5.Platform.isMobile; + if (isMobile) { + let hasMatchingContentType2 = function(file, settings2) { + const type = fileOps.determineType(file); + if (type === "note") { + return false; + } + const contentType = fileOps.getContentType(type); + return contentType !== null && contentType.enabled; + }; + var hasMatchingContentType = hasMatchingContentType2; + const pluginInterface2 = plugin; + const fileOps = new FileOperations(plugin.app, settings, pluginInterface2); + const linkConverter = new LinkConverter(settings, pluginInterface2); + plugin.addCommand({ + id: "standardize-properties", + name: "Standardize properties", + icon: "file-check", + editorCallback: (editor, ctx) => { + const file = ctx instanceof import_obsidian5.MarkdownView ? ctx.file : ctx.file; + if (file instanceof import_obsidian5.TFile) { + const currentSettings = pluginInterface2.settings || settings; + void standardizeProperties(plugin.app, currentSettings, file, pluginInterface2, editor); + } + } + }); + plugin.addCommand({ + id: "convert-wikilinks-astro", + name: "Convert internal links for astro", + icon: "link-2", + editorCallback: (editor, ctx) => { + const file = ctx instanceof import_obsidian5.MarkdownView ? ctx.file : ctx.file; + if (file instanceof import_obsidian5.TFile) { + linkConverter.convertWikilinksForAstro(editor, file); + } + } + }); + plugin.addCommand({ + id: "rename-content", + name: "Rename current content", + icon: "pencil", + editorCallback: (editor, ctx) => { + const file = ctx instanceof import_obsidian5.MarkdownView ? ctx.file : ctx.file; + if (file instanceof import_obsidian5.TFile) { + if (!hasMatchingContentType2(file, settings)) { + new import_obsidian5.Notice("Cannot rename: this file is not part of a configured content type folder."); + return; + } + const type = fileOps.determineType(file); + const cache = plugin.app.metadataCache.getFileCache(file); + const titleKey = fileOps.getTitleKey(type); + if (!(cache == null ? void 0 : cache.frontmatter) || !(titleKey in cache.frontmatter)) { + new import_obsidian5.Notice(`Cannot rename: No ${titleKey} found in properties`); + return; + } + new TitleModal(plugin.app, file, plugin, type, true).open(); + } + } + }); + return; + } + const pluginInterface = plugin; + function hasMatchingContentType(file, settings2) { + const currentSettings = (plugin == null ? void 0 : plugin.settings) || settings2; + const tempFileOps = new FileOperations(plugin.app, currentSettings, plugin); + const type = tempFileOps.determineType(file); + if (type === "note") { + return false; + } + const contentType = tempFileOps.getContentType(type); + return contentType !== null && contentType.enabled; + } + plugin.addCommand({ + id: "standardize-properties", + name: "Standardize properties", + icon: "file-check", + editorCallback: (editor, ctx) => { + const file = ctx instanceof import_obsidian5.MarkdownView ? ctx.file : ctx.file; + if (file instanceof import_obsidian5.TFile) { + void standardizeProperties(plugin.app, settings, file, plugin, editor); + } + } + }); + plugin.addCommand({ + id: "convert-wikilinks-astro", + name: "Convert internal links for astro", + icon: "link-2", + editorCallback: (editor, ctx) => { + const file = ctx instanceof import_obsidian5.MarkdownView ? ctx.file : ctx.file; + if (file instanceof import_obsidian5.TFile) { + const currentSettings = pluginInterface.settings || settings; + const currentLinkConverter = new LinkConverter(currentSettings, pluginInterface); + currentLinkConverter.convertWikilinksForAstro(editor, file); + } + } + }); + plugin.addCommand({ + id: "rename-content", + name: "Rename current content", + icon: "pencil", + editorCallback: (editor, ctx) => { + const file = ctx instanceof import_obsidian5.MarkdownView ? ctx.file : ctx.file; + if (file instanceof import_obsidian5.TFile) { + const currentSettings = pluginInterface.settings || settings; + const currentFileOps = new FileOperations(plugin.app, currentSettings, pluginInterface); + if (!hasMatchingContentType(file, currentSettings)) { + new import_obsidian5.Notice("Cannot rename: this file is not part of a configured content type folder."); + return; + } + const type = currentFileOps.determineType(file); + new TitleModal(plugin.app, file, pluginInterface, type, true).open(); + } + } + }); + if (!isMobile) { + plugin.addCommand({ + id: "open-project-terminal", + name: "Open project terminal", + icon: "terminal-square", + callback: () => { + const currentSettings = plugin.settings; + if (!currentSettings.enableOpenTerminalCommand) { + new import_obsidian5.Notice("Open terminal command is disabled. Enable it in settings to use this command."); + return; + } + openTerminalInProjectRoot(plugin.app, currentSettings); + } + }); + } + if (!isMobile) { + plugin.addCommand({ + id: "edit-astro-config", + name: "Edit astro config", + icon: "rocket", + callback: async () => { + const currentSettings = plugin.settings; + if (!currentSettings.enableOpenConfigFileCommand) { + new import_obsidian5.Notice("Edit config file command is disabled. Enable it in settings to use this command."); + return; + } + await openConfigFile(plugin.app, currentSettings); + } + }); + } +} +async function standardizeProperties(app, settings, file, plugin, editor) { + var _a; + const currentSettings = (plugin == null ? void 0 : plugin.settings) || settings; + const templateParser = new TemplateParser(app, currentSettings); + const fileOps = new FileOperations(app, currentSettings, plugin); + let cursorPosition = null; + let originalContent = ""; + if (editor) { + const cursor = editor.getCursor(); + cursorPosition = { line: cursor.line, ch: cursor.ch }; + originalContent = editor.getValue(); + } + const type = fileOps.determineType(file); + if (type === "note") { + new import_obsidian5.Notice("No properties template specified for this content. This file doesn't match any configured content type folders."); + return; + } + let templateString; + if (type === "note") { + new import_obsidian5.Notice("No properties template specified for this content. This file doesn't match any configured content type folders."); + return; + } + const contentType = fileOps.getContentType(type); + if (!contentType) { + new import_obsidian5.Notice("Content type not found."); + return; + } + templateString = contentType.template; + await new Promise((resolve) => setTimeout(resolve, 100)); + const content = await app.vault.read(file); + const title = file.basename.replace(/^_/, ""); + const parsed = templateParser.parseFrontmatter(content); + const { templateProps, templateValues } = templateParser.parseTemplate(templateString, title); + const finalProps = { ...parsed.properties }; + const arrayKeys = /* @__PURE__ */ new Set(); + const slug = toKebabCase(title); + for (const key of templateProps) { + if (!(key in parsed.properties)) { + const templateValue = templateValues[key]; + if (Array.isArray(templateValue)) { + finalProps[key] = templateValue; + arrayKeys.add(key); + } else { + finalProps[key] = [templateValue || ""]; + } + } else { + const templateValue = templateValues[key]; + const isArrayValue = Array.isArray(templateValue); + if (isArrayValue) { + const existingItems = parsed.properties[key] || []; + const newItems = templateValue.filter((item) => !existingItems.includes(item)); + finalProps[key] = [...existingItems, ...newItems]; + arrayKeys.add(key); + } else { + if (key === "slug") { + const existingSlug = parsed.properties[key][0] || ""; + if (!existingSlug || existingSlug.trim() === "") { + finalProps[key] = [slug]; + } + } + } + } + } + if ("slug" in parsed.properties && templateString.includes("{{slug}}")) { + const existingSlug = parsed.properties["slug"][0] || ""; + if (!existingSlug || existingSlug.trim() === "") { + finalProps["slug"] = [slug]; + } + } + for (const key in parsed.properties) { + if (parsed.properties[key].length > 1) { + arrayKeys.add(key); + } + } + const newContent = templateParser.buildFrontmatterContent(finalProps, arrayKeys) + parsed.bodyContent; + await app.vault.modify(file, newContent); + if (editor && cursorPosition) { + await new Promise((resolve) => setTimeout(resolve, 50)); + const activeView = app.workspace.getActiveViewOfType(import_obsidian5.MarkdownView); + if (activeView && activeView.file === file && activeView.editor) { + const activeEditor = activeView.editor; + const newLineCount = newContent.split("\n").length; + const originalLineCount = originalContent.split("\n").length; + let newLine = cursorPosition.line; + let newCh = cursorPosition.ch; + if (newLineCount !== originalLineCount) { + if (newLine >= newLineCount) { + newLine = Math.max(0, newLineCount - 1); + } + } + const newLineLength = ((_a = newContent.split("\n")[newLine]) == null ? void 0 : _a.length) || 0; + if (newCh > newLineLength) { + newCh = Math.max(0, newLineLength); + } + activeEditor.setCursor({ line: newLine, ch: newCh }); + } + } + new import_obsidian5.Notice("Properties standardized using template."); +} +function renameContentByPath(app, filePath, settings, plugin) { + const file = app.vault.getAbstractFileByPath(filePath); + if (!(file instanceof import_obsidian5.TFile)) { + new import_obsidian5.Notice(`File not found: ${filePath}`); + return; + } + const fileOps = new FileOperations(app, settings, plugin); + function hasMatchingContentType(file2, settings2) { + const type2 = fileOps.determineType(file2); + if (type2 === "note") { + return false; + } + const contentType = fileOps.getContentType(type2); + return contentType !== null && contentType.enabled; + } + if (!hasMatchingContentType(file, settings)) { + new import_obsidian5.Notice("Cannot rename: this file is not part of a configured content type folder."); + return; + } + const type = fileOps.determineType(file); + new TitleModal(app, file, plugin, type, true).open(); +} +function registerContentTypeCommands(plugin, settings) { + const pluginInterface = plugin; + const contentTypes = settings.contentTypes || []; + for (const contentType of contentTypes) { + if (!contentType.enabled) { + continue; + } + const commandId = `create-content-type-${contentType.id}`; + const commandName = `Create new content type: ${contentType.name}`; + plugin.addCommand({ + id: commandId, + name: commandName, + callback: async () => { + let targetFolder = contentType.folder || ""; + if (targetFolder && targetFolder.trim() !== "") { + const folder = plugin.app.vault.getAbstractFileByPath(targetFolder); + if (!(folder instanceof import_obsidian5.TFolder)) { + try { + await plugin.app.vault.createFolder(targetFolder); + } catch (error) { + const errorMessage = error instanceof Error ? error.message : String(error); + new import_obsidian5.Notice(`Failed to create folder: ${errorMessage}`); + return; + } + } + } + const tempFileName = "Untitled.md"; + const filePath = targetFolder ? `${targetFolder}/${tempFileName}` : tempFileName; + const existingFile = plugin.app.vault.getAbstractFileByPath(filePath); + if (existingFile instanceof import_obsidian5.TFile) { + new TitleModal(plugin.app, existingFile, pluginInterface, contentType.id, false, true).open(); + return; + } + if (pluginInterface && "pluginCreatedFiles" in pluginInterface) { + pluginInterface.pluginCreatedFiles.set(filePath, Date.now()); + } + try { + const tempFile = await plugin.app.vault.create(filePath, ""); + new TitleModal(plugin.app, tempFile, pluginInterface, contentType.id, false, true).open(); + } catch (error) { + const errorMessage = error instanceof Error ? error.message : String(error); + new import_obsidian5.Notice(`Failed to create file: ${errorMessage}`); + if (pluginInterface && "pluginCreatedFiles" in pluginInterface) { + pluginInterface.pluginCreatedFiles.delete(filePath); + } + } + } + }); + } +} +var terminalLogger = { + enabled: false, + setEnabled(value) { + this.enabled = value; + }, + log(...args) { + if (this.enabled) { + console.debug("[astro-composer:terminal]", ...args); + } + } +}; +function getDefaultTerminalApp() { + if (!import_obsidian5.Platform.isDesktopApp) { + return ""; + } + if (import_obsidian5.Platform.isMacOS) { + return "Terminal"; + } + if (import_obsidian5.Platform.isWin) { + try { + const os = require("os"); + const release = os.release(); + const majorVersion = parseInt(release.split(".")[0]); + const buildNumber = parseInt(release.split(".")[2]); + if (majorVersion > 10 || majorVersion === 10 && buildNumber >= 22e3) { + return "wt.exe"; + } + } catch (e) { + } + return "cmd.exe"; + } + if (import_obsidian5.Platform.isLinux) { + return "gnome-terminal"; + } + return ""; +} +function sanitizeTerminalApp(value) { + return value.trim(); +} +function escapeDoubleQuotes(value) { + return value.replace(/"/g, '\\"'); +} +function openTerminalInProjectRoot(app, settings) { + terminalLogger.setEnabled(settings.enableTerminalDebugLogging); + try { + const { exec } = require("child_process"); + const path = require("path"); + const fs = require("fs"); + const adapter = app.vault.adapter; + const vaultPath = adapter.basePath || adapter.path; + const vaultPathString = typeof vaultPath === "string" ? vaultPath : String(vaultPath); + let projectPath; + if (settings.terminalProjectRootPath && settings.terminalProjectRootPath.trim()) { + projectPath = path.resolve(vaultPathString, settings.terminalProjectRootPath); + } else { + projectPath = vaultPathString; + } + if (!fs.existsSync(projectPath)) { + new import_obsidian5.Notice(`Project root directory not found at: ${projectPath}`); + return; + } + const configuredApp = sanitizeTerminalApp(settings.terminalApplicationName || ""); + const terminalApp = configuredApp || getDefaultTerminalApp(); + if (!configuredApp && !terminalApp) { + new import_obsidian5.Notice("Terminal application name is empty. Please configure it in settings."); + return; + } + const platform = process.platform; + terminalLogger.log("Opening terminal", { platform, terminalApp, projectPath }); + if (platform === "win32") { + const escapedPath = projectPath.replace(/"/g, '"'); + const lowerApp = terminalApp.toLowerCase(); + if (lowerApp === "wt.exe" || lowerApp === "wt" || lowerApp === "windows terminal") { + exec("where wt", (error) => { + if (!error) { + const command = `start "" wt.exe -d "${escapedPath}"`; + terminalLogger.log("Windows launch (wt)", { command, projectPath }); + exec(command, (execError) => { + if (execError) { + terminalLogger.log("Windows Terminal failed, falling back to cmd", { error: execError.message }); + const fallbackCommand = `start "" cmd.exe /K "cd /d "${escapedPath}""`; + exec(fallbackCommand, (cmdError) => { + if (cmdError) { + new import_obsidian5.Notice(`Error opening terminal: ${cmdError.message || "Unknown error"}`); + } + }); + } + }); + } else { + terminalLogger.log("Windows Terminal not found, using cmd", {}); + const fallbackCommand = `start "" cmd.exe /K "cd /d "${escapedPath}""`; + exec(fallbackCommand, (cmdError) => { + if (cmdError) { + new import_obsidian5.Notice(`Error opening terminal: ${cmdError.message || "Unknown error"}`); + } + }); + } + }); + } else if (lowerApp === "powershell" || lowerApp === "powershell.exe") { + const escapedPathForPS = projectPath.replace(/'/g, "''"); + const command = `start "" powershell -NoExit -Command "Set-Location '${escapedPathForPS}';"`; + terminalLogger.log("Windows launch (powershell)", { command, projectPath }); + exec(command, (error) => { + if (error) { + new import_obsidian5.Notice(`Error opening terminal: ${error.message || "Unknown error"}`); + } + }); + } else if (lowerApp === "cmd.exe" || lowerApp === "cmd") { + const command = `start "" cmd.exe /K "cd /d "${escapedPath}""`; + terminalLogger.log("Windows launch (cmd)", { command, projectPath }); + exec(command, (error) => { + if (error) { + new import_obsidian5.Notice(`Error opening terminal: ${error.message || "Unknown error"}`); + } + }); + } else { + const command = `start "" "${terminalApp}"`; + terminalLogger.log("Windows launch (generic)", { command, terminalApp, projectPath }); + exec(command, (error) => { + if (error) { + terminalLogger.log("Generic terminal failed, falling back to cmd", { error: error.message }); + const fallbackCommand = `start "" cmd.exe /K "cd /d "${escapedPath}""`; + exec(fallbackCommand, (cmdError) => { + if (cmdError) { + new import_obsidian5.Notice(`Error opening terminal: ${cmdError.message || "Unknown error"}`); + } + }); + } + }); + } + } else if (platform === "darwin") { + const escapedApp = escapeDoubleQuotes(terminalApp); + const escapedPath = escapeDoubleQuotes(projectPath); + const command = `open -na "${escapedApp}" "${escapedPath}"`; + terminalLogger.log("macOS launch", { command, terminalApp, projectPath }); + exec(command, (error) => { + if (error) { + new import_obsidian5.Notice(`Error opening terminal: ${error.message || "Unknown error"}`); + } + }); + } else { + const terminals = terminalApp ? [terminalApp] : ["gnome-terminal", "konsole", "xterm"]; + const projectPathEscaped = projectPath.replace(/"/g, '\\"'); + const tryTerminal = (index) => { + if (index >= terminals.length) { + new import_obsidian5.Notice("No supported terminal found. Please install a terminal application or configure one in settings."); + return; + } + const currentTerminal = terminals[index]; + const terminalName = currentTerminal.split(" ")[0]; + exec(`which ${terminalName}`, (error) => { + if (!error) { + let command; + if (currentTerminal.includes("gnome-terminal")) { + command = `gnome-terminal --working-directory="${projectPathEscaped}"`; + } else if (currentTerminal.includes("konsole")) { + command = `konsole --workdir "${projectPathEscaped}"`; + } else { + command = `${currentTerminal} -e "cd \\"${projectPathEscaped}\\" && bash"`; + } + terminalLogger.log("Linux launch", { command, terminal: currentTerminal, projectPath }); + exec(command, (execError) => { + if (execError && index < terminals.length - 1) { + terminalLogger.log("Terminal launch failed, trying next", { terminal: currentTerminal, error: execError.message }); + tryTerminal(index + 1); + } else if (execError) { + new import_obsidian5.Notice(`Error opening terminal: ${execError.message || "Unknown error"}`); + } + }); + } else { + terminalLogger.log("Terminal not found, trying next", { terminal: currentTerminal }); + tryTerminal(index + 1); + } + }); + }; + tryTerminal(0); + } + } catch (error) { + terminalLogger.log("Unexpected error", { error }); + new import_obsidian5.Notice(`Error opening terminal: ${error instanceof Error ? error.message : String(error)}`); + } +} +async function openConfigFile(app, settings) { + try { + const fs = require("fs"); + const path = require("path"); + const { shell } = require("electron"); + const adapter = app.vault.adapter; + const vaultPath = adapter.basePath || adapter.path; + const vaultPathString = typeof vaultPath === "string" ? vaultPath : String(vaultPath); + if (!settings.configFilePath || !settings.configFilePath.trim()) { + new import_obsidian5.Notice("Please specify a config file path in settings."); + return; + } + const configPath = path.resolve(vaultPathString, settings.configFilePath); + if (!fs.existsSync(configPath)) { + new import_obsidian5.Notice(`Config file not found at: ${configPath}`); + return; + } + await shell.openPath(configPath); + } catch (error) { + new import_obsidian5.Notice(`Error opening config file: ${error instanceof Error ? error.message : String(error)}`); + } +} + +// src/ui/settings-tab.ts +var import_obsidian10 = require("obsidian"); + +// src/ui/components/CommandPickerModal.ts +var import_obsidian6 = require("obsidian"); +var CommandPickerModal = class extends import_obsidian6.FuzzySuggestModal { + constructor(app, onSelect) { + super(app); + this.onSelect = onSelect; + } + getItems() { + const commandRegistry = this.app.commands; + const commandMap = /* @__PURE__ */ new Map(); + if (commandRegistry && typeof commandRegistry.listCommands === "function") { + try { + const commands = commandRegistry.listCommands(); + for (const command of commands) { + if (command && command.id && command.name && !commandMap.has(command.id)) { + commandMap.set(command.id, { + id: command.id, + name: command.name + }); + } + } + } catch (e) { + console.warn("[Astro Composer] Error getting commands via listCommands():", e); + } + } + try { + const registry = commandRegistry == null ? void 0 : commandRegistry.commands; + if (registry && typeof registry === "object") { + const allCommands = Object.values(registry); + for (const command of allCommands) { + if (command && command.id && command.name && !commandMap.has(command.id)) { + commandMap.set(command.id, { + id: command.id, + name: command.name + }); + } + } + } + } catch (e) { + console.warn("[Astro Composer] Error getting commands via registry:", e); + } + try { + const internalRegistry = commandRegistry == null ? void 0 : commandRegistry.commandRegistry; + if (internalRegistry && typeof internalRegistry === "object") { + const allCommands = Object.values(internalRegistry); + for (const command of allCommands) { + if (command && command.id && command.name && !commandMap.has(command.id)) { + commandMap.set(command.id, { + id: command.id, + name: command.name + }); + } + } + } + } catch (e) { + console.warn("[Astro Composer] Error getting commands via internal registry:", e); + } + const commandOptions = Array.from(commandMap.values()); + commandOptions.sort((a, b) => a.name.localeCompare(b.name)); + return commandOptions; + } + getItemText(item) { + return item.name; + } + onChooseItem(item, evt) { + this.onSelect(item.id); + } + // Override to show command name only + renderSuggestion(match, el) { + const item = match.item; + el.createDiv({ cls: "suggestion-title", text: item.name }); + } +}; + +// src/ui/components/IconPickerModal.ts +var import_obsidian7 = require("obsidian"); +var getIconList = () => { + if (import_obsidian7.requireApiVersion && (0, import_obsidian7.requireApiVersion)("1.7.3") && import_obsidian7.getIconIds) { + try { + return (0, import_obsidian7.getIconIds)(); + } catch (e) { + console.warn("[Astro Composer] Error getting icon IDs from Obsidian:", e); + } + } + return [ + "settings-2", + "settings", + "help-circle", + "info", + "star", + "heart", + "bookmark", + "home", + "search", + "bell", + "mail", + "user", + "users", + "folder", + "file", + "file-text", + "image", + "video", + "music", + "calendar", + "clock", + "edit", + "pencil", + "trash", + "copy", + "cut", + "paste", + "download", + "upload", + "save", + "share", + "link", + "external-link", + "lock", + "unlock", + "eye", + "eye-off", + "key", + "shield", + "check", + "x", + "plus", + "minus", + "arrow-left", + "arrow-right", + "arrow-up", + "arrow-down", + "chevron-left", + "chevron-right", + "chevron-up", + "chevron-down", + "menu", + "more-horizontal", + "more-vertical", + "grid", + "list", + "layout", + "columns", + "rows", + "maximize", + "minimize", + "zoom-in", + "zoom-out", + "refresh-cw", + "play", + "pause", + "stop", + "sun", + "moon", + "cloud", + "zap", + "wand-2", + "wand", + "wand-sparkles", + "palette", + "brush", + "sliders", + "power", + "wifi", + "bluetooth", + "monitor", + "laptop", + "smartphone", + "camera", + "mic", + "headphones", + "code", + "terminal", + "terminal-square", + "github", + "gitlab", + "git-branch", + "git-commit", + "database", + "server", + "cloud-download", + "cloud-upload", + "tag", + "tags", + "flag", + "pin", + "map-pin", + "compass", + "globe", + "rocket", + "car", + "bike", + "robot", + "apple", + "windows", + "linux", + "chrome", + "firefox", + "safari", + "credit-card", + "wallet", + "coins", + "book", + "book-open", + "award", + "trophy", + "badge", + "wrench", + "tool", + "package", + "box", + "archive", + "send", + "reply", + "forward", + "mail-open", + "tag-plus", + "tag-minus", + "flag-off", + "pin-off", + "map-pin-off", + "navigation", + "map", + "earth", + "plane", + "ship", + "anchor", + "helicopter", + "drone", + "android", + "keyhole", + "keys", + "fingerprint", + "scan", + "qr-code", + "barcode", + "receipt", + "piggy-bank", + "banknote" + ]; +}; +var LUCIDE_ICONS = getIconList().map((id) => ({ + id, + name: id.replace(/^lucide-/, "").replace(/-/g, " ").replace(/(^\w{1})|(\s+\w{1})/g, (letter) => letter.toUpperCase()) +})).sort((a, b) => a.name.localeCompare(b.name)); +var IconPickerModal = class extends import_obsidian7.FuzzySuggestModal { + constructor(app, onSelect) { + super(app); + this.onSelect = onSelect; + } + getItems() { + return LUCIDE_ICONS; + } + getItemText(item) { + return item.name; + } + onChooseItem(item, evt) { + const normalizedId = item.id.replace(/^lucide-/, ""); + this.onSelect(normalizedId); + } + // Override to show icon preview + renderSuggestion(match, el) { + const item = match.item; + el.addClass("mod-complex"); + const content = el.createDiv({ cls: "suggestion-content" }); + content.createDiv({ cls: "suggestion-title", text: item.name }); + const aux = el.createDiv({ cls: "suggestion-aux" }); + (0, import_obsidian7.setIcon)(aux.createSpan({ cls: "suggestion-flair" }), item.id); + } +}; + +// src/ui/components/ConfirmModal.ts +var import_obsidian8 = require("obsidian"); +var ConfirmModal = class extends import_obsidian8.Modal { + constructor(app, message, confirmText = "Confirm", cancelText = "Cancel") { + super(app); + this.message = message; + this.confirmText = confirmText; + this.cancelText = cancelText; + this.result = false; + this.resolvePromise = null; + } + onOpen() { + const { contentEl } = this; + contentEl.empty(); + contentEl.addClass("astro-composer-confirm-modal"); + contentEl.createEl("p", { text: this.message }); + const buttonContainer = contentEl.createDiv({ cls: "modal-button-container" }); + const cancelButton = buttonContainer.createEl("button", { + text: this.cancelText + }); + cancelButton.onclick = () => { + this.result = false; + this.close(); + }; + const confirmButton = buttonContainer.createEl("button", { + text: this.confirmText, + cls: "mod-cta mod-warning" + }); + confirmButton.onclick = () => { + this.result = true; + this.close(); + }; + } + onClose() { + const { contentEl } = this; + contentEl.empty(); + if (this.resolvePromise) { + this.resolvePromise(this.result); + } + } + async waitForResult() { + return new Promise((resolve) => { + this.resolvePromise = resolve; + this.open(); + }); + } +}; + +// src/utils/settings-compat.ts +var import_obsidian9 = require("obsidian"); +var ObsidianModule = __toESM(require("obsidian"), 1); +function createSettingsGroup(containerEl, heading, manifestId) { + if ((0, import_obsidian9.requireApiVersion)("1.11.0")) { + const SettingGroupClass = ObsidianModule.SettingGroup; + if (SettingGroupClass) { + const group = heading ? new SettingGroupClass(containerEl).setHeading(heading) : new SettingGroupClass(containerEl); + return { + addSetting(cb) { + group.addSetting(cb); + } + }; + } + } + if (manifestId) { + containerEl.addClass(`${manifestId}-settings-compat`); + } + { + if (heading) { + const headingEl = containerEl.createDiv("setting-group-heading"); + headingEl.createEl("h3", { text: heading }); + } + return { + addSetting(cb) { + const setting = new import_obsidian9.Setting(containerEl); + cb(setting); + } + }; + } +} + +// src/ui/settings-tab.ts +var AstroComposerSettingTab = class extends import_obsidian10.PluginSettingTab { + constructor(app, plugin) { + super(app, plugin); + this.icon = "lucide-pencil-line"; + this.autoRenameContainer = null; + this.postsFolderContainer = null; + this.onlyAutomateContainer = null; + this.creationModeContainer = null; + this.indexFileContainer = null; + this.excludedDirsContainer = null; + this.underscorePrefixContainer = null; + this.autoInsertContainer = null; + this.pagesFieldsContainer = null; + this.pagesIndexFileContainer = null; + this.pagesOnlyAutomateContainer = null; + this.terminalCommandContainer = null; + this.configCommandContainer = null; + this.customContentTypesContainer = null; + this.terminalRibbonToggle = null; + this.configRibbonToggle = null; + this.terminalRibbonToggleComponent = null; + this.configRibbonToggleComponent = null; + this.plugin = plugin; + } + /** + * Refresh just the content types section + * More efficient than refreshing the entire settings tab + */ + refreshContentTypes() { + if (this.customContentTypesContainer) { + this.renderCustomContentTypes(); + } + } + display() { + const { containerEl } = this; + containerEl.empty(); + const settings = this.plugin.settings; + this.renderSettingsTab(containerEl, settings); + } + renderSettingsTab(containerEl, settings) { + var _a; + const generalGroup = createSettingsGroup(containerEl, void 0, "astro-composer"); + generalGroup.addSetting((setting) => { + setting.setName("Date format").setDesc("Format for the date in properties (e.g., yyyy-mm-dd, MMMM D, yyyy, yyyy-mm-dd HH:mm)").addText( + (text) => text.setPlaceholder("YYYY-MM-DD").setValue(settings.dateFormat).onChange(async (value) => { + settings.dateFormat = value || "YYYY-MM-DD"; + await this.plugin.saveSettings(); + }) + ); + }); + generalGroup.addSetting((setting) => { + setting.setName("Enable copy heading links").setDesc("Add right-click context menu option to copy heading links in various formats.").addToggle( + (toggle) => toggle.setValue(settings.enableCopyHeadingLink).onChange(async (value) => { + settings.enableCopyHeadingLink = value; + await this.plugin.saveSettings(); + this.updateCopyHeadingFields(); + }) + ); + }); + generalGroup.addSetting((setting) => { + setting.setName("Default heading link format").setDesc("Choose the default format for copied heading links. Obsidian format respects your Obsidian settings for wikilink vs markdown preference. Astro link uses your link base path from above and converts the heading into kebab-case format as an anchor link").addDropdown( + (dropdown) => dropdown.addOption("obsidian", "Obsidian link").addOption("astro", "Astro link").setValue(settings.copyHeadingLinkFormat).onChange(async (value) => { + settings.copyHeadingLinkFormat = value; + await this.plugin.saveSettings(); + }) + ); + setting.settingEl.classList.toggle("astro-composer-setting-container-visible", settings.enableCopyHeadingLink); + setting.settingEl.classList.toggle("astro-composer-setting-container-hidden", !settings.enableCopyHeadingLink); + }); + generalGroup.addSetting((setting) => { + setting.setName("Add trailing slash to links").setDesc("Add trailing slashes to all converted internal links (e.g., /about/ instead of /about).").addToggle( + (toggle) => toggle.setValue(settings.addTrailingSlashToLinks).onChange(async (value) => { + settings.addTrailingSlashToLinks = value; + await this.plugin.saveSettings(); + }) + ); + }); + generalGroup.addSetting((setting) => { + setting.setName("Process background file changes").setDesc("Automatically process new files when they're changed in the background (by Git or other plugins). Disable to prevent modal spam when files are already processed on other devices during a sync.").addToggle( + (toggle) => toggle.setValue(settings.processBackgroundFileChanges).onChange(async (value) => { + settings.processBackgroundFileChanges = value; + await this.plugin.saveSettings(); + }) + ); + }); + generalGroup.addSetting((setting) => { + setting.setName("Show MDX files in file explorer").setDesc("Make .mdx files visible in Obsidian's file explorer. Requires reload to take effect.").addToggle( + (toggle) => toggle.setValue(settings.showMdxFilesInExplorer).onChange(async (value) => { + settings.showMdxFilesInExplorer = value; + await this.plugin.saveSettings(); + }) + ); + }); + const automationGroup = createSettingsGroup(containerEl, "Property automation", "astro-composer"); + automationGroup.addSetting((setting) => { + setting.setName("Auto-insert properties").setDesc("Automatically insert the properties template when creating new files.").addToggle( + (toggle) => toggle.setValue(settings.autoInsertProperties).onChange(async (value) => { + settings.autoInsertProperties = value; + await this.plugin.saveSettings(); + }) + ); + }); + automationGroup.addSetting((setting) => { + setting.setName("Update date on publish").setDesc("Update 'date' property when switching from draft to published status.").addToggle( + (toggle) => toggle.setValue(settings.syncDraftDate).onChange(async (value) => { + settings.syncDraftDate = value; + await this.plugin.saveSettings(); + this.display(); + }) + ); + }); + if (settings.syncDraftDate) { + automationGroup.addSetting((setting) => { + setting.setName("Draft property name").setDesc("The property field to use for draft status.").addText( + (text) => text.setPlaceholder("draft").setValue(settings.draftProperty || "").onChange(async (value) => { + var _a2; + settings.draftProperty = value; + await this.plugin.saveSettings(); + (_a2 = this.plugin.frontmatterService) == null ? void 0 : _a2.initializeDraftStatusMap(); + }) + ); + }); + automationGroup.addSetting((setting) => { + setting.setName("Draft logic").setDesc("Whether the property value 'true' means it is a draft or published.").addDropdown( + (dropdown) => dropdown.addOption("true-is-draft", "True = Draft").addOption("false-is-draft", "True = Published").setValue(settings.draftLogic || "true-is-draft").onChange(async (value) => { + var _a2; + settings.draftLogic = value; + await this.plugin.saveSettings(); + (_a2 = this.plugin.frontmatterService) == null ? void 0 : _a2.initializeDraftStatusMap(); + }) + ); + }); + automationGroup.addSetting((setting) => { + setting.setName("Published date property name").setDesc("The property field to update when published (e.g., 'date' or 'pubDate').").addText( + (text) => text.setPlaceholder("date").setValue(settings.publishDateField || "").onChange(async (value) => { + settings.publishDateField = value; + await this.plugin.saveSettings(); + }) + ); + }); + } + const contentTypesGroup = createSettingsGroup(containerEl, "Content types", "astro-composer"); + contentTypesGroup.addSetting((setting) => { + setting.settingEl.addClass("astro-composer-setting-hidden-elements"); + setting.settingEl.addClass("astro-composer-setting-container-full-width"); + this.customContentTypesContainer = setting.settingEl.createDiv({ + cls: "custom-content-types-container astro-composer-custom-types-container-visible" + }); + }); + if (this.customContentTypesContainer) { + this.renderCustomContentTypes(); + } + if (!import_obsidian10.Platform.isMobile) { + const developerGroup = createSettingsGroup(containerEl, "Developer commands", "astro-composer"); + developerGroup.addSetting((setting) => { + setting.setName("Enable open terminal command").setDesc("Enable command to open terminal in project root directory.").addToggle( + (toggle) => toggle.setValue(settings.enableOpenTerminalCommand).onChange(async (value) => { + settings.enableOpenTerminalCommand = value; + await this.plugin.saveSettings(); + this.updateTerminalCommandFields(); + if (this.plugin.registerRibbonIcons) { + this.plugin.registerRibbonIcons(); + } + }) + ); + }); + this.terminalCommandContainer = containerEl.createDiv({ cls: "terminal-command-fields" }); + this.terminalCommandContainer.classList.toggle("astro-composer-setting-container-visible", settings.enableOpenTerminalCommand); + this.terminalCommandContainer.classList.toggle("astro-composer-setting-container-hidden", !settings.enableOpenTerminalCommand); + developerGroup.addSetting((setting) => { + const descFragment = document.createDocumentFragment(); + descFragment.createEl("div", { text: "Path relative to the Obsidian vault root folder. Use ../.. for two levels up. Leave blank to use the vault folder" }); + descFragment.createEl("div", { text: "This is where the terminal will open. Absolute paths work also." }); + setting.setName("Project root directory path").setDesc(descFragment).addText( + (text) => text.setPlaceholder("../..").setValue(settings.terminalProjectRootPath).onChange(async (value) => { + settings.terminalProjectRootPath = value; + await this.plugin.saveSettings(); + }) + ); + setting.settingEl.classList.toggle("astro-composer-setting-container-visible", settings.enableOpenTerminalCommand); + setting.settingEl.classList.toggle("astro-composer-setting-container-hidden", !settings.enableOpenTerminalCommand); + }); + developerGroup.addSetting((setting) => { + const descFragment = document.createDocumentFragment(); + descFragment.createEl("div", { text: "Leave blank to use platform defaults. On macOS, the default is Terminal. On Windows, it's Windows Terminal (Win 11) or cmd.exe (Win 10). On Linux, it's gnome-terminal, konsole, or xterm" }); + descFragment.createEl("div", { text: "Examples include Terminal, iTerm, PowerShell, and Alacritty" }); + setting.setName("Terminal application name").setDesc(descFragment).addText( + (text) => text.setPlaceholder("Terminal").setValue(settings.terminalApplicationName).onChange(async (value) => { + settings.terminalApplicationName = value; + await this.plugin.saveSettings(); + }) + ); + setting.settingEl.classList.toggle("astro-composer-setting-container-visible", settings.enableOpenTerminalCommand); + setting.settingEl.classList.toggle("astro-composer-setting-container-hidden", !settings.enableOpenTerminalCommand); + }); + developerGroup.addSetting((setting) => { + setting.setName("Enable debug logging").setDesc("Log terminal launch commands and platform decisions to the developer console for troubleshooting.").addToggle( + (toggle) => toggle.setValue(settings.enableTerminalDebugLogging).onChange(async (value) => { + settings.enableTerminalDebugLogging = value; + await this.plugin.saveSettings(); + }) + ); + setting.settingEl.classList.toggle("astro-composer-setting-container-visible", settings.enableOpenTerminalCommand); + setting.settingEl.classList.toggle("astro-composer-setting-container-hidden", !settings.enableOpenTerminalCommand); + }); + developerGroup.addSetting((setting) => { + setting.setName("Show open terminal ribbon icon").setDesc("Add a ribbon icon to launch the terminal command.").addToggle((toggle) => { + this.terminalRibbonToggleComponent = toggle; + toggle.setValue(settings.enableTerminalRibbonIcon).setDisabled(!settings.enableOpenTerminalCommand).onChange(async (value) => { + this.plugin.settings.enableTerminalRibbonIcon = value; + settings.enableTerminalRibbonIcon = value; + await this.plugin.saveSettings(); + setTimeout(() => { + if (this.plugin.registerRibbonIcons) { + this.plugin.registerRibbonIcons(); + } + }, 50); + }); + }); + setting.settingEl.classList.toggle("astro-composer-setting-container-visible", settings.enableOpenTerminalCommand); + setting.settingEl.classList.toggle("astro-composer-setting-container-hidden", !settings.enableOpenTerminalCommand); + this.terminalRibbonToggle = setting; + }); + developerGroup.addSetting((setting) => { + setting.setName("Enable edit config file command").setDesc("Enable command to open astro config file in default editor.").addToggle( + (toggle) => toggle.setValue(settings.enableOpenConfigFileCommand).onChange(async (value) => { + settings.enableOpenConfigFileCommand = value; + await this.plugin.saveSettings(); + this.updateConfigCommandFields(); + if (this.plugin.registerRibbonIcons) { + this.plugin.registerRibbonIcons(); + } + }) + ); + }); + this.configCommandContainer = containerEl.createDiv({ cls: "config-command-fields" }); + this.configCommandContainer.classList.toggle("astro-composer-setting-container-visible", settings.enableOpenConfigFileCommand); + this.configCommandContainer.classList.toggle("astro-composer-setting-container-hidden", !settings.enableOpenConfigFileCommand); + developerGroup.addSetting((setting) => { + const descFragment = document.createDocumentFragment(); + descFragment.createEl("div", { text: "Path to the config file relative to the vault root. Use ../config.ts or ../../astro.config.mjs." }); + descFragment.createEl("div", { text: "Absolute paths work also." }); + setting.setName("Config file path").setDesc(descFragment).addText( + (text) => text.setPlaceholder("../config.ts").setValue(settings.configFilePath).onChange(async (value) => { + settings.configFilePath = value; + await this.plugin.saveSettings(); + }) + ); + setting.settingEl.classList.toggle("astro-composer-setting-container-visible", settings.enableOpenConfigFileCommand); + setting.settingEl.classList.toggle("astro-composer-setting-container-hidden", !settings.enableOpenConfigFileCommand); + }); + developerGroup.addSetting((setting) => { + setting.setName("Show open config ribbon icon").setDesc("Add a ribbon icon to launch the config file command.").addToggle((toggle) => { + this.configRibbonToggleComponent = toggle; + toggle.setValue(settings.enableConfigRibbonIcon).setDisabled(!settings.enableOpenConfigFileCommand).onChange(async (value) => { + this.plugin.settings.enableConfigRibbonIcon = value; + settings.enableConfigRibbonIcon = value; + await this.plugin.saveSettings(); + setTimeout(() => { + if (this.plugin.registerRibbonIcons) { + this.plugin.registerRibbonIcons(); + } + }, 50); + }); + }); + setting.settingEl.classList.toggle("astro-composer-setting-container-visible", settings.enableOpenConfigFileCommand); + setting.settingEl.classList.toggle("astro-composer-setting-container-hidden", !settings.enableOpenConfigFileCommand); + this.configRibbonToggle = setting; + }); + developerGroup.addSetting((setting) => { + setting.setName("Swap out help button for custom action").setDesc("Replace the help button in the vault profile area with a custom action.").addToggle((toggle) => { + var _a2, _b; + return toggle.setValue((_b = (_a2 = settings.helpButtonReplacement) == null ? void 0 : _a2.enabled) != null ? _b : false).onChange(async (value) => { + if (!settings.helpButtonReplacement) { + settings.helpButtonReplacement = { + enabled: false, + commandId: "edit-astro-config", + iconId: "rocket" + }; + } + settings.helpButtonReplacement.enabled = value; + await this.plugin.saveSettings(); + if (this.plugin.updateHelpButton) { + await this.plugin.updateHelpButton(); + } + this.display(); + }); + }); + }); + if ((_a = settings.helpButtonReplacement) == null ? void 0 : _a.enabled) { + const commandName = this.getCommandName(settings.helpButtonReplacement.commandId); + developerGroup.addSetting((setting) => { + setting.setName("Command").setDesc("Select the command to execute when the button is clicked.").addButton((button) => button.setButtonText(commandName || "Select command").onClick(() => { + const modal = new CommandPickerModal(this.app, (commandId) => { + void (async () => { + if (!settings.helpButtonReplacement) { + settings.helpButtonReplacement = { + enabled: true, + commandId: "edit-astro-config", + iconId: "rocket" + }; + } + settings.helpButtonReplacement.commandId = commandId; + await this.plugin.saveSettings(); + if (this.plugin.updateHelpButton) { + await this.plugin.updateHelpButton(); + } + this.display(); + })(); + }); + modal.open(); + })); + }); + const iconName = this.getIconName(settings.helpButtonReplacement.iconId); + developerGroup.addSetting((setting) => { + setting.setName("Icon").setDesc("Select the icon to display on the button.").addButton((button) => button.setButtonText(iconName || "Select icon...").onClick(() => { + const modal = new IconPickerModal(this.app, (iconId) => { + void (async () => { + if (!settings.helpButtonReplacement) { + settings.helpButtonReplacement = { + enabled: true, + commandId: "edit-astro-config", + iconId: "rocket" + }; + } + settings.helpButtonReplacement.iconId = iconId; + await this.plugin.saveSettings(); + if (this.plugin.updateHelpButton) { + await this.plugin.updateHelpButton(); + } + this.display(); + })(); + }); + modal.open(); + })); + }); + } + } + this.updateCopyHeadingFields(); + if (!import_obsidian10.Platform.isMobile) { + this.updateTerminalCommandFields(); + this.updateConfigCommandFields(); + } + } + updateCopyHeadingFields() { + const settings = this.plugin.settings; + const isVisible = settings.enableCopyHeadingLink; + const containerEl = this.containerEl; + const allSettings = containerEl.querySelectorAll(".setting-item"); + allSettings.forEach((settingEl) => { + var _a; + const nameEl = settingEl.querySelector(".setting-item-name"); + if (nameEl && ((_a = nameEl.textContent) == null ? void 0 : _a.trim()) === "Default heading link format") { + settingEl.classList.toggle("astro-composer-setting-container-visible", isVisible); + settingEl.classList.toggle("astro-composer-setting-container-hidden", !isVisible); + } + }); + } + updateTerminalCommandFields() { + const settings = this.plugin.settings; + const isVisible = settings.enableOpenTerminalCommand; + if (this.terminalCommandContainer) { + this.terminalCommandContainer.classList.toggle("astro-composer-setting-container-visible", isVisible); + this.terminalCommandContainer.classList.toggle("astro-composer-setting-container-hidden", !isVisible); + } + const containerEl = this.containerEl; + const allSettings = containerEl.querySelectorAll(".setting-item"); + allSettings.forEach((settingEl) => { + var _a; + const nameEl = settingEl.querySelector(".setting-item-name"); + if (nameEl) { + const name = (_a = nameEl.textContent) == null ? void 0 : _a.trim(); + if (name === "Project root directory path" || name === "Show open terminal ribbon icon") { + settingEl.classList.toggle("astro-composer-setting-container-visible", isVisible); + settingEl.classList.toggle("astro-composer-setting-container-hidden", !isVisible); + } + } + }); + if (this.terminalRibbonToggleComponent) { + this.terminalRibbonToggleComponent.setDisabled(!this.plugin.settings.enableOpenTerminalCommand); + } + } + updateConfigCommandFields() { + const settings = this.plugin.settings; + const isVisible = settings.enableOpenConfigFileCommand; + if (this.configCommandContainer) { + this.configCommandContainer.classList.toggle("astro-composer-setting-container-visible", isVisible); + this.configCommandContainer.classList.toggle("astro-composer-setting-container-hidden", !isVisible); + } + const containerEl = this.containerEl; + const allSettings = containerEl.querySelectorAll(".setting-item"); + allSettings.forEach((settingEl) => { + var _a; + const nameEl = settingEl.querySelector(".setting-item-name"); + if (nameEl) { + const name = (_a = nameEl.textContent) == null ? void 0 : _a.trim(); + if (name === "Config file path" || name === "Show open config ribbon icon") { + settingEl.classList.toggle("astro-composer-setting-container-visible", isVisible); + settingEl.classList.toggle("astro-composer-setting-container-hidden", !isVisible); + } + } + }); + if (this.configRibbonToggleComponent) { + this.configRibbonToggleComponent.setDisabled(!this.plugin.settings.enableOpenConfigFileCommand); + } + } + checkForFolderConflicts() { + const settings = this.plugin.settings; + const blankFolders = []; + const folderConflicts = {}; + const contentTypes = settings.contentTypes || []; + for (const contentType of contentTypes) { + if (contentType.enabled) { + if (!contentType.folder || contentType.folder.trim() === "") { + blankFolders.push(contentType.name || "Content"); + } else { + if (!folderConflicts[contentType.folder]) { + folderConflicts[contentType.folder] = []; + } + folderConflicts[contentType.folder].push(contentType.name || "Content"); + } + } + } + } + addCustomContentType() { + const settings = this.plugin.settings; + const contentTypes = settings.contentTypes || []; + const newType = { + id: `content-${Date.now()}`, + name: `Content ${contentTypes.length + 1}`, + folder: "", + linkBasePath: "", + template: '---\ntitle: "{{title}}"\ndate: {{date}}\n---\n', + enabled: true, + creationMode: "file", + indexFileName: "", + ignoreSubfolders: false, + enableUnderscorePrefix: false, + useMdxExtension: false, + modifiedDateField: "" + }; + contentTypes.push(newType); + settings.contentTypes = contentTypes; + void this.plugin.saveSettings(); + this.renderCustomContentTypes(); + this.plugin.registerCreateEvent(); + registerContentTypeCommands(this.plugin, settings); + } + renderCustomContentTypes() { + if (!this.customContentTypesContainer) return; + this.customContentTypesContainer.empty(); + const settings = this.plugin.settings; + const contentTypes = settings.contentTypes || []; + contentTypes.forEach((customType, index) => { + var _a, _b; + if (!this.customContentTypesContainer) return; + const typeContainer = this.customContentTypesContainer.createDiv({ + cls: "custom-content-type-item", + attr: { "data-type-id": customType.id } + }); + const header = typeContainer.createDiv({ cls: "custom-content-type-header" }); + header.classList.add("astro-composer-custom-type-header"); + const collapseButton = header.createEl("button", { + cls: "astro-composer-collapse-button", + attr: { "aria-label": "Collapse/expand" } + }); + const isCollapsed = (_a = customType.collapsed) != null ? _a : false; + (0, import_obsidian10.setIcon)(collapseButton, "chevron-down"); + if (isCollapsed) { + collapseButton.classList.add("is-collapsed"); + } + collapseButton.addEventListener("click", () => { + void this.toggleContentTypeCollapse(customType.id); + const updatedType = this.plugin.settings.contentTypes.find((ct) => ct.id === customType.id); + if (updatedType) { + if (updatedType.collapsed) { + collapseButton.classList.add("is-collapsed"); + } else { + collapseButton.classList.remove("is-collapsed"); + } + } + }); + const headerName = header.createDiv({ cls: "astro-composer-header-name" }); + headerName.createEl("div", { text: customType.name || `Content ${index + 1}`, cls: "setting-item-name" }); + const reorderContainer = header.createDiv({ cls: "astro-composer-reorder-buttons" }); + const upButton = reorderContainer.createEl("button", { + cls: "astro-composer-reorder-button", + attr: { "aria-label": "Move up" } + }); + (0, import_obsidian10.setIcon)(upButton, "chevron-up"); + upButton.disabled = index === 0; + upButton.addEventListener("click", () => { + void this.moveContentTypeUp(customType.id); + }); + const downButton = reorderContainer.createEl("button", { + cls: "astro-composer-reorder-button", + attr: { "aria-label": "Move down" } + }); + (0, import_obsidian10.setIcon)(downButton, "chevron-down"); + downButton.disabled = index === contentTypes.length - 1; + downButton.addEventListener("click", () => { + void this.moveContentTypeDown(customType.id); + }); + const toggleContainer = header.createDiv({ cls: "checkbox-container" }); + if (customType.enabled) { + toggleContainer.classList.add("is-enabled"); + } + const toggle = toggleContainer.createEl("input", { type: "checkbox", cls: "checkbox-input" }); + toggle.checked = customType.enabled; + toggleContainer.addEventListener("click", (e) => { + void (async () => { + e.preventDefault(); + const newValue = !customType.enabled; + customType.enabled = newValue; + toggle.checked = newValue; + await this.plugin.saveSettings(); + this.plugin.registerCreateEvent(); + if (newValue) { + toggleContainer.classList.add("is-enabled"); + } else { + toggleContainer.classList.remove("is-enabled"); + } + this.updateCustomContentTypeVisibility(customType.id, newValue); + registerContentTypeCommands(this.plugin, this.plugin.settings); + })(); + }); + toggle.addEventListener("change", (e) => { + void (async () => { + const value = e.target.checked; + customType.enabled = value; + await this.plugin.saveSettings(); + this.plugin.registerCreateEvent(); + if (value) { + toggleContainer.classList.add("is-enabled"); + } else { + toggleContainer.classList.remove("is-enabled"); + } + this.updateCustomContentTypeVisibility(customType.id, value); + registerContentTypeCommands(this.plugin, this.plugin.settings); + })(); + }); + const settingsContainer = typeContainer.createDiv({ + cls: "custom-content-type-settings", + attr: { "data-type-id": customType.id } + }); + const initiallyCollapsed = (_b = customType.collapsed) != null ? _b : false; + const initiallyVisible = customType.enabled && !initiallyCollapsed; + if (initiallyVisible) { + settingsContainer.classList.add("astro-composer-setting-container-visible"); + } else { + settingsContainer.classList.add("astro-composer-setting-container-hidden"); + } + const nameContainer = settingsContainer.createDiv(); + new import_obsidian10.Setting(nameContainer).setName("Content type name").setDesc("Display name for this content type (e.g., 'projects', 'notes', 'tutorials')").addText((text) => { + text.setPlaceholder("Enter content type name").setValue(customType.name).onChange(async (value) => { + customType.name = value; + await this.plugin.saveSettings(); + registerContentTypeCommands(this.plugin, this.plugin.settings); + }); + }); + const folderContainer = settingsContainer.createDiv(); + const folderSetting = new import_obsidian10.Setting(folderContainer).setName("Folder location").setDesc("Folder path where this content type will be created. Leave blank to use the vault folder. Supports wildcards like directory/* or directory/*/* to match specific folder depths.").addText((text) => { + text.setPlaceholder("Enter folder path (e.g., 'docs', 'docs/*', 'docs/*/*') or leave blank for vault root").setValue(customType.folder).onChange(async (value) => { + customType.folder = value; + await this.plugin.saveSettings(); + this.plugin.registerCreateEvent(); + this.updateCustomContentTypeIgnoreSubfoldersField(customType.id); + const allContentTypes = this.plugin.settings.contentTypes || []; + for (const ct of allContentTypes) { + this.updateFolderConflictWarning(ct.id, null); + } + }); + }); + folderContainer.createDiv({ cls: "astro-composer-conflict-warning hidden", attr: { "data-type-id": customType.id } }); + this.updateFolderConflictWarning(customType.id, folderSetting); + const ignoreSubfoldersContainer = settingsContainer.createDiv({ cls: "custom-ignore-subfolders-field" }); + ignoreSubfoldersContainer.setAttribute("data-type-id", customType.id); + ignoreSubfoldersContainer.classList.toggle("astro-composer-setting-container-visible", !!customType.folder); + ignoreSubfoldersContainer.classList.toggle("astro-composer-setting-container-hidden", !customType.folder); + new import_obsidian10.Setting(ignoreSubfoldersContainer).setName("Ignore subfolders").setDesc("When enabled, automation will only trigger for new .md files within this content type's folder and one level down (for folder-based content). Files in deeper subfolders will be ignored.").addToggle( + (toggle2) => toggle2.setValue(customType.ignoreSubfolders || false).onChange(async (value) => { + customType.ignoreSubfolders = value; + await this.plugin.saveSettings(); + }) + ); + const underscorePrefixContainer = settingsContainer.createDiv(); + new import_obsidian10.Setting(underscorePrefixContainer).setName("Use underscore prefix for drafts").setDesc("Add an underscore prefix (_content-title) to new notes by default when enabled. This hides them from astro, which can be helpful for drafts").addToggle( + (toggle2) => toggle2.setValue(customType.enableUnderscorePrefix || false).onChange(async (value) => { + customType.enableUnderscorePrefix = value; + await this.plugin.saveSettings(); + }) + ); + const linkContainer = settingsContainer.createDiv(); + new import_obsidian10.Setting(linkContainer).setName("Link base path").setDesc("Base path for converted links (e.g., '/projects/', '/notes/tutorials/', leave blank for root /).").addText((text) => { + text.setPlaceholder("Enter link base path").setValue(customType.linkBasePath || "").onChange(async (value) => { + customType.linkBasePath = value; + await this.plugin.saveSettings(); + }); + }); + const creationModeContainer = settingsContainer.createDiv(); + new import_obsidian10.Setting(creationModeContainer).setName("Creation mode").setDesc("How to create new entries: file-based or folder-based with an index file.").addDropdown( + (dropdown) => dropdown.addOption("file", "File-based (content-title.md)").addOption("folder", "Folder-based (content-title/index.md)").setValue(customType.creationMode).onChange(async (value) => { + customType.creationMode = value; + await this.plugin.saveSettings(); + this.updateCustomContentTypeIndexFileField(customType.id); + }) + ); + const indexFileContainer = settingsContainer.createDiv({ cls: "custom-index-file-field" }); + indexFileContainer.classList.toggle("astro-composer-setting-container-visible", customType.creationMode === "folder"); + indexFileContainer.classList.toggle("astro-composer-setting-container-hidden", customType.creationMode !== "folder"); + new import_obsidian10.Setting(indexFileContainer).setName("Index file name").setDesc("Name for index files in folder-based content (without .md extension). Defaults to 'index' if left blank.").addText( + (text) => text.setPlaceholder("index").setValue(customType.indexFileName).onChange(async (value) => { + customType.indexFileName = value; + await this.plugin.saveSettings(); + }) + ); + const useMdxContainer = settingsContainer.createDiv(); + new import_obsidian10.Setting(useMdxContainer).setName("Use MDX instead of MD").setDesc("Create files with .mdx extension instead of .md extension.").addToggle( + (toggle2) => toggle2.setValue(customType.useMdxExtension || false).onChange(async (value) => { + customType.useMdxExtension = value; + await this.plugin.saveSettings(); + }) + ); + const modifiedDateContainer = settingsContainer.createDiv(); + new import_obsidian10.Setting(modifiedDateContainer).setName("Modified date property").setDesc("The property field to update with the modified date for this content type. Leave blank to disable.").addText( + (text) => text.setPlaceholder("modified").setValue(customType.modifiedDateField || "").onChange(async (value) => { + customType.modifiedDateField = value; + await this.plugin.saveSettings(); + }) + ); + const templateContainer = settingsContainer.createDiv(); + new import_obsidian10.Setting(templateContainer).setName("Properties template").addTextArea((text) => { + text.setPlaceholder('---\ntitle: "{{title}}"\ndate: {{date}}\n---\n').setValue(customType.template).onChange(async (value) => { + customType.template = value; + await this.plugin.saveSettings(); + }); + text.inputEl.classList.add("astro-composer-template-textarea"); + return text; + }).then((setting) => { + setting.descEl.empty(); + const descDiv = setting.descEl.createEl("div"); + descDiv.createEl("div", { text: "Template for new files of this content type." }); + descDiv.createEl("div", { text: "Variables include {{title}}, {{date}}, and {{slug}}." }); + descDiv.createEl("div", { text: "Do not wrap {{date}} in quotes as it represents a datetime value, not a string." }); + }); + const removeContainer = settingsContainer.createDiv(); + const removeSetting = new import_obsidian10.Setting(removeContainer).setName("").addButton((button) => { + button.setButtonText("Remove").setWarning().onClick(async () => { + const contentType = this.plugin.settings.contentTypes.find((ct) => ct.id === customType.id); + const typeName = (contentType == null ? void 0 : contentType.name) || "content type"; + const modal = new ConfirmModal( + this.app, + `Are you sure you want to remove "${typeName}"? This action cannot be undone.`, + "Remove", + "Cancel" + ); + const confirmed = await modal.waitForResult(); + if (confirmed) { + await this.removeCustomContentType(customType.id); + } + }); + }); + removeSetting.settingEl.classList.add("astro-composer-remove-setting"); + this.updateCustomContentTypeVisibility(customType.id, customType.enabled); + }); + contentTypes.forEach((customType) => { + this.updateFolderConflictWarning(customType.id, null); + }); + const addButtonContainer = this.customContentTypesContainer.createDiv({ cls: "astro-composer-add-button-container" }); + const addButton = addButtonContainer.createEl("button", { + cls: "mod-cta", + text: "Add content type" + }); + addButton.addEventListener("click", () => { + this.addCustomContentType(); + }); + } + updateCustomContentTypeVisibility(typeId, enabled) { + var _a, _b; + const settingsContainer = (_a = this.customContentTypesContainer) == null ? void 0 : _a.querySelector(`[data-type-id="${typeId}"].custom-content-type-settings`); + if (settingsContainer) { + const contentTypes = this.plugin.settings.contentTypes || []; + const contentType = contentTypes.find((ct) => ct.id === typeId); + const isCollapsed = (_b = contentType == null ? void 0 : contentType.collapsed) != null ? _b : false; + const shouldBeVisible = enabled && !isCollapsed; + settingsContainer.classList.toggle("astro-composer-setting-container-visible", shouldBeVisible); + settingsContainer.classList.toggle("astro-composer-setting-container-hidden", !shouldBeVisible); + } + } + updateCustomContentTypeIndexFileField(typeId) { + var _a; + const contentTypes = this.plugin.settings.contentTypes || []; + const customType = contentTypes.find((type) => type.id === typeId); + if (!customType) return; + const indexFileContainer = (_a = this.customContentTypesContainer) == null ? void 0 : _a.querySelector(`[data-type-id="${typeId}"] .custom-index-file-field`); + if (indexFileContainer) { + indexFileContainer.classList.toggle("astro-composer-setting-container-visible", customType.creationMode === "folder"); + indexFileContainer.classList.toggle("astro-composer-setting-container-hidden", customType.creationMode !== "folder"); + } + } + updateCustomContentTypeIgnoreSubfoldersField(typeId) { + var _a; + const contentTypes = this.plugin.settings.contentTypes || []; + const customType = contentTypes.find((type) => type.id === typeId); + if (!customType) return; + const ignoreSubfoldersContainer = (_a = this.customContentTypesContainer) == null ? void 0 : _a.querySelector(`[data-type-id="${typeId}"].custom-ignore-subfolders-field`); + if (ignoreSubfoldersContainer) { + ignoreSubfoldersContainer.classList.toggle("astro-composer-setting-container-visible", !!customType.folder && customType.folder.trim() !== ""); + ignoreSubfoldersContainer.classList.toggle("astro-composer-setting-container-hidden", !customType.folder || customType.folder.trim() === ""); + } + } + updateFolderConflictWarning(typeId, setting) { + var _a; + const contentTypes = this.plugin.settings.contentTypes || []; + const currentType = contentTypes.find((type) => type.id === typeId); + if (!currentType) return; + const conflictWarningEl = (_a = this.customContentTypesContainer) == null ? void 0 : _a.querySelector(`[data-type-id="${typeId}"].astro-composer-conflict-warning`); + if (!conflictWarningEl) return; + const currentFolder = (currentType.folder || "").trim(); + const conflictingTypes = []; + for (const otherType of contentTypes) { + if (otherType.id === typeId || !otherType.enabled) continue; + const otherFolder = (otherType.folder || "").trim(); + if (currentFolder === "" && otherFolder === "") { + conflictingTypes.push(otherType.name || "Unnamed"); + } else if (currentFolder === otherFolder && currentFolder !== "") { + conflictingTypes.push(otherType.name || "Unnamed"); + } + } + if (conflictingTypes.length > 0) { + conflictWarningEl.removeClass("hidden"); + conflictWarningEl.textContent = `Conflict: ${conflictingTypes.join(", ")} also use${conflictingTypes.length === 1 ? "s" : ""} this folder. More specific patterns will take priority.`; + } else { + conflictWarningEl.addClass("hidden"); + } + } + async moveContentTypeUp(typeId) { + const settings = this.plugin.settings; + const contentTypes = settings.contentTypes || []; + const currentIndex = contentTypes.findIndex((ct) => ct.id === typeId); + if (currentIndex <= 0) return; + [contentTypes[currentIndex], contentTypes[currentIndex - 1]] = [contentTypes[currentIndex - 1], contentTypes[currentIndex]]; + settings.contentTypes = contentTypes; + await this.plugin.saveSettings(); + this.renderCustomContentTypes(); + } + async moveContentTypeDown(typeId) { + const settings = this.plugin.settings; + const contentTypes = settings.contentTypes || []; + const currentIndex = contentTypes.findIndex((ct) => ct.id === typeId); + if (currentIndex < 0 || currentIndex >= contentTypes.length - 1) return; + [contentTypes[currentIndex], contentTypes[currentIndex + 1]] = [contentTypes[currentIndex + 1], contentTypes[currentIndex]]; + settings.contentTypes = contentTypes; + await this.plugin.saveSettings(); + this.renderCustomContentTypes(); + } + async toggleContentTypeCollapse(typeId) { + const settings = this.plugin.settings; + const contentTypes = settings.contentTypes || []; + const contentType = contentTypes.find((ct) => ct.id === typeId); + if (!contentType) return; + contentType.collapsed = !contentType.collapsed; + await this.plugin.saveSettings(); + this.updateCustomContentTypeVisibility(typeId, contentType.enabled); + } + async removeCustomContentType(typeId) { + const settings = this.plugin.settings; + const contentTypes = settings.contentTypes || []; + settings.contentTypes = contentTypes.filter((ct) => ct.id !== typeId); + await this.plugin.saveSettings(); + this.renderCustomContentTypes(); + this.plugin.registerCreateEvent(); + registerContentTypeCommands(this.plugin, settings); + } + getCommandName(commandId) { + if (!commandId) return ""; + try { + const commandRegistry = this.app.commands; + if (commandRegistry && typeof commandRegistry.listCommands === "function") { + try { + const allCommands = commandRegistry.listCommands(); + const command = allCommands.find((cmd) => cmd.id === commandId); + if (command == null ? void 0 : command.name) { + return command.name; + } + } catch (e) { + console.warn("[Astro Composer] Error getting command name via listCommands():", e); + } + } + try { + const registry = commandRegistry == null ? void 0 : commandRegistry.commands; + if (registry && typeof registry === "object") { + const command = registry[commandId]; + if (command == null ? void 0 : command.name) { + return command.name; + } + } + } catch (e) { + console.warn("[Astro Composer] Error getting command name via registry:", e); + } + } catch (e) { + console.warn("[Astro Composer] Error getting command name:", e); + } + return ""; + } + getIconName(iconId) { + if (!iconId) return ""; + return iconId.replace(/^lucide-/, "").split("-").map((word) => word.charAt(0).toUpperCase() + word.slice(1)).join(" "); + } +}; + +// src/utils/heading-link-generator.ts +var HeadingLinkGenerator = class { + constructor(settings, plugin) { + this.settings = settings; + this.plugin = plugin; + } + // Get fresh settings from plugin if available, otherwise use stored settings + getSettings() { + var _a; + if ((_a = this.plugin) == null ? void 0 : _a.settings) { + return this.plugin.settings; + } + return this.settings; + } + /** + * Converts text to kebab-case slug for URLs + */ + // Local toKebabCase removed, using imported one instead + /** + * Gets the Astro-compatible URL from an internal link (copied from LinkConverter) + */ + getAstroUrlFromInternalLink(link) { + const hashIndex = link.indexOf("#"); + let path = hashIndex >= 0 ? link.slice(0, hashIndex) : link; + const anchor = hashIndex >= 0 ? link.slice(hashIndex) : ""; + path = path.replace(/\.md$/, ""); + let basePath = ""; + let contentFolder = ""; + let creationMode = "file"; + let indexFileName = ""; + const settings = this.getSettings(); + const contentTypes = settings.contentTypes || []; + const sortedTypes = sortByPatternSpecificity(contentTypes); + for (const contentType of sortedTypes) { + if (!contentType.enabled) continue; + let matches = false; + if (!contentType.folder || contentType.folder.trim() === "") { + if (!path.includes("/") || path.split("/").length === 1) { + matches = true; + } + } else if (matchesFolderPattern(path, contentType.folder)) { + matches = true; + } + if (matches) { + contentFolder = contentType.folder || ""; + basePath = contentType.linkBasePath || ""; + creationMode = contentType.creationMode; + indexFileName = contentType.indexFileName || ""; + break; + } + } + if (contentFolder) { + path = path.slice(contentFolder.length + 1); + } + let addTrailingSlash = false; + if (indexFileName && indexFileName.trim() !== "") { + const parts = path.split("/"); + if (parts[parts.length - 1] === indexFileName) { + parts.pop(); + path = parts.join("/"); + addTrailingSlash = true; + } + } else if (creationMode === "folder") { + const defaultIndexName = "index"; + const parts = path.split("/"); + if (parts[parts.length - 1] === defaultIndexName) { + parts.pop(); + path = parts.join("/"); + addTrailingSlash = true; + } + } + const slugParts = path.split("/").map((part) => toKebabCase(part)); + const slug = slugParts.join("/"); + if (basePath) { + if (!basePath.startsWith("/")) basePath = "/" + basePath; + if (!basePath.endsWith("/")) basePath += "/"; + } + const shouldAddTrailingSlash = (settings.addTrailingSlashToLinks || addTrailingSlash) && !anchor; + return `${basePath}${slug}${shouldAddTrailingSlash ? "/" : ""}${anchor}`; + } + /** + * Generates a standard Obsidian link to a heading, respecting user's link format preference + */ + generateObsidianLink(app, file, heading) { + const headingText = heading.heading; + const testLink = app.fileManager.generateMarkdownLink(file, "", ""); + if (testLink.startsWith("[[")) { + const fileName = file.basename; + return `[[${fileName}#${headingText}|${headingText}]]`; + } else { + const baseLink = app.fileManager.generateMarkdownLink(file, "", ""); + if (baseLink.startsWith("[[")) { + const fileName = file.basename; + return `[[${fileName}#${headingText}|${headingText}]]`; + } else { + const match = baseLink.match(/\[([^\]]+)\]\(([^)]+)\)/); + if (match) { + const [, , path] = match; + return `[${headingText}](${path}#${encodeURIComponent(headingText)})`; + } else { + const encodedFilename = encodeURIComponent(file.name); + return `[${headingText}](${encodedFilename}#${encodeURIComponent(headingText)})`; + } + } + } + } + /** + * Generates a standard Obsidian wikilink to a heading + */ + generateObsidianWikilink(file, heading) { + const headingText = heading.heading; + const fileName = file.basename; + return `[[${fileName}#${headingText}|${headingText}]]`; + } + /** + * Generates an Astro-compatible markdown link to a heading + */ + generateAstroLink(file, heading) { + const headingText = heading.heading; + const anchor = toKebabCase(headingText); + const internalLink = `${file.path}#${anchor}`; + const astroUrl = this.getAstroUrlFromInternalLink(internalLink); + return `[${headingText}](${astroUrl})`; + } + /** + * Generates an Astro-compatible wikilink to a heading + */ + generateAstroWikilink(file, heading) { + const headingText = heading.heading; + const anchor = toKebabCase(headingText); + const internalLink = `${file.path}#${anchor}`; + const astroUrl = this.getAstroUrlFromInternalLink(internalLink); + return `[[${headingText}|${astroUrl}]]`; + } + /** + * Extracts the URL from a markdown link or wikilink + */ + extractUrl(link) { + const markdownMatch = link.match(/\[([^\]]+)\]\(([^)]+)\)/); + if (markdownMatch) { + return markdownMatch[2]; + } + const wikilinkMatch = link.match(/\[\[([^\]]+)\]\]/); + if (wikilinkMatch) { + const content = wikilinkMatch[1]; + const pathPart = content.split("|")[0]; + return pathPart; + } + return link; + } + /** + * Generates the appropriate link format based on settings + */ + generateLink(app, file, heading) { + const settings = this.getSettings(); + if (settings.copyHeadingLinkFormat === "astro") { + return this.generateAstroLink(file, heading); + } else { + return this.generateObsidianLink(app, file, heading); + } + } + /** + * Finds the heading at a specific line in a file + */ + findHeadingAtLine(app, file, line) { + const cache = app.metadataCache.getFileCache(file); + if (!cache || !cache.headings) { + return null; + } + for (let i = cache.headings.length - 1; i >= 0; i--) { + const heading = cache.headings[i]; + if (heading.position.start.line <= line) { + return heading; + } + } + return null; + } +}; + +// src/services/MigrationService.ts +var import_obsidian12 = require("obsidian"); + +// src/ui/components/MigrationModal.ts +var import_obsidian11 = require("obsidian"); +var MigrationModal = class extends import_obsidian11.Modal { + constructor(app, conflicts) { + super(app); + this.result = null; + this.resolvePromise = null; + } + onOpen() { + const { contentEl } = this; + contentEl.empty(); + contentEl.addClass("astro-composer-migration-modal"); + contentEl.createEl("h2", { text: "Migration conflict detected" }); + contentEl.createEl("p", { + text: "You have existing content types with names that conflict with posts or pages. How would you like to proceed?" + }); + const conflictList = contentEl.createEl("ul"); + conflictList.createEl("li", { text: "Skip migration: keep your existing posts/pages settings (they will be ignored)" }); + conflictList.createEl("li", { text: "Migrate with renamed types: create 'posts (migrated)' and 'pages (migrated)' content types" }); + const buttonContainer = contentEl.createDiv({ cls: "modal-button-container" }); + const skipButton = buttonContainer.createEl("button", { + text: "Skip migration", + cls: "mod-cta" + }); + skipButton.onclick = () => { + this.result = { action: "skip" }; + this.close(); + }; + const migrateButton = buttonContainer.createEl("button", { + text: "Migrate with renamed types", + cls: "mod-cta" + }); + migrateButton.onclick = () => { + this.result = { action: "migrate" }; + this.close(); + }; + } + onClose() { + const { contentEl } = this; + contentEl.empty(); + if (this.resolvePromise && this.result) { + this.resolvePromise(this.result); + } + } + async waitForResult() { + return new Promise((resolve) => { + this.resolvePromise = resolve; + this.open(); + }); + } +}; + +// src/services/MigrationService.ts +var MigrationService = class { + constructor(app, plugin) { + this.app = app; + this.plugin = plugin; + } + /** + * Migrate old posts/pages settings to unified content types + */ + async migrateSettingsIfNeeded() { + const settings = this.plugin.settings; + if (settings.migrationCompleted) { + return; + } + const hasPostsSettings = settings.automatePostCreation !== void 0 && settings.automatePostCreation; + const hasPagesSettings = settings.enablePages !== void 0 && settings.enablePages; + if (!hasPostsSettings && !hasPagesSettings) { + settings.migrationCompleted = true; + await this.plugin.saveSettings(); + return; + } + const legacyContentTypes = settings.customContentTypes; + const existingContentTypes = settings.contentTypes || legacyContentTypes || []; + const conflicts = []; + if (existingContentTypes.some((ct) => ct.name === "Posts")) { + conflicts.push("Posts"); + } + if (existingContentTypes.some((ct) => ct.name === "Pages")) { + conflicts.push("Pages"); + } + let shouldMigrate = true; + if (conflicts.length > 0) { + await new Promise((resolve) => { + setTimeout(() => { + void (async () => { + try { + const modal = new MigrationModal(this.app, conflicts); + const timeoutPromise = new Promise((timeoutResolve) => { + setTimeout(() => { + timeoutResolve({ action: "skip" }); + }, 3e4); + }); + const result = await Promise.race([ + modal.waitForResult(), + timeoutPromise + ]); + if (result.action === "skip") { + shouldMigrate = false; + new import_obsidian12.Notice("Migration skipped. Old posts/pages settings will be ignored."); + } + } catch (error) { + console.warn("Migration modal error:", error); + shouldMigrate = false; + new import_obsidian12.Notice("Migration skipped due to error. You can migrate manually in settings."); + } + resolve(); + })(); + }, 500); + }); + } + if (!shouldMigrate) { + settings.migrationCompleted = true; + await this.plugin.saveSettings(); + return; + } + const migratedTypes = []; + if (hasPostsSettings && !conflicts.includes("Posts")) { + const postsType = { + id: `posts-${Date.now()}`, + name: "Posts", + folder: settings.postsFolder || "", + linkBasePath: settings.postsLinkBasePath || "", + template: settings.defaultTemplate || '---\ntitle: "{{title}}"\ndate: {{date}}\ntags: []\n---\n', + enabled: true, + creationMode: settings.creationMode || "file", + indexFileName: settings.indexFileName || "", + ignoreSubfolders: settings.onlyAutomateInPostsFolder || false, + enableUnderscorePrefix: settings.enableUnderscorePrefix || false, + useMdxExtension: false, + modifiedDateField: "" + }; + migratedTypes.push(postsType); + } + if (hasPagesSettings && !conflicts.includes("Pages")) { + const pagesType = { + id: `pages-${Date.now()}`, + name: "Pages", + folder: settings.pagesFolder || "", + linkBasePath: settings.pagesLinkBasePath || "", + template: settings.pageTemplate || '---\ntitle: "{{title}}"\ndescription: ""\n---\n', + enabled: true, + creationMode: settings.pagesCreationMode || "file", + indexFileName: settings.pagesIndexFileName || "", + ignoreSubfolders: settings.onlyAutomateInPagesFolder || false, + enableUnderscorePrefix: false, + useMdxExtension: false, + modifiedDateField: "" + }; + migratedTypes.push(pagesType); + } + const existingFromNew = settings.contentTypes || []; + const existingFromLegacy = legacyContentTypes || []; + let existingTypes = existingFromNew.length > 0 ? existingFromNew : existingFromLegacy; + let finalTypes = [...existingTypes]; + if (migratedTypes.length > 0) { + const existingNames = new Set(existingTypes.map((ct) => ct.name)); + const newMigratedTypes = migratedTypes.filter((mt) => !existingNames.has(mt.name)); + if (newMigratedTypes.length > 0) { + finalTypes = [...existingTypes, ...newMigratedTypes]; + } + } + settings.contentTypes = finalTypes; + const legacyFields = [ + "customContentTypes", + "enableUnderscorePrefix", + "postsFolder", + "postsLinkBasePath", + "automatePostCreation", + "creationMode", + "indexFileName", + "excludedDirectories", + "onlyAutomateInPostsFolder", + "enablePages", + "pagesFolder", + "pagesLinkBasePath", + "pagesCreationMode", + "pagesIndexFileName", + "pageTemplate", + "onlyAutomateInPagesFolder" + ]; + const settingsRecord = settings; + for (const field of legacyFields) { + delete settingsRecord[field]; + } + settings.migrationCompleted = true; + await this.plugin.saveSettings(); + await this.plugin.loadSettings(); + if (migratedTypes.length > 0) { + new import_obsidian12.Notice(`Migration completed: ${migratedTypes.length} content type(s) migrated.`); + setTimeout(() => { + if (this.plugin.settingsTab instanceof AstroComposerSettingTab) { + const settingsTab = this.plugin.settingsTab; + try { + if (settingsTab.customContentTypesContainer || settingsTab.containerEl) { + settingsTab.display(); + } + } catch (e) { + console.warn("Could not refresh settings tab after migration:", e); + } + } + }, 300); + } + } +}; + +// src/services/CreateEventService.ts +var import_obsidian13 = require("obsidian"); +var CreateEventService = class { + constructor(app, plugin) { + this.app = app; + this.plugin = plugin; + this.lastProcessedFiles = /* @__PURE__ */ new Map(); + } + handleCreate(file) { + void (async () => { + const now = Date.now(); + if (!(file instanceof import_obsidian13.TFile) || file.extension !== "md" && file.extension !== "mdx") { + return; + } + const filePath = file.path; + const createdTime = this.plugin.pluginCreatedFiles.get(filePath); + if (createdTime && now - createdTime < 5 * 60 * 1e3) { + return; + } + const lastProcessed = this.lastProcessedFiles.get(filePath) || 0; + if (lastProcessed > 0 && now - lastProcessed < CONSTANTS.DEBOUNCE_MS) { + return; + } + if (lastProcessed > 0 && now - lastProcessed > 2e3) { + this.lastProcessedFiles.delete(filePath); + } + const periodicCutoff = now - CONSTANTS.DEBOUNCE_MS * 2; + for (const [path, time] of this.lastProcessedFiles.entries()) { + if (time < periodicCutoff) { + this.lastProcessedFiles.delete(path); + } + } + const contentTypes = this.plugin.settings.contentTypes || []; + const hasEnabledContentTypes = contentTypes.some((ct) => ct.enabled); + if (!hasEnabledContentTypes) { + return; + } + const sortedContentTypes = sortByPatternSpecificity(contentTypes); + let matchedContentTypeId = null; + const matchingTypes = []; + for (const contentType of sortedContentTypes) { + if (!contentType.enabled) continue; + let matches = false; + if (!contentType.folder || contentType.folder.trim() === "") { + if (!filePath.includes("/") || filePath.split("/").length === 1) { + matches = true; + } + } else if (matchesFolderPattern(filePath, contentType.folder)) { + if (contentType.ignoreSubfolders) { + const pathSegments = filePath.split("/"); + const pathDepth = pathSegments.length; + const patternSegments = contentType.folder.split("/"); + const expectedDepth = patternSegments.length; + if (contentType.creationMode === "folder") { + const folderDepth = pathDepth - 1; + if (folderDepth === expectedDepth || folderDepth === expectedDepth + 1) { + matches = true; + } + } else { + if (pathDepth === expectedDepth) { + matches = true; + } + } + } else { + matches = true; + } + } + if (matches) { + matchingTypes.push(contentType); + if (!matchedContentTypeId) { + matchedContentTypeId = contentType.id; + } + } + } + if (matchingTypes.length > 1) { + const typeNames = matchingTypes.map((ct) => ct.name || "Unnamed").join(", "); + new import_obsidian13.Notice(`Multiple content types (${typeNames}) match this file. Using most specific: ${matchingTypes[0].name || "Unnamed"}`); + } + if (!matchedContentTypeId) { + return; + } + const stat = await this.app.vault.adapter.stat(file.path); + const isNewNote = (stat == null ? void 0 : stat.mtime) && now - stat.mtime < CONSTANTS.STAT_MTIME_THRESHOLD; + if (!isNewNote) { + return; + } + const activeFile = this.app.workspace.getActiveFile(); + const isActiveFile = activeFile && activeFile.path === file.path; + if (!this.plugin.settings.processBackgroundFileChanges && !isActiveFile) { + return; + } + await new Promise((resolve) => setTimeout(resolve, 50)); + let content; + try { + content = await this.app.vault.read(file); + } catch (error) { + console.error("Error reading file for create detection:", error); + return; + } + if (content.trim().length > 0) { + if (content.startsWith("---")) { + const frontmatterEnd = content.indexOf("\n---", 3); + if (frontmatterEnd !== -1) { + const frontmatterText = content.slice(4, frontmatterEnd).trim(); + const lines = frontmatterText.split("\n").filter((line) => line.trim().length > 0); + if (!this.plugin.settings.processBackgroundFileChanges && lines.length > 0) { + return; + } + if (lines.length > 1 || lines.length === 1 && !lines[0].startsWith("title:")) { + return; + } + } + } + const contentWithoutFrontmatter = content.startsWith("---") ? content.slice(content.indexOf("\n---", 3) + 4).trim() : content.trim(); + if (contentWithoutFrontmatter.length > 0) { + return; + } + } + this.lastProcessedFiles.set(file.path, now); + setTimeout(() => { + this.lastProcessedFiles.delete(file.path); + }, CONSTANTS.DEBOUNCE_MS + 100); + new TitleModal(this.app, file, this.plugin, matchedContentTypeId, false, true).open(); + })(); + } +}; + +// src/services/FrontmatterService.ts +var import_obsidian14 = require("obsidian"); +var FrontmatterService = class { + constructor(app, plugin) { + this.app = app; + this.plugin = plugin; + this.lastProcessedFile = ""; + this.lastProcessedTime = 0; + this.debounceTimeout = null; + this.draftStatusMap = /* @__PURE__ */ new Map(); + this.contentHashCache = /* @__PURE__ */ new Map(); + this.registerEvents(); + this.app.workspace.onLayoutReady(() => { + this.initializeDraftStatusMap(); + }); + } + initializeDraftStatusMap() { + var _a; + this.draftStatusMap.clear(); + const settings = this.plugin.settings; + const draftProp = settings.draftProperty || "draft"; + const files = this.app.vault.getFiles().filter((f) => f instanceof import_obsidian14.TFile && (f.extension === "md" || f.extension === "mdx")); + for (const file of files) { + const cache = this.app.metadataCache.getFileCache(file); + const rawValue = (_a = cache == null ? void 0 : cache.frontmatter) == null ? void 0 : _a[draftProp]; + this.draftStatusMap.set(file.path, this.calculateIsDraft(rawValue, settings)); + } + } + calculateIsDraft(rawValue, settings) { + if (rawValue === void 0 || rawValue === null) return false; + const val = String(rawValue).toLowerCase(); + if (settings.draftLogic === "false-is-draft") { + return val === "false" || val === "0" || rawValue === false; + } else { + return val === "true" || val === "1" || rawValue === true; + } + } + registerEvents() { + this.plugin.registerEvent( + this.app.metadataCache.on("changed", (file) => { + if (file instanceof import_obsidian14.TFile) { + this.onMetadataChange(file); + } + }) + ); + this.plugin.registerEvent( + this.app.vault.on("rename", (file, oldPath) => { + if (file instanceof import_obsidian14.TFile) { + this.onRename(file, oldPath); + } + }) + ); + this.plugin.registerEvent( + this.app.workspace.on("file-open", (file) => { + if (file instanceof import_obsidian14.TFile) { + void (async () => { + try { + const content = await this.app.vault.read(file); + this.contentHashCache.set(file.path, this.getContentHash(content)); + } catch (e) { + console.error(`Failed to lazily initialize content hash for ${file.path}:`, e); + } + })(); + } + }) + ); + } + onRename(file, oldPath) { + var _a; + const settings = this.plugin.settings; + if (!settings.syncDraftDate) return; + const oldName = oldPath.split("/").pop() || ""; + const newName = file.name; + if (oldName.startsWith("_") && !newName.startsWith("_")) { + const contentType = (_a = this.plugin.fileOps) == null ? void 0 : _a.getContentTypeByPath(file.path); + if (contentType == null ? void 0 : contentType.enableUnderscorePrefix) { + void this.updateDate(file); + } + } + } + onMetadataChange(file) { + var _a, _b; + const settings = this.plugin.settings; + const contentType = (_a = this.plugin.fileOps) == null ? void 0 : _a.getContentTypeByPath(file.path); + const hasModifiedField = !!(contentType == null ? void 0 : contentType.modifiedDateField); + if (!settings.syncDraftDate && !hasModifiedField) { + return; + } + const cache = this.app.metadataCache.getFileCache(file); + const draftProp = settings.draftProperty || "draft"; + const rawValue = (_b = cache == null ? void 0 : cache.frontmatter) == null ? void 0 : _b[draftProp]; + const isCurrentlyDraft = this.calculateIsDraft(rawValue, settings); + if (!this.draftStatusMap.has(file.path)) { + this.draftStatusMap.set(file.path, isCurrentlyDraft); + return; + } + const previousDraftStatus = this.draftStatusMap.get(file.path); + let draftStatusChangedToPublished = false; + if (previousDraftStatus === true && isCurrentlyDraft === false) { + draftStatusChangedToPublished = true; + } + this.draftStatusMap.set(file.path, isCurrentlyDraft); + if (!draftStatusChangedToPublished && !hasModifiedField) { + return; + } + const now = Date.now(); + if (this.lastProcessedFile === file.path && now - this.lastProcessedTime < 2e3) { + return; + } + if (this.debounceTimeout) { + window.clearTimeout(this.debounceTimeout); + } + this.debounceTimeout = window.setTimeout(async () => { + try { + const content = await this.app.vault.read(file); + const currentHash = this.getContentHash(content); + const previousHash = this.contentHashCache.get(file.path); + this.contentHashCache.set(file.path, currentHash); + if (previousHash === void 0) { + if (!draftStatusChangedToPublished) { + return; + } + } else if (previousHash === currentHash) { + if (!draftStatusChangedToPublished) { + return; + } + } + } catch (e) { + console.error(`Failed to check content hash for ${file.path}:`, e); + return; + } + void this.processFile(file, draftStatusChangedToPublished, contentType); + }, 500); + } + getContentHash(content) { + let body = content; + if (content.startsWith("---")) { + const end = content.indexOf("\n---", 3); + if (end !== -1) { + body = content.slice(end + 4); + } + } + const normalized = body.replace(/\s+/g, " ").trim(); + return this.simpleHash(normalized); + } + simpleHash(str) { + let hash = 0; + for (let i = 0; i < str.length; i++) { + const char = str.charCodeAt(i); + hash = (hash << 5) - hash + char; + hash |= 0; + } + return hash.toString() + "_" + str.length; + } + async updateDate(file) { + const settings = this.plugin.settings; + const dateField = settings.publishDateField || "date"; + await this.app.fileManager.processFrontMatter(file, (frontmatter) => { + const today = (0, import_obsidian14.moment)().format(settings.dateFormat); + if (frontmatter[dateField] !== today) { + frontmatter[dateField] = today; + this.lastProcessedFile = file.path; + this.lastProcessedTime = Date.now(); + } + }); + } + async processFile(file, draftStatusChangedToPublished, contentType) { + const settings = this.plugin.settings; + const publishDateField = settings.publishDateField || "date"; + await this.app.fileManager.processFrontMatter(file, (frontmatter) => { + let changed = false; + if (settings.syncDraftDate && draftStatusChangedToPublished) { + const today = (0, import_obsidian14.moment)().format(settings.dateFormat); + if (frontmatter[publishDateField] !== today) { + frontmatter[publishDateField] = today; + changed = true; + } + } + const modifiedField = contentType == null ? void 0 : contentType.modifiedDateField; + if (modifiedField && frontmatter[modifiedField] !== void 0) { + const now = (0, import_obsidian14.moment)().format(settings.dateFormat); + if (frontmatter[modifiedField] !== now) { + frontmatter[modifiedField] = now; + changed = true; + } + } + if (changed) { + this.lastProcessedFile = file.path; + this.lastProcessedTime = Date.now(); + } + }); + } +}; + +// src/main.ts +var AstroComposerPlugin = class extends import_obsidian15.Plugin { + constructor() { + super(...arguments); + this.pluginCreatedFiles = /* @__PURE__ */ new Map(); + this.processedFiles = /* @__PURE__ */ new Map(); + this.terminalRibbonIcon = null; + this.configRibbonIcon = null; + } + /** + * Migrate old posts/pages settings to unified content types + */ + async migrateSettingsIfNeeded() { + if (!this.migrationService) { + this.migrationService = new MigrationService(this.app, this); + } + await this.migrationService.migrateSettingsIfNeeded(); + } + async onload() { + try { + await this.loadSettings(); + this.fileOps = new FileOperations(this.app, this.settings, this); + this.migrationService = new MigrationService(this.app, this); + this.createEventService = new CreateEventService(this.app, this); + this.frontmatterService = new FrontmatterService(this.app, this); + this.templateParser = new TemplateParser(this.app, this.settings, this); + this.headingLinkGenerator = new HeadingLinkGenerator(this.settings, this); + if (this.settings.showMdxFilesInExplorer) { + try { + this.registerExtensions(["mdx"], "markdown"); + } catch (error) { + console.warn("[Astro Composer] MDX extension already registered:", error); + } + } + this.app.workspace.onLayoutReady(() => { + this.registerCreateEvent(); + if (!import_obsidian15.Platform.isMobile) { + this.startHelpButtonMonitor(); + } + void this.migrateSettingsIfNeeded(); + }); + registerCommands(this, this.settings); + registerContentTypeCommands(this, this.settings); + this.settingsTab = new AstroComposerSettingTab(this.app, this); + this.addSettingTab(this.settingsTab); + this.registerContextMenu(); + this.registerRibbonIcons(); + this.setupRibbonContextMenuHandling(); + } catch (error) { + console.error("[Astro Composer] Critical error during onload:", error); + new import_obsidian15.Notice("Astro Composer failed to load. Check console (Ctrl+Shift+I) for details."); + throw error; + } + } + registerCreateEvent() { + if (this.createEventRef) { + this.app.vault.offref(this.createEventRef); + this.createEventRef = void 0; + } + const createEventRef = this.app.vault.on("create", (file) => { + if (file instanceof import_obsidian15.TFile) { + this.createEventService.handleCreate(file); + this.cleanupPluginCreatedFiles(); + } + }); + this.registerEvent(createEventRef); + this.createEventRef = createEventRef; + } + cleanupPluginCreatedFiles() { + const now = Date.now(); + const ttl = 5 * 60 * 1e3; + for (const [path, timestamp] of this.pluginCreatedFiles.entries()) { + if (now - timestamp > ttl) { + this.pluginCreatedFiles.delete(path); + } + } + } + async loadSettings() { + const loadedData = await this.loadData(); + if (!this.settings) { + this.settings = Object.assign({}, DEFAULT_SETTINGS, loadedData); + } else { + Object.assign(this.settings, loadedData); + } + if (!this.settings.contentTypes || !Array.isArray(this.settings.contentTypes)) { + this.settings.contentTypes = []; + } + if (!this.settings.migrationCompleted) { + const legacySettings = this.settings; + const hasLegacyTypes = legacySettings.customContentTypes && Array.isArray(legacySettings.customContentTypes) && legacySettings.customContentTypes.length > 0; + const hasNewTypes = this.settings.contentTypes && Array.isArray(this.settings.contentTypes) && this.settings.contentTypes.length > 0; + if (hasLegacyTypes && !hasNewTypes) { + this.settings.contentTypes = legacySettings.customContentTypes || []; + } + } else { + const legacyFields = [ + "customContentTypes", + "enableUnderscorePrefix", + "postsFolder", + "postsLinkBasePath", + "automatePostCreation", + "creationMode", + "indexFileName", + "excludedDirectories", + "onlyAutomateInPostsFolder", + "enablePages", + "pagesFolder", + "pagesLinkBasePath", + "pagesCreationMode", + "pagesIndexFileName", + "pageTemplate", + "onlyAutomateInPagesFolder", + "linkBasePath", + "enableAutoRename", + "enableAutoInsertFrontmatter", + "draftStyle" + ]; + const settingsRecord = this.settings; + let fieldsRemoved = false; + for (const field of legacyFields) { + if (settingsRecord[field] !== void 0) { + delete settingsRecord[field]; + fieldsRemoved = true; + } + } + if (fieldsRemoved) { + await this.saveSettings(); + } + } + } + async saveSettings() { + await this.saveData(this.settings); + } + registerContextMenu() { + this.registerEvent( + this.app.workspace.on("editor-menu", (menu, editor, view) => { + if (!this.settings.enableCopyHeadingLink) { + return; + } + const cursor = editor.getCursor(); + const file = view.file; + if (!(file instanceof import_obsidian15.TFile)) { + return; + } + const heading = this.headingLinkGenerator.findHeadingAtLine(this.app, file, cursor.line); + if (heading) { + const fullLink = this.headingLinkGenerator.generateLink(this.app, file, heading); + const urlOnly = this.headingLinkGenerator.extractUrl(fullLink); + menu.addItem((item) => { + item.setTitle("Copy heading link").setIcon("link-2").onClick(async () => { + await navigator.clipboard.writeText(urlOnly); + new import_obsidian15.Notice("Heading link copied to clipboard"); + }); + }); + menu.addItem((item) => { + item.setTitle("Copy heading link with text").setIcon("heading").onClick(async () => { + await navigator.clipboard.writeText(fullLink); + new import_obsidian15.Notice("Heading link with text copied to clipboard"); + }); + }); + } + }) + ); + } + renameContentByPath(filePath) { + renameContentByPath(this.app, filePath, this.settings, this); + } + registerRibbonIcons() { + if (import_obsidian15.Platform.isMobile) { + if (this.terminalRibbonIcon) { + try { + if (this.terminalRibbonIcon.parentNode) this.terminalRibbonIcon.remove(); + } catch (e) { + } + this.terminalRibbonIcon = null; + } + if (this.configRibbonIcon) { + try { + if (this.configRibbonIcon.parentNode) this.configRibbonIcon.remove(); + } catch (e) { + } + this.configRibbonIcon = null; + } + try { + const terminalIcons = document.querySelectorAll('.side-dock-ribbon-action[aria-label="Open project terminal"]'); + terminalIcons.forEach((icon) => icon.remove()); + const configIcons = document.querySelectorAll('.side-dock-ribbon-action[aria-label="Edit astro config"]'); + configIcons.forEach((icon) => icon.remove()); + } catch (e) { + } + return; + } + const terminalShouldExist = this.settings.enableTerminalRibbonIcon && this.settings.enableOpenTerminalCommand; + const configShouldExist = this.settings.enableConfigRibbonIcon && this.settings.enableOpenConfigFileCommand; + if (this.terminalRibbonIcon) { + try { + if (this.terminalRibbonIcon.parentNode) this.terminalRibbonIcon.remove(); + } catch (e) { + } + this.terminalRibbonIcon = null; + } + if (this.configRibbonIcon) { + try { + if (this.configRibbonIcon.parentNode) this.configRibbonIcon.remove(); + } catch (e) { + } + this.configRibbonIcon = null; + } + try { + document.querySelectorAll('.side-dock-ribbon-action[aria-label="Open project terminal"]').forEach((el) => el.remove()); + document.querySelectorAll('.side-dock-ribbon-action[aria-label="Edit astro config"]').forEach((el) => el.remove()); + } catch (e) { + } + if (terminalShouldExist) { + this.terminalRibbonIcon = this.addRibbonIcon("terminal-square", "Open project terminal", () => { + if (!this.settings.enableOpenTerminalCommand) { + new import_obsidian15.Notice("Open terminal command is disabled."); + return; + } + openTerminalInProjectRoot(this.app, this.settings); + }); + if (this.terminalRibbonIcon) this.terminalRibbonIcon.setAttribute("data-astro-composer-terminal-ribbon", "true"); + } + if (configShouldExist) { + this.configRibbonIcon = this.addRibbonIcon("rocket", "Edit astro config", async () => { + if (!this.settings.enableOpenConfigFileCommand) { + new import_obsidian15.Notice("Edit config file command is disabled."); + return; + } + await openConfigFile(this.app, this.settings); + }); + if (this.configRibbonIcon) this.configRibbonIcon.setAttribute("data-astro-composer-config-ribbon", "true"); + } + this.updateRibbonContextMenuCSS(); + this.setupRibbonContextMenuObserver(); + } + onunload() { + if (this.terminalRibbonIcon) { + this.terminalRibbonIcon.remove(); + this.terminalRibbonIcon = null; + } + if (this.configRibbonIcon) { + this.configRibbonIcon.remove(); + this.configRibbonIcon = null; + } + if (this.ribbonContextMenuObserver) { + this.ribbonContextMenuObserver.disconnect(); + this.ribbonContextMenuObserver = void 0; + } + document.body.removeClass("astro-composer-hide-terminal-icon"); + document.body.removeClass("astro-composer-hide-config-icon"); + if (this.helpButtonObserver) { + this.helpButtonObserver.disconnect(); + this.helpButtonObserver = void 0; + } + if (this.customHelpButton) { + this.customHelpButton.remove(); + this.customHelpButton = void 0; + } + this.helpButtonElement = void 0; + } + setupRibbonContextMenuHandling() { + this.updateRibbonContextMenuCSS(); + this.setupRibbonContextMenuObserver(); + } + updateRibbonContextMenuCSS() { + const terminalShouldBeHidden = !this.settings.enableTerminalRibbonIcon || !this.settings.enableOpenTerminalCommand; + const configShouldBeHidden = !this.settings.enableConfigRibbonIcon || !this.settings.enableOpenConfigFileCommand; + if (terminalShouldBeHidden) document.body.addClass("astro-composer-hide-terminal-icon"); + else document.body.removeClass("astro-composer-hide-terminal-icon"); + if (configShouldBeHidden) document.body.addClass("astro-composer-hide-config-icon"); + else document.body.removeClass("astro-composer-hide-config-icon"); + } + setupRibbonContextMenuObserver() { + if (this.ribbonContextMenuObserver) this.ribbonContextMenuObserver.disconnect(); + const terminalShouldBeHidden = !this.settings.enableTerminalRibbonIcon || !this.settings.enableOpenTerminalCommand; + const configShouldBeHidden = !this.settings.enableConfigRibbonIcon || !this.settings.enableOpenConfigFileCommand; + if (!terminalShouldBeHidden && !configShouldBeHidden) return; + this.ribbonContextMenuObserver = new MutationObserver((mutations) => { + for (const mutation of mutations) { + if (mutation.addedNodes.length > 0) { + for (const node of Array.from(mutation.addedNodes)) { + if (node instanceof HTMLElement) { + if (node.classList.contains("menu") || node.querySelector(".menu")) { + this.removeRibbonIconsFromContextMenu(node); + } + } + } + } + } + }); + this.ribbonContextMenuObserver.observe(document.body, { childList: true, subtree: true }); + } + /** + * Starts a robust monitor that keeps the help button in sync with settings. + */ + startHelpButtonMonitor() { + if (this.helpButtonObserver) this.helpButtonObserver.disconnect(); + this.syncHelpButton(); + let timer = null; + let mutationCount = 0; + this.helpButtonObserver = new MutationObserver(() => { + mutationCount++; + if (timer) window.clearTimeout(timer); + const delay = mutationCount < 20 ? 0 : 100; + if (delay === 0) { + this.syncHelpButton(); + } else { + timer = window.setTimeout(() => this.syncHelpButton(), delay); + } + }); + this.helpButtonObserver.observe(document.body, { + childList: true, + subtree: true, + attributes: true, + attributeFilter: ["class", "src", "aria-label"] + }); + } + /** + * Synchronizes the help button state based on settings. + */ + syncHelpButton() { + var _a, _b, _c, _d; + const enabled = (_a = this.settings.helpButtonReplacement) == null ? void 0 : _a.enabled; + if (enabled) document.body.addClass("astro-composer-hide-help-button"); + else document.body.removeClass("astro-composer-hide-help-button"); + if (!enabled) { + if (this.customHelpButton) { + this.customHelpButton.remove(); + this.customHelpButton = void 0; + } + return; + } + const selectors = [ + ".workspace-drawer-vault-actions .clickable-icon svg.help", + ".workspace-sidedock-vault-profile .clickable-icon svg.help", + ".workspace-drawer .clickable-icon svg.help", + ".clickable-icon svg.help" + ]; + let helpButtonSvg = null; + for (const selector of selectors) { + helpButtonSvg = document.querySelector(selector); + if (helpButtonSvg) break; + } + if (!helpButtonSvg) return; + const originalHelpButton = helpButtonSvg.parentElement; + if (!originalHelpButton) return; + const existingReplacement = (_b = originalHelpButton.parentElement) == null ? void 0 : _b.querySelector('[data-astro-composer-help-replacement="true"]'); + if (existingReplacement) { + this.customHelpButton = existingReplacement; + return; + } + const customButton = originalHelpButton.cloneNode(true); + customButton.addClass("astro-composer-help-replacement"); + customButton.removeAttribute("aria-label"); + customButton.setAttribute("data-astro-composer-help-replacement", "true"); + customButton.onclick = null; + const iconContainer = ((_c = customButton.querySelector("svg")) == null ? void 0 : _c.parentElement) || customButton; + try { + if (iconContainer instanceof HTMLElement) { + (0, import_obsidian15.setIcon)(iconContainer, this.settings.helpButtonReplacement.iconId); + } + } catch (error) { + console.warn("[Astro Composer] Error setting replacement icon:", error); + } + customButton.addEventListener("click", (evt) => { + var _a2, _b2; + evt.preventDefault(); + evt.stopPropagation(); + const commandId = (_a2 = this.settings.helpButtonReplacement) == null ? void 0 : _a2.commandId; + if (commandId) { + const appWithCommands = this.app; + if ((_b2 = appWithCommands.commands) == null ? void 0 : _b2.executeCommandById) { + void appWithCommands.commands.executeCommandById(commandId); + } + } + }, true); + (_d = originalHelpButton.parentElement) == null ? void 0 : _d.insertBefore(customButton, originalHelpButton); + this.customHelpButton = customButton; + } + restoreHelpButton() { + document.body.removeClass("astro-composer-hide-help-button"); + if (this.customHelpButton) { + this.customHelpButton.remove(); + this.customHelpButton = void 0; + } + this.helpButtonElement = void 0; + } + removeRibbonIconsFromContextMenu(menuElement) { + var _a, _b; + const terminalShouldBeHidden = !this.settings.enableTerminalRibbonIcon || !this.settings.enableOpenTerminalCommand; + const configShouldBeHidden = !this.settings.enableConfigRibbonIcon || !this.settings.enableOpenConfigFileCommand; + const menuItems = menuElement.querySelectorAll(".menu-item"); + for (const item of Array.from(menuItems)) { + const svg = item.querySelector("svg"); + if (svg) { + let iconName = svg.getAttribute("data-lucide") || svg.getAttribute("xmlns:lucide") || svg.getAttribute("data-icon") || (svg.classList.contains("lucide-terminal-square") ? "terminal-square" : null) || (svg.classList.contains("lucide-rocket") ? "rocket" : null) || (svg.classList.contains("lucide-wrench") ? "wrench" : null); + if (iconName) iconName = iconName.replace(/^lucide-/, ""); + if (terminalShouldBeHidden && iconName === "terminal-square") { + if ((_a = item.textContent) == null ? void 0 : _a.toLowerCase().includes("terminal")) item.remove(); + } + if (configShouldBeHidden && (iconName === "rocket" || iconName === "wrench")) { + if ((_b = item.textContent) == null ? void 0 : _b.toLowerCase().includes("config")) item.remove(); + } + } + } + } +}; +//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsic3JjL21haW4udHMiLCAic3JjL3R5cGVzLnRzIiwgInNyYy9zZXR0aW5ncy50cyIsICJzcmMvY29tbWFuZHMvaW5kZXgudHMiLCAic3JjL3V0aWxzL2ZpbGUtb3BlcmF0aW9ucy50cyIsICJzcmMvdXRpbHMvcGF0aC1tYXRjaGluZy50cyIsICJzcmMvdXRpbHMvc3RyaW5nLXV0aWxzLnRzIiwgInNyYy91dGlscy90ZW1wbGF0ZS1wYXJzaW5nLnRzIiwgInNyYy91dGlscy9saW5rLWNvbnZlcnNpb24udHMiLCAic3JjL3VpL3RpdGxlLW1vZGFsLnRzIiwgInNyYy91aS9zZXR0aW5ncy10YWIudHMiLCAic3JjL3VpL2NvbXBvbmVudHMvQ29tbWFuZFBpY2tlck1vZGFsLnRzIiwgInNyYy91aS9jb21wb25lbnRzL0ljb25QaWNrZXJNb2RhbC50cyIsICJzcmMvdWkvY29tcG9uZW50cy9Db25maXJtTW9kYWwudHMiLCAic3JjL3V0aWxzL3NldHRpbmdzLWNvbXBhdC50cyIsICJzcmMvdXRpbHMvaGVhZGluZy1saW5rLWdlbmVyYXRvci50cyIsICJzcmMvc2VydmljZXMvTWlncmF0aW9uU2VydmljZS50cyIsICJzcmMvdWkvY29tcG9uZW50cy9NaWdyYXRpb25Nb2RhbC50cyIsICJzcmMvc2VydmljZXMvQ3JlYXRlRXZlbnRTZXJ2aWNlLnRzIiwgInNyYy9zZXJ2aWNlcy9Gcm9udG1hdHRlclNlcnZpY2UudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImltcG9ydCB7XHJcblx0UGx1Z2luLFxyXG5cdFRGaWxlLFxyXG5cdE5vdGljZSxcclxuXHRzZXRJY29uLFxyXG5cdFBsYXRmb3JtLFxyXG5cdEV2ZW50UmVmLFxyXG59IGZyb20gXCJvYnNpZGlhblwiO1xyXG5cclxuaW1wb3J0IHsgQXN0cm9Db21wb3NlclNldHRpbmdzLCBERUZBVUxUX1NFVFRJTkdTIH0gZnJvbSBcIi4vc2V0dGluZ3NcIjtcclxuaW1wb3J0IHsgQXN0cm9Db21wb3NlclBsdWdpbkludGVyZmFjZSwgQ29udGVudFR5cGUgfSBmcm9tIFwiLi90eXBlc1wiO1xyXG5pbXBvcnQgeyByZWdpc3RlckNvbW1hbmRzLCByZWdpc3RlckNvbnRlbnRUeXBlQ29tbWFuZHMsIHJlbmFtZUNvbnRlbnRCeVBhdGggYXMgcmVuYW1lQ29udGVudEJ5UGF0aEZ1bmN0aW9uLCBvcGVuVGVybWluYWxJblByb2plY3RSb290LCBvcGVuQ29uZmlnRmlsZSB9IGZyb20gXCIuL2NvbW1hbmRzXCI7XHJcbmltcG9ydCB7IEFzdHJvQ29tcG9zZXJTZXR0aW5nVGFiIH0gZnJvbSBcIi4vdWkvc2V0dGluZ3MtdGFiXCI7XHJcbmltcG9ydCB7IEZpbGVPcGVyYXRpb25zIH0gZnJvbSBcIi4vdXRpbHMvZmlsZS1vcGVyYXRpb25zXCI7XHJcbmltcG9ydCB7IFRlbXBsYXRlUGFyc2VyIH0gZnJvbSBcIi4vdXRpbHMvdGVtcGxhdGUtcGFyc2luZ1wiO1xyXG5pbXBvcnQgeyBIZWFkaW5nTGlua0dlbmVyYXRvciB9IGZyb20gXCIuL3V0aWxzL2hlYWRpbmctbGluay1nZW5lcmF0b3JcIjtcclxuaW1wb3J0IHsgTWlncmF0aW9uU2VydmljZSB9IGZyb20gXCIuL3NlcnZpY2VzL01pZ3JhdGlvblNlcnZpY2VcIjtcclxuaW1wb3J0IHsgQ3JlYXRlRXZlbnRTZXJ2aWNlIH0gZnJvbSBcIi4vc2VydmljZXMvQ3JlYXRlRXZlbnRTZXJ2aWNlXCI7XHJcbmltcG9ydCB7IEZyb250bWF0dGVyU2VydmljZSB9IGZyb20gXCIuL3NlcnZpY2VzL0Zyb250bWF0dGVyU2VydmljZVwiO1xyXG5pbXBvcnQgeyB3YWl0Rm9yRWxlbWVudCB9IGZyb20gXCIuL3V0aWxzL2RvbVwiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQXN0cm9Db21wb3NlclBsdWdpbiBleHRlbmRzIFBsdWdpbiBpbXBsZW1lbnRzIEFzdHJvQ29tcG9zZXJQbHVnaW5JbnRlcmZhY2Uge1xyXG5cdHNldHRpbmdzITogQXN0cm9Db21wb3NlclNldHRpbmdzO1xyXG5cdHByaXZhdGUgY3JlYXRlRXZlbnRSZWY/OiBFdmVudFJlZjtcclxuXHRwdWJsaWMgZmlsZU9wcyE6IEZpbGVPcGVyYXRpb25zO1xyXG5cdHB1YmxpYyB0ZW1wbGF0ZVBhcnNlciE6IFRlbXBsYXRlUGFyc2VyO1xyXG5cdHB1YmxpYyBoZWFkaW5nTGlua0dlbmVyYXRvciE6IEhlYWRpbmdMaW5rR2VuZXJhdG9yO1xyXG5cdHB1YmxpYyBwbHVnaW5DcmVhdGVkRmlsZXM6IE1hcDxzdHJpbmcsIG51bWJlcj4gPSBuZXcgTWFwKCk7XHJcblx0cHJpdmF0ZSBwcm9jZXNzZWRGaWxlczogTWFwPHN0cmluZywgbnVtYmVyPiA9IG5ldyBNYXAoKTtcclxuXHRwcml2YXRlIHRlcm1pbmFsUmliYm9uSWNvbjogSFRNTEVsZW1lbnQgfCBudWxsID0gbnVsbDtcclxuXHRwcml2YXRlIGNvbmZpZ1JpYmJvbkljb246IEhUTUxFbGVtZW50IHwgbnVsbCA9IG51bGw7XHJcblx0cHJpdmF0ZSByaWJib25Db250ZXh0TWVudU9ic2VydmVyPzogTXV0YXRpb25PYnNlcnZlcjtcclxuXHRwcml2YXRlIGhlbHBCdXR0b25PYnNlcnZlcj86IE11dGF0aW9uT2JzZXJ2ZXI7XHJcblx0cHJpdmF0ZSBoZWxwQnV0dG9uRWxlbWVudD86IEhUTUxFbGVtZW50O1xyXG5cdHByaXZhdGUgY3VzdG9tSGVscEJ1dHRvbj86IEhUTUxFbGVtZW50O1xyXG5cdHB1YmxpYyBzZXR0aW5nc1RhYj86IEFzdHJvQ29tcG9zZXJTZXR0aW5nVGFiO1xyXG5cclxuXHRwcml2YXRlIG1pZ3JhdGlvblNlcnZpY2UhOiBNaWdyYXRpb25TZXJ2aWNlO1xyXG5cdHByaXZhdGUgY3JlYXRlRXZlbnRTZXJ2aWNlITogQ3JlYXRlRXZlbnRTZXJ2aWNlO1xyXG5cdHB1YmxpYyBmcm9udG1hdHRlclNlcnZpY2UhOiBGcm9udG1hdHRlclNlcnZpY2U7XHJcblxyXG5cdC8qKlxyXG5cdCAqIE1pZ3JhdGUgb2xkIHBvc3RzL3BhZ2VzIHNldHRpbmdzIHRvIHVuaWZpZWQgY29udGVudCB0eXBlc1xyXG5cdCAqL1xyXG5cdHByaXZhdGUgYXN5bmMgbWlncmF0ZVNldHRpbmdzSWZOZWVkZWQoKTogUHJvbWlzZTx2b2lkPiB7XHJcblx0XHRpZiAoIXRoaXMubWlncmF0aW9uU2VydmljZSkge1xyXG5cdFx0XHR0aGlzLm1pZ3JhdGlvblNlcnZpY2UgPSBuZXcgTWlncmF0aW9uU2VydmljZSh0aGlzLmFwcCwgdGhpcyk7XHJcblx0XHR9XHJcblx0XHRhd2FpdCB0aGlzLm1pZ3JhdGlvblNlcnZpY2UubWlncmF0ZVNldHRpbmdzSWZOZWVkZWQoKTtcclxuXHR9XHJcblxyXG5cdGFzeW5jIG9ubG9hZCgpIHtcclxuXHRcdHRyeSB7XHJcblx0XHRcdGF3YWl0IHRoaXMubG9hZFNldHRpbmdzKCk7XHJcblxyXG5cdFx0XHQvLyBJbml0aWFsaXplIHNlcnZpY2VzIChvcmRlciBtYXR0ZXJzOiBmaWxlT3BzIGZpcnN0IGFzIGl0J3MgYSBkZXBlbmRlbmN5KVxyXG5cdFx0XHR0aGlzLmZpbGVPcHMgPSBuZXcgRmlsZU9wZXJhdGlvbnModGhpcy5hcHAsIHRoaXMuc2V0dGluZ3MsIHRoaXMpO1xyXG5cdFx0XHR0aGlzLm1pZ3JhdGlvblNlcnZpY2UgPSBuZXcgTWlncmF0aW9uU2VydmljZSh0aGlzLmFwcCwgdGhpcyk7XHJcblx0XHRcdHRoaXMuY3JlYXRlRXZlbnRTZXJ2aWNlID0gbmV3IENyZWF0ZUV2ZW50U2VydmljZSh0aGlzLmFwcCwgdGhpcyk7XHJcblx0XHRcdHRoaXMuZnJvbnRtYXR0ZXJTZXJ2aWNlID0gbmV3IEZyb250bWF0dGVyU2VydmljZSh0aGlzLmFwcCwgdGhpcyk7XHJcblx0XHRcdHRoaXMudGVtcGxhdGVQYXJzZXIgPSBuZXcgVGVtcGxhdGVQYXJzZXIodGhpcy5hcHAsIHRoaXMuc2V0dGluZ3MsIHRoaXMpO1xyXG5cdFx0XHR0aGlzLmhlYWRpbmdMaW5rR2VuZXJhdG9yID0gbmV3IEhlYWRpbmdMaW5rR2VuZXJhdG9yKHRoaXMuc2V0dGluZ3MsIHRoaXMpO1xyXG5cclxuXHRcdFx0Ly8gUmVnaXN0ZXIgTURYIGZpbGUgdmlzaWJpbGl0eSBpZiBlbmFibGVkIChzYWZlbHkgaGFuZGxlIGlmIGFscmVhZHkgcmVnaXN0ZXJlZClcclxuXHRcdFx0aWYgKHRoaXMuc2V0dGluZ3Muc2hvd01keEZpbGVzSW5FeHBsb3Jlcikge1xyXG5cdFx0XHRcdHRyeSB7XHJcblx0XHRcdFx0XHR0aGlzLnJlZ2lzdGVyRXh0ZW5zaW9ucyhbXCJtZHhcIl0sIFwibWFya2Rvd25cIik7XHJcblx0XHRcdFx0fSBjYXRjaCAoZXJyb3IpIHtcclxuXHRcdFx0XHRcdGNvbnNvbGUud2FybihcIltBc3RybyBDb21wb3Nlcl0gTURYIGV4dGVuc2lvbiBhbHJlYWR5IHJlZ2lzdGVyZWQ6XCIsIGVycm9yKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdC8vIEhhbmRsZSBsYXlvdXQtcmVhZHkgaW5pdGlhbGl6YXRpb24gKGRlc2t0b3Agb25seSlcclxuXHRcdFx0dGhpcy5hcHAud29ya3NwYWNlLm9uTGF5b3V0UmVhZHkoKCkgPT4ge1xyXG5cdFx0XHRcdHRoaXMucmVnaXN0ZXJDcmVhdGVFdmVudCgpO1xyXG5cdFx0XHRcdC8vIEluaXRpYWxpemUgaGVscCBidXR0b24gcmVwbGFjZW1lbnQgKGRlc2t0b3Agb25seSlcclxuXHRcdFx0XHRpZiAoIVBsYXRmb3JtLmlzTW9iaWxlKSB7XHJcblx0XHRcdFx0XHR0aGlzLnN0YXJ0SGVscEJ1dHRvbk1vbml0b3IoKTtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdC8vIFJ1biBtaWdyYXRpb24gYWZ0ZXIgcGx1Z2luIGlzIGZ1bGx5IGxvYWRlZCAobm9uLWJsb2NraW5nKVxyXG5cdFx0XHRcdHZvaWQgdGhpcy5taWdyYXRlU2V0dGluZ3NJZk5lZWRlZCgpO1xyXG5cdFx0XHR9KTtcclxuXHJcblx0XHRcdC8vIFJlZ2lzdGVyIGNvbW1hbmRzXHJcblx0XHRcdHJlZ2lzdGVyQ29tbWFuZHModGhpcywgdGhpcy5zZXR0aW5ncyk7XHJcblx0XHRcdHJlZ2lzdGVyQ29udGVudFR5cGVDb21tYW5kcyh0aGlzLCB0aGlzLnNldHRpbmdzKTtcclxuXHJcblx0XHRcdC8vIEFkZCBzZXR0aW5ncyB0YWJcclxuXHRcdFx0dGhpcy5zZXR0aW5nc1RhYiA9IG5ldyBBc3Ryb0NvbXBvc2VyU2V0dGluZ1RhYih0aGlzLmFwcCwgdGhpcyk7XHJcblx0XHRcdHRoaXMuYWRkU2V0dGluZ1RhYih0aGlzLnNldHRpbmdzVGFiKTtcclxuXHJcblx0XHRcdC8vIFJlZ2lzdGVyIFVJIGVsZW1lbnRzXHJcblx0XHRcdHRoaXMucmVnaXN0ZXJDb250ZXh0TWVudSgpO1xyXG5cdFx0XHR0aGlzLnJlZ2lzdGVyUmliYm9uSWNvbnMoKTtcclxuXHRcdFx0dGhpcy5zZXR1cFJpYmJvbkNvbnRleHRNZW51SGFuZGxpbmcoKTtcclxuXHRcdH0gY2F0Y2ggKGVycm9yKSB7XHJcblx0XHRcdGNvbnNvbGUuZXJyb3IoXCJbQXN0cm8gQ29tcG9zZXJdIENyaXRpY2FsIGVycm9yIGR1cmluZyBvbmxvYWQ6XCIsIGVycm9yKTtcclxuXHRcdFx0bmV3IE5vdGljZShcIkFzdHJvIENvbXBvc2VyIGZhaWxlZCB0byBsb2FkLiBDaGVjayBjb25zb2xlIChDdHJsK1NoaWZ0K0kpIGZvciBkZXRhaWxzLlwiKTtcclxuXHRcdFx0dGhyb3cgZXJyb3I7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRwdWJsaWMgcmVnaXN0ZXJDcmVhdGVFdmVudCgpIHtcclxuXHRcdGlmICh0aGlzLmNyZWF0ZUV2ZW50UmVmKSB7XHJcblx0XHRcdHRoaXMuYXBwLnZhdWx0Lm9mZnJlZih0aGlzLmNyZWF0ZUV2ZW50UmVmKTtcclxuXHRcdFx0dGhpcy5jcmVhdGVFdmVudFJlZiA9IHVuZGVmaW5lZDtcclxuXHRcdH1cclxuXHJcblx0XHRjb25zdCBjcmVhdGVFdmVudFJlZiA9IHRoaXMuYXBwLnZhdWx0Lm9uKFwiY3JlYXRlXCIsIChmaWxlKSA9PiB7XHJcblx0XHRcdGlmIChmaWxlIGluc3RhbmNlb2YgVEZpbGUpIHtcclxuXHRcdFx0XHR0aGlzLmNyZWF0ZUV2ZW50U2VydmljZS5oYW5kbGVDcmVhdGUoZmlsZSk7XHJcblx0XHRcdFx0dGhpcy5jbGVhbnVwUGx1Z2luQ3JlYXRlZEZpbGVzKCk7XHJcblx0XHRcdH1cclxuXHRcdH0pO1xyXG5cdFx0dGhpcy5yZWdpc3RlckV2ZW50KGNyZWF0ZUV2ZW50UmVmKTtcclxuXHRcdHRoaXMuY3JlYXRlRXZlbnRSZWYgPSBjcmVhdGVFdmVudFJlZjtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgY2xlYW51cFBsdWdpbkNyZWF0ZWRGaWxlcygpIHtcclxuXHRcdGNvbnN0IG5vdyA9IERhdGUubm93KCk7XHJcblx0XHRjb25zdCB0dGwgPSA1ICogNjAgKiAxMDAwOyAvLyA1IG1pbnV0ZXNcclxuXHRcdGZvciAoY29uc3QgW3BhdGgsIHRpbWVzdGFtcF0gb2YgdGhpcy5wbHVnaW5DcmVhdGVkRmlsZXMuZW50cmllcygpKSB7XHJcblx0XHRcdGlmIChub3cgLSB0aW1lc3RhbXAgPiB0dGwpIHtcclxuXHRcdFx0XHR0aGlzLnBsdWdpbkNyZWF0ZWRGaWxlcy5kZWxldGUocGF0aCk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGFzeW5jIGxvYWRTZXR0aW5ncygpIHtcclxuXHRcdGNvbnN0IGxvYWRlZERhdGEgPSAoYXdhaXQgdGhpcy5sb2FkRGF0YSgpKSBhcyB1bmtub3duO1xyXG5cdFx0aWYgKCF0aGlzLnNldHRpbmdzKSB7XHJcblx0XHRcdHRoaXMuc2V0dGluZ3MgPSBPYmplY3QuYXNzaWduKHt9LCBERUZBVUxUX1NFVFRJTkdTLCBsb2FkZWREYXRhIGFzIFBhcnRpYWw8QXN0cm9Db21wb3NlclNldHRpbmdzPiB8IG51bGwgfCB1bmRlZmluZWQpO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0T2JqZWN0LmFzc2lnbih0aGlzLnNldHRpbmdzLCBsb2FkZWREYXRhIGFzIFBhcnRpYWw8QXN0cm9Db21wb3NlclNldHRpbmdzPiB8IG51bGwgfCB1bmRlZmluZWQpO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8vIEVuc3VyZSBjb250ZW50VHlwZXMgaXMgYWx3YXlzIGFuIGFycmF5IChuZXZlciB1bmRlZmluZWQgb3IgbnVsbClcclxuXHRcdGlmICghdGhpcy5zZXR0aW5ncy5jb250ZW50VHlwZXMgfHwgIUFycmF5LmlzQXJyYXkodGhpcy5zZXR0aW5ncy5jb250ZW50VHlwZXMpKSB7XHJcblx0XHRcdHRoaXMuc2V0dGluZ3MuY29udGVudFR5cGVzID0gW107XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKCF0aGlzLnNldHRpbmdzLm1pZ3JhdGlvbkNvbXBsZXRlZCkge1xyXG5cdFx0XHRjb25zdCBsZWdhY3lTZXR0aW5ncyA9IHRoaXMuc2V0dGluZ3MgYXMgdW5rbm93biBhcyB7IGN1c3RvbUNvbnRlbnRUeXBlcz86IENvbnRlbnRUeXBlW10gfTtcclxuXHRcdFx0Y29uc3QgaGFzTGVnYWN5VHlwZXMgPSBsZWdhY3lTZXR0aW5ncy5jdXN0b21Db250ZW50VHlwZXMgJiYgQXJyYXkuaXNBcnJheShsZWdhY3lTZXR0aW5ncy5jdXN0b21Db250ZW50VHlwZXMpICYmIGxlZ2FjeVNldHRpbmdzLmN1c3RvbUNvbnRlbnRUeXBlcy5sZW5ndGggPiAwO1xyXG5cdFx0XHRjb25zdCBoYXNOZXdUeXBlcyA9IHRoaXMuc2V0dGluZ3MuY29udGVudFR5cGVzICYmIEFycmF5LmlzQXJyYXkodGhpcy5zZXR0aW5ncy5jb250ZW50VHlwZXMpICYmIHRoaXMuc2V0dGluZ3MuY29udGVudFR5cGVzLmxlbmd0aCA+IDA7XHJcblxyXG5cdFx0XHRpZiAoaGFzTGVnYWN5VHlwZXMgJiYgIWhhc05ld1R5cGVzKSB7XHJcblx0XHRcdFx0dGhpcy5zZXR0aW5ncy5jb250ZW50VHlwZXMgPSBsZWdhY3lTZXR0aW5ncy5jdXN0b21Db250ZW50VHlwZXMgfHwgW107XHJcblx0XHRcdH1cclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdGNvbnN0IGxlZ2FjeUZpZWxkcyA9IFtcclxuXHRcdFx0XHQnY3VzdG9tQ29udGVudFR5cGVzJywgJ2VuYWJsZVVuZGVyc2NvcmVQcmVmaXgnLCAncG9zdHNGb2xkZXInLCAncG9zdHNMaW5rQmFzZVBhdGgnLFxyXG5cdFx0XHRcdCdhdXRvbWF0ZVBvc3RDcmVhdGlvbicsICdjcmVhdGlvbk1vZGUnLCAnaW5kZXhGaWxlTmFtZScsICdleGNsdWRlZERpcmVjdG9yaWVzJyxcclxuXHRcdFx0XHQnb25seUF1dG9tYXRlSW5Qb3N0c0ZvbGRlcicsICdlbmFibGVQYWdlcycsICdwYWdlc0ZvbGRlcicsICdwYWdlc0xpbmtCYXNlUGF0aCcsXHJcblx0XHRcdFx0J3BhZ2VzQ3JlYXRpb25Nb2RlJywgJ3BhZ2VzSW5kZXhGaWxlTmFtZScsICdwYWdlVGVtcGxhdGUnLCAnb25seUF1dG9tYXRlSW5QYWdlc0ZvbGRlcicsXHJcblx0XHRcdFx0J2xpbmtCYXNlUGF0aCcsICdlbmFibGVBdXRvUmVuYW1lJywgJ2VuYWJsZUF1dG9JbnNlcnRGcm9udG1hdHRlcicsICdkcmFmdFN0eWxlJ1xyXG5cdFx0XHRdO1xyXG5cclxuXHRcdFx0Y29uc3Qgc2V0dGluZ3NSZWNvcmQgPSB0aGlzLnNldHRpbmdzIGFzIHVua25vd24gYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XHJcblx0XHRcdGxldCBmaWVsZHNSZW1vdmVkID0gZmFsc2U7XHJcblx0XHRcdGZvciAoY29uc3QgZmllbGQgb2YgbGVnYWN5RmllbGRzKSB7XHJcblx0XHRcdFx0aWYgKHNldHRpbmdzUmVjb3JkW2ZpZWxkXSAhPT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdFx0XHRkZWxldGUgc2V0dGluZ3NSZWNvcmRbZmllbGRdO1xyXG5cdFx0XHRcdFx0ZmllbGRzUmVtb3ZlZCA9IHRydWU7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHRcdC8vIE9ubHkgc2F2ZSBpZiB3ZSBhY3R1YWxseSBjbGVhbmVkIHVwIGZpZWxkcyB0byBhdm9pZCByZWR1bmRhbnQgd3JpdGVzXHJcblx0XHRcdGlmIChmaWVsZHNSZW1vdmVkKSB7XHJcblx0XHRcdFx0YXdhaXQgdGhpcy5zYXZlU2V0dGluZ3MoKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0YXN5bmMgc2F2ZVNldHRpbmdzKCkge1xyXG5cdFx0YXdhaXQgdGhpcy5zYXZlRGF0YSh0aGlzLnNldHRpbmdzKTtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgcmVnaXN0ZXJDb250ZXh0TWVudSgpIHtcclxuXHRcdHRoaXMucmVnaXN0ZXJFdmVudChcclxuXHRcdFx0dGhpcy5hcHAud29ya3NwYWNlLm9uKCdlZGl0b3ItbWVudScsIChtZW51LCBlZGl0b3IsIHZpZXcpID0+IHtcclxuXHRcdFx0XHRpZiAoIXRoaXMuc2V0dGluZ3MuZW5hYmxlQ29weUhlYWRpbmdMaW5rKSB7XHJcblx0XHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRjb25zdCBjdXJzb3IgPSBlZGl0b3IuZ2V0Q3Vyc29yKCk7XHJcblx0XHRcdFx0Y29uc3QgZmlsZSA9IHZpZXcuZmlsZTtcclxuXHJcblx0XHRcdFx0aWYgKCEoZmlsZSBpbnN0YW5jZW9mIFRGaWxlKSkge1xyXG5cdFx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0Y29uc3QgaGVhZGluZyA9IHRoaXMuaGVhZGluZ0xpbmtHZW5lcmF0b3IuZmluZEhlYWRpbmdBdExpbmUodGhpcy5hcHAsIGZpbGUsIGN1cnNvci5saW5lKTtcclxuXHJcblx0XHRcdFx0aWYgKGhlYWRpbmcpIHtcclxuXHRcdFx0XHRcdGNvbnN0IGZ1bGxMaW5rID0gdGhpcy5oZWFkaW5nTGlua0dlbmVyYXRvci5nZW5lcmF0ZUxpbmsodGhpcy5hcHAsIGZpbGUsIGhlYWRpbmcpO1xyXG5cdFx0XHRcdFx0Y29uc3QgdXJsT25seSA9IHRoaXMuaGVhZGluZ0xpbmtHZW5lcmF0b3IuZXh0cmFjdFVybChmdWxsTGluayk7XHJcblxyXG5cdFx0XHRcdFx0bWVudS5hZGRJdGVtKChpdGVtKSA9PiB7XHJcblx0XHRcdFx0XHRcdGl0ZW1cclxuXHRcdFx0XHRcdFx0XHQuc2V0VGl0bGUoJ0NvcHkgaGVhZGluZyBsaW5rJylcclxuXHRcdFx0XHRcdFx0XHQuc2V0SWNvbignbGluay0yJylcclxuXHRcdFx0XHRcdFx0XHQub25DbGljayhhc3luYyAoKSA9PiB7XHJcblx0XHRcdFx0XHRcdFx0XHRhd2FpdCBuYXZpZ2F0b3IuY2xpcGJvYXJkLndyaXRlVGV4dCh1cmxPbmx5KTtcclxuXHRcdFx0XHRcdFx0XHRcdG5ldyBOb3RpY2UoJ0hlYWRpbmcgbGluayBjb3BpZWQgdG8gY2xpcGJvYXJkJyk7XHJcblx0XHRcdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHR9KTtcclxuXHJcblx0XHRcdFx0XHRtZW51LmFkZEl0ZW0oKGl0ZW0pID0+IHtcclxuXHRcdFx0XHRcdFx0aXRlbVxyXG5cdFx0XHRcdFx0XHRcdC5zZXRUaXRsZSgnQ29weSBoZWFkaW5nIGxpbmsgd2l0aCB0ZXh0JylcclxuXHRcdFx0XHRcdFx0XHQuc2V0SWNvbignaGVhZGluZycpXHJcblx0XHRcdFx0XHRcdFx0Lm9uQ2xpY2soYXN5bmMgKCkgPT4ge1xyXG5cdFx0XHRcdFx0XHRcdFx0YXdhaXQgbmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQoZnVsbExpbmspO1xyXG5cdFx0XHRcdFx0XHRcdFx0bmV3IE5vdGljZSgnSGVhZGluZyBsaW5rIHdpdGggdGV4dCBjb3BpZWQgdG8gY2xpcGJvYXJkJyk7XHJcblx0XHRcdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0pXHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0cmVuYW1lQ29udGVudEJ5UGF0aChmaWxlUGF0aDogc3RyaW5nKTogdm9pZCB7XHJcblx0XHRyZW5hbWVDb250ZW50QnlQYXRoRnVuY3Rpb24odGhpcy5hcHAsIGZpbGVQYXRoLCB0aGlzLnNldHRpbmdzLCB0aGlzKTtcclxuXHR9XHJcblxyXG5cdHB1YmxpYyByZWdpc3RlclJpYmJvbkljb25zKCkge1xyXG5cdFx0aWYgKFBsYXRmb3JtLmlzTW9iaWxlKSB7XHJcblx0XHRcdGlmICh0aGlzLnRlcm1pbmFsUmliYm9uSWNvbikge1xyXG5cdFx0XHRcdHRyeSB7IGlmICh0aGlzLnRlcm1pbmFsUmliYm9uSWNvbi5wYXJlbnROb2RlKSB0aGlzLnRlcm1pbmFsUmliYm9uSWNvbi5yZW1vdmUoKTsgfSBjYXRjaCB7IC8qIElnbm9yZSAqLyB9XHJcblx0XHRcdFx0dGhpcy50ZXJtaW5hbFJpYmJvbkljb24gPSBudWxsO1xyXG5cdFx0XHR9XHJcblx0XHRcdGlmICh0aGlzLmNvbmZpZ1JpYmJvbkljb24pIHtcclxuXHRcdFx0XHR0cnkgeyBpZiAodGhpcy5jb25maWdSaWJib25JY29uLnBhcmVudE5vZGUpIHRoaXMuY29uZmlnUmliYm9uSWNvbi5yZW1vdmUoKTsgfSBjYXRjaCB7IC8qIElnbm9yZSAqLyB9XHJcblx0XHRcdFx0dGhpcy5jb25maWdSaWJib25JY29uID0gbnVsbDtcclxuXHRcdFx0fVxyXG5cdFx0XHR0cnkge1xyXG5cdFx0XHRcdGNvbnN0IHRlcm1pbmFsSWNvbnMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuc2lkZS1kb2NrLXJpYmJvbi1hY3Rpb25bYXJpYS1sYWJlbD1cIk9wZW4gcHJvamVjdCB0ZXJtaW5hbFwiXScpO1xyXG5cdFx0XHRcdHRlcm1pbmFsSWNvbnMuZm9yRWFjaCgoaWNvbjogRWxlbWVudCkgPT4gaWNvbi5yZW1vdmUoKSk7XHJcblx0XHRcdFx0Y29uc3QgY29uZmlnSWNvbnMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuc2lkZS1kb2NrLXJpYmJvbi1hY3Rpb25bYXJpYS1sYWJlbD1cIkVkaXQgYXN0cm8gY29uZmlnXCJdJyk7XHJcblx0XHRcdFx0Y29uZmlnSWNvbnMuZm9yRWFjaCgoaWNvbjogRWxlbWVudCkgPT4gaWNvbi5yZW1vdmUoKSk7XHJcblx0XHRcdH0gY2F0Y2ggeyAvKiBJZ25vcmUgKi8gfVxyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblxyXG5cdFx0Y29uc3QgdGVybWluYWxTaG91bGRFeGlzdCA9IHRoaXMuc2V0dGluZ3MuZW5hYmxlVGVybWluYWxSaWJib25JY29uICYmIHRoaXMuc2V0dGluZ3MuZW5hYmxlT3BlblRlcm1pbmFsQ29tbWFuZDtcclxuXHRcdGNvbnN0IGNvbmZpZ1Nob3VsZEV4aXN0ID0gdGhpcy5zZXR0aW5ncy5lbmFibGVDb25maWdSaWJib25JY29uICYmIHRoaXMuc2V0dGluZ3MuZW5hYmxlT3BlbkNvbmZpZ0ZpbGVDb21tYW5kO1xyXG5cclxuXHRcdGlmICh0aGlzLnRlcm1pbmFsUmliYm9uSWNvbikge1xyXG5cdFx0XHR0cnkgeyBpZiAodGhpcy50ZXJtaW5hbFJpYmJvbkljb24ucGFyZW50Tm9kZSkgdGhpcy50ZXJtaW5hbFJpYmJvbkljb24ucmVtb3ZlKCk7IH0gY2F0Y2ggeyAvKiBJZ25vcmUgKi8gfVxyXG5cdFx0XHR0aGlzLnRlcm1pbmFsUmliYm9uSWNvbiA9IG51bGw7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKHRoaXMuY29uZmlnUmliYm9uSWNvbikge1xyXG5cdFx0XHR0cnkgeyBpZiAodGhpcy5jb25maWdSaWJib25JY29uLnBhcmVudE5vZGUpIHRoaXMuY29uZmlnUmliYm9uSWNvbi5yZW1vdmUoKTsgfSBjYXRjaCB7IC8qIElnbm9yZSAqLyB9XHJcblx0XHRcdHRoaXMuY29uZmlnUmliYm9uSWNvbiA9IG51bGw7XHJcblx0XHR9XHJcblxyXG5cdFx0dHJ5IHtcclxuXHRcdFx0ZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLnNpZGUtZG9jay1yaWJib24tYWN0aW9uW2FyaWEtbGFiZWw9XCJPcGVuIHByb2plY3QgdGVybWluYWxcIl0nKS5mb3JFYWNoKGVsID0+IGVsLnJlbW92ZSgpKTtcclxuXHRcdFx0ZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLnNpZGUtZG9jay1yaWJib24tYWN0aW9uW2FyaWEtbGFiZWw9XCJFZGl0IGFzdHJvIGNvbmZpZ1wiXScpLmZvckVhY2goZWwgPT4gZWwucmVtb3ZlKCkpO1xyXG5cdFx0fSBjYXRjaCB7IC8qIElnbm9yZSAqLyB9XHJcblxyXG5cdFx0aWYgKHRlcm1pbmFsU2hvdWxkRXhpc3QpIHtcclxuXHRcdFx0dGhpcy50ZXJtaW5hbFJpYmJvbkljb24gPSB0aGlzLmFkZFJpYmJvbkljb24oJ3Rlcm1pbmFsLXNxdWFyZScsICdPcGVuIHByb2plY3QgdGVybWluYWwnLCAoKSA9PiB7XHJcblx0XHRcdFx0aWYgKCF0aGlzLnNldHRpbmdzLmVuYWJsZU9wZW5UZXJtaW5hbENvbW1hbmQpIHtcclxuXHRcdFx0XHRcdG5ldyBOb3RpY2UoXCJPcGVuIHRlcm1pbmFsIGNvbW1hbmQgaXMgZGlzYWJsZWQuXCIpO1xyXG5cdFx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRvcGVuVGVybWluYWxJblByb2plY3RSb290KHRoaXMuYXBwLCB0aGlzLnNldHRpbmdzKTtcclxuXHRcdFx0fSk7XHJcblx0XHRcdGlmICh0aGlzLnRlcm1pbmFsUmliYm9uSWNvbikgdGhpcy50ZXJtaW5hbFJpYmJvbkljb24uc2V0QXR0cmlidXRlKCdkYXRhLWFzdHJvLWNvbXBvc2VyLXRlcm1pbmFsLXJpYmJvbicsICd0cnVlJyk7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKGNvbmZpZ1Nob3VsZEV4aXN0KSB7XHJcblx0XHRcdHRoaXMuY29uZmlnUmliYm9uSWNvbiA9IHRoaXMuYWRkUmliYm9uSWNvbigncm9ja2V0JywgJ0VkaXQgYXN0cm8gY29uZmlnJywgYXN5bmMgKCkgPT4ge1xyXG5cdFx0XHRcdGlmICghdGhpcy5zZXR0aW5ncy5lbmFibGVPcGVuQ29uZmlnRmlsZUNvbW1hbmQpIHtcclxuXHRcdFx0XHRcdG5ldyBOb3RpY2UoXCJFZGl0IGNvbmZpZyBmaWxlIGNvbW1hbmQgaXMgZGlzYWJsZWQuXCIpO1xyXG5cdFx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRhd2FpdCBvcGVuQ29uZmlnRmlsZSh0aGlzLmFwcCwgdGhpcy5zZXR0aW5ncyk7XHJcblx0XHRcdH0pO1xyXG5cdFx0XHRpZiAodGhpcy5jb25maWdSaWJib25JY29uKSB0aGlzLmNvbmZpZ1JpYmJvbkljb24uc2V0QXR0cmlidXRlKCdkYXRhLWFzdHJvLWNvbXBvc2VyLWNvbmZpZy1yaWJib24nLCAndHJ1ZScpO1xyXG5cdFx0fVxyXG5cclxuXHRcdHRoaXMudXBkYXRlUmliYm9uQ29udGV4dE1lbnVDU1MoKTtcclxuXHRcdHRoaXMuc2V0dXBSaWJib25Db250ZXh0TWVudU9ic2VydmVyKCk7XHJcblx0fVxyXG5cclxuXHRvbnVubG9hZCgpIHtcclxuXHRcdGlmICh0aGlzLnRlcm1pbmFsUmliYm9uSWNvbikge1xyXG5cdFx0XHR0aGlzLnRlcm1pbmFsUmliYm9uSWNvbi5yZW1vdmUoKTtcclxuXHRcdFx0dGhpcy50ZXJtaW5hbFJpYmJvbkljb24gPSBudWxsO1xyXG5cdFx0fVxyXG5cdFx0aWYgKHRoaXMuY29uZmlnUmliYm9uSWNvbikge1xyXG5cdFx0XHR0aGlzLmNvbmZpZ1JpYmJvbkljb24ucmVtb3ZlKCk7XHJcblx0XHRcdHRoaXMuY29uZmlnUmliYm9uSWNvbiA9IG51bGw7XHJcblx0XHR9XHJcblx0XHRpZiAodGhpcy5yaWJib25Db250ZXh0TWVudU9ic2VydmVyKSB7XHJcblx0XHRcdHRoaXMucmliYm9uQ29udGV4dE1lbnVPYnNlcnZlci5kaXNjb25uZWN0KCk7XHJcblx0XHRcdHRoaXMucmliYm9uQ29udGV4dE1lbnVPYnNlcnZlciA9IHVuZGVmaW5lZDtcclxuXHRcdH1cclxuXHRcdGRvY3VtZW50LmJvZHkucmVtb3ZlQ2xhc3MoJ2FzdHJvLWNvbXBvc2VyLWhpZGUtdGVybWluYWwtaWNvbicpO1xyXG5cdFx0ZG9jdW1lbnQuYm9keS5yZW1vdmVDbGFzcygnYXN0cm8tY29tcG9zZXItaGlkZS1jb25maWctaWNvbicpO1xyXG5cdFx0aWYgKHRoaXMuaGVscEJ1dHRvbk9ic2VydmVyKSB7XHJcblx0XHRcdHRoaXMuaGVscEJ1dHRvbk9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcclxuXHRcdFx0dGhpcy5oZWxwQnV0dG9uT2JzZXJ2ZXIgPSB1bmRlZmluZWQ7XHJcblx0XHR9XHJcblx0XHRpZiAodGhpcy5jdXN0b21IZWxwQnV0dG9uKSB7XHJcblx0XHRcdHRoaXMuY3VzdG9tSGVscEJ1dHRvbi5yZW1vdmUoKTtcclxuXHRcdFx0dGhpcy5jdXN0b21IZWxwQnV0dG9uID0gdW5kZWZpbmVkO1xyXG5cdFx0fVxyXG5cdFx0dGhpcy5oZWxwQnV0dG9uRWxlbWVudCA9IHVuZGVmaW5lZDtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgc2V0dXBSaWJib25Db250ZXh0TWVudUhhbmRsaW5nKCkge1xyXG5cdFx0dGhpcy51cGRhdGVSaWJib25Db250ZXh0TWVudUNTUygpO1xyXG5cdFx0dGhpcy5zZXR1cFJpYmJvbkNvbnRleHRNZW51T2JzZXJ2ZXIoKTtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgdXBkYXRlUmliYm9uQ29udGV4dE1lbnVDU1MoKSB7XHJcblx0XHRjb25zdCB0ZXJtaW5hbFNob3VsZEJlSGlkZGVuID0gIXRoaXMuc2V0dGluZ3MuZW5hYmxlVGVybWluYWxSaWJib25JY29uIHx8ICF0aGlzLnNldHRpbmdzLmVuYWJsZU9wZW5UZXJtaW5hbENvbW1hbmQ7XHJcblx0XHRjb25zdCBjb25maWdTaG91bGRCZUhpZGRlbiA9ICF0aGlzLnNldHRpbmdzLmVuYWJsZUNvbmZpZ1JpYmJvbkljb24gfHwgIXRoaXMuc2V0dGluZ3MuZW5hYmxlT3BlbkNvbmZpZ0ZpbGVDb21tYW5kO1xyXG5cclxuXHRcdGlmICh0ZXJtaW5hbFNob3VsZEJlSGlkZGVuKSBkb2N1bWVudC5ib2R5LmFkZENsYXNzKCdhc3Ryby1jb21wb3Nlci1oaWRlLXRlcm1pbmFsLWljb24nKTtcclxuXHRcdGVsc2UgZG9jdW1lbnQuYm9keS5yZW1vdmVDbGFzcygnYXN0cm8tY29tcG9zZXItaGlkZS10ZXJtaW5hbC1pY29uJyk7XHJcblxyXG5cdFx0aWYgKGNvbmZpZ1Nob3VsZEJlSGlkZGVuKSBkb2N1bWVudC5ib2R5LmFkZENsYXNzKCdhc3Ryby1jb21wb3Nlci1oaWRlLWNvbmZpZy1pY29uJyk7XHJcblx0XHRlbHNlIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2xhc3MoJ2FzdHJvLWNvbXBvc2VyLWhpZGUtY29uZmlnLWljb24nKTtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgc2V0dXBSaWJib25Db250ZXh0TWVudU9ic2VydmVyKCkge1xyXG5cdFx0aWYgKHRoaXMucmliYm9uQ29udGV4dE1lbnVPYnNlcnZlcikgdGhpcy5yaWJib25Db250ZXh0TWVudU9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcclxuXHJcblx0XHRjb25zdCB0ZXJtaW5hbFNob3VsZEJlSGlkZGVuID0gIXRoaXMuc2V0dGluZ3MuZW5hYmxlVGVybWluYWxSaWJib25JY29uIHx8ICF0aGlzLnNldHRpbmdzLmVuYWJsZU9wZW5UZXJtaW5hbENvbW1hbmQ7XHJcblx0XHRjb25zdCBjb25maWdTaG91bGRCZUhpZGRlbiA9ICF0aGlzLnNldHRpbmdzLmVuYWJsZUNvbmZpZ1JpYmJvbkljb24gfHwgIXRoaXMuc2V0dGluZ3MuZW5hYmxlT3BlbkNvbmZpZ0ZpbGVDb21tYW5kO1xyXG5cclxuXHRcdGlmICghdGVybWluYWxTaG91bGRCZUhpZGRlbiAmJiAhY29uZmlnU2hvdWxkQmVIaWRkZW4pIHJldHVybjtcclxuXHJcblx0XHR0aGlzLnJpYmJvbkNvbnRleHRNZW51T2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcigobXV0YXRpb25zKSA9PiB7XHJcblx0XHRcdGZvciAoY29uc3QgbXV0YXRpb24gb2YgbXV0YXRpb25zKSB7XHJcblx0XHRcdFx0aWYgKG11dGF0aW9uLmFkZGVkTm9kZXMubGVuZ3RoID4gMCkge1xyXG5cdFx0XHRcdFx0Zm9yIChjb25zdCBub2RlIG9mIEFycmF5LmZyb20obXV0YXRpb24uYWRkZWROb2RlcykpIHtcclxuXHRcdFx0XHRcdFx0aWYgKG5vZGUgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkge1xyXG5cdFx0XHRcdFx0XHRcdGlmIChub2RlLmNsYXNzTGlzdC5jb250YWlucygnbWVudScpIHx8IG5vZGUucXVlcnlTZWxlY3RvcignLm1lbnUnKSkge1xyXG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5yZW1vdmVSaWJib25JY29uc0Zyb21Db250ZXh0TWVudShub2RlKTtcclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH0pO1xyXG5cclxuXHRcdHRoaXMucmliYm9uQ29udGV4dE1lbnVPYnNlcnZlci5vYnNlcnZlKGRvY3VtZW50LmJvZHksIHsgY2hpbGRMaXN0OiB0cnVlLCBzdWJ0cmVlOiB0cnVlIH0pO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogU3RhcnRzIGEgcm9idXN0IG1vbml0b3IgdGhhdCBrZWVwcyB0aGUgaGVscCBidXR0b24gaW4gc3luYyB3aXRoIHNldHRpbmdzLlxyXG5cdCAqL1xyXG5cdHByaXZhdGUgc3RhcnRIZWxwQnV0dG9uTW9uaXRvcigpIHtcclxuXHRcdGlmICh0aGlzLmhlbHBCdXR0b25PYnNlcnZlcikgdGhpcy5oZWxwQnV0dG9uT2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xyXG5cclxuXHRcdC8vIEltbWVkaWF0ZSBmaXJzdCBzeW5jXHJcblx0XHR0aGlzLnN5bmNIZWxwQnV0dG9uKCk7XHJcblxyXG5cdFx0bGV0IHRpbWVyOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHRcdGxldCBtdXRhdGlvbkNvdW50ID0gMDtcclxuXHJcblx0XHR0aGlzLmhlbHBCdXR0b25PYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKCgpID0+IHtcclxuXHRcdFx0bXV0YXRpb25Db3VudCsrO1xyXG5cdFx0XHRpZiAodGltZXIpIHdpbmRvdy5jbGVhclRpbWVvdXQodGltZXIpO1xyXG5cclxuXHRcdFx0Ly8gRm9yIHRoZSBmaXJzdCBmZXcgbXV0YXRpb25zIChkdXJpbmcgc3RhcnR1cCksIGJlIHN1cGVyIGFnZ3Jlc3NpdmVcclxuXHRcdFx0Ly8gQWZ0ZXIgdGhhdCwgdXNlIGEgc21hbGwgZGVib3VuY2UgdG8gc3RheSBwZXJmb3JtYW50XHJcblx0XHRcdGNvbnN0IGRlbGF5ID0gbXV0YXRpb25Db3VudCA8IDIwID8gMCA6IDEwMDtcclxuXHJcblx0XHRcdGlmIChkZWxheSA9PT0gMCkge1xyXG5cdFx0XHRcdHRoaXMuc3luY0hlbHBCdXR0b24oKTtcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHR0aW1lciA9IHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHRoaXMuc3luY0hlbHBCdXR0b24oKSwgZGVsYXkpO1xyXG5cdFx0XHR9XHJcblx0XHR9KTtcclxuXHJcblx0XHQvLyBPYnNlcnZlIGJvZHkgd2l0aCBzdWJ0cmVlIGFuZCBhdHRyaWJ1dGVzIChpbiBjYXNlIGljb25zL2NsYXNzZXMgY2hhbmdlKVxyXG5cdFx0dGhpcy5oZWxwQnV0dG9uT2JzZXJ2ZXIub2JzZXJ2ZShkb2N1bWVudC5ib2R5LCB7XHJcblx0XHRcdGNoaWxkTGlzdDogdHJ1ZSxcclxuXHRcdFx0c3VidHJlZTogdHJ1ZSxcclxuXHRcdFx0YXR0cmlidXRlczogdHJ1ZSxcclxuXHRcdFx0YXR0cmlidXRlRmlsdGVyOiBbJ2NsYXNzJywgJ3NyYycsICdhcmlhLWxhYmVsJ11cclxuXHRcdH0pO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogU3luY2hyb25pemVzIHRoZSBoZWxwIGJ1dHRvbiBzdGF0ZSBiYXNlZCBvbiBzZXR0aW5ncy5cclxuXHQgKi9cclxuXHRwcml2YXRlIHN5bmNIZWxwQnV0dG9uKCkge1xyXG5cdFx0Y29uc3QgZW5hYmxlZCA9IHRoaXMuc2V0dGluZ3MuaGVscEJ1dHRvblJlcGxhY2VtZW50Py5lbmFibGVkO1xyXG5cclxuXHRcdC8vIDEuIE1hbmFnZSB0aGUgQ1NTIGNsYXNzIGZvciBoaWRpbmcgdGhlIG9yaWdpbmFsIGJ1dHRvblxyXG5cdFx0aWYgKGVuYWJsZWQpIGRvY3VtZW50LmJvZHkuYWRkQ2xhc3MoJ2FzdHJvLWNvbXBvc2VyLWhpZGUtaGVscC1idXR0b24nKTtcclxuXHRcdGVsc2UgZG9jdW1lbnQuYm9keS5yZW1vdmVDbGFzcygnYXN0cm8tY29tcG9zZXItaGlkZS1oZWxwLWJ1dHRvbicpO1xyXG5cclxuXHRcdC8vIDIuIENsZWFyIGN1c3RvbSBidXR0b24gaWYgZGlzYWJsZWRcclxuXHRcdGlmICghZW5hYmxlZCkge1xyXG5cdFx0XHRpZiAodGhpcy5jdXN0b21IZWxwQnV0dG9uKSB7XHJcblx0XHRcdFx0dGhpcy5jdXN0b21IZWxwQnV0dG9uLnJlbW92ZSgpO1xyXG5cdFx0XHRcdHRoaXMuY3VzdG9tSGVscEJ1dHRvbiA9IHVuZGVmaW5lZDtcclxuXHRcdFx0fVxyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gMy4gTG9vayBmb3IgdGhlIG9yaWdpbmFsIGhlbHAgYnV0dG9uXHJcblx0XHRjb25zdCBzZWxlY3RvcnMgPSBbXHJcblx0XHRcdCcud29ya3NwYWNlLWRyYXdlci12YXVsdC1hY3Rpb25zIC5jbGlja2FibGUtaWNvbiBzdmcuaGVscCcsXHJcblx0XHRcdCcud29ya3NwYWNlLXNpZGVkb2NrLXZhdWx0LXByb2ZpbGUgLmNsaWNrYWJsZS1pY29uIHN2Zy5oZWxwJyxcclxuXHRcdFx0Jy53b3Jrc3BhY2UtZHJhd2VyIC5jbGlja2FibGUtaWNvbiBzdmcuaGVscCcsXHJcblx0XHRcdCcuY2xpY2thYmxlLWljb24gc3ZnLmhlbHAnXHJcblx0XHRdO1xyXG5cclxuXHRcdGxldCBoZWxwQnV0dG9uU3ZnOiBTVkdFbGVtZW50IHwgbnVsbCA9IG51bGw7XHJcblx0XHRmb3IgKGNvbnN0IHNlbGVjdG9yIG9mIHNlbGVjdG9ycykge1xyXG5cdFx0XHRoZWxwQnV0dG9uU3ZnID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihzZWxlY3Rvcik7XHJcblx0XHRcdGlmIChoZWxwQnV0dG9uU3ZnKSBicmVhaztcclxuXHRcdH1cclxuXHJcblx0XHRpZiAoIWhlbHBCdXR0b25TdmcpIHJldHVybjtcclxuXHRcdGNvbnN0IG9yaWdpbmFsSGVscEJ1dHRvbiA9IGhlbHBCdXR0b25TdmcucGFyZW50RWxlbWVudCBhcyBIVE1MRWxlbWVudDtcclxuXHRcdGlmICghb3JpZ2luYWxIZWxwQnV0dG9uKSByZXR1cm47XHJcblxyXG5cdFx0Ly8gNC4gQ2hlY2sgaWYgd2UgYWxyZWFkeSBoYXZlIGEgdmFsaWQgY3VzdG9tIGJ1dHRvbiBpbiB0aGUgcmlnaHQgcGxhY2VcclxuXHRcdGNvbnN0IGV4aXN0aW5nUmVwbGFjZW1lbnQgPSBvcmlnaW5hbEhlbHBCdXR0b24ucGFyZW50RWxlbWVudD8ucXVlcnlTZWxlY3RvcignW2RhdGEtYXN0cm8tY29tcG9zZXItaGVscC1yZXBsYWNlbWVudD1cInRydWVcIl0nKTtcclxuXHRcdGlmIChleGlzdGluZ1JlcGxhY2VtZW50KSB7XHJcblx0XHRcdHRoaXMuY3VzdG9tSGVscEJ1dHRvbiA9IGV4aXN0aW5nUmVwbGFjZW1lbnQgYXMgSFRNTEVsZW1lbnQ7XHJcblx0XHRcdHJldHVybjtcclxuXHRcdH1cclxuXHJcblx0XHQvLyA1LiBDcmVhdGUgYW5kIGluamVjdCB0aGUgcmVwbGFjZW1lbnRcclxuXHRcdGNvbnN0IGN1c3RvbUJ1dHRvbiA9IG9yaWdpbmFsSGVscEJ1dHRvbi5jbG9uZU5vZGUodHJ1ZSkgYXMgSFRNTEVsZW1lbnQ7XHJcblx0XHRjdXN0b21CdXR0b24uYWRkQ2xhc3MoXCJhc3Ryby1jb21wb3Nlci1oZWxwLXJlcGxhY2VtZW50XCIpO1xyXG5cdFx0Y3VzdG9tQnV0dG9uLnJlbW92ZUF0dHJpYnV0ZSgnYXJpYS1sYWJlbCcpO1xyXG5cdFx0Y3VzdG9tQnV0dG9uLnNldEF0dHJpYnV0ZSgnZGF0YS1hc3Ryby1jb21wb3Nlci1oZWxwLXJlcGxhY2VtZW50JywgJ3RydWUnKTtcclxuXHRcdGN1c3RvbUJ1dHRvbi5vbmNsaWNrID0gbnVsbDtcclxuXHJcblx0XHRjb25zdCBpY29uQ29udGFpbmVyID0gY3VzdG9tQnV0dG9uLnF1ZXJ5U2VsZWN0b3IoJ3N2ZycpPy5wYXJlbnRFbGVtZW50IHx8IGN1c3RvbUJ1dHRvbjtcclxuXHRcdHRyeSB7XHJcblx0XHRcdGlmIChpY29uQ29udGFpbmVyIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHtcclxuXHRcdFx0XHRzZXRJY29uKGljb25Db250YWluZXIsIHRoaXMuc2V0dGluZ3MuaGVscEJ1dHRvblJlcGxhY2VtZW50IS5pY29uSWQpO1xyXG5cdFx0XHR9XHJcblx0XHR9IGNhdGNoIChlcnJvcikge1xyXG5cdFx0XHRjb25zb2xlLndhcm4oJ1tBc3RybyBDb21wb3Nlcl0gRXJyb3Igc2V0dGluZyByZXBsYWNlbWVudCBpY29uOicsIGVycm9yKTtcclxuXHRcdH1cclxuXHJcblx0XHRjdXN0b21CdXR0b24uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoZXZ0OiBNb3VzZUV2ZW50KSA9PiB7XHJcblx0XHRcdGV2dC5wcmV2ZW50RGVmYXVsdCgpO1xyXG5cdFx0XHRldnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcblxyXG5cdFx0XHRjb25zdCBjb21tYW5kSWQgPSB0aGlzLnNldHRpbmdzLmhlbHBCdXR0b25SZXBsYWNlbWVudD8uY29tbWFuZElkO1xyXG5cdFx0XHRpZiAoY29tbWFuZElkKSB7XHJcblx0XHRcdFx0Y29uc3QgYXBwV2l0aENvbW1hbmRzID0gdGhpcy5hcHAgYXMgdW5rbm93biBhcyB7IGNvbW1hbmRzPzogeyBleGVjdXRlQ29tbWFuZEJ5SWQ/OiAoaWQ6IHN0cmluZykgPT4gUHJvbWlzZTx2b2lkPiB9IH07XHJcblx0XHRcdFx0aWYgKGFwcFdpdGhDb21tYW5kcy5jb21tYW5kcz8uZXhlY3V0ZUNvbW1hbmRCeUlkKSB7XHJcblx0XHRcdFx0XHR2b2lkIGFwcFdpdGhDb21tYW5kcy5jb21tYW5kcy5leGVjdXRlQ29tbWFuZEJ5SWQoY29tbWFuZElkKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH0sIHRydWUpO1xyXG5cclxuXHRcdG9yaWdpbmFsSGVscEJ1dHRvbi5wYXJlbnRFbGVtZW50Py5pbnNlcnRCZWZvcmUoY3VzdG9tQnV0dG9uLCBvcmlnaW5hbEhlbHBCdXR0b24pO1xyXG5cdFx0dGhpcy5jdXN0b21IZWxwQnV0dG9uID0gY3VzdG9tQnV0dG9uO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSByZXN0b3JlSGVscEJ1dHRvbigpIHtcclxuXHRcdGRvY3VtZW50LmJvZHkucmVtb3ZlQ2xhc3MoJ2FzdHJvLWNvbXBvc2VyLWhpZGUtaGVscC1idXR0b24nKTtcclxuXHRcdGlmICh0aGlzLmN1c3RvbUhlbHBCdXR0b24pIHtcclxuXHRcdFx0dGhpcy5jdXN0b21IZWxwQnV0dG9uLnJlbW92ZSgpO1xyXG5cdFx0XHR0aGlzLmN1c3RvbUhlbHBCdXR0b24gPSB1bmRlZmluZWQ7XHJcblx0XHR9XHJcblx0XHR0aGlzLmhlbHBCdXR0b25FbGVtZW50ID0gdW5kZWZpbmVkO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSByZW1vdmVSaWJib25JY29uc0Zyb21Db250ZXh0TWVudShtZW51RWxlbWVudDogSFRNTEVsZW1lbnQpIHtcclxuXHRcdGNvbnN0IHRlcm1pbmFsU2hvdWxkQmVIaWRkZW4gPSAhdGhpcy5zZXR0aW5ncy5lbmFibGVUZXJtaW5hbFJpYmJvbkljb24gfHwgIXRoaXMuc2V0dGluZ3MuZW5hYmxlT3BlblRlcm1pbmFsQ29tbWFuZDtcclxuXHRcdGNvbnN0IGNvbmZpZ1Nob3VsZEJlSGlkZGVuID0gIXRoaXMuc2V0dGluZ3MuZW5hYmxlQ29uZmlnUmliYm9uSWNvbiB8fCAhdGhpcy5zZXR0aW5ncy5lbmFibGVPcGVuQ29uZmlnRmlsZUNvbW1hbmQ7XHJcblxyXG5cdFx0Y29uc3QgbWVudUl0ZW1zID0gbWVudUVsZW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLm1lbnUtaXRlbScpO1xyXG5cdFx0Zm9yIChjb25zdCBpdGVtIG9mIEFycmF5LmZyb20obWVudUl0ZW1zKSkge1xyXG5cdFx0XHRjb25zdCBzdmcgPSBpdGVtLnF1ZXJ5U2VsZWN0b3IoJ3N2ZycpO1xyXG5cdFx0XHRpZiAoc3ZnKSB7XHJcblx0XHRcdFx0bGV0IGljb25OYW1lID0gc3ZnLmdldEF0dHJpYnV0ZSgnZGF0YS1sdWNpZGUnKSB8fCBzdmcuZ2V0QXR0cmlidXRlKCd4bWxuczpsdWNpZGUnKSB8fFxyXG5cdFx0XHRcdFx0c3ZnLmdldEF0dHJpYnV0ZSgnZGF0YS1pY29uJykgfHxcclxuXHRcdFx0XHRcdChzdmcuY2xhc3NMaXN0LmNvbnRhaW5zKCdsdWNpZGUtdGVybWluYWwtc3F1YXJlJykgPyAndGVybWluYWwtc3F1YXJlJyA6IG51bGwpIHx8XHJcblx0XHRcdFx0XHQoc3ZnLmNsYXNzTGlzdC5jb250YWlucygnbHVjaWRlLXJvY2tldCcpID8gJ3JvY2tldCcgOiBudWxsKSB8fFxyXG5cdFx0XHRcdFx0KHN2Zy5jbGFzc0xpc3QuY29udGFpbnMoJ2x1Y2lkZS13cmVuY2gnKSA/ICd3cmVuY2gnIDogbnVsbCk7XHJcblxyXG5cdFx0XHRcdGlmIChpY29uTmFtZSkgaWNvbk5hbWUgPSBpY29uTmFtZS5yZXBsYWNlKC9ebHVjaWRlLS8sICcnKTtcclxuXHJcblx0XHRcdFx0aWYgKHRlcm1pbmFsU2hvdWxkQmVIaWRkZW4gJiYgaWNvbk5hbWUgPT09ICd0ZXJtaW5hbC1zcXVhcmUnKSB7XHJcblx0XHRcdFx0XHRpZiAoaXRlbS50ZXh0Q29udGVudD8udG9Mb3dlckNhc2UoKS5pbmNsdWRlcygndGVybWluYWwnKSkgaXRlbS5yZW1vdmUoKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0aWYgKGNvbmZpZ1Nob3VsZEJlSGlkZGVuICYmIChpY29uTmFtZSA9PT0gJ3JvY2tldCcgfHwgaWNvbk5hbWUgPT09ICd3cmVuY2gnKSkge1xyXG5cdFx0XHRcdFx0aWYgKGl0ZW0udGV4dENvbnRlbnQ/LnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoJ2NvbmZpZycpKSBpdGVtLnJlbW92ZSgpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdH1cclxufVxyXG4iLCAiaW1wb3J0IHsgVEZpbGUsIFBsdWdpblNldHRpbmdUYWIgfSBmcm9tIFwib2JzaWRpYW5cIjtcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgQXN0cm9Db21wb3NlclNldHRpbmdzIHtcclxuXHRkZWZhdWx0VGVtcGxhdGU6IHN0cmluZzsgLy8gS2VwdCB0ZW1wb3JhcmlseSBmb3IgbWlncmF0aW9uXHJcblx0YXV0b0luc2VydFByb3BlcnRpZXM6IGJvb2xlYW47XHJcblx0ZGF0ZUZvcm1hdDogc3RyaW5nO1xyXG5cdGVuYWJsZUNvcHlIZWFkaW5nTGluazogYm9vbGVhbjtcclxuXHRjb3B5SGVhZGluZ0xpbmtGb3JtYXQ6IFwib2JzaWRpYW5cIiB8IFwiYXN0cm9cIjtcclxuXHRhZGRUcmFpbGluZ1NsYXNoVG9MaW5rczogYm9vbGVhbjtcclxuXHRlbmFibGVPcGVuVGVybWluYWxDb21tYW5kOiBib29sZWFuO1xyXG5cdHRlcm1pbmFsUHJvamVjdFJvb3RQYXRoOiBzdHJpbmc7XHJcblx0dGVybWluYWxBcHBsaWNhdGlvbk5hbWU6IHN0cmluZztcclxuXHRlbmFibGVUZXJtaW5hbERlYnVnTG9nZ2luZzogYm9vbGVhbjtcclxuXHRlbmFibGVUZXJtaW5hbFJpYmJvbkljb246IGJvb2xlYW47XHJcblx0ZW5hYmxlT3BlbkNvbmZpZ0ZpbGVDb21tYW5kOiBib29sZWFuO1xyXG5cdGNvbmZpZ0ZpbGVQYXRoOiBzdHJpbmc7XHJcblx0ZW5hYmxlQ29uZmlnUmliYm9uSWNvbjogYm9vbGVhbjtcclxuXHRjb250ZW50VHlwZXM6IENvbnRlbnRUeXBlW107XHJcblx0aGVscEJ1dHRvblJlcGxhY2VtZW50OiBIZWxwQnV0dG9uUmVwbGFjZW1lbnRTZXR0aW5ncztcclxuXHRtaWdyYXRpb25Db21wbGV0ZWQ6IGJvb2xlYW47XHJcblx0c2hvd01keEZpbGVzSW5FeHBsb3JlcjogYm9vbGVhbjtcclxuXHRwcm9jZXNzQmFja2dyb3VuZEZpbGVDaGFuZ2VzOiBib29sZWFuO1xyXG5cdHN5bmNEcmFmdERhdGU6IGJvb2xlYW47XHJcblx0ZHJhZnRQcm9wZXJ0eTogc3RyaW5nO1xyXG5cdGRyYWZ0TG9naWM6ICd0cnVlLWlzLWRyYWZ0JyB8ICdmYWxzZS1pcy1kcmFmdCc7XHJcblx0cHVibGlzaERhdGVGaWVsZDogc3RyaW5nO1xyXG5cdC8vIExlZ2FjeSBmaWVsZHMgKGtlcHQgZm9yIG1pZ3JhdGlvbiwgaWdub3JlZCBhZnRlciBtaWdyYXRpb24pXHJcblx0ZW5hYmxlVW5kZXJzY29yZVByZWZpeD86IGJvb2xlYW47XHJcblx0cG9zdHNGb2xkZXI/OiBzdHJpbmc7XHJcblx0cG9zdHNMaW5rQmFzZVBhdGg/OiBzdHJpbmc7XHJcblx0YXV0b21hdGVQb3N0Q3JlYXRpb24/OiBib29sZWFuO1xyXG5cdGNyZWF0aW9uTW9kZT86IFwiZmlsZVwiIHwgXCJmb2xkZXJcIjtcclxuXHRpbmRleEZpbGVOYW1lPzogc3RyaW5nO1xyXG5cdGV4Y2x1ZGVkRGlyZWN0b3JpZXM/OiBzdHJpbmc7XHJcblx0b25seUF1dG9tYXRlSW5Qb3N0c0ZvbGRlcj86IGJvb2xlYW47XHJcblx0ZW5hYmxlUGFnZXM/OiBib29sZWFuO1xyXG5cdHBhZ2VzRm9sZGVyPzogc3RyaW5nO1xyXG5cdHBhZ2VzTGlua0Jhc2VQYXRoPzogc3RyaW5nO1xyXG5cdHBhZ2VzQ3JlYXRpb25Nb2RlPzogXCJmaWxlXCIgfCBcImZvbGRlclwiO1xyXG5cdHBhZ2VzSW5kZXhGaWxlTmFtZT86IHN0cmluZztcclxuXHRwYWdlVGVtcGxhdGU/OiBzdHJpbmc7XHJcblx0b25seUF1dG9tYXRlSW5QYWdlc0ZvbGRlcj86IGJvb2xlYW47XHJcblx0Y3VzdG9tQ29udGVudFR5cGVzPzogQ29udGVudFR5cGVbXTsgLy8gTGVnYWN5IG5hbWVcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBIZWxwQnV0dG9uUmVwbGFjZW1lbnRTZXR0aW5ncyB7XHJcblx0ZW5hYmxlZDogYm9vbGVhbjtcclxuXHRjb21tYW5kSWQ6IHN0cmluZztcclxuXHRpY29uSWQ6IHN0cmluZztcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBQYXJzZWRGcm9udG1hdHRlciB7XHJcblx0cHJvcGVydGllczogUmVjb3JkPHN0cmluZywgc3RyaW5nW10+O1xyXG5cdHByb3BlcnRpZXNUZXh0OiBzdHJpbmc7XHJcblx0cHJvcGVydGllc0VuZDogbnVtYmVyO1xyXG5cdGJvZHlDb250ZW50OiBzdHJpbmc7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgVGVtcGxhdGVWYWx1ZXMge1xyXG5cdFtrZXk6IHN0cmluZ106IHN0cmluZ1tdIHwgc3RyaW5nO1xyXG59XHJcblxyXG4vLyBDb250ZW50VHlwZSBpcyBub3cganVzdCBhIHN0cmluZyBJRCAtIG5vIGRpc3RpbmN0aW9uIGJldHdlZW4gYnVpbHQtaW4gYW5kIGN1c3RvbSB0eXBlc1xyXG5leHBvcnQgdHlwZSBDb250ZW50VHlwZUlkID0gc3RyaW5nO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBDb250ZW50VHlwZSB7XHJcblx0aWQ6IHN0cmluZztcclxuXHRuYW1lOiBzdHJpbmc7XHJcblx0Zm9sZGVyOiBzdHJpbmc7XHJcblx0bGlua0Jhc2VQYXRoOiBzdHJpbmc7XHJcblx0dGVtcGxhdGU6IHN0cmluZztcclxuXHRlbmFibGVkOiBib29sZWFuO1xyXG5cdGNyZWF0aW9uTW9kZTogXCJmaWxlXCIgfCBcImZvbGRlclwiO1xyXG5cdGluZGV4RmlsZU5hbWU6IHN0cmluZztcclxuXHRpZ25vcmVTdWJmb2xkZXJzOiBib29sZWFuO1xyXG5cdGVuYWJsZVVuZGVyc2NvcmVQcmVmaXg6IGJvb2xlYW47XHJcblx0dXNlTWR4RXh0ZW5zaW9uOiBib29sZWFuO1xyXG5cdG1vZGlmaWVkRGF0ZUZpZWxkOiBzdHJpbmc7XHJcblx0Y29sbGFwc2VkPzogYm9vbGVhbjtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBGaWxlQ3JlYXRpb25PcHRpb25zIHtcclxuXHRmaWxlOiBURmlsZTtcclxuXHR0aXRsZTogc3RyaW5nO1xyXG5cdHR5cGU6IENvbnRlbnRUeXBlSWQ7IC8vIENvbnRlbnQgdHlwZSBJRCAoc3RyaW5nKVxyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFJlbmFtZU9wdGlvbnMge1xyXG5cdGZpbGU6IFRGaWxlO1xyXG5cdHRpdGxlOiBzdHJpbmc7XHJcblx0dHlwZTogQ29udGVudFR5cGVJZDsgLy8gQ29udGVudCB0eXBlIElEIChzdHJpbmcpXHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBLTk9XTl9BUlJBWV9LRVlTID0gWyd0YWdzJywgJ2FsaWFzZXMnLCAnY3NzY2xhc3NlcyddIGFzIGNvbnN0O1xyXG5cclxuZXhwb3J0IGNvbnN0IENPTlNUQU5UUyA9IHtcclxuXHRERUJPVU5DRV9NUzogNTAwLFxyXG5cdFNUQVRfTVRJTUVfVEhSRVNIT0xEOiA1MDAwLFxyXG5cdEVESVRPUl9TVEFCSUxJWkVfREVMQVk6IDEwMCxcclxuXHRGSUxFX0VYUExPUkVSX1JFVkVBTF9ERUxBWTogMjAwLFxyXG59IGFzIGNvbnN0O1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBBc3Ryb0NvbXBvc2VyUGx1Z2luSW50ZXJmYWNlIHtcclxuXHRzZXR0aW5nczogQXN0cm9Db21wb3NlclNldHRpbmdzO1xyXG5cdHNhdmVTZXR0aW5ncygpOiBQcm9taXNlPHZvaWQ+O1xyXG5cdGxvYWRTZXR0aW5ncygpOiBQcm9taXNlPHZvaWQ+O1xyXG5cdHJlZ2lzdGVyQ3JlYXRlRXZlbnQoKTogdm9pZDtcclxuXHRyZWdpc3RlckV2ZW50KGV2ZW50UmVmOiBhbnkpOiB2b2lkO1xyXG5cdHJlZ2lzdGVyRXh0ZW5zaW9ucyhleHRlbnNpb25zOiBzdHJpbmdbXSwgdmlld1R5cGU6IHN0cmluZyk6IHZvaWQ7XHJcblx0aGVhZGluZ0xpbmtHZW5lcmF0b3I6IGFueTtcclxuXHRmcm9udG1hdHRlclNlcnZpY2U6IGFueTtcclxuXHRwbHVnaW5DcmVhdGVkRmlsZXM6IE1hcDxzdHJpbmcsIG51bWJlcj47XHJcblx0ZmlsZU9wczogYW55O1xyXG5cdHNldHRpbmdzVGFiPzogUGx1Z2luU2V0dGluZ1RhYjtcclxuXHRyZWdpc3RlclJpYmJvbkljb25zPygpOiB2b2lkO1xyXG5cdHVwZGF0ZUhlbHBCdXR0b24/KCk6IFByb21pc2U8dm9pZD47XHJcbn0iLCAiaW1wb3J0IHsgQXN0cm9Db21wb3NlclNldHRpbmdzIH0gZnJvbSBcIi4vdHlwZXNcIjtcclxuXHJcbmV4cG9ydCB0eXBlIHsgQXN0cm9Db21wb3NlclNldHRpbmdzIH0gZnJvbSBcIi4vdHlwZXNcIjtcclxuZXhwb3J0IHsgQ09OU1RBTlRTIH0gZnJvbSBcIi4vdHlwZXNcIjtcclxuXHJcbmV4cG9ydCBjb25zdCBERUZBVUxUX1NFVFRJTkdTOiBBc3Ryb0NvbXBvc2VyU2V0dGluZ3MgPSB7XHJcblx0ZGVmYXVsdFRlbXBsYXRlOlxyXG5cdFx0Jy0tLVxcbnRpdGxlOiBcInt7dGl0bGV9fVwiXFxuZGF0ZToge3tkYXRlfX1cXG50YWdzOiBbXVxcbi0tLVxcbicsXHJcblx0YXV0b0luc2VydFByb3BlcnRpZXM6IHRydWUsXHJcblx0ZGF0ZUZvcm1hdDogXCJZWVlZLU1NLUREXCIsXHJcblx0ZW5hYmxlQ29weUhlYWRpbmdMaW5rOiB0cnVlLFxyXG5cdGNvcHlIZWFkaW5nTGlua0Zvcm1hdDogXCJvYnNpZGlhblwiLFxyXG5cdGFkZFRyYWlsaW5nU2xhc2hUb0xpbmtzOiBmYWxzZSxcclxuXHRlbmFibGVPcGVuVGVybWluYWxDb21tYW5kOiBmYWxzZSxcclxuXHR0ZXJtaW5hbFByb2plY3RSb290UGF0aDogXCJcIixcclxuXHR0ZXJtaW5hbEFwcGxpY2F0aW9uTmFtZTogXCJcIixcclxuXHRlbmFibGVUZXJtaW5hbERlYnVnTG9nZ2luZzogZmFsc2UsXHJcblx0ZW5hYmxlVGVybWluYWxSaWJib25JY29uOiBmYWxzZSxcclxuXHRlbmFibGVPcGVuQ29uZmlnRmlsZUNvbW1hbmQ6IGZhbHNlLFxyXG5cdGNvbmZpZ0ZpbGVQYXRoOiBcIlwiLFxyXG5cdGVuYWJsZUNvbmZpZ1JpYmJvbkljb246IGZhbHNlLFxyXG5cdGNvbnRlbnRUeXBlczogW10sXHJcblx0bWlncmF0aW9uQ29tcGxldGVkOiBmYWxzZSxcclxuXHRoZWxwQnV0dG9uUmVwbGFjZW1lbnQ6IHtcclxuXHRcdGVuYWJsZWQ6IGZhbHNlLFxyXG5cdFx0Y29tbWFuZElkOiAnZWRpdC1hc3Ryby1jb25maWcnLFxyXG5cdFx0aWNvbklkOiAncm9ja2V0JyxcclxuXHR9LFxyXG5cdHNob3dNZHhGaWxlc0luRXhwbG9yZXI6IGZhbHNlLFxyXG5cdHByb2Nlc3NCYWNrZ3JvdW5kRmlsZUNoYW5nZXM6IHRydWUsXHJcblx0c3luY0RyYWZ0RGF0ZTogZmFsc2UsXHJcblx0ZHJhZnRQcm9wZXJ0eTogXCJcIixcclxuXHRkcmFmdExvZ2ljOiBcInRydWUtaXMtZHJhZnRcIixcclxuXHRwdWJsaXNoRGF0ZUZpZWxkOiBcIlwiLFxyXG59O1xyXG4iLCAiaW1wb3J0IHsgUGx1Z2luLCBFZGl0b3IsIE1hcmtkb3duVmlldywgVEZpbGUsIE5vdGljZSwgQXBwLCBNYXJrZG93bkZpbGVJbmZvLCBQbGF0Zm9ybSwgVEZvbGRlciB9IGZyb20gXCJvYnNpZGlhblwiO1xyXG5pbXBvcnQgeyBBc3Ryb0NvbXBvc2VyU2V0dGluZ3MsIEFzdHJvQ29tcG9zZXJQbHVnaW5JbnRlcmZhY2UgfSBmcm9tIFwiLi4vdHlwZXNcIjtcclxuaW1wb3J0IHsgRmlsZU9wZXJhdGlvbnMgfSBmcm9tIFwiLi4vdXRpbHMvZmlsZS1vcGVyYXRpb25zXCI7XHJcbmltcG9ydCB7IFRlbXBsYXRlUGFyc2VyIH0gZnJvbSBcIi4uL3V0aWxzL3RlbXBsYXRlLXBhcnNpbmdcIjtcclxuaW1wb3J0IHsgTGlua0NvbnZlcnRlciB9IGZyb20gXCIuLi91dGlscy9saW5rLWNvbnZlcnNpb25cIjtcclxuaW1wb3J0IHsgVGl0bGVNb2RhbCB9IGZyb20gXCIuLi91aS90aXRsZS1tb2RhbFwiO1xyXG5pbXBvcnQgeyB0b0tlYmFiQ2FzZSB9IGZyb20gXCIuLi91dGlscy9zdHJpbmctdXRpbHNcIjtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiByZWdpc3RlckNvbW1hbmRzKHBsdWdpbjogUGx1Z2luLCBzZXR0aW5nczogQXN0cm9Db21wb3NlclNldHRpbmdzKTogdm9pZCB7XHJcblx0Ly8gVGVybWluYWwgYW5kIGNvbmZpZyBjb21tYW5kcyBhcmUgZGVza3RvcC1vbmx5IC0gTkVWRVIgcmVnaXN0ZXIgb24gbW9iaWxlXHJcblx0Ly8gQ2hlY2sgUGxhdGZvcm0uaXNNb2JpbGUgLSBpZiB0cnVlLCB0aGVzZSBjb21tYW5kcyBtdXN0IE5FVkVSIGJlIHJlZ2lzdGVyZWRcclxuXHRjb25zdCBpc01vYmlsZSA9IFBsYXRmb3JtLmlzTW9iaWxlO1xyXG5cclxuXHQvLyBJZiBvbiBtb2JpbGUsIGFic29sdXRlbHkgZG8gbm90IHJlZ2lzdGVyIHRlcm1pbmFsL2NvbmZpZyBjb21tYW5kc1xyXG5cdC8vIFRoZXkgdXNlIE5vZGUuanMvRWxlY3Ryb24gQVBJcyB0aGF0IGRvbid0IGV4aXN0IG9uIG1vYmlsZVxyXG5cdGlmIChpc01vYmlsZSkge1xyXG5cdFx0Ly8gT24gbW9iaWxlLCBvbmx5IHJlZ2lzdGVyIHRoZSBzYWZlIGNvbW1hbmRzIHRoYXQgd29yayBvbiBtb2JpbGVcclxuXHRcdGNvbnN0IHBsdWdpbkludGVyZmFjZSA9IHBsdWdpbiBhcyB1bmtub3duIGFzIEFzdHJvQ29tcG9zZXJQbHVnaW5JbnRlcmZhY2U7XHJcblx0XHRjb25zdCBmaWxlT3BzID0gbmV3IEZpbGVPcGVyYXRpb25zKHBsdWdpbi5hcHAsIHNldHRpbmdzLCBwbHVnaW5JbnRlcmZhY2UpO1xyXG5cdFx0Y29uc3QgbGlua0NvbnZlcnRlciA9IG5ldyBMaW5rQ29udmVydGVyKHNldHRpbmdzLCBwbHVnaW5JbnRlcmZhY2UpO1xyXG5cclxuXHRcdC8vIFJlZ2lzdGVyIG9ubHkgbW9iaWxlLXNhZmUgY29tbWFuZHNcclxuXHRcdHBsdWdpbi5hZGRDb21tYW5kKHtcclxuXHRcdFx0aWQ6IFwic3RhbmRhcmRpemUtcHJvcGVydGllc1wiLFxyXG5cdFx0XHRuYW1lOiBcIlN0YW5kYXJkaXplIHByb3BlcnRpZXNcIixcclxuXHRcdFx0aWNvbjogXCJmaWxlLWNoZWNrXCIsXHJcblx0XHRcdGVkaXRvckNhbGxiYWNrOiAoZWRpdG9yOiBFZGl0b3IsIGN0eDogTWFya2Rvd25WaWV3IHwgTWFya2Rvd25GaWxlSW5mbykgPT4ge1xyXG5cdFx0XHRcdGNvbnN0IGZpbGUgPSBjdHggaW5zdGFuY2VvZiBNYXJrZG93blZpZXcgPyBjdHguZmlsZSA6IGN0eC5maWxlO1xyXG5cdFx0XHRcdGlmIChmaWxlIGluc3RhbmNlb2YgVEZpbGUpIHtcclxuXHRcdFx0XHRcdC8vIEdldCBmcmVzaCBzZXR0aW5ncyBmcm9tIHBsdWdpblxyXG5cdFx0XHRcdFx0Y29uc3QgY3VycmVudFNldHRpbmdzID0gcGx1Z2luSW50ZXJmYWNlLnNldHRpbmdzIHx8IHNldHRpbmdzO1xyXG5cdFx0XHRcdFx0dm9pZCBzdGFuZGFyZGl6ZVByb3BlcnRpZXMocGx1Z2luLmFwcCwgY3VycmVudFNldHRpbmdzLCBmaWxlLCBwbHVnaW5JbnRlcmZhY2UsIGVkaXRvcik7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9LFxyXG5cdFx0fSk7XHJcblxyXG5cdFx0cGx1Z2luLmFkZENvbW1hbmQoe1xyXG5cdFx0XHRpZDogXCJjb252ZXJ0LXdpa2lsaW5rcy1hc3Ryb1wiLFxyXG5cdFx0XHRuYW1lOiBcIkNvbnZlcnQgaW50ZXJuYWwgbGlua3MgZm9yIGFzdHJvXCIsXHJcblx0XHRcdGljb246IFwibGluay0yXCIsXHJcblx0XHRcdGVkaXRvckNhbGxiYWNrOiAoZWRpdG9yOiBFZGl0b3IsIGN0eDogTWFya2Rvd25WaWV3IHwgTWFya2Rvd25GaWxlSW5mbykgPT4ge1xyXG5cdFx0XHRcdGNvbnN0IGZpbGUgPSBjdHggaW5zdGFuY2VvZiBNYXJrZG93blZpZXcgPyBjdHguZmlsZSA6IGN0eC5maWxlO1xyXG5cdFx0XHRcdGlmIChmaWxlIGluc3RhbmNlb2YgVEZpbGUpIHtcclxuXHRcdFx0XHRcdGxpbmtDb252ZXJ0ZXIuY29udmVydFdpa2lsaW5rc0ZvckFzdHJvKGVkaXRvciwgZmlsZSk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9LFxyXG5cdFx0fSk7XHJcblxyXG5cdFx0Ly8gSGVscGVyIGZ1bmN0aW9uIGZvciByZW5hbWUgY29tbWFuZCAobW9iaWxlIHZlcnNpb24pXHJcblx0XHQvLyBVc2VzIHRoZSBzYW1lIGxvZ2ljIGFzIEZpbGVPcGVyYXRpb25zLmRldGVybWluZVR5cGUoKSB0byBlbnN1cmUgY29uc2lzdGVuY3lcclxuXHRcdGZ1bmN0aW9uIGhhc01hdGNoaW5nQ29udGVudFR5cGUoZmlsZTogVEZpbGUsIHNldHRpbmdzOiBBc3Ryb0NvbXBvc2VyU2V0dGluZ3MpOiBib29sZWFuIHtcclxuXHRcdFx0Y29uc3QgdHlwZSA9IGZpbGVPcHMuZGV0ZXJtaW5lVHlwZShmaWxlKTtcclxuXHRcdFx0Ly8gSWYgZGV0ZXJtaW5lVHlwZSByZXR1cm5zIFwibm90ZVwiLCBpdCBtZWFucyBubyBjb250ZW50IHR5cGUgbWF0Y2hlZFxyXG5cdFx0XHRpZiAodHlwZSA9PT0gXCJub3RlXCIpIHtcclxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHRcdH1cclxuXHRcdFx0Ly8gQ2hlY2sgaWYgdGhlIG1hdGNoZWQgY29udGVudCB0eXBlIGlzIGVuYWJsZWRcclxuXHRcdFx0Y29uc3QgY29udGVudFR5cGUgPSBmaWxlT3BzLmdldENvbnRlbnRUeXBlKHR5cGUpO1xyXG5cdFx0XHRyZXR1cm4gY29udGVudFR5cGUgIT09IG51bGwgJiYgY29udGVudFR5cGUuZW5hYmxlZDtcclxuXHRcdH1cclxuXHJcblx0XHRwbHVnaW4uYWRkQ29tbWFuZCh7XHJcblx0XHRcdGlkOiBcInJlbmFtZS1jb250ZW50XCIsXHJcblx0XHRcdG5hbWU6IFwiUmVuYW1lIGN1cnJlbnQgY29udGVudFwiLFxyXG5cdFx0XHRpY29uOiBcInBlbmNpbFwiLFxyXG5cdFx0XHRlZGl0b3JDYWxsYmFjazogKGVkaXRvcjogRWRpdG9yLCBjdHg6IE1hcmtkb3duVmlldyB8IE1hcmtkb3duRmlsZUluZm8pID0+IHtcclxuXHRcdFx0XHRjb25zdCBmaWxlID0gY3R4IGluc3RhbmNlb2YgTWFya2Rvd25WaWV3ID8gY3R4LmZpbGUgOiBjdHguZmlsZTtcclxuXHRcdFx0XHRpZiAoZmlsZSBpbnN0YW5jZW9mIFRGaWxlKSB7XHJcblx0XHRcdFx0XHRpZiAoIWhhc01hdGNoaW5nQ29udGVudFR5cGUoZmlsZSwgc2V0dGluZ3MpKSB7XHJcblx0XHRcdFx0XHRcdG5ldyBOb3RpY2UoXCJDYW5ub3QgcmVuYW1lOiB0aGlzIGZpbGUgaXMgbm90IHBhcnQgb2YgYSBjb25maWd1cmVkIGNvbnRlbnQgdHlwZSBmb2xkZXIuXCIpO1xyXG5cdFx0XHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0Y29uc3QgdHlwZSA9IGZpbGVPcHMuZGV0ZXJtaW5lVHlwZShmaWxlKTtcclxuXHRcdFx0XHRcdGNvbnN0IGNhY2hlID0gcGx1Z2luLmFwcC5tZXRhZGF0YUNhY2hlLmdldEZpbGVDYWNoZShmaWxlKTtcclxuXHRcdFx0XHRcdGNvbnN0IHRpdGxlS2V5ID0gZmlsZU9wcy5nZXRUaXRsZUtleSh0eXBlKTtcclxuXHJcblx0XHRcdFx0XHRpZiAoIWNhY2hlPy5mcm9udG1hdHRlciB8fCAhKHRpdGxlS2V5IGluIGNhY2hlLmZyb250bWF0dGVyKSkge1xyXG5cdFx0XHRcdFx0XHRuZXcgTm90aWNlKGBDYW5ub3QgcmVuYW1lOiBObyAke3RpdGxlS2V5fSBmb3VuZCBpbiBwcm9wZXJ0aWVzYCk7XHJcblx0XHRcdFx0XHRcdHJldHVybjtcclxuXHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRuZXcgVGl0bGVNb2RhbChwbHVnaW4uYXBwLCBmaWxlLCBwbHVnaW4gYXMgdW5rbm93biBhcyBBc3Ryb0NvbXBvc2VyUGx1Z2luSW50ZXJmYWNlLCB0eXBlLCB0cnVlKS5vcGVuKCk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9LFxyXG5cdFx0fSk7XHJcblxyXG5cdFx0Ly8gRE8gTk9UIHJlZ2lzdGVyIHRlcm1pbmFsIG9yIGNvbmZpZyBjb21tYW5kcyBvbiBtb2JpbGUgLSByZXR1cm4gZWFybHlcclxuXHRcdHJldHVybjtcclxuXHR9XHJcblxyXG5cdC8vIERlc2t0b3A6IHJlZ2lzdGVyIGFsbCBjb21tYW5kcyBpbmNsdWRpbmcgdGVybWluYWwgYW5kIGNvbmZpZ1xyXG5cdGNvbnN0IHBsdWdpbkludGVyZmFjZSA9IHBsdWdpbiBhcyB1bmtub3duIGFzIEFzdHJvQ29tcG9zZXJQbHVnaW5JbnRlcmZhY2U7XHJcblxyXG5cclxuXHQvLyBIZWxwZXIgZnVuY3Rpb24gdG8gY2hlY2sgaWYgYSBmaWxlIG1hdGNoZXMgYW55IGNvbmZpZ3VyZWQgY29udGVudCB0eXBlXHJcblx0Ly8gVXNlcyB0aGUgc2FtZSBsb2dpYyBhcyBGaWxlT3BlcmF0aW9ucy5kZXRlcm1pbmVUeXBlKCkgdG8gZW5zdXJlIGNvbnNpc3RlbmN5XHJcblx0Ly8gR2V0cyBmcmVzaCBzZXR0aW5ncyBmcm9tIHBsdWdpbiB0byBlbnN1cmUgd2UgY2hlY2sgYWdhaW5zdCBjdXJyZW50IGNvbnRlbnQgdHlwZXNcclxuXHRmdW5jdGlvbiBoYXNNYXRjaGluZ0NvbnRlbnRUeXBlKGZpbGU6IFRGaWxlLCBzZXR0aW5nczogQXN0cm9Db21wb3NlclNldHRpbmdzKTogYm9vbGVhbiB7XHJcblx0XHQvLyBHZXQgZnJlc2ggc2V0dGluZ3MgZnJvbSBwbHVnaW4gaWYgYXZhaWxhYmxlXHJcblx0XHRjb25zdCBjdXJyZW50U2V0dGluZ3MgPSAocGx1Z2luIGFzIHVua25vd24gYXMgQXN0cm9Db21wb3NlclBsdWdpbkludGVyZmFjZSk/LnNldHRpbmdzIHx8IHNldHRpbmdzO1xyXG5cdFx0Ly8gQ3JlYXRlIGEgdGVtcG9yYXJ5IEZpbGVPcGVyYXRpb25zIHdpdGggZnJlc2ggc2V0dGluZ3NcclxuXHRcdGNvbnN0IHRlbXBGaWxlT3BzID0gbmV3IEZpbGVPcGVyYXRpb25zKHBsdWdpbi5hcHAsIGN1cnJlbnRTZXR0aW5ncywgcGx1Z2luIGFzIHVua25vd24gYXMgQXN0cm9Db21wb3NlclBsdWdpbkludGVyZmFjZSk7XHJcblx0XHRjb25zdCB0eXBlID0gdGVtcEZpbGVPcHMuZGV0ZXJtaW5lVHlwZShmaWxlKTtcclxuXHRcdC8vIElmIGRldGVybWluZVR5cGUgcmV0dXJucyBcIm5vdGVcIiwgaXQgbWVhbnMgbm8gY29udGVudCB0eXBlIG1hdGNoZWRcclxuXHRcdGlmICh0eXBlID09PSBcIm5vdGVcIikge1xyXG5cdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHR9XHJcblx0XHQvLyBDaGVjayBpZiB0aGUgbWF0Y2hlZCBjb250ZW50IHR5cGUgaXMgZW5hYmxlZFxyXG5cdFx0Y29uc3QgY29udGVudFR5cGUgPSB0ZW1wRmlsZU9wcy5nZXRDb250ZW50VHlwZSh0eXBlKTtcclxuXHRcdHJldHVybiBjb250ZW50VHlwZSAhPT0gbnVsbCAmJiBjb250ZW50VHlwZS5lbmFibGVkO1xyXG5cdH1cclxuXHJcblx0Ly8gU3RhbmRhcmRpemUgUHJvcGVydGllcyBjb21tYW5kXHJcblx0cGx1Z2luLmFkZENvbW1hbmQoe1xyXG5cdFx0aWQ6IFwic3RhbmRhcmRpemUtcHJvcGVydGllc1wiLFxyXG5cdFx0bmFtZTogXCJTdGFuZGFyZGl6ZSBwcm9wZXJ0aWVzXCIsXHJcblx0XHRpY29uOiBcImZpbGUtY2hlY2tcIixcclxuXHRcdGVkaXRvckNhbGxiYWNrOiAoZWRpdG9yOiBFZGl0b3IsIGN0eDogTWFya2Rvd25WaWV3IHwgTWFya2Rvd25GaWxlSW5mbykgPT4ge1xyXG5cdFx0XHRjb25zdCBmaWxlID0gY3R4IGluc3RhbmNlb2YgTWFya2Rvd25WaWV3ID8gY3R4LmZpbGUgOiBjdHguZmlsZTtcclxuXHRcdFx0aWYgKGZpbGUgaW5zdGFuY2VvZiBURmlsZSkge1xyXG5cdFx0XHRcdHZvaWQgc3RhbmRhcmRpemVQcm9wZXJ0aWVzKHBsdWdpbi5hcHAsIHNldHRpbmdzLCBmaWxlLCBwbHVnaW4gYXMgdW5rbm93biBhcyBBc3Ryb0NvbXBvc2VyUGx1Z2luSW50ZXJmYWNlLCBlZGl0b3IpO1xyXG5cdFx0XHR9XHJcblx0XHR9LFxyXG5cdH0pO1xyXG5cclxuXHQvLyBDb252ZXJ0IFdpa2lsaW5rcyBjb21tYW5kXHJcblx0cGx1Z2luLmFkZENvbW1hbmQoe1xyXG5cdFx0aWQ6IFwiY29udmVydC13aWtpbGlua3MtYXN0cm9cIixcclxuXHRcdG5hbWU6IFwiQ29udmVydCBpbnRlcm5hbCBsaW5rcyBmb3IgYXN0cm9cIixcclxuXHRcdGljb246IFwibGluay0yXCIsXHJcblx0XHRlZGl0b3JDYWxsYmFjazogKGVkaXRvcjogRWRpdG9yLCBjdHg6IE1hcmtkb3duVmlldyB8IE1hcmtkb3duRmlsZUluZm8pID0+IHtcclxuXHRcdFx0Y29uc3QgZmlsZSA9IGN0eCBpbnN0YW5jZW9mIE1hcmtkb3duVmlldyA/IGN0eC5maWxlIDogY3R4LmZpbGU7XHJcblx0XHRcdGlmIChmaWxlIGluc3RhbmNlb2YgVEZpbGUpIHtcclxuXHRcdFx0XHQvLyBHZXQgZnJlc2ggc2V0dGluZ3MgZnJvbSBwbHVnaW4gYW5kIGNyZWF0ZSBMaW5rQ29udmVydGVyIHdpdGggaXRcclxuXHRcdFx0XHRjb25zdCBjdXJyZW50U2V0dGluZ3MgPSBwbHVnaW5JbnRlcmZhY2Uuc2V0dGluZ3MgfHwgc2V0dGluZ3M7XHJcblx0XHRcdFx0Y29uc3QgY3VycmVudExpbmtDb252ZXJ0ZXIgPSBuZXcgTGlua0NvbnZlcnRlcihjdXJyZW50U2V0dGluZ3MsIHBsdWdpbkludGVyZmFjZSk7XHJcblx0XHRcdFx0Y3VycmVudExpbmtDb252ZXJ0ZXIuY29udmVydFdpa2lsaW5rc0ZvckFzdHJvKGVkaXRvciwgZmlsZSk7XHJcblx0XHRcdH1cclxuXHRcdH0sXHJcblx0fSk7XHJcblxyXG5cdC8vIFJlbmFtZSBDb250ZW50IGNvbW1hbmRcclxuXHRwbHVnaW4uYWRkQ29tbWFuZCh7XHJcblx0XHRpZDogXCJyZW5hbWUtY29udGVudFwiLFxyXG5cdFx0bmFtZTogXCJSZW5hbWUgY3VycmVudCBjb250ZW50XCIsXHJcblx0XHRpY29uOiBcInBlbmNpbFwiLFxyXG5cdFx0ZWRpdG9yQ2FsbGJhY2s6IChlZGl0b3I6IEVkaXRvciwgY3R4OiBNYXJrZG93blZpZXcgfCBNYXJrZG93bkZpbGVJbmZvKSA9PiB7XHJcblx0XHRcdGNvbnN0IGZpbGUgPSBjdHggaW5zdGFuY2VvZiBNYXJrZG93blZpZXcgPyBjdHguZmlsZSA6IGN0eC5maWxlO1xyXG5cdFx0XHRpZiAoZmlsZSBpbnN0YW5jZW9mIFRGaWxlKSB7XHJcblx0XHRcdFx0Ly8gR2V0IGZyZXNoIHNldHRpbmdzIGZyb20gcGx1Z2luXHJcblx0XHRcdFx0Y29uc3QgY3VycmVudFNldHRpbmdzID0gcGx1Z2luSW50ZXJmYWNlLnNldHRpbmdzIHx8IHNldHRpbmdzO1xyXG5cdFx0XHRcdC8vIENyZWF0ZSBGaWxlT3BlcmF0aW9ucyB3aXRoIGZyZXNoIHNldHRpbmdzXHJcblx0XHRcdFx0Y29uc3QgY3VycmVudEZpbGVPcHMgPSBuZXcgRmlsZU9wZXJhdGlvbnMocGx1Z2luLmFwcCwgY3VycmVudFNldHRpbmdzLCBwbHVnaW5JbnRlcmZhY2UpO1xyXG5cclxuXHRcdFx0XHQvLyBDaGVjayBpZiB0aGlzIGZpbGUgbWF0Y2hlcyBhbnkgY29uZmlndXJlZCBjb250ZW50IHR5cGVcclxuXHRcdFx0XHRpZiAoIWhhc01hdGNoaW5nQ29udGVudFR5cGUoZmlsZSwgY3VycmVudFNldHRpbmdzKSkge1xyXG5cdFx0XHRcdFx0bmV3IE5vdGljZShcIkNhbm5vdCByZW5hbWU6IHRoaXMgZmlsZSBpcyBub3QgcGFydCBvZiBhIGNvbmZpZ3VyZWQgY29udGVudCB0eXBlIGZvbGRlci5cIik7XHJcblx0XHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHQvLyBEZXRlcm1pbmUgY29udGVudCB0eXBlIGZyb20gZm9sZGVyIHN0cnVjdHVyZVxyXG5cdFx0XHRcdGNvbnN0IHR5cGUgPSBjdXJyZW50RmlsZU9wcy5kZXRlcm1pbmVUeXBlKGZpbGUpO1xyXG5cclxuXHRcdFx0XHQvLyBBbHdheXMgb3BlbiB0aGUgbW9kYWwgLSBpdCB3aWxsIGhhbmRsZSBmaWxlcyB3aXRob3V0IGZyb250bWF0dGVyIG9yIHRpdGxlIGtleVxyXG5cdFx0XHRcdC8vIElmIHRoZXJlJ3Mgbm8gdGl0bGUgaW4gZnJvbnRtYXR0ZXIsIHRoZSBtb2RhbCB3aWxsIHVzZSB0aGUgZmlsZW5hbWUgYXMgZmFsbGJhY2tcclxuXHRcdFx0XHQvLyBhbmQgdGhlIHJlbmFtZSB3aWxsIHByb2NlZWQgd2l0aCBrZWJhYi1jYXNlIHZlcnNpb24gb2Ygd2hhdCB1c2VyIHR5cGVzXHJcblx0XHRcdFx0bmV3IFRpdGxlTW9kYWwocGx1Z2luLmFwcCwgZmlsZSwgcGx1Z2luSW50ZXJmYWNlLCB0eXBlLCB0cnVlKS5vcGVuKCk7XHJcblx0XHRcdH1cclxuXHRcdH0sXHJcblx0fSk7XHJcblxyXG5cdC8vIE9wZW4gVGVybWluYWwgY29tbWFuZCAoZGVza3RvcCBvbmx5IC0gbm90IGF2YWlsYWJsZSBvbiBtb2JpbGUpXHJcblx0aWYgKCFpc01vYmlsZSkge1xyXG5cdFx0cGx1Z2luLmFkZENvbW1hbmQoe1xyXG5cdFx0XHRpZDogXCJvcGVuLXByb2plY3QtdGVybWluYWxcIixcclxuXHRcdFx0bmFtZTogXCJPcGVuIHByb2plY3QgdGVybWluYWxcIixcclxuXHRcdFx0aWNvbjogXCJ0ZXJtaW5hbC1zcXVhcmVcIixcclxuXHRcdFx0Y2FsbGJhY2s6ICgpID0+IHtcclxuXHRcdFx0XHRjb25zdCBjdXJyZW50U2V0dGluZ3MgPSAocGx1Z2luIGFzIHVua25vd24gYXMgQXN0cm9Db21wb3NlclBsdWdpbkludGVyZmFjZSkuc2V0dGluZ3M7XHJcblx0XHRcdFx0aWYgKCFjdXJyZW50U2V0dGluZ3MuZW5hYmxlT3BlblRlcm1pbmFsQ29tbWFuZCkge1xyXG5cdFx0XHRcdFx0bmV3IE5vdGljZShcIk9wZW4gdGVybWluYWwgY29tbWFuZCBpcyBkaXNhYmxlZC4gRW5hYmxlIGl0IGluIHNldHRpbmdzIHRvIHVzZSB0aGlzIGNvbW1hbmQuXCIpO1xyXG5cdFx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRvcGVuVGVybWluYWxJblByb2plY3RSb290KHBsdWdpbi5hcHAsIGN1cnJlbnRTZXR0aW5ncyk7XHJcblx0XHRcdH0sXHJcblx0XHR9KTtcclxuXHR9XHJcblxyXG5cdC8vIEVkaXQgQ29uZmlnIEZpbGUgY29tbWFuZCAoZGVza3RvcCBvbmx5IC0gbm90IGF2YWlsYWJsZSBvbiBtb2JpbGUpXHJcblx0aWYgKCFpc01vYmlsZSkge1xyXG5cdFx0cGx1Z2luLmFkZENvbW1hbmQoe1xyXG5cdFx0XHRpZDogXCJlZGl0LWFzdHJvLWNvbmZpZ1wiLFxyXG5cdFx0XHRuYW1lOiBcIkVkaXQgYXN0cm8gY29uZmlnXCIsXHJcblx0XHRcdGljb246IFwicm9ja2V0XCIsXHJcblx0XHRcdGNhbGxiYWNrOiBhc3luYyAoKSA9PiB7XHJcblx0XHRcdFx0Y29uc3QgY3VycmVudFNldHRpbmdzID0gKHBsdWdpbiBhcyB1bmtub3duIGFzIEFzdHJvQ29tcG9zZXJQbHVnaW5JbnRlcmZhY2UpLnNldHRpbmdzO1xyXG5cdFx0XHRcdGlmICghY3VycmVudFNldHRpbmdzLmVuYWJsZU9wZW5Db25maWdGaWxlQ29tbWFuZCkge1xyXG5cdFx0XHRcdFx0bmV3IE5vdGljZShcIkVkaXQgY29uZmlnIGZpbGUgY29tbWFuZCBpcyBkaXNhYmxlZC4gRW5hYmxlIGl0IGluIHNldHRpbmdzIHRvIHVzZSB0aGlzIGNvbW1hbmQuXCIpO1xyXG5cdFx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRhd2FpdCBvcGVuQ29uZmlnRmlsZShwbHVnaW4uYXBwLCBjdXJyZW50U2V0dGluZ3MpO1xyXG5cdFx0XHR9LFxyXG5cdFx0fSk7XHJcblx0fVxyXG59XHJcblxyXG5hc3luYyBmdW5jdGlvbiBzdGFuZGFyZGl6ZVByb3BlcnRpZXMoYXBwOiBBcHAsIHNldHRpbmdzOiBBc3Ryb0NvbXBvc2VyU2V0dGluZ3MsIGZpbGU6IFRGaWxlLCBwbHVnaW4/OiBBc3Ryb0NvbXBvc2VyUGx1Z2luSW50ZXJmYWNlLCBlZGl0b3I/OiBFZGl0b3IpOiBQcm9taXNlPHZvaWQ+IHtcclxuXHQvLyBHZXQgZnJlc2ggc2V0dGluZ3MgZnJvbSBwbHVnaW4gaWYgYXZhaWxhYmxlXHJcblx0Y29uc3QgY3VycmVudFNldHRpbmdzID0gcGx1Z2luPy5zZXR0aW5ncyB8fCBzZXR0aW5ncztcclxuXHRjb25zdCB0ZW1wbGF0ZVBhcnNlciA9IG5ldyBUZW1wbGF0ZVBhcnNlcihhcHAsIGN1cnJlbnRTZXR0aW5ncyk7XHJcblx0Y29uc3QgZmlsZU9wcyA9IG5ldyBGaWxlT3BlcmF0aW9ucyhhcHAsIGN1cnJlbnRTZXR0aW5ncywgcGx1Z2luKTtcclxuXHJcblx0Ly8gUHJlc2VydmUgY3Vyc29yIHBvc2l0aW9uIGlmIGVkaXRvciBpcyBwcm92aWRlZFxyXG5cdGxldCBjdXJzb3JQb3NpdGlvbjogeyBsaW5lOiBudW1iZXI7IGNoOiBudW1iZXIgfSB8IG51bGwgPSBudWxsO1xyXG5cdGxldCBvcmlnaW5hbENvbnRlbnQgPSBcIlwiO1xyXG5cdGlmIChlZGl0b3IpIHtcclxuXHRcdGNvbnN0IGN1cnNvciA9IGVkaXRvci5nZXRDdXJzb3IoKTtcclxuXHRcdGN1cnNvclBvc2l0aW9uID0geyBsaW5lOiBjdXJzb3IubGluZSwgY2g6IGN1cnNvci5jaCB9O1xyXG5cdFx0b3JpZ2luYWxDb250ZW50ID0gZWRpdG9yLmdldFZhbHVlKCk7XHJcblx0fVxyXG5cclxuXHQvLyBEZXRlcm1pbmUgY29udGVudCB0eXBlIHVzaW5nIHRoZSBleGlzdGluZyBsb2dpY1xyXG5cdGNvbnN0IHR5cGUgPSBmaWxlT3BzLmRldGVybWluZVR5cGUoZmlsZSk7XHJcblxyXG5cdC8vIENoZWNrIGlmIHRoaXMgZmlsZSBoYXMgYSB2YWxpZCBjb250ZW50IHR5cGUgKG5vdCBqdXN0IFwibm90ZVwiKVxyXG5cdGlmICh0eXBlID09PSBcIm5vdGVcIikge1xyXG5cdFx0bmV3IE5vdGljZShcIk5vIHByb3BlcnRpZXMgdGVtcGxhdGUgc3BlY2lmaWVkIGZvciB0aGlzIGNvbnRlbnQuIFRoaXMgZmlsZSBkb2Vzbid0IG1hdGNoIGFueSBjb25maWd1cmVkIGNvbnRlbnQgdHlwZSBmb2xkZXJzLlwiKTtcclxuXHRcdHJldHVybjtcclxuXHR9XHJcblxyXG5cdGxldCB0ZW1wbGF0ZVN0cmluZzogc3RyaW5nO1xyXG5cclxuXHQvLyBEZXRlcm1pbmUgdGVtcGxhdGUgYmFzZWQgb24gY29udGVudCB0eXBlXHJcblx0aWYgKHR5cGUgPT09IFwibm90ZVwiKSB7XHJcblx0XHRuZXcgTm90aWNlKFwiTm8gcHJvcGVydGllcyB0ZW1wbGF0ZSBzcGVjaWZpZWQgZm9yIHRoaXMgY29udGVudC4gVGhpcyBmaWxlIGRvZXNuJ3QgbWF0Y2ggYW55IGNvbmZpZ3VyZWQgY29udGVudCB0eXBlIGZvbGRlcnMuXCIpO1xyXG5cdFx0cmV0dXJuO1xyXG5cdH1cclxuXHJcblx0Y29uc3QgY29udGVudFR5cGUgPSBmaWxlT3BzLmdldENvbnRlbnRUeXBlKHR5cGUpO1xyXG5cdGlmICghY29udGVudFR5cGUpIHtcclxuXHRcdG5ldyBOb3RpY2UoXCJDb250ZW50IHR5cGUgbm90IGZvdW5kLlwiKTtcclxuXHRcdHJldHVybjtcclxuXHR9XHJcblxyXG5cdHRlbXBsYXRlU3RyaW5nID0gY29udGVudFR5cGUudGVtcGxhdGU7XHJcblxyXG5cdC8vIFdhaXQgYnJpZWZseSB0byBhbGxvdyBlZGl0b3Igc3RhdGUgdG8gc3RhYmlsaXplXHJcblx0YXdhaXQgbmV3IFByb21pc2UocmVzb2x2ZSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIDEwMCkpO1xyXG5cclxuXHQvLyBSZS1yZWFkIGNvbnRlbnQgdG8gZW5zdXJlIGxhdGVzdCBzdGF0ZSBhZnRlciBlZGl0b3IgY2hhbmdlc1xyXG5cdGNvbnN0IGNvbnRlbnQgPSBhd2FpdCBhcHAudmF1bHQucmVhZChmaWxlKTtcclxuXHRjb25zdCB0aXRsZSA9IGZpbGUuYmFzZW5hbWUucmVwbGFjZSgvXl8vLCBcIlwiKTtcclxuXHJcblx0Y29uc3QgcGFyc2VkID0gdGVtcGxhdGVQYXJzZXIucGFyc2VGcm9udG1hdHRlcihjb250ZW50KTtcclxuXHRjb25zdCB7IHRlbXBsYXRlUHJvcHMsIHRlbXBsYXRlVmFsdWVzIH0gPSB0ZW1wbGF0ZVBhcnNlci5wYXJzZVRlbXBsYXRlKHRlbXBsYXRlU3RyaW5nLCB0aXRsZSk7XHJcblxyXG5cdC8vIE1lcmdlIHRlbXBsYXRlIHByb3BlcnRpZXMgd2l0aCBleGlzdGluZyBvbmVzLCBwcmVzZXJ2aW5nIGFsbCBleGlzdGluZ1xyXG5cdGNvbnN0IGZpbmFsUHJvcHM6IFJlY29yZDxzdHJpbmcsIHN0cmluZ1tdPiA9IHsgLi4ucGFyc2VkLnByb3BlcnRpZXMgfTtcclxuXHRjb25zdCBhcnJheUtleXMgPSBuZXcgU2V0PHN0cmluZz4oKTsgLy8gVHJhY2sgd2hpY2gga2V5cyBhcmUgYXJyYXlzXHJcblxyXG5cdC8vIEdlbmVyYXRlIHNsdWcgZnJvbSB0aXRsZSBmb3Igc2x1ZyBwcm9wZXJ0eSBhdXRvLXBvcHVsYXRpb25cclxuXHRjb25zdCBzbHVnID0gdG9LZWJhYkNhc2UodGl0bGUpO1xyXG5cclxuXHRmb3IgKGNvbnN0IGtleSBvZiB0ZW1wbGF0ZVByb3BzKSB7XHJcblx0XHRpZiAoIShrZXkgaW4gcGFyc2VkLnByb3BlcnRpZXMpKSB7XHJcblx0XHRcdC8vIFByb3BlcnR5IGRvZXNuJ3QgZXhpc3QsIGFkZCBpdCBmcm9tIHRlbXBsYXRlXHJcblx0XHRcdGNvbnN0IHRlbXBsYXRlVmFsdWUgPSB0ZW1wbGF0ZVZhbHVlc1trZXldO1xyXG5cdFx0XHRpZiAoQXJyYXkuaXNBcnJheSh0ZW1wbGF0ZVZhbHVlKSkge1xyXG5cdFx0XHRcdGZpbmFsUHJvcHNba2V5XSA9IHRlbXBsYXRlVmFsdWU7XHJcblx0XHRcdFx0YXJyYXlLZXlzLmFkZChrZXkpOyAvLyBNYXJrIGFzIGFycmF5XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0ZmluYWxQcm9wc1trZXldID0gW3RlbXBsYXRlVmFsdWUgfHwgXCJcIl07XHJcblx0XHRcdH1cclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdC8vIFByb3BlcnR5IGV4aXN0cywgY2hlY2sgaWYgaXQncyBhbiBhcnJheSB0eXBlXHJcblx0XHRcdGNvbnN0IHRlbXBsYXRlVmFsdWUgPSB0ZW1wbGF0ZVZhbHVlc1trZXldO1xyXG5cdFx0XHRjb25zdCBpc0FycmF5VmFsdWUgPSBBcnJheS5pc0FycmF5KHRlbXBsYXRlVmFsdWUpO1xyXG5cclxuXHRcdFx0aWYgKGlzQXJyYXlWYWx1ZSkge1xyXG5cdFx0XHRcdC8vIFRoaXMgaXMgYW4gYXJyYXkgcHJvcGVydHkgLSBwcmVzZXJ2ZSBleGlzdGluZyB2YWx1ZXMgYW5kIG1lcmdlIHdpdGggdGVtcGxhdGVcclxuXHRcdFx0XHRjb25zdCBleGlzdGluZ0l0ZW1zID0gcGFyc2VkLnByb3BlcnRpZXNba2V5XSB8fCBbXTtcclxuXHRcdFx0XHRjb25zdCBuZXdJdGVtcyA9IHRlbXBsYXRlVmFsdWUuZmlsdGVyKGl0ZW0gPT4gIWV4aXN0aW5nSXRlbXMuaW5jbHVkZXMoaXRlbSkpO1xyXG5cdFx0XHRcdGZpbmFsUHJvcHNba2V5XSA9IFsuLi5leGlzdGluZ0l0ZW1zLCAuLi5uZXdJdGVtc107XHJcblx0XHRcdFx0YXJyYXlLZXlzLmFkZChrZXkpOyAvLyBNYXJrIGFzIGFycmF5XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0Ly8gRm9yIG5vbi1hcnJheSB2YWx1ZXMsIGNoZWNrIGlmIGl0J3Mgc2x1ZyBhbmQgbmVlZHMgYXV0by1wb3B1bGF0aW9uXHJcblx0XHRcdFx0aWYgKGtleSA9PT0gXCJzbHVnXCIpIHtcclxuXHRcdFx0XHRcdGNvbnN0IGV4aXN0aW5nU2x1ZyA9IHBhcnNlZC5wcm9wZXJ0aWVzW2tleV1bMF0gfHwgXCJcIjtcclxuXHRcdFx0XHRcdC8vIE9ubHkgYXV0by1wb3B1bGF0ZSBpZiBzbHVnIGlzIGVtcHR5IG9yIG1pc3NpbmdcclxuXHRcdFx0XHRcdGlmICghZXhpc3RpbmdTbHVnIHx8IGV4aXN0aW5nU2x1Zy50cmltKCkgPT09IFwiXCIpIHtcclxuXHRcdFx0XHRcdFx0ZmluYWxQcm9wc1trZXldID0gW3NsdWddO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0Ly8gSWYgc2x1ZyBoYXMgYSB2YWx1ZSwgcHJlc2VydmUgaXQgKGRvbid0IG92ZXJ3cml0ZSlcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0Ly8gRm9yIG90aGVyIG5vbi1hcnJheSB2YWx1ZXMsIGtlZXAgZXhpc3RpbmcgdmFsdWUgKGRvbid0IG92ZXJ3cml0ZSlcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0Ly8gQWxzbyBjaGVjayBpZiBzbHVnIHByb3BlcnR5IGV4aXN0cyBpbiBmcm9udG1hdHRlciBidXQgaXMgZW1wdHkgKGV2ZW4gaWYgbm90IGluIHRlbXBsYXRlKVxyXG5cdC8vIE9ubHkgYXV0by1wb3B1bGF0ZSBpZiB0ZW1wbGF0ZSBoYXMge3tzbHVnfX0gcGxhY2Vob2xkZXJcclxuXHRpZiAoXCJzbHVnXCIgaW4gcGFyc2VkLnByb3BlcnRpZXMgJiYgdGVtcGxhdGVTdHJpbmcuaW5jbHVkZXMoXCJ7e3NsdWd9fVwiKSkge1xyXG5cdFx0Y29uc3QgZXhpc3RpbmdTbHVnID0gcGFyc2VkLnByb3BlcnRpZXNbXCJzbHVnXCJdWzBdIHx8IFwiXCI7XHJcblx0XHRpZiAoIWV4aXN0aW5nU2x1ZyB8fCBleGlzdGluZ1NsdWcudHJpbSgpID09PSBcIlwiKSB7XHJcblx0XHRcdC8vIFNsdWcgZXhpc3RzIGJ1dCBpcyBlbXB0eSwgYW5kIHRlbXBsYXRlIGhhcyB7e3NsdWd9fSAtIGF1dG8tcG9wdWxhdGUgaXRcclxuXHRcdFx0ZmluYWxQcm9wc1tcInNsdWdcIl0gPSBbc2x1Z107XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHQvLyBBbHNvIGFkZCBhbnkgZXhpc3RpbmcgYXJyYXkga2V5cyB0aGF0IHdlcmVuJ3QgaW4gdGhlIHRlbXBsYXRlXHJcblx0Zm9yIChjb25zdCBrZXkgaW4gcGFyc2VkLnByb3BlcnRpZXMpIHtcclxuXHRcdGlmIChwYXJzZWQucHJvcGVydGllc1trZXldLmxlbmd0aCA+IDEpIHtcclxuXHRcdFx0YXJyYXlLZXlzLmFkZChrZXkpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0Y29uc3QgbmV3Q29udGVudCA9IHRlbXBsYXRlUGFyc2VyLmJ1aWxkRnJvbnRtYXR0ZXJDb250ZW50KGZpbmFsUHJvcHMsIGFycmF5S2V5cykgKyBwYXJzZWQuYm9keUNvbnRlbnQ7XHJcblxyXG5cdGF3YWl0IGFwcC52YXVsdC5tb2RpZnkoZmlsZSwgbmV3Q29udGVudCk7XHJcblxyXG5cdC8vIFJlc3RvcmUgY3Vyc29yIHBvc2l0aW9uIGlmIGVkaXRvciB3YXMgcHJvdmlkZWQgYW5kIGZpbGUgaXMgc3RpbGwgb3BlblxyXG5cdGlmIChlZGl0b3IgJiYgY3Vyc29yUG9zaXRpb24pIHtcclxuXHRcdC8vIFdhaXQgZm9yIE9ic2lkaWFuIHRvIHJlbG9hZCB0aGUgZmlsZSBpbiB0aGUgZWRpdG9yXHJcblx0XHRhd2FpdCBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgNTApKTtcclxuXHJcblx0XHQvLyBUcnkgdG8gZ2V0IHRoZSBhY3RpdmUgZWRpdG9yIGZvciB0aGlzIGZpbGVcclxuXHRcdGNvbnN0IGFjdGl2ZVZpZXcgPSBhcHAud29ya3NwYWNlLmdldEFjdGl2ZVZpZXdPZlR5cGUoTWFya2Rvd25WaWV3KTtcclxuXHRcdGlmIChhY3RpdmVWaWV3ICYmIGFjdGl2ZVZpZXcuZmlsZSA9PT0gZmlsZSAmJiBhY3RpdmVWaWV3LmVkaXRvcikge1xyXG5cdFx0XHRjb25zdCBhY3RpdmVFZGl0b3IgPSBhY3RpdmVWaWV3LmVkaXRvcjtcclxuXHRcdFx0Y29uc3QgbmV3TGluZUNvdW50ID0gbmV3Q29udGVudC5zcGxpdCgnXFxuJykubGVuZ3RoO1xyXG5cdFx0XHRjb25zdCBvcmlnaW5hbExpbmVDb3VudCA9IG9yaWdpbmFsQ29udGVudC5zcGxpdCgnXFxuJykubGVuZ3RoO1xyXG5cclxuXHRcdFx0Ly8gQ2FsY3VsYXRlIG5ldyBjdXJzb3IgcG9zaXRpb25cclxuXHRcdFx0bGV0IG5ld0xpbmUgPSBjdXJzb3JQb3NpdGlvbi5saW5lO1xyXG5cdFx0XHRsZXQgbmV3Q2ggPSBjdXJzb3JQb3NpdGlvbi5jaDtcclxuXHJcblx0XHRcdC8vIEFkanVzdCBmb3IgY29udGVudCBjaGFuZ2VzXHJcblx0XHRcdGlmIChuZXdMaW5lQ291bnQgIT09IG9yaWdpbmFsTGluZUNvdW50KSB7XHJcblx0XHRcdFx0Ly8gSWYgbGluZXMgd2VyZSBhZGRlZC9yZW1vdmVkLCBhZGp1c3QgbGluZSBudW1iZXJcclxuXHRcdFx0XHRpZiAobmV3TGluZSA+PSBuZXdMaW5lQ291bnQpIHtcclxuXHRcdFx0XHRcdG5ld0xpbmUgPSBNYXRoLm1heCgwLCBuZXdMaW5lQ291bnQgLSAxKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdC8vIEFkanVzdCBjb2x1bW4gcG9zaXRpb24gaWYgbGluZSBsZW5ndGggY2hhbmdlZFxyXG5cdFx0XHRjb25zdCBuZXdMaW5lTGVuZ3RoID0gbmV3Q29udGVudC5zcGxpdCgnXFxuJylbbmV3TGluZV0/Lmxlbmd0aCB8fCAwO1xyXG5cdFx0XHRpZiAobmV3Q2ggPiBuZXdMaW5lTGVuZ3RoKSB7XHJcblx0XHRcdFx0bmV3Q2ggPSBNYXRoLm1heCgwLCBuZXdMaW5lTGVuZ3RoKTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Ly8gUmVzdG9yZSBjdXJzb3IgcG9zaXRpb25cclxuXHRcdFx0YWN0aXZlRWRpdG9yLnNldEN1cnNvcih7IGxpbmU6IG5ld0xpbmUsIGNoOiBuZXdDaCB9KTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdG5ldyBOb3RpY2UoXCJQcm9wZXJ0aWVzIHN0YW5kYXJkaXplZCB1c2luZyB0ZW1wbGF0ZS5cIik7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBSZW5hbWUgYSBmaWxlIGJ5IHBhdGggKGZvciBwcm9ncmFtbWF0aWMgdXNlLCBlLmcuLCBmcm9tIG90aGVyIHBsdWdpbnMpXHJcbiAqIFRoaXMgYWxsb3dzIHRoZSByZW5hbWUgbW9kYWwgdG8gYXBwZWFyIHdpdGhvdXQgb3BlbmluZyB0aGUgZmlsZSBmaXJzdFxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIHJlbmFtZUNvbnRlbnRCeVBhdGgoXHJcblx0YXBwOiBBcHAsXHJcblx0ZmlsZVBhdGg6IHN0cmluZyxcclxuXHRzZXR0aW5nczogQXN0cm9Db21wb3NlclNldHRpbmdzLFxyXG5cdHBsdWdpbjogQXN0cm9Db21wb3NlclBsdWdpbkludGVyZmFjZVxyXG4pOiB2b2lkIHtcclxuXHRjb25zdCBmaWxlID0gYXBwLnZhdWx0LmdldEFic3RyYWN0RmlsZUJ5UGF0aChmaWxlUGF0aCk7XHJcblx0aWYgKCEoZmlsZSBpbnN0YW5jZW9mIFRGaWxlKSkge1xyXG5cdFx0bmV3IE5vdGljZShgRmlsZSBub3QgZm91bmQ6ICR7ZmlsZVBhdGh9YCk7XHJcblx0XHRyZXR1cm47XHJcblx0fVxyXG5cclxuXHRjb25zdCBmaWxlT3BzID0gbmV3IEZpbGVPcGVyYXRpb25zKGFwcCwgc2V0dGluZ3MsIHBsdWdpbik7XHJcblxyXG5cdC8vIEhlbHBlciBmdW5jdGlvbiB0byBjaGVjayBpZiBmaWxlIG1hdGNoZXMgY29udGVudCB0eXBlXHJcblx0Ly8gVXNlcyB0aGUgc2FtZSBsb2dpYyBhcyBGaWxlT3BlcmF0aW9ucy5kZXRlcm1pbmVUeXBlKCkgdG8gZW5zdXJlIGNvbnNpc3RlbmN5XHJcblx0ZnVuY3Rpb24gaGFzTWF0Y2hpbmdDb250ZW50VHlwZShmaWxlOiBURmlsZSwgc2V0dGluZ3M6IEFzdHJvQ29tcG9zZXJTZXR0aW5ncyk6IGJvb2xlYW4ge1xyXG5cdFx0Y29uc3QgdHlwZSA9IGZpbGVPcHMuZGV0ZXJtaW5lVHlwZShmaWxlKTtcclxuXHRcdC8vIElmIGRldGVybWluZVR5cGUgcmV0dXJucyBcIm5vdGVcIiwgaXQgbWVhbnMgbm8gY29udGVudCB0eXBlIG1hdGNoZWRcclxuXHRcdGlmICh0eXBlID09PSBcIm5vdGVcIikge1xyXG5cdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHR9XHJcblx0XHQvLyBDaGVjayBpZiB0aGUgbWF0Y2hlZCBjb250ZW50IHR5cGUgaXMgZW5hYmxlZFxyXG5cdFx0Y29uc3QgY29udGVudFR5cGUgPSBmaWxlT3BzLmdldENvbnRlbnRUeXBlKHR5cGUpO1xyXG5cdFx0cmV0dXJuIGNvbnRlbnRUeXBlICE9PSBudWxsICYmIGNvbnRlbnRUeXBlLmVuYWJsZWQ7XHJcblx0fVxyXG5cclxuXHRpZiAoIWhhc01hdGNoaW5nQ29udGVudFR5cGUoZmlsZSwgc2V0dGluZ3MpKSB7XHJcblx0XHRuZXcgTm90aWNlKFwiQ2Fubm90IHJlbmFtZTogdGhpcyBmaWxlIGlzIG5vdCBwYXJ0IG9mIGEgY29uZmlndXJlZCBjb250ZW50IHR5cGUgZm9sZGVyLlwiKTtcclxuXHRcdHJldHVybjtcclxuXHR9XHJcblxyXG5cdGNvbnN0IHR5cGUgPSBmaWxlT3BzLmRldGVybWluZVR5cGUoZmlsZSk7XHJcblxyXG5cdC8vIEFsd2F5cyBvcGVuIHRoZSBtb2RhbCAtIGl0IHdpbGwgaGFuZGxlIGZpbGVzIHdpdGhvdXQgZnJvbnRtYXR0ZXIgb3IgdGl0bGUga2V5XHJcblx0Ly8gSWYgdGhlcmUncyBubyB0aXRsZSBpbiBmcm9udG1hdHRlciwgdGhlIG1vZGFsIHdpbGwgdXNlIHRoZSBmaWxlbmFtZSBhcyBmYWxsYmFja1xyXG5cdC8vIGFuZCB0aGUgcmVuYW1lIHdpbGwgcHJvY2VlZCB3aXRoIGtlYmFiLWNhc2UgdmVyc2lvbiBvZiB3aGF0IHVzZXIgdHlwZXNcclxuXHRuZXcgVGl0bGVNb2RhbChhcHAsIGZpbGUsIHBsdWdpbiwgdHlwZSwgdHJ1ZSkub3BlbigpO1xyXG59XHJcblxyXG4vKipcclxuICogUmVnaXN0ZXIgY29tbWFuZHMgZm9yIGVhY2ggZW5hYmxlZCBjb250ZW50IHR5cGVcclxuICogRWFjaCBjb21tYW5kIGNyZWF0ZXMgYSBuZXcgZmlsZSBpbiB0aGUgY29udGVudCB0eXBlJ3MgZm9sZGVyIGFuZCBvcGVucyB0aGUgVGl0bGVNb2RhbFxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIHJlZ2lzdGVyQ29udGVudFR5cGVDb21tYW5kcyhwbHVnaW46IFBsdWdpbiwgc2V0dGluZ3M6IEFzdHJvQ29tcG9zZXJTZXR0aW5ncyk6IHZvaWQge1xyXG5cdGNvbnN0IHBsdWdpbkludGVyZmFjZSA9IHBsdWdpbiBhcyB1bmtub3duIGFzIEFzdHJvQ29tcG9zZXJQbHVnaW5JbnRlcmZhY2U7XHJcblx0Y29uc3QgY29udGVudFR5cGVzID0gc2V0dGluZ3MuY29udGVudFR5cGVzIHx8IFtdO1xyXG5cclxuXHQvLyBSZWdpc3RlciBhIGNvbW1hbmQgZm9yIGVhY2ggZW5hYmxlZCBjb250ZW50IHR5cGVcclxuXHRmb3IgKGNvbnN0IGNvbnRlbnRUeXBlIG9mIGNvbnRlbnRUeXBlcykge1xyXG5cdFx0aWYgKCFjb250ZW50VHlwZS5lbmFibGVkKSB7XHJcblx0XHRcdGNvbnRpbnVlOyAvLyBTa2lwIGRpc2FibGVkIGNvbnRlbnQgdHlwZXNcclxuXHRcdH1cclxuXHJcblx0XHRjb25zdCBjb21tYW5kSWQgPSBgY3JlYXRlLWNvbnRlbnQtdHlwZS0ke2NvbnRlbnRUeXBlLmlkfWA7XHJcblx0XHRjb25zdCBjb21tYW5kTmFtZSA9IGBDcmVhdGUgbmV3IGNvbnRlbnQgdHlwZTogJHtjb250ZW50VHlwZS5uYW1lfWA7XHJcblxyXG5cdFx0cGx1Z2luLmFkZENvbW1hbmQoe1xyXG5cdFx0XHRpZDogY29tbWFuZElkLFxyXG5cdFx0XHRuYW1lOiBjb21tYW5kTmFtZSxcclxuXHRcdFx0Y2FsbGJhY2s6IGFzeW5jICgpID0+IHtcclxuXHRcdFx0XHQvLyBEZXRlcm1pbmUgdGFyZ2V0IGZvbGRlciBmcm9tIGNvbnRlbnQgdHlwZSAob3IgdmF1bHQgcm9vdCBpZiBibGFuaylcclxuXHRcdFx0XHRsZXQgdGFyZ2V0Rm9sZGVyID0gY29udGVudFR5cGUuZm9sZGVyIHx8IFwiXCI7XHJcblxyXG5cdFx0XHRcdC8vIENyZWF0ZSBmb2xkZXIgaWYgaXQgZG9lc24ndCBleGlzdCBhbmQgaXMgc3BlY2lmaWVkXHJcblx0XHRcdFx0aWYgKHRhcmdldEZvbGRlciAmJiB0YXJnZXRGb2xkZXIudHJpbSgpICE9PSBcIlwiKSB7XHJcblx0XHRcdFx0XHRjb25zdCBmb2xkZXIgPSBwbHVnaW4uYXBwLnZhdWx0LmdldEFic3RyYWN0RmlsZUJ5UGF0aCh0YXJnZXRGb2xkZXIpO1xyXG5cdFx0XHRcdFx0aWYgKCEoZm9sZGVyIGluc3RhbmNlb2YgVEZvbGRlcikpIHtcclxuXHRcdFx0XHRcdFx0dHJ5IHtcclxuXHRcdFx0XHRcdFx0XHRhd2FpdCBwbHVnaW4uYXBwLnZhdWx0LmNyZWF0ZUZvbGRlcih0YXJnZXRGb2xkZXIpO1xyXG5cdFx0XHRcdFx0XHR9IGNhdGNoIChlcnJvcikge1xyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IGVycm9yTWVzc2FnZSA9IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogU3RyaW5nKGVycm9yKTtcclxuXHRcdFx0XHRcdFx0XHRuZXcgTm90aWNlKGBGYWlsZWQgdG8gY3JlYXRlIGZvbGRlcjogJHtlcnJvck1lc3NhZ2V9YCk7XHJcblx0XHRcdFx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHQvLyBDcmVhdGUgYSB0ZW1wb3JhcnkgZmlsZSBpbiB0aGUgdGFyZ2V0IGZvbGRlclxyXG5cdFx0XHRcdGNvbnN0IHRlbXBGaWxlTmFtZSA9IFwiVW50aXRsZWQubWRcIjtcclxuXHRcdFx0XHRjb25zdCBmaWxlUGF0aCA9IHRhcmdldEZvbGRlciA/IGAke3RhcmdldEZvbGRlcn0vJHt0ZW1wRmlsZU5hbWV9YCA6IHRlbXBGaWxlTmFtZTtcclxuXHJcblx0XHRcdFx0Ly8gQ2hlY2sgaWYgZmlsZSBhbHJlYWR5IGV4aXN0cyAodW5saWtlbHkgYnV0IHBvc3NpYmxlKVxyXG5cdFx0XHRcdGNvbnN0IGV4aXN0aW5nRmlsZSA9IHBsdWdpbi5hcHAudmF1bHQuZ2V0QWJzdHJhY3RGaWxlQnlQYXRoKGZpbGVQYXRoKTtcclxuXHRcdFx0XHRpZiAoZXhpc3RpbmdGaWxlIGluc3RhbmNlb2YgVEZpbGUpIHtcclxuXHRcdFx0XHRcdC8vIElmIGZpbGUgZXhpc3RzLCB1c2UgaXQgZGlyZWN0bHlcclxuXHRcdFx0XHRcdG5ldyBUaXRsZU1vZGFsKHBsdWdpbi5hcHAsIGV4aXN0aW5nRmlsZSwgcGx1Z2luSW50ZXJmYWNlLCBjb250ZW50VHlwZS5pZCwgZmFsc2UsIHRydWUpLm9wZW4oKTtcclxuXHRcdFx0XHRcdHJldHVybjtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdC8vIE1hcmsgdGhhdCB0aGlzIGZpbGUgd2lsbCBiZSBjcmVhdGVkIGJ5IHRoZSBwbHVnaW5cclxuXHRcdFx0XHQvLyBUaGlzIHByZXZlbnRzIHRoZSBjcmVhdGUgZXZlbnQgZnJvbSB0cmlnZ2VyaW5nIGFub3RoZXIgbW9kYWxcclxuXHRcdFx0XHRpZiAocGx1Z2luSW50ZXJmYWNlICYmICdwbHVnaW5DcmVhdGVkRmlsZXMnIGluIHBsdWdpbkludGVyZmFjZSkge1xyXG5cdFx0XHRcdFx0cGx1Z2luSW50ZXJmYWNlLnBsdWdpbkNyZWF0ZWRGaWxlcy5zZXQoZmlsZVBhdGgsIERhdGUubm93KCkpO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0dHJ5IHtcclxuXHRcdFx0XHRcdC8vIENyZWF0ZSB0aGUgdGVtcG9yYXJ5IGZpbGVcclxuXHRcdFx0XHRcdGNvbnN0IHRlbXBGaWxlID0gYXdhaXQgcGx1Z2luLmFwcC52YXVsdC5jcmVhdGUoZmlsZVBhdGgsIFwiXCIpO1xyXG5cclxuXHRcdFx0XHRcdC8vIE9wZW4gdGhlIFRpdGxlTW9kYWwgd2l0aCB0aGUgZmlsZSwgY29udGVudCB0eXBlIElELCBhbmQgaXNOZXdOb3RlIGZsYWdcclxuXHRcdFx0XHRcdG5ldyBUaXRsZU1vZGFsKHBsdWdpbi5hcHAsIHRlbXBGaWxlLCBwbHVnaW5JbnRlcmZhY2UsIGNvbnRlbnRUeXBlLmlkLCBmYWxzZSwgdHJ1ZSkub3BlbigpO1xyXG5cdFx0XHRcdH0gY2F0Y2ggKGVycm9yKSB7XHJcblx0XHRcdFx0XHRjb25zdCBlcnJvck1lc3NhZ2UgPSBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvcik7XHJcblx0XHRcdFx0XHRuZXcgTm90aWNlKGBGYWlsZWQgdG8gY3JlYXRlIGZpbGU6ICR7ZXJyb3JNZXNzYWdlfWApO1xyXG5cclxuXHRcdFx0XHRcdC8vIENsZWFuIHVwIHRoZSB0cmFja2luZyBpZiBmaWxlIGNyZWF0aW9uIGZhaWxlZFxyXG5cdFx0XHRcdFx0aWYgKHBsdWdpbkludGVyZmFjZSAmJiAncGx1Z2luQ3JlYXRlZEZpbGVzJyBpbiBwbHVnaW5JbnRlcmZhY2UpIHtcclxuXHRcdFx0XHRcdFx0cGx1Z2luSW50ZXJmYWNlLnBsdWdpbkNyZWF0ZWRGaWxlcy5kZWxldGUoZmlsZVBhdGgpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSxcclxuXHRcdH0pO1xyXG5cdH1cclxufVxyXG5cclxuLyoqXHJcbiAqIERlYnVnIGxvZ2dlciBmb3IgdGVybWluYWwgY29tbWFuZHNcclxuICovXHJcbmNvbnN0IHRlcm1pbmFsTG9nZ2VyID0ge1xyXG5cdGVuYWJsZWQ6IGZhbHNlLFxyXG5cdHNldEVuYWJsZWQodmFsdWU6IGJvb2xlYW4pIHtcclxuXHRcdHRoaXMuZW5hYmxlZCA9IHZhbHVlO1xyXG5cdH0sXHJcblx0bG9nKC4uLmFyZ3M6IHVua25vd25bXSkge1xyXG5cdFx0aWYgKHRoaXMuZW5hYmxlZCkge1xyXG5cdFx0XHRjb25zb2xlLmRlYnVnKFwiW2FzdHJvLWNvbXBvc2VyOnRlcm1pbmFsXVwiLCAuLi5hcmdzKTtcclxuXHRcdH1cclxuXHR9XHJcbn07XHJcblxyXG4vKipcclxuICogR2V0IGRlZmF1bHQgdGVybWluYWwgYXBwbGljYXRpb24gbmFtZSBiYXNlZCBvbiBwbGF0Zm9ybVxyXG4gKi9cclxuZnVuY3Rpb24gZ2V0RGVmYXVsdFRlcm1pbmFsQXBwKCk6IHN0cmluZyB7XHJcblx0aWYgKCFQbGF0Zm9ybS5pc0Rlc2t0b3BBcHApIHtcclxuXHRcdHJldHVybiBcIlwiO1xyXG5cdH1cclxuXHRpZiAoUGxhdGZvcm0uaXNNYWNPUykge1xyXG5cdFx0cmV0dXJuIFwiVGVybWluYWxcIjtcclxuXHR9XHJcblx0aWYgKFBsYXRmb3JtLmlzV2luKSB7XHJcblx0XHR0cnkge1xyXG5cdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLW5vZGVqcy1tb2R1bGVzLCBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tcmVxdWlyZS1pbXBvcnRzLCBuby11bmRlZiAtLSBSZXF1aXJlZCBmb3IgT1MgcmVsZWFzZSBkZXRlY3Rpb24gb24gZGVza3RvcFxyXG5cdFx0XHRjb25zdCBvcyA9IHJlcXVpcmUoJ29zJykgYXMgeyByZWxlYXNlOiAoKSA9PiBzdHJpbmcgfTtcclxuXHRcdFx0Y29uc3QgcmVsZWFzZSA9IG9zLnJlbGVhc2UoKTtcclxuXHRcdFx0Ly8gV2luZG93cyAxMSBidWlsZCBudW1iZXJzIHN0YXJ0IGF0IDIyMDAwXHJcblx0XHRcdGNvbnN0IG1ham9yVmVyc2lvbiA9IHBhcnNlSW50KHJlbGVhc2Uuc3BsaXQoJy4nKVswXSk7XHJcblx0XHRcdGNvbnN0IGJ1aWxkTnVtYmVyID0gcGFyc2VJbnQocmVsZWFzZS5zcGxpdCgnLicpWzJdKTtcclxuXHJcblx0XHRcdGlmIChtYWpvclZlcnNpb24gPiAxMCB8fCAobWFqb3JWZXJzaW9uID09PSAxMCAmJiBidWlsZE51bWJlciA+PSAyMjAwMCkpIHtcclxuXHRcdFx0XHRyZXR1cm4gXCJ3dC5leGVcIjtcclxuXHRcdFx0fVxyXG5cdFx0fSBjYXRjaCB7XHJcblx0XHRcdC8vIEZhbGxiYWNrIHRvIGNtZC5leGUgaWYgT1MgZGV0ZWN0aW9uIGZhaWxzXHJcblx0XHR9XHJcblx0XHRyZXR1cm4gXCJjbWQuZXhlXCI7XHJcblx0fVxyXG5cdGlmIChQbGF0Zm9ybS5pc0xpbnV4KSB7XHJcblx0XHRyZXR1cm4gXCJnbm9tZS10ZXJtaW5hbFwiO1xyXG5cdH1cclxuXHRyZXR1cm4gXCJcIjtcclxufVxyXG5cclxuLyoqXHJcbiAqIFNhbml0aXplIHRlcm1pbmFsIGFwcGxpY2F0aW9uIG5hbWUgKHRyaW0gd2hpdGVzcGFjZSlcclxuICovXHJcbmZ1bmN0aW9uIHNhbml0aXplVGVybWluYWxBcHAodmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XHJcblx0cmV0dXJuIHZhbHVlLnRyaW0oKTtcclxufVxyXG5cclxuLyoqXHJcbiAqIEVzY2FwZSBkb3VibGUgcXVvdGVzIGluIGEgc3RyaW5nXHJcbiAqL1xyXG5mdW5jdGlvbiBlc2NhcGVEb3VibGVRdW90ZXModmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XHJcblx0cmV0dXJuIHZhbHVlLnJlcGxhY2UoL1wiL2csICdcXFxcXCInKTtcclxufVxyXG5cclxuLyoqXHJcbiAqIE9wZW4gdGVybWluYWwgaW4gcHJvamVjdCByb290IGRpcmVjdG9yeVxyXG4gKiBFeHBvcnRlZCBmb3IgdXNlIGJ5IHJpYmJvbiBpY29uc1xyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIG9wZW5UZXJtaW5hbEluUHJvamVjdFJvb3QoYXBwOiBBcHAsIHNldHRpbmdzOiBBc3Ryb0NvbXBvc2VyU2V0dGluZ3MpOiB2b2lkIHtcclxuXHQvLyBVcGRhdGUgbG9nZ2VyIHN0YXRlXHJcblx0dGVybWluYWxMb2dnZXIuc2V0RW5hYmxlZChzZXR0aW5ncy5lbmFibGVUZXJtaW5hbERlYnVnTG9nZ2luZyk7XHJcblxyXG5cdHRyeSB7XHJcblx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLW5vZGVqcy1tb2R1bGVzLCBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tcmVxdWlyZS1pbXBvcnRzLCBuby11bmRlZiAtLSBjaGlsZF9wcm9jZXNzIGlzIHJlcXVpcmVkIGZvciB0ZXJtaW5hbCBjb21tYW5kcyBvbiBkZXNrdG9wXHJcblx0XHRjb25zdCB7IGV4ZWMgfSA9IHJlcXVpcmUoJ2NoaWxkX3Byb2Nlc3MnKSBhcyB7IGV4ZWM6IChjb21tYW5kOiBzdHJpbmcsIGNhbGxiYWNrOiAoZXJyb3I6IHsgbWVzc2FnZT86IHN0cmluZyB9IHwgbnVsbCkgPT4gdm9pZCkgPT4gdm9pZCB9O1xyXG5cdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby1ub2RlanMtbW9kdWxlcywgQHR5cGVzY3JpcHQtZXNsaW50L25vLXJlcXVpcmUtaW1wb3J0cywgbm8tdW5kZWYgLS0gcGF0aCBpcyByZXF1aXJlZCBmb3IgcmVzb2x2aW5nIHBhdGhzIG9uIGRlc2t0b3BcclxuXHRcdGNvbnN0IHBhdGggPSByZXF1aXJlKCdwYXRoJykgYXMgeyByZXNvbHZlOiAoLi4uYXJnczogc3RyaW5nW10pID0+IHN0cmluZyB9O1xyXG5cdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby1ub2RlanMtbW9kdWxlcywgQHR5cGVzY3JpcHQtZXNsaW50L25vLXJlcXVpcmUtaW1wb3J0cywgbm8tdW5kZWYgLS0gZnMgaXMgcmVxdWlyZWQgZm9yIHZlcmlmeWluZyBwYXRocyBvbiBkZXNrdG9wXHJcblx0XHRjb25zdCBmcyA9IHJlcXVpcmUoJ2ZzJykgYXMgeyBleGlzdHNTeW5jOiAocGF0aDogc3RyaW5nKSA9PiBib29sZWFuIH07XHJcblxyXG5cdFx0Ly8gR2V0IHRoZSBhY3R1YWwgdmF1bHQgcGF0aCBzdHJpbmcgZnJvbSB0aGUgYWRhcHRlclxyXG5cdFx0Y29uc3QgYWRhcHRlciA9IGFwcC52YXVsdC5hZGFwdGVyIGFzIHVua25vd24gYXMgeyBiYXNlUGF0aD86IHN0cmluZzsgcGF0aD86IHN0cmluZyB9O1xyXG5cdFx0Y29uc3QgdmF1bHRQYXRoID0gYWRhcHRlci5iYXNlUGF0aCB8fCBhZGFwdGVyLnBhdGg7XHJcblx0XHRjb25zdCB2YXVsdFBhdGhTdHJpbmcgPSB0eXBlb2YgdmF1bHRQYXRoID09PSAnc3RyaW5nJyA/IHZhdWx0UGF0aCA6IFN0cmluZyh2YXVsdFBhdGgpO1xyXG5cclxuXHRcdC8vIFJlc29sdmUgcHJvamVjdCByb290IHBhdGhcclxuXHRcdGxldCBwcm9qZWN0UGF0aDogc3RyaW5nO1xyXG5cdFx0aWYgKHNldHRpbmdzLnRlcm1pbmFsUHJvamVjdFJvb3RQYXRoICYmIHNldHRpbmdzLnRlcm1pbmFsUHJvamVjdFJvb3RQYXRoLnRyaW0oKSkge1xyXG5cdFx0XHQvLyBVc2UgY3VzdG9tIHBhdGggcmVsYXRpdmUgdG8gdmF1bHRcclxuXHRcdFx0cHJvamVjdFBhdGggPSBwYXRoLnJlc29sdmUodmF1bHRQYXRoU3RyaW5nLCBzZXR0aW5ncy50ZXJtaW5hbFByb2plY3RSb290UGF0aCk7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHQvLyBEZWZhdWx0OiB2YXVsdCBmb2xkZXIgaXRzZWxmXHJcblx0XHRcdHByb2plY3RQYXRoID0gdmF1bHRQYXRoU3RyaW5nO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8vIFZlcmlmeSB0aGUgcGF0aCBleGlzdHNcclxuXHRcdGlmICghZnMuZXhpc3RzU3luYyhwcm9qZWN0UGF0aCkpIHtcclxuXHRcdFx0bmV3IE5vdGljZShgUHJvamVjdCByb290IGRpcmVjdG9yeSBub3QgZm91bmQgYXQ6ICR7cHJvamVjdFBhdGh9YCk7XHJcblx0XHRcdHJldHVybjtcclxuXHRcdH1cclxuXHJcblx0XHQvLyBHZXQgdGVybWluYWwgYXBwbGljYXRpb24gbmFtZSAodXNlIGNvbmZpZ3VyZWQgb3IgZGVmYXVsdClcclxuXHRcdGNvbnN0IGNvbmZpZ3VyZWRBcHAgPSBzYW5pdGl6ZVRlcm1pbmFsQXBwKHNldHRpbmdzLnRlcm1pbmFsQXBwbGljYXRpb25OYW1lIHx8IFwiXCIpO1xyXG5cdFx0Y29uc3QgdGVybWluYWxBcHAgPSBjb25maWd1cmVkQXBwIHx8IGdldERlZmF1bHRUZXJtaW5hbEFwcCgpO1xyXG5cclxuXHRcdC8vIFdhcm4gaWYgdGVybWluYWwgYXBwIG5hbWUgaXMgZW1wdHkgKGJ1dCBzdGlsbCB0cnkgdG8gdXNlIGRlZmF1bHRzKVxyXG5cdFx0aWYgKCFjb25maWd1cmVkQXBwICYmICF0ZXJtaW5hbEFwcCkge1xyXG5cdFx0XHRuZXcgTm90aWNlKFwiVGVybWluYWwgYXBwbGljYXRpb24gbmFtZSBpcyBlbXB0eS4gUGxlYXNlIGNvbmZpZ3VyZSBpdCBpbiBzZXR0aW5ncy5cIik7XHJcblx0XHRcdHJldHVybjtcclxuXHRcdH1cclxuXHJcblx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5kZWYgLS0gcHJvY2VzcyBpcyBhIGdsb2JhbCBpbiB0aGUgRWxlY3Ryb24gcmVuZGVyZXIgcHJvY2Vzc1xyXG5cdFx0Y29uc3QgcGxhdGZvcm0gPSBwcm9jZXNzLnBsYXRmb3JtO1xyXG5cdFx0dGVybWluYWxMb2dnZXIubG9nKFwiT3BlbmluZyB0ZXJtaW5hbFwiLCB7IHBsYXRmb3JtLCB0ZXJtaW5hbEFwcCwgcHJvamVjdFBhdGggfSk7XHJcblxyXG5cdFx0aWYgKHBsYXRmb3JtID09PSAnd2luMzInKSB7XHJcblx0XHRcdC8vIFdpbmRvd3M6IFVzZSBzdGFydCBjb21tYW5kIHdpdGggY29uZmlndXJhYmxlIHRlcm1pbmFsXHJcblx0XHRcdGNvbnN0IGVzY2FwZWRQYXRoID0gcHJvamVjdFBhdGgucmVwbGFjZSgvXCIvZywgJ1wiJyk7XHJcblx0XHRcdGNvbnN0IGxvd2VyQXBwID0gdGVybWluYWxBcHAudG9Mb3dlckNhc2UoKTtcclxuXHJcblx0XHRcdGlmIChsb3dlckFwcCA9PT0gXCJ3dC5leGVcIiB8fCBsb3dlckFwcCA9PT0gXCJ3dFwiIHx8IGxvd2VyQXBwID09PSBcIndpbmRvd3MgdGVybWluYWxcIikge1xyXG5cdFx0XHRcdC8vIFdpbmRvd3MgVGVybWluYWxcclxuXHRcdFx0XHRleGVjKCd3aGVyZSB3dCcsIChlcnJvcjogeyBtZXNzYWdlPzogc3RyaW5nIH0gfCBudWxsKSA9PiB7XHJcblx0XHRcdFx0XHRpZiAoIWVycm9yKSB7XHJcblx0XHRcdFx0XHRcdGNvbnN0IGNvbW1hbmQgPSBgc3RhcnQgXCJcIiB3dC5leGUgLWQgXCIke2VzY2FwZWRQYXRofVwiYDtcclxuXHRcdFx0XHRcdFx0dGVybWluYWxMb2dnZXIubG9nKFwiV2luZG93cyBsYXVuY2ggKHd0KVwiLCB7IGNvbW1hbmQsIHByb2plY3RQYXRoIH0pO1xyXG5cdFx0XHRcdFx0XHRleGVjKGNvbW1hbmQsIChleGVjRXJyb3I6IHsgbWVzc2FnZT86IHN0cmluZyB9IHwgbnVsbCkgPT4ge1xyXG5cdFx0XHRcdFx0XHRcdGlmIChleGVjRXJyb3IpIHtcclxuXHRcdFx0XHRcdFx0XHRcdHRlcm1pbmFsTG9nZ2VyLmxvZyhcIldpbmRvd3MgVGVybWluYWwgZmFpbGVkLCBmYWxsaW5nIGJhY2sgdG8gY21kXCIsIHsgZXJyb3I6IGV4ZWNFcnJvci5tZXNzYWdlIH0pO1xyXG5cdFx0XHRcdFx0XHRcdFx0Ly8gRmFsbGJhY2sgdG8gY21kXHJcblx0XHRcdFx0XHRcdFx0XHRjb25zdCBmYWxsYmFja0NvbW1hbmQgPSBgc3RhcnQgXCJcIiBjbWQuZXhlIC9LIFwiY2QgL2QgXCIke2VzY2FwZWRQYXRofVwiXCJgO1xyXG5cdFx0XHRcdFx0XHRcdFx0ZXhlYyhmYWxsYmFja0NvbW1hbmQsIChjbWRFcnJvcjogeyBtZXNzYWdlPzogc3RyaW5nIH0gfCBudWxsKSA9PiB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdGlmIChjbWRFcnJvcikge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdG5ldyBOb3RpY2UoYEVycm9yIG9wZW5pbmcgdGVybWluYWw6ICR7Y21kRXJyb3IubWVzc2FnZSB8fCAnVW5rbm93biBlcnJvcid9YCk7XHJcblx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHQvLyBXaW5kb3dzIFRlcm1pbmFsIG5vdCBmb3VuZCwgZmFsbGJhY2sgdG8gY21kXHJcblx0XHRcdFx0XHRcdHRlcm1pbmFsTG9nZ2VyLmxvZyhcIldpbmRvd3MgVGVybWluYWwgbm90IGZvdW5kLCB1c2luZyBjbWRcIiwge30pO1xyXG5cdFx0XHRcdFx0XHRjb25zdCBmYWxsYmFja0NvbW1hbmQgPSBgc3RhcnQgXCJcIiBjbWQuZXhlIC9LIFwiY2QgL2QgXCIke2VzY2FwZWRQYXRofVwiXCJgO1xyXG5cdFx0XHRcdFx0XHRleGVjKGZhbGxiYWNrQ29tbWFuZCwgKGNtZEVycm9yOiB7IG1lc3NhZ2U/OiBzdHJpbmcgfSB8IG51bGwpID0+IHtcclxuXHRcdFx0XHRcdFx0XHRpZiAoY21kRXJyb3IpIHtcclxuXHRcdFx0XHRcdFx0XHRcdG5ldyBOb3RpY2UoYEVycm9yIG9wZW5pbmcgdGVybWluYWw6ICR7Y21kRXJyb3IubWVzc2FnZSB8fCAnVW5rbm93biBlcnJvcid9YCk7XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9KTtcclxuXHRcdFx0fSBlbHNlIGlmIChsb3dlckFwcCA9PT0gXCJwb3dlcnNoZWxsXCIgfHwgbG93ZXJBcHAgPT09IFwicG93ZXJzaGVsbC5leGVcIikge1xyXG5cdFx0XHRcdC8vIFBvd2VyU2hlbGxcclxuXHRcdFx0XHRjb25zdCBlc2NhcGVkUGF0aEZvclBTID0gcHJvamVjdFBhdGgucmVwbGFjZSgvJy9nLCBcIicnXCIpO1xyXG5cdFx0XHRcdGNvbnN0IGNvbW1hbmQgPSBgc3RhcnQgXCJcIiBwb3dlcnNoZWxsIC1Ob0V4aXQgLUNvbW1hbmQgXCJTZXQtTG9jYXRpb24gJyR7ZXNjYXBlZFBhdGhGb3JQU30nO1wiYDtcclxuXHRcdFx0XHR0ZXJtaW5hbExvZ2dlci5sb2coXCJXaW5kb3dzIGxhdW5jaCAocG93ZXJzaGVsbClcIiwgeyBjb21tYW5kLCBwcm9qZWN0UGF0aCB9KTtcclxuXHRcdFx0XHRleGVjKGNvbW1hbmQsIChlcnJvcjogeyBtZXNzYWdlPzogc3RyaW5nIH0gfCBudWxsKSA9PiB7XHJcblx0XHRcdFx0XHRpZiAoZXJyb3IpIHtcclxuXHRcdFx0XHRcdFx0bmV3IE5vdGljZShgRXJyb3Igb3BlbmluZyB0ZXJtaW5hbDogJHtlcnJvci5tZXNzYWdlIHx8ICdVbmtub3duIGVycm9yJ31gKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9KTtcclxuXHRcdFx0fSBlbHNlIGlmIChsb3dlckFwcCA9PT0gXCJjbWQuZXhlXCIgfHwgbG93ZXJBcHAgPT09IFwiY21kXCIpIHtcclxuXHRcdFx0XHQvLyBDb21tYW5kIFByb21wdFxyXG5cdFx0XHRcdGNvbnN0IGNvbW1hbmQgPSBgc3RhcnQgXCJcIiBjbWQuZXhlIC9LIFwiY2QgL2QgXCIke2VzY2FwZWRQYXRofVwiXCJgO1xyXG5cdFx0XHRcdHRlcm1pbmFsTG9nZ2VyLmxvZyhcIldpbmRvd3MgbGF1bmNoIChjbWQpXCIsIHsgY29tbWFuZCwgcHJvamVjdFBhdGggfSk7XHJcblx0XHRcdFx0ZXhlYyhjb21tYW5kLCAoZXJyb3I6IHsgbWVzc2FnZT86IHN0cmluZyB9IHwgbnVsbCkgPT4ge1xyXG5cdFx0XHRcdFx0aWYgKGVycm9yKSB7XHJcblx0XHRcdFx0XHRcdG5ldyBOb3RpY2UoYEVycm9yIG9wZW5pbmcgdGVybWluYWw6ICR7ZXJyb3IubWVzc2FnZSB8fCAnVW5rbm93biBlcnJvcid9YCk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0Ly8gR2VuZXJpYyB0ZXJtaW5hbCAtIHRyeSB0byBsYXVuY2ggaXQgZGlyZWN0bHlcclxuXHRcdFx0XHRjb25zdCBjb21tYW5kID0gYHN0YXJ0IFwiXCIgXCIke3Rlcm1pbmFsQXBwfVwiYDtcclxuXHRcdFx0XHR0ZXJtaW5hbExvZ2dlci5sb2coXCJXaW5kb3dzIGxhdW5jaCAoZ2VuZXJpYylcIiwgeyBjb21tYW5kLCB0ZXJtaW5hbEFwcCwgcHJvamVjdFBhdGggfSk7XHJcblx0XHRcdFx0ZXhlYyhjb21tYW5kLCAoZXJyb3I6IHsgbWVzc2FnZT86IHN0cmluZyB9IHwgbnVsbCkgPT4ge1xyXG5cdFx0XHRcdFx0aWYgKGVycm9yKSB7XHJcblx0XHRcdFx0XHRcdC8vIEZhbGxiYWNrIHRvIGNtZCBpZiBnZW5lcmljIGxhdW5jaCBmYWlsc1xyXG5cdFx0XHRcdFx0XHR0ZXJtaW5hbExvZ2dlci5sb2coXCJHZW5lcmljIHRlcm1pbmFsIGZhaWxlZCwgZmFsbGluZyBiYWNrIHRvIGNtZFwiLCB7IGVycm9yOiBlcnJvci5tZXNzYWdlIH0pO1xyXG5cdFx0XHRcdFx0XHRjb25zdCBmYWxsYmFja0NvbW1hbmQgPSBgc3RhcnQgXCJcIiBjbWQuZXhlIC9LIFwiY2QgL2QgXCIke2VzY2FwZWRQYXRofVwiXCJgO1xyXG5cdFx0XHRcdFx0XHRleGVjKGZhbGxiYWNrQ29tbWFuZCwgKGNtZEVycm9yOiB7IG1lc3NhZ2U/OiBzdHJpbmcgfSB8IG51bGwpID0+IHtcclxuXHRcdFx0XHRcdFx0XHRpZiAoY21kRXJyb3IpIHtcclxuXHRcdFx0XHRcdFx0XHRcdG5ldyBOb3RpY2UoYEVycm9yIG9wZW5pbmcgdGVybWluYWw6ICR7Y21kRXJyb3IubWVzc2FnZSB8fCAnVW5rbm93biBlcnJvcid9YCk7XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9KTtcclxuXHRcdFx0fVxyXG5cdFx0fSBlbHNlIGlmIChwbGF0Zm9ybSA9PT0gJ2RhcndpbicpIHtcclxuXHRcdFx0Ly8gbWFjT1M6IFVzZSBvcGVuIC1hIChzaW1wbGVyIHRoYW4gb3Nhc2NyaXB0KVxyXG5cdFx0XHRjb25zdCBlc2NhcGVkQXBwID0gZXNjYXBlRG91YmxlUXVvdGVzKHRlcm1pbmFsQXBwKTtcclxuXHRcdFx0Y29uc3QgZXNjYXBlZFBhdGggPSBlc2NhcGVEb3VibGVRdW90ZXMocHJvamVjdFBhdGgpO1xyXG5cdFx0XHRjb25zdCBjb21tYW5kID0gYG9wZW4gLW5hIFwiJHtlc2NhcGVkQXBwfVwiIFwiJHtlc2NhcGVkUGF0aH1cImA7XHJcblx0XHRcdHRlcm1pbmFsTG9nZ2VyLmxvZyhcIm1hY09TIGxhdW5jaFwiLCB7IGNvbW1hbmQsIHRlcm1pbmFsQXBwLCBwcm9qZWN0UGF0aCB9KTtcclxuXHRcdFx0ZXhlYyhjb21tYW5kLCAoZXJyb3I6IHsgbWVzc2FnZT86IHN0cmluZyB9IHwgbnVsbCkgPT4ge1xyXG5cdFx0XHRcdGlmIChlcnJvcikge1xyXG5cdFx0XHRcdFx0bmV3IE5vdGljZShgRXJyb3Igb3BlbmluZyB0ZXJtaW5hbDogJHtlcnJvci5tZXNzYWdlIHx8ICdVbmtub3duIGVycm9yJ31gKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0pO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0Ly8gTGludXg6IFRyeSBjb25maWd1cmFibGUgdGVybWluYWwgd2l0aCBmYWxsYmFjayBjaGFpblxyXG5cdFx0XHRjb25zdCB0ZXJtaW5hbHMgPSB0ZXJtaW5hbEFwcCA/IFt0ZXJtaW5hbEFwcF0gOiBbXCJnbm9tZS10ZXJtaW5hbFwiLCBcImtvbnNvbGVcIiwgXCJ4dGVybVwiXTtcclxuXHRcdFx0Y29uc3QgcHJvamVjdFBhdGhFc2NhcGVkID0gcHJvamVjdFBhdGgucmVwbGFjZSgvXCIvZywgJ1xcXFxcIicpO1xyXG5cclxuXHRcdFx0Ly8gVHJ5IGVhY2ggdGVybWluYWwgdW50aWwgb25lIHdvcmtzXHJcblx0XHRcdGNvbnN0IHRyeVRlcm1pbmFsID0gKGluZGV4OiBudW1iZXIpID0+IHtcclxuXHRcdFx0XHRpZiAoaW5kZXggPj0gdGVybWluYWxzLmxlbmd0aCkge1xyXG5cdFx0XHRcdFx0bmV3IE5vdGljZSgnTm8gc3VwcG9ydGVkIHRlcm1pbmFsIGZvdW5kLiBQbGVhc2UgaW5zdGFsbCBhIHRlcm1pbmFsIGFwcGxpY2F0aW9uIG9yIGNvbmZpZ3VyZSBvbmUgaW4gc2V0dGluZ3MuJyk7XHJcblx0XHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRjb25zdCBjdXJyZW50VGVybWluYWwgPSB0ZXJtaW5hbHNbaW5kZXhdO1xyXG5cdFx0XHRcdGNvbnN0IHRlcm1pbmFsTmFtZSA9IGN1cnJlbnRUZXJtaW5hbC5zcGxpdCgnICcpWzBdO1xyXG5cclxuXHRcdFx0XHQvLyBDaGVjayBpZiB0ZXJtaW5hbCBleGlzdHNcclxuXHRcdFx0XHRleGVjKGB3aGljaCAke3Rlcm1pbmFsTmFtZX1gLCAoZXJyb3I6IHsgbWVzc2FnZT86IHN0cmluZyB9IHwgbnVsbCkgPT4ge1xyXG5cdFx0XHRcdFx0aWYgKCFlcnJvcikge1xyXG5cdFx0XHRcdFx0XHQvLyBUZXJtaW5hbCBmb3VuZCwgdHJ5IHRvIGxhdW5jaCBpdFxyXG5cdFx0XHRcdFx0XHRsZXQgY29tbWFuZDogc3RyaW5nO1xyXG5cdFx0XHRcdFx0XHRpZiAoY3VycmVudFRlcm1pbmFsLmluY2x1ZGVzKFwiZ25vbWUtdGVybWluYWxcIikpIHtcclxuXHRcdFx0XHRcdFx0XHRjb21tYW5kID0gYGdub21lLXRlcm1pbmFsIC0td29ya2luZy1kaXJlY3Rvcnk9XCIke3Byb2plY3RQYXRoRXNjYXBlZH1cImA7XHJcblx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoY3VycmVudFRlcm1pbmFsLmluY2x1ZGVzKFwia29uc29sZVwiKSkge1xyXG5cdFx0XHRcdFx0XHRcdGNvbW1hbmQgPSBga29uc29sZSAtLXdvcmtkaXIgXCIke3Byb2plY3RQYXRoRXNjYXBlZH1cImA7XHJcblx0XHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdFx0Ly8gR2VuZXJpYyB0ZXJtaW5hbFxyXG5cdFx0XHRcdFx0XHRcdGNvbW1hbmQgPSBgJHtjdXJyZW50VGVybWluYWx9IC1lIFwiY2QgXFxcXFwiJHtwcm9qZWN0UGF0aEVzY2FwZWR9XFxcXFwiICYmIGJhc2hcImA7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0dGVybWluYWxMb2dnZXIubG9nKFwiTGludXggbGF1bmNoXCIsIHsgY29tbWFuZCwgdGVybWluYWw6IGN1cnJlbnRUZXJtaW5hbCwgcHJvamVjdFBhdGggfSk7XHJcblx0XHRcdFx0XHRcdGV4ZWMoY29tbWFuZCwgKGV4ZWNFcnJvcjogeyBtZXNzYWdlPzogc3RyaW5nIH0gfCBudWxsKSA9PiB7XHJcblx0XHRcdFx0XHRcdFx0aWYgKGV4ZWNFcnJvciAmJiBpbmRleCA8IHRlcm1pbmFscy5sZW5ndGggLSAxKSB7XHJcblx0XHRcdFx0XHRcdFx0XHR0ZXJtaW5hbExvZ2dlci5sb2coXCJUZXJtaW5hbCBsYXVuY2ggZmFpbGVkLCB0cnlpbmcgbmV4dFwiLCB7IHRlcm1pbmFsOiBjdXJyZW50VGVybWluYWwsIGVycm9yOiBleGVjRXJyb3IubWVzc2FnZSB9KTtcclxuXHRcdFx0XHRcdFx0XHRcdHRyeVRlcm1pbmFsKGluZGV4ICsgMSk7XHJcblx0XHRcdFx0XHRcdFx0fSBlbHNlIGlmIChleGVjRXJyb3IpIHtcclxuXHRcdFx0XHRcdFx0XHRcdG5ldyBOb3RpY2UoYEVycm9yIG9wZW5pbmcgdGVybWluYWw6ICR7ZXhlY0Vycm9yLm1lc3NhZ2UgfHwgJ1Vua25vd24gZXJyb3InfWApO1xyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHQvLyBUZXJtaW5hbCBub3QgZm91bmQsIHRyeSBuZXh0XHJcblx0XHRcdFx0XHRcdHRlcm1pbmFsTG9nZ2VyLmxvZyhcIlRlcm1pbmFsIG5vdCBmb3VuZCwgdHJ5aW5nIG5leHRcIiwgeyB0ZXJtaW5hbDogY3VycmVudFRlcm1pbmFsIH0pO1xyXG5cdFx0XHRcdFx0XHR0cnlUZXJtaW5hbChpbmRleCArIDEpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHR9O1xyXG5cclxuXHRcdFx0dHJ5VGVybWluYWwoMCk7XHJcblx0XHR9XHJcblx0fSBjYXRjaCAoZXJyb3IpIHtcclxuXHRcdHRlcm1pbmFsTG9nZ2VyLmxvZyhcIlVuZXhwZWN0ZWQgZXJyb3JcIiwgeyBlcnJvciB9KTtcclxuXHRcdG5ldyBOb3RpY2UoYEVycm9yIG9wZW5pbmcgdGVybWluYWw6ICR7ZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpfWApO1xyXG5cdH1cclxufVxyXG5cclxuLyoqXHJcbiAqIE9wZW4gY29uZmlnIGZpbGUgaW4gZGVmYXVsdCBlZGl0b3JcclxuICogRXhwb3J0ZWQgZm9yIHVzZSBieSByaWJib24gaWNvbnNcclxuICovXHJcbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBvcGVuQ29uZmlnRmlsZShhcHA6IEFwcCwgc2V0dGluZ3M6IEFzdHJvQ29tcG9zZXJTZXR0aW5ncyk6IFByb21pc2U8dm9pZD4ge1xyXG5cdHRyeSB7XHJcblx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLW5vZGVqcy1tb2R1bGVzLCBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tcmVxdWlyZS1pbXBvcnRzLCBuby11bmRlZiAtLSBmcyBpcyByZXF1aXJlZCBmb3IgdmVyaWZ5aW5nIGNvbmZpZyBmaWxlIGV4aXN0cyBvbiBkZXNrdG9wXHJcblx0XHRjb25zdCBmcyA9IHJlcXVpcmUoJ2ZzJykgYXMgeyBleGlzdHNTeW5jOiAocGF0aDogc3RyaW5nKSA9PiBib29sZWFuIH07XHJcblx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLW5vZGVqcy1tb2R1bGVzLCBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tcmVxdWlyZS1pbXBvcnRzLCBuby11bmRlZiAtLSBwYXRoIGlzIHJlcXVpcmVkIGZvciByZXNvbHZpbmcgcGF0aHMgb24gZGVza3RvcFxyXG5cdFx0Y29uc3QgcGF0aCA9IHJlcXVpcmUoJ3BhdGgnKSBhcyB7IHJlc29sdmU6ICguLi5hcmdzOiBzdHJpbmdbXSkgPT4gc3RyaW5nIH07XHJcblx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXJlcXVpcmUtaW1wb3J0cywgbm8tdW5kZWYgLS0gZWxlY3Ryb24gc2hlbGwgaXMgcmVxdWlyZWQgdG8gb3BlbiBmaWxlcyBpbiBkZWZhdWx0IGVkaXRvclxyXG5cdFx0Y29uc3QgeyBzaGVsbCB9ID0gcmVxdWlyZSgnZWxlY3Ryb24nKSBhcyB7IHNoZWxsOiB7IG9wZW5QYXRoOiAocGF0aDogc3RyaW5nKSA9PiBQcm9taXNlPHN0cmluZz4gfSB9O1xyXG5cclxuXHRcdC8vIEdldCB0aGUgYWN0dWFsIHZhdWx0IHBhdGggc3RyaW5nIGZyb20gdGhlIGFkYXB0ZXJcclxuXHRcdGNvbnN0IGFkYXB0ZXIgPSBhcHAudmF1bHQuYWRhcHRlciBhcyB1bmtub3duIGFzIHsgYmFzZVBhdGg/OiBzdHJpbmc7IHBhdGg/OiBzdHJpbmcgfTtcclxuXHRcdGNvbnN0IHZhdWx0UGF0aCA9IGFkYXB0ZXIuYmFzZVBhdGggfHwgYWRhcHRlci5wYXRoO1xyXG5cdFx0Y29uc3QgdmF1bHRQYXRoU3RyaW5nID0gdHlwZW9mIHZhdWx0UGF0aCA9PT0gJ3N0cmluZycgPyB2YXVsdFBhdGggOiBTdHJpbmcodmF1bHRQYXRoKTtcclxuXHJcblx0XHQvLyBSZXNvbHZlIGNvbmZpZyBmaWxlIHBhdGhcclxuXHRcdGlmICghc2V0dGluZ3MuY29uZmlnRmlsZVBhdGggfHwgIXNldHRpbmdzLmNvbmZpZ0ZpbGVQYXRoLnRyaW0oKSkge1xyXG5cdFx0XHRuZXcgTm90aWNlKFwiUGxlYXNlIHNwZWNpZnkgYSBjb25maWcgZmlsZSBwYXRoIGluIHNldHRpbmdzLlwiKTtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8vIFVzZSBjdXN0b20gcGF0aCByZWxhdGl2ZSB0byB2YXVsdFxyXG5cdFx0Y29uc3QgY29uZmlnUGF0aCA9IHBhdGgucmVzb2x2ZSh2YXVsdFBhdGhTdHJpbmcsIHNldHRpbmdzLmNvbmZpZ0ZpbGVQYXRoKTtcclxuXHJcblx0XHQvLyBDaGVjayBpZiBmaWxlIGV4aXN0c1xyXG5cdFx0aWYgKCFmcy5leGlzdHNTeW5jKGNvbmZpZ1BhdGgpKSB7XHJcblx0XHRcdG5ldyBOb3RpY2UoYENvbmZpZyBmaWxlIG5vdCBmb3VuZCBhdDogJHtjb25maWdQYXRofWApO1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gVXNlIEVsZWN0cm9uJ3Mgc2hlbGwgdG8gb3BlbiB0aGUgZmlsZSB3aXRoIHRoZSBkZWZhdWx0IGVkaXRvclxyXG5cdFx0YXdhaXQgc2hlbGwub3BlblBhdGgoY29uZmlnUGF0aCk7XHJcblx0fSBjYXRjaCAoZXJyb3IpIHtcclxuXHRcdG5ldyBOb3RpY2UoYEVycm9yIG9wZW5pbmcgY29uZmlnIGZpbGU6ICR7ZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpfWApO1xyXG5cdH1cclxufSIsICJpbXBvcnQgeyBBcHAsIFRGaWxlLCBURm9sZGVyLCBOb3RpY2UgfSBmcm9tIFwib2JzaWRpYW5cIjtcbmltcG9ydCB7IEFzdHJvQ29tcG9zZXJTZXR0aW5ncywgRmlsZUNyZWF0aW9uT3B0aW9ucywgUmVuYW1lT3B0aW9ucywgQ29udGVudFR5cGUsIENvbnRlbnRUeXBlSWQsIEFzdHJvQ29tcG9zZXJQbHVnaW5JbnRlcmZhY2UgfSBmcm9tIFwiLi4vdHlwZXNcIjtcbmltcG9ydCB7IG1hdGNoZXNGb2xkZXJQYXR0ZXJuLCBzb3J0QnlQYXR0ZXJuU3BlY2lmaWNpdHkgfSBmcm9tIFwiLi9wYXRoLW1hdGNoaW5nXCI7XG5pbXBvcnQgeyB0b0tlYmFiQ2FzZSB9IGZyb20gXCIuL3N0cmluZy11dGlsc1wiO1xuXG5leHBvcnQgY2xhc3MgRmlsZU9wZXJhdGlvbnMge1xuXHRjb25zdHJ1Y3Rvcihwcml2YXRlIGFwcDogQXBwLCBwcml2YXRlIHNldHRpbmdzOiBBc3Ryb0NvbXBvc2VyU2V0dGluZ3MsIHByaXZhdGUgcGx1Z2luPzogQXN0cm9Db21wb3NlclBsdWdpbkludGVyZmFjZSkgeyB9XG5cblx0Ly8gR2V0IGZyZXNoIHNldHRpbmdzIGZyb20gcGx1Z2luIGlmIGF2YWlsYWJsZSwgb3RoZXJ3aXNlIHVzZSBzdG9yZWQgc2V0dGluZ3Ncblx0cHJpdmF0ZSBnZXRTZXR0aW5ncygpOiBBc3Ryb0NvbXBvc2VyU2V0dGluZ3Mge1xuXHRcdC8vIEFsd2F5cyBwcmVmZXIgcGx1Z2luIHNldHRpbmdzICh0aGV5J3JlIGtlcHQgdXAgdG8gZGF0ZSlcblx0XHRpZiAodGhpcy5wbHVnaW4/LnNldHRpbmdzKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5wbHVnaW4uc2V0dGluZ3M7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzLnNldHRpbmdzO1xuXHR9XG5cblx0Z2VuZXJhdGVGaWxlbmFtZSh0aXRsZTogc3RyaW5nLCBlbmFibGVVbmRlcnNjb3JlUHJlZml4OiBib29sZWFuID0gZmFsc2UpOiBzdHJpbmcge1xuXHRcdGNvbnN0IGtlYmFiVGl0bGUgPSB0b0tlYmFiQ2FzZSh0aXRsZSk7XG5cdFx0Ly8gSWYga2ViYWIgY2FzZSByZXN1bHRzIGluIGVtcHR5IHN0cmluZywgdXNlIGEgZmFsbGJhY2tcblx0XHRjb25zdCBzYWZlS2ViYWJUaXRsZSA9IGtlYmFiVGl0bGUgfHwgXCJ1bnRpdGxlZFwiO1xuXHRcdGNvbnN0IHByZWZpeCA9IGVuYWJsZVVuZGVyc2NvcmVQcmVmaXggPyBcIl9cIiA6IFwiXCI7XG5cdFx0cmV0dXJuIGAke3ByZWZpeH0ke3NhZmVLZWJhYlRpdGxlfWA7XG5cdH1cblxuXHRkZXRlcm1pbmVUeXBlKGZpbGU6IFRGaWxlKTogQ29udGVudFR5cGVJZCB7XG5cdFx0Y29uc3QgZmlsZVBhdGggPSBmaWxlLnBhdGg7XG5cdFx0Y29uc3Qgc2V0dGluZ3MgPSB0aGlzLmdldFNldHRpbmdzKCk7XG5cblx0XHQvLyBDaGVjayBhbGwgY29udGVudCB0eXBlcywgc29ydGVkIGJ5IHBhdHRlcm4gc3BlY2lmaWNpdHkgKG1vcmUgc3BlY2lmaWMgZmlyc3QpXG5cdFx0Y29uc3QgY29udGVudFR5cGVzID0gc2V0dGluZ3MuY29udGVudFR5cGVzIHx8IFtdO1xuXHRcdGNvbnN0IHNvcnRlZFR5cGVzID0gc29ydEJ5UGF0dGVyblNwZWNpZmljaXR5KGNvbnRlbnRUeXBlcyk7XG5cblx0XHRmb3IgKGNvbnN0IGNvbnRlbnRUeXBlIG9mIHNvcnRlZFR5cGVzKSB7XG5cdFx0XHRpZiAoIWNvbnRlbnRUeXBlLmVuYWJsZWQpIGNvbnRpbnVlO1xuXG5cdFx0XHQvLyBIYW5kbGUgYmxhbmsgZm9sZGVyIChyb290KSAtIG1hdGNoZXMgZmlsZXMgaW4gdmF1bHQgcm9vdCBvbmx5XG5cdFx0XHRpZiAoIWNvbnRlbnRUeXBlLmZvbGRlciB8fCBjb250ZW50VHlwZS5mb2xkZXIudHJpbSgpID09PSBcIlwiKSB7XG5cdFx0XHRcdGlmICghZmlsZVBhdGguaW5jbHVkZXMoXCIvXCIpIHx8IGZpbGVQYXRoLnNwbGl0KFwiL1wiKS5sZW5ndGggPT09IDEpIHtcblx0XHRcdFx0XHRyZXR1cm4gY29udGVudFR5cGUuaWQ7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSBpZiAobWF0Y2hlc0ZvbGRlclBhdHRlcm4oZmlsZVBhdGgsIGNvbnRlbnRUeXBlLmZvbGRlcikpIHtcblx0XHRcdFx0Ly8gQ2hlY2sgaWdub3JlU3ViZm9sZGVycyBpZiBmb2xkZXIgaXMgc3BlY2lmaWVkXG5cdFx0XHRcdGlmIChjb250ZW50VHlwZS5pZ25vcmVTdWJmb2xkZXJzKSB7XG5cdFx0XHRcdFx0Y29uc3QgcGF0aFNlZ21lbnRzID0gZmlsZVBhdGguc3BsaXQoXCIvXCIpO1xuXHRcdFx0XHRcdGNvbnN0IHBhdGhEZXB0aCA9IHBhdGhTZWdtZW50cy5sZW5ndGg7XG5cdFx0XHRcdFx0Y29uc3QgcGF0dGVyblNlZ21lbnRzID0gY29udGVudFR5cGUuZm9sZGVyLnNwbGl0KFwiL1wiKTtcblx0XHRcdFx0XHRjb25zdCBleHBlY3RlZERlcHRoID0gcGF0dGVyblNlZ21lbnRzLmxlbmd0aDtcblxuXHRcdFx0XHRcdGlmIChjb250ZW50VHlwZS5jcmVhdGlvbk1vZGUgPT09IFwiZm9sZGVyXCIpIHtcblx0XHRcdFx0XHRcdC8vIEZvciBmb2xkZXItYmFzZWQgY3JlYXRpb24sIGZpbGVzIGFyZSBvbmUgbGV2ZWwgZGVlcGVyIChlLmcuLCB0ZXN0L215LWZpbGUvaW5kZXgubWQpXG5cdFx0XHRcdFx0XHQvLyBTbyB3ZSBuZWVkIHRvIGFsbG93IG9uZSBleHRyYSBsZXZlbCBiZXlvbmQgdGhlIHBhdHRlcm4gZGVwdGhcblx0XHRcdFx0XHRcdGNvbnN0IGZvbGRlckRlcHRoID0gcGF0aERlcHRoIC0gMTsgLy8gU3VidHJhY3QgMSBmb3IgdGhlIGluZGV4Lm1kIGZpbGVcblx0XHRcdFx0XHRcdGlmIChmb2xkZXJEZXB0aCA9PT0gZXhwZWN0ZWREZXB0aCB8fCBmb2xkZXJEZXB0aCA9PT0gZXhwZWN0ZWREZXB0aCArIDEpIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIGNvbnRlbnRUeXBlLmlkO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHQvLyBGb3IgZmlsZS1iYXNlZCBjcmVhdGlvbiwgZmlsZXMgYXJlIGF0IHRoZSBzYW1lIGRlcHRoIGFzIHRoZSBwYXR0ZXJuXG5cdFx0XHRcdFx0XHRpZiAocGF0aERlcHRoID09PSBleHBlY3RlZERlcHRoKSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiBjb250ZW50VHlwZS5pZDtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0cmV0dXJuIGNvbnRlbnRUeXBlLmlkO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gSWYgbm8gY29udGVudCB0eXBlIG1hdGNoZXMsIHJldHVybiBcIm5vdGVcIiBhcyBmYWxsYmFja1xuXHRcdHJldHVybiBcIm5vdGVcIjtcblx0fVxuXG5cdGdldENvbnRlbnRUeXBlKHR5cGVJZDogQ29udGVudFR5cGVJZCk6IENvbnRlbnRUeXBlIHwgbnVsbCB7XG5cdFx0Y29uc3Qgc2V0dGluZ3MgPSB0aGlzLmdldFNldHRpbmdzKCk7XG5cdFx0Y29uc3QgY29udGVudFR5cGVzID0gc2V0dGluZ3MuY29udGVudFR5cGVzIHx8IFtdO1xuXHRcdHJldHVybiBjb250ZW50VHlwZXMuZmluZChjdCA9PiBjdC5pZCA9PT0gdHlwZUlkKSB8fCBudWxsO1xuXHR9XG5cblx0LyoqXG5cdCAqIEhlbHBlciB0byBnZXQgY29udGVudCB0eXBlIGZvciBhIGdpdmVuIGZpbGUgcGF0aFxuXHQgKi9cblx0Z2V0Q29udGVudFR5cGVCeVBhdGgoZmlsZVBhdGg6IHN0cmluZyk6IENvbnRlbnRUeXBlIHwgbnVsbCB7XG5cdFx0Ly8gQ3JlYXRlIGEgZHVtbXkgVEZpbGUgZm9yIGRldGVybWluZVR5cGVcblx0XHRjb25zdCBkdW1teUZpbGUgPSB7IHBhdGg6IGZpbGVQYXRoIH0gYXMgVEZpbGU7XG5cdFx0Y29uc3QgdHlwZUlkID0gdGhpcy5kZXRlcm1pbmVUeXBlKGR1bW15RmlsZSk7XG5cdFx0aWYgKHR5cGVJZCA9PT0gXCJub3RlXCIpIHJldHVybiBudWxsO1xuXHRcdHJldHVybiB0aGlzLmdldENvbnRlbnRUeXBlKHR5cGVJZCk7XG5cdH1cblxuXHRnZXRUaXRsZUtleSh0eXBlOiBDb250ZW50VHlwZUlkKTogc3RyaW5nIHtcblx0XHQvLyBGb3IgZ2VuZXJpYyBub3RlcywgYWx3YXlzIHVzZSBcInRpdGxlXCJcblx0XHRpZiAodHlwZSA9PT0gXCJub3RlXCIpIHJldHVybiBcInRpdGxlXCI7XG5cblx0XHRjb25zdCBjb250ZW50VHlwZSA9IHRoaXMuZ2V0Q29udGVudFR5cGUodHlwZSk7XG5cdFx0aWYgKCFjb250ZW50VHlwZSkgcmV0dXJuIFwidGl0bGVcIjtcblxuXHRcdGNvbnN0IHRlbXBsYXRlID0gY29udGVudFR5cGUudGVtcGxhdGU7XG5cdFx0Y29uc3QgbGluZXMgPSB0ZW1wbGF0ZS5zcGxpdChcIlxcblwiKTtcblx0XHRsZXQgaW5Qcm9wZXJ0aWVzID0gZmFsc2U7XG5cdFx0Zm9yIChjb25zdCBsaW5lIG9mIGxpbmVzKSB7XG5cdFx0XHRjb25zdCB0cmltbWVkID0gbGluZS50cmltKCk7XG5cdFx0XHRpZiAodHJpbW1lZCA9PT0gXCItLS1cIikge1xuXHRcdFx0XHRpblByb3BlcnRpZXMgPSAhaW5Qcm9wZXJ0aWVzO1xuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdH1cblx0XHRcdGlmIChpblByb3BlcnRpZXMpIHtcblx0XHRcdFx0Y29uc3QgbWF0Y2ggPSB0cmltbWVkLm1hdGNoKC9eKFxcdyspOlxccyooLispJC8pO1xuXHRcdFx0XHRpZiAobWF0Y2gpIHtcblx0XHRcdFx0XHRjb25zdCBrZXkgPSBtYXRjaFsxXTtcblx0XHRcdFx0XHRjb25zdCB2YWx1ZSA9IG1hdGNoWzJdO1xuXHRcdFx0XHRcdGlmICh2YWx1ZS5pbmNsdWRlcyhcInt7dGl0bGV9fVwiKSkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIGtleTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIFwidGl0bGVcIjtcblx0fVxuXG5cdGFzeW5jIGNyZWF0ZUZpbGUob3B0aW9uczogRmlsZUNyZWF0aW9uT3B0aW9ucyk6IFByb21pc2U8VEZpbGUgfCBudWxsPiB7XG5cdFx0Y29uc3QgeyBmaWxlLCB0aXRsZSwgdHlwZSB9ID0gb3B0aW9ucztcblxuXHRcdGlmICghdGl0bGUpIHtcblx0XHRcdG5ldyBOb3RpY2UoYFRpdGxlIGlzIHJlcXVpcmVkIHRvIGNyZWF0ZSBhICR7dHlwZX0uYCk7XG5cdFx0XHRyZXR1cm4gbnVsbDtcblx0XHR9XG5cblx0XHQvLyBHZXQgY29udGVudCB0eXBlIHNldHRpbmdzXG5cdFx0Y29uc3QgY29udGVudFR5cGUgPSB0aGlzLmdldENvbnRlbnRUeXBlKHR5cGUpO1xuXHRcdGlmICghY29udGVudFR5cGUgJiYgdHlwZSAhPT0gXCJub3RlXCIpIHtcblx0XHRcdG5ldyBOb3RpY2UoYENvbnRlbnQgdHlwZSAke3R5cGV9IG5vdCBmb3VuZC5gKTtcblx0XHRcdHJldHVybiBudWxsO1xuXHRcdH1cblxuXHRcdGNvbnN0IGtlYmFiVGl0bGUgPSB0b0tlYmFiQ2FzZSh0aXRsZSk7XG5cdFx0Y29uc3QgZW5hYmxlVW5kZXJzY29yZVByZWZpeCA9IGNvbnRlbnRUeXBlPy5lbmFibGVVbmRlcnNjb3JlUHJlZml4IHx8IGZhbHNlO1xuXHRcdGNvbnN0IHByZWZpeCA9IGVuYWJsZVVuZGVyc2NvcmVQcmVmaXggPyBcIl9cIiA6IFwiXCI7XG5cblx0XHRsZXQgdGFyZ2V0Rm9sZGVyID0gXCJcIjtcblx0XHRpZiAodHlwZSA9PT0gXCJub3RlXCIpIHtcblx0XHRcdC8vIEZvciBnZW5lcmljIG5vdGVzLCBrZWVwIHRoZW0gaW4gdGhlaXIgY3VycmVudCBsb2NhdGlvblxuXHRcdFx0dGFyZ2V0Rm9sZGVyID0gXCJcIjtcblx0XHR9IGVsc2UgaWYgKGNvbnRlbnRUeXBlKSB7XG5cdFx0XHQvLyBHZXQgdGhlIGRpcmVjdG9yeSB3aGVyZSB0aGUgdXNlciBjcmVhdGVkIHRoZSBmaWxlXG5cdFx0XHRjb25zdCBvcmlnaW5hbERpciA9IGZpbGUucGFyZW50Py5wYXRoIHx8IFwiXCI7XG5cblx0XHRcdC8vIFJlc3BlY3QgdGhlIHVzZXIncyBjaG9zZW4gbG9jYXRpb24gKHN1YmZvbGRlcilcblx0XHRcdC8vIE9ubHkgdXNlIHRoZSBjb25maWd1cmVkIGZvbGRlciBpZiB0aGUgdXNlciBjcmVhdGVkIHRoZSBmaWxlIGluIHRoZSB2YXVsdCByb290XG5cdFx0XHRpZiAob3JpZ2luYWxEaXIgPT09IFwiXCIgfHwgb3JpZ2luYWxEaXIgPT09IFwiL1wiKSB7XG5cdFx0XHRcdHRhcmdldEZvbGRlciA9IGNvbnRlbnRUeXBlLmZvbGRlciB8fCBcIlwiO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dGFyZ2V0Rm9sZGVyID0gb3JpZ2luYWxEaXI7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKHRhcmdldEZvbGRlcikge1xuXHRcdFx0Y29uc3QgZm9sZGVyID0gdGhpcy5hcHAudmF1bHQuZ2V0QWJzdHJhY3RGaWxlQnlQYXRoKHRhcmdldEZvbGRlcik7XG5cdFx0XHRpZiAoIShmb2xkZXIgaW5zdGFuY2VvZiBURm9sZGVyKSkge1xuXHRcdFx0XHRhd2FpdCB0aGlzLmFwcC52YXVsdC5jcmVhdGVGb2xkZXIodGFyZ2V0Rm9sZGVyKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRjb25zdCBjcmVhdGlvbk1vZGUgPSBjb250ZW50VHlwZT8uY3JlYXRpb25Nb2RlIHx8IFwiZmlsZVwiO1xuXHRcdGlmIChjcmVhdGlvbk1vZGUgPT09IFwiZm9sZGVyXCIpIHtcblx0XHRcdHJldHVybiB0aGlzLmNyZWF0ZUZvbGRlclN0cnVjdHVyZShmaWxlLCBrZWJhYlRpdGxlLCBwcmVmaXgsIHRhcmdldEZvbGRlciwgdHlwZSwgY29udGVudFR5cGUpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5jcmVhdGVGaWxlU3RydWN0dXJlKGZpbGUsIGtlYmFiVGl0bGUsIHByZWZpeCwgdGFyZ2V0Rm9sZGVyLCBjb250ZW50VHlwZSk7XG5cdFx0fVxuXHR9XG5cblx0cHJpdmF0ZSBhc3luYyBjcmVhdGVGb2xkZXJTdHJ1Y3R1cmUoZmlsZTogVEZpbGUsIGtlYmFiVGl0bGU6IHN0cmluZywgcHJlZml4OiBzdHJpbmcsIHRhcmdldEZvbGRlcjogc3RyaW5nLCB0eXBlOiBDb250ZW50VHlwZUlkLCBjb250ZW50VHlwZTogQ29udGVudFR5cGUgfCBudWxsKTogUHJvbWlzZTxURmlsZSB8IG51bGw+IHtcblx0XHRjb25zdCBmb2xkZXJOYW1lID0gYCR7cHJlZml4fSR7a2ViYWJUaXRsZX1gO1xuXHRcdGxldCBmb2xkZXJQYXRoOiBzdHJpbmc7XG5cblx0XHRpZiAodGFyZ2V0Rm9sZGVyKSB7XG5cdFx0XHQvLyBNb3ZlIHRvIHRhcmdldCBmb2xkZXJcblx0XHRcdGZvbGRlclBhdGggPSBgJHt0YXJnZXRGb2xkZXJ9LyR7Zm9sZGVyTmFtZX1gO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBLZWVwIGluIGN1cnJlbnQgbG9jYXRpb25cblx0XHRcdGNvbnN0IGN1cnJlbnREaXIgPSBmaWxlLnBhcmVudCA/IGZpbGUucGFyZW50LnBhdGggOiBcIlwiO1xuXHRcdFx0aWYgKGN1cnJlbnREaXIgJiYgY3VycmVudERpciAhPT0gXCIvXCIpIHtcblx0XHRcdFx0Zm9sZGVyUGF0aCA9IGAke2N1cnJlbnREaXJ9LyR7Zm9sZGVyTmFtZX1gO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Ly8gRmlsZSBpcyBpbiB2YXVsdCByb290LCBqdXN0IHVzZSBmb2xkZXIgbmFtZVxuXHRcdFx0XHRmb2xkZXJQYXRoID0gZm9sZGVyTmFtZTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHR0cnkge1xuXHRcdFx0Y29uc3QgZm9sZGVyID0gdGhpcy5hcHAudmF1bHQuZ2V0QWJzdHJhY3RGaWxlQnlQYXRoKGZvbGRlclBhdGgpO1xuXHRcdFx0aWYgKCEoZm9sZGVyIGluc3RhbmNlb2YgVEZvbGRlcikpIHtcblx0XHRcdFx0YXdhaXQgdGhpcy5hcHAudmF1bHQuY3JlYXRlRm9sZGVyKGZvbGRlclBhdGgpO1xuXHRcdFx0fVxuXHRcdH0gY2F0Y2gge1xuXHRcdFx0Ly8gRm9sZGVyIG1pZ2h0IGFscmVhZHkgZXhpc3QsIHByb2NlZWRcblx0XHR9XG5cblx0XHRjb25zdCBpbmRleEZpbGVOYW1lID0gY29udGVudFR5cGU/LmluZGV4RmlsZU5hbWUgfHwgXCJpbmRleFwiO1xuXHRcdGNvbnN0IGV4dGVuc2lvbiA9IGNvbnRlbnRUeXBlPy51c2VNZHhFeHRlbnNpb24gPyBcIi5tZHhcIiA6IFwiLm1kXCI7XG5cdFx0Y29uc3QgZmlsZU5hbWUgPSBgJHtpbmRleEZpbGVOYW1lfSR7ZXh0ZW5zaW9ufWA7XG5cdFx0Y29uc3QgbmV3UGF0aCA9IGAke2ZvbGRlclBhdGh9LyR7ZmlsZU5hbWV9YDtcblxuXHRcdGNvbnN0IGV4aXN0aW5nRmlsZSA9IHRoaXMuYXBwLnZhdWx0LmdldEFic3RyYWN0RmlsZUJ5UGF0aChuZXdQYXRoKTtcblx0XHRpZiAoZXhpc3RpbmdGaWxlIGluc3RhbmNlb2YgVEZpbGUpIHtcblx0XHRcdG5ldyBOb3RpY2UoYEZpbGUgYWxyZWFkeSBleGlzdHMgYXQgJHtuZXdQYXRofS5gKTtcblx0XHRcdHJldHVybiBudWxsO1xuXHRcdH1cblxuXHRcdC8vIFRyYWNrIHRoYXQgdGhpcyBmaWxlIHdpbGwgYmUgY3JlYXRlZCBieSB0aGUgcGx1Z2luIEJFRk9SRSByZW5hbWluZ1xuXHRcdC8vIFRoaXMgcHJldmVudHMgdGhlIGNyZWF0ZSBldmVudCBmcm9tIHRyaWdnZXJpbmcgYW5vdGhlciBtb2RhbFxuXHRcdGlmICh0aGlzLnBsdWdpbikge1xuXHRcdFx0dGhpcy5wbHVnaW4ucGx1Z2luQ3JlYXRlZEZpbGVzLnNldChuZXdQYXRoLCBEYXRlLm5vdygpKTtcblx0XHR9XG5cblx0XHR0cnkge1xuXHRcdFx0YXdhaXQgdGhpcy5hcHAuZmlsZU1hbmFnZXIucmVuYW1lRmlsZShmaWxlLCBuZXdQYXRoKTtcblx0XHRcdGNvbnN0IG5ld0ZpbGUgPSB0aGlzLmFwcC52YXVsdC5nZXRBYnN0cmFjdEZpbGVCeVBhdGgobmV3UGF0aCk7XG5cdFx0XHRpZiAoIShuZXdGaWxlIGluc3RhbmNlb2YgVEZpbGUpKSB7XG5cdFx0XHRcdHJldHVybiBudWxsO1xuXHRcdFx0fVxuXG5cdFx0XHRzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdFx0Y29uc3QgZmlsZUV4cGxvcmVyID0gdGhpcy5hcHAud29ya3NwYWNlLmdldExlYXZlc09mVHlwZShcImZpbGUtZXhwbG9yZXJcIilbMF07XG5cdFx0XHRcdGlmIChmaWxlRXhwbG9yZXIgJiYgZmlsZUV4cGxvcmVyLnZpZXcpIHtcblx0XHRcdFx0XHRjb25zdCB2aWV3ID0gZmlsZUV4cGxvcmVyLnZpZXc7XG5cdFx0XHRcdFx0aWYgKHZpZXcgJiYgdHlwZW9mIHZpZXcgPT09ICdvYmplY3QnICYmICd0cmVlJyBpbiB2aWV3KSB7XG5cdFx0XHRcdFx0XHRjb25zdCBmaWxlVHJlZSA9ICh2aWV3IGFzIHsgdHJlZT86IHsgcmV2ZWFsRmlsZT86IChmaWxlOiBURmlsZSkgPT4gdm9pZCB9IH0pLnRyZWU7XG5cdFx0XHRcdFx0XHRpZiAoZmlsZVRyZWUgJiYgbmV3RmlsZSBpbnN0YW5jZW9mIFRGaWxlICYmIHR5cGVvZiBmaWxlVHJlZS5yZXZlYWxGaWxlID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0XHRcdFx0XHRcdGZpbGVUcmVlLnJldmVhbEZpbGUobmV3RmlsZSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9LCAyMDApO1xuXG5cdFx0XHRjb25zdCBsZWFmID0gdGhpcy5hcHAud29ya3NwYWNlLmdldExlYWYoZmFsc2UpO1xuXHRcdFx0YXdhaXQgbGVhZi5vcGVuRmlsZShuZXdGaWxlKTtcblxuXHRcdFx0Ly8gUG9zaXRpb24gY3Vyc29yIGF0IHRoZSBlbmQgb2YgY29udGVudCBhZnRlciBlZGl0b3IgaXMgcmVhZHlcblx0XHRcdGNvbnN0IHBvc2l0aW9uQ3Vyc29yID0gKCkgPT4ge1xuXHRcdFx0XHRjb25zdCB2aWV3ID0gbGVhZi52aWV3O1xuXHRcdFx0XHRpZiAodmlldyAmJiAnZWRpdG9yJyBpbiB2aWV3KSB7XG5cdFx0XHRcdFx0Y29uc3QgZWRpdG9yID0gKHZpZXcgYXMgeyBlZGl0b3I/OiB7IHNldEN1cnNvcjogKHBvczogeyBsaW5lOiBudW1iZXI7IGNoOiBudW1iZXIgfSkgPT4gdm9pZDsgZ2V0VmFsdWU6ICgpID0+IHN0cmluZzsgZm9jdXM6ICgpID0+IHZvaWQgfSB9KS5lZGl0b3I7XG5cdFx0XHRcdFx0aWYgKGVkaXRvcikge1xuXHRcdFx0XHRcdFx0Y29uc3QgY29udGVudCA9IGVkaXRvci5nZXRWYWx1ZSgpO1xuXHRcdFx0XHRcdFx0aWYgKGNvbnRlbnQpIHtcblx0XHRcdFx0XHRcdFx0Y29uc3QgbGluZXMgPSBjb250ZW50LnNwbGl0KCdcXG4nKTtcblx0XHRcdFx0XHRcdFx0Y29uc3QgbGFzdExpbmUgPSBsaW5lcy5sZW5ndGggLSAxO1xuXHRcdFx0XHRcdFx0XHRjb25zdCBsYXN0TGluZUxlbmd0aCA9IGxpbmVzW2xhc3RMaW5lXT8ubGVuZ3RoIHx8IDA7XG5cdFx0XHRcdFx0XHRcdGVkaXRvci5zZXRDdXJzb3IoeyBsaW5lOiBsYXN0TGluZSwgY2g6IGxhc3RMaW5lTGVuZ3RoIH0pO1xuXHRcdFx0XHRcdFx0XHRlZGl0b3IuZm9jdXMoKTtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH07XG5cblx0XHRcdHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0XHRpZiAoIXBvc2l0aW9uQ3Vyc29yKCkpIHtcblx0XHRcdFx0XHRzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdFx0XHRcdHBvc2l0aW9uQ3Vyc29yKCk7XG5cdFx0XHRcdFx0fSwgMjAwKTtcblx0XHRcdFx0fVxuXHRcdFx0fSwgMTAwKTtcblxuXHRcdFx0cmV0dXJuIG5ld0ZpbGU7XG5cdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdGNvbnN0IGVycm9yTWVzc2FnZSA9IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogU3RyaW5nKGVycm9yKTtcblx0XHRcdG5ldyBOb3RpY2UoYEZhaWxlZCB0byBjcmVhdGUgZm9sZGVyIHN0cnVjdHVyZTogJHtlcnJvck1lc3NhZ2V9LmApO1xuXHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0fVxuXHR9XG5cblx0cHJpdmF0ZSBhc3luYyBjcmVhdGVGaWxlU3RydWN0dXJlKGZpbGU6IFRGaWxlLCBrZWJhYlRpdGxlOiBzdHJpbmcsIHByZWZpeDogc3RyaW5nLCB0YXJnZXRGb2xkZXI6IHN0cmluZywgY29udGVudFR5cGU6IENvbnRlbnRUeXBlIHwgbnVsbCk6IFByb21pc2U8VEZpbGUgfCBudWxsPiB7XG5cdFx0Y29uc3QgZXh0ZW5zaW9uID0gY29udGVudFR5cGU/LnVzZU1keEV4dGVuc2lvbiA/IFwiLm1keFwiIDogXCIubWRcIjtcblx0XHRjb25zdCBuZXdOYW1lID0gYCR7cHJlZml4fSR7a2ViYWJUaXRsZX0ke2V4dGVuc2lvbn1gO1xuXHRcdGxldCBuZXdQYXRoOiBzdHJpbmc7XG5cblx0XHRpZiAodGFyZ2V0Rm9sZGVyKSB7XG5cdFx0XHQvLyBNb3ZlIHRvIHRhcmdldCBmb2xkZXJcblx0XHRcdG5ld1BhdGggPSBgJHt0YXJnZXRGb2xkZXJ9LyR7bmV3TmFtZX1gO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBLZWVwIGluIGN1cnJlbnQgbG9jYXRpb24sIGp1c3QgcmVuYW1lIHRoZSBmaWxlXG5cdFx0XHRjb25zdCBjdXJyZW50RGlyID0gZmlsZS5wYXJlbnQgPyBmaWxlLnBhcmVudC5wYXRoIDogXCJcIjtcblx0XHRcdGlmIChjdXJyZW50RGlyICYmIGN1cnJlbnREaXIgIT09IFwiL1wiKSB7XG5cdFx0XHRcdG5ld1BhdGggPSBgJHtjdXJyZW50RGlyfS8ke25ld05hbWV9YDtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdC8vIEZpbGUgaXMgaW4gdmF1bHQgcm9vdCwganVzdCB1c2UgbmV3IG5hbWVcblx0XHRcdFx0bmV3UGF0aCA9IG5ld05hbWU7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Y29uc3QgZXhpc3RpbmdGaWxlID0gdGhpcy5hcHAudmF1bHQuZ2V0QWJzdHJhY3RGaWxlQnlQYXRoKG5ld1BhdGgpO1xuXHRcdGlmIChleGlzdGluZ0ZpbGUgaW5zdGFuY2VvZiBURmlsZSAmJiBleGlzdGluZ0ZpbGUgIT09IGZpbGUpIHtcblx0XHRcdG5ldyBOb3RpY2UoYEZpbGUgd2l0aCBuYW1lIFwiJHtuZXdOYW1lfVwiIGFscmVhZHkgZXhpc3RzLmApO1xuXHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0fVxuXG5cdFx0Ly8gVHJhY2sgdGhhdCB0aGlzIGZpbGUgd2lsbCBiZSBjcmVhdGVkIGJ5IHRoZSBwbHVnaW4gQkVGT1JFIHJlbmFtaW5nXG5cdFx0Ly8gVGhpcyBwcmV2ZW50cyB0aGUgY3JlYXRlIGV2ZW50IGZyb20gdHJpZ2dlcmluZyBhbm90aGVyIG1vZGFsXG5cdFx0aWYgKHRoaXMucGx1Z2luKSB7XG5cdFx0XHR0aGlzLnBsdWdpbi5wbHVnaW5DcmVhdGVkRmlsZXMuc2V0KG5ld1BhdGgsIERhdGUubm93KCkpO1xuXHRcdH1cblxuXHRcdHRyeSB7XG5cdFx0XHQvLyBVc2UgZmlsZU1hbmFnZXIucmVuYW1lRmlsZSgpIHdoaWNoIHJlc3BlY3RzIHVzZXIgc2V0dGluZ3MgYW5kIGhhbmRsZXMgYWxsIGxpbmsgZm9ybWF0c1xuXHRcdFx0YXdhaXQgdGhpcy5hcHAuZmlsZU1hbmFnZXIucmVuYW1lRmlsZShmaWxlLCBuZXdQYXRoKTtcblxuXHRcdFx0Y29uc3QgbmV3RmlsZSA9IHRoaXMuYXBwLnZhdWx0LmdldEFic3RyYWN0RmlsZUJ5UGF0aChuZXdQYXRoKTtcblx0XHRcdGlmICghKG5ld0ZpbGUgaW5zdGFuY2VvZiBURmlsZSkpIHtcblx0XHRcdFx0bmV3IE5vdGljZShcIkZhaWxlZCB0byBsb2NhdGUgcmVuYW1lZCBmaWxlLlwiKTtcblx0XHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IGxlYWYgPSB0aGlzLmFwcC53b3Jrc3BhY2UuZ2V0TGVhZihmYWxzZSk7XG5cdFx0XHRhd2FpdCBsZWFmLm9wZW5GaWxlKG5ld0ZpbGUpO1xuXG5cdFx0XHQvLyBQb3NpdGlvbiBjdXJzb3IgYXQgdGhlIGVuZCBvZiBjb250ZW50IGFmdGVyIGVkaXRvciBpcyByZWFkeVxuXHRcdFx0Y29uc3QgcG9zaXRpb25DdXJzb3IgPSAoKSA9PiB7XG5cdFx0XHRcdGNvbnN0IHZpZXcgPSBsZWFmLnZpZXc7XG5cdFx0XHRcdGlmICh2aWV3ICYmICdlZGl0b3InIGluIHZpZXcpIHtcblx0XHRcdFx0XHRjb25zdCBlZGl0b3IgPSAodmlldyBhcyB7IGVkaXRvcj86IHsgc2V0Q3Vyc29yOiAocG9zOiB7IGxpbmU6IG51bWJlcjsgY2g6IG51bWJlciB9KSA9PiB2b2lkOyBnZXRWYWx1ZTogKCkgPT4gc3RyaW5nOyBmb2N1czogKCkgPT4gdm9pZCB9IH0pLmVkaXRvcjtcblx0XHRcdFx0XHRpZiAoZWRpdG9yKSB7XG5cdFx0XHRcdFx0XHRjb25zdCBjb250ZW50ID0gZWRpdG9yLmdldFZhbHVlKCk7XG5cdFx0XHRcdFx0XHRpZiAoY29udGVudCkge1xuXHRcdFx0XHRcdFx0XHRjb25zdCBsaW5lcyA9IGNvbnRlbnQuc3BsaXQoJ1xcbicpO1xuXHRcdFx0XHRcdFx0XHRjb25zdCBsYXN0TGluZSA9IGxpbmVzLmxlbmd0aCAtIDE7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IGxhc3RMaW5lTGVuZ3RoID0gbGluZXNbbGFzdExpbmVdPy5sZW5ndGggfHwgMDtcblx0XHRcdFx0XHRcdFx0ZWRpdG9yLnNldEN1cnNvcih7IGxpbmU6IGxhc3RMaW5lLCBjaDogbGFzdExpbmVMZW5ndGggfSk7XG5cdFx0XHRcdFx0XHRcdGVkaXRvci5mb2N1cygpO1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fTtcblxuXHRcdFx0c2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRcdGlmICghcG9zaXRpb25DdXJzb3IoKSkge1xuXHRcdFx0XHRcdHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0XHRcdFx0cG9zaXRpb25DdXJzb3IoKTtcblx0XHRcdFx0XHR9LCAyMDApO1xuXHRcdFx0XHR9XG5cdFx0XHR9LCAxMDApO1xuXG5cdFx0XHRyZXR1cm4gbmV3RmlsZTtcblx0XHR9IGNhdGNoIChlcnJvcikge1xuXHRcdFx0Y29uc3QgZXJyb3JNZXNzYWdlID0gZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpO1xuXHRcdFx0bmV3IE5vdGljZShgRmFpbGVkIHRvIHJlbmFtZSBmaWxlOiAke2Vycm9yTWVzc2FnZX0uYCk7XG5cdFx0XHRyZXR1cm4gbnVsbDtcblx0XHR9XG5cdH1cblxuXG5cdGFzeW5jIHJlbmFtZUZpbGUob3B0aW9uczogUmVuYW1lT3B0aW9ucyk6IFByb21pc2U8VEZpbGUgfCBudWxsPiB7XG5cdFx0Y29uc3QgeyBmaWxlLCB0aXRsZSwgdHlwZSB9ID0gb3B0aW9ucztcblxuXHRcdGlmICghdGl0bGUpIHtcblx0XHRcdG5ldyBOb3RpY2UoYFRpdGxlIGlzIHJlcXVpcmVkIHRvIHJlbmFtZSB0aGUgY29udGVudC5gKTtcblx0XHRcdHJldHVybiBudWxsO1xuXHRcdH1cblxuXHRcdGNvbnN0IGNvbnRlbnRUeXBlID0gdGhpcy5nZXRDb250ZW50VHlwZSh0eXBlKTtcblx0XHRpZiAoIWNvbnRlbnRUeXBlICYmIHR5cGUgIT09IFwibm90ZVwiKSB7XG5cdFx0XHRuZXcgTm90aWNlKGBDb250ZW50IHR5cGUgJHt0eXBlfSBub3QgZm91bmQuYCk7XG5cdFx0XHRyZXR1cm4gbnVsbDtcblx0XHR9XG5cblx0XHRjb25zdCBrZWJhYlRpdGxlID0gdG9LZWJhYkNhc2UodGl0bGUpO1xuXHRcdGNvbnN0IHByZWZpeCA9IFwiXCI7XG5cblx0XHRjb25zdCBjcmVhdGlvbk1vZGUgPSBjb250ZW50VHlwZT8uY3JlYXRpb25Nb2RlIHx8IFwiZmlsZVwiO1xuXHRcdGlmIChjcmVhdGlvbk1vZGUgPT09IFwiZm9sZGVyXCIpIHtcblx0XHRcdHJldHVybiB0aGlzLnJlbmFtZUZvbGRlclN0cnVjdHVyZShmaWxlLCBrZWJhYlRpdGxlLCBwcmVmaXgsIHR5cGUsIGNvbnRlbnRUeXBlKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIHRoaXMucmVuYW1lRmlsZVN0cnVjdHVyZShmaWxlLCBrZWJhYlRpdGxlLCBwcmVmaXgsIGNvbnRlbnRUeXBlKTtcblx0XHR9XG5cdH1cblxuXHRwcml2YXRlIGFzeW5jIHJlbmFtZUZvbGRlclN0cnVjdHVyZShmaWxlOiBURmlsZSwga2ViYWJUaXRsZTogc3RyaW5nLCBwcmVmaXg6IHN0cmluZywgdHlwZTogQ29udGVudFR5cGVJZCwgY29udGVudFR5cGU6IENvbnRlbnRUeXBlIHwgbnVsbCk6IFByb21pc2U8VEZpbGUgfCBudWxsPiB7XG5cdFx0Ly8gU21hcnQgZGV0ZWN0aW9uOiB0cmVhdCBhcyBpbmRleCBpZiBmaWxlbmFtZSBtYXRjaGVzIHRoZSBpbmRleCBmaWxlIG5hbWVcblx0XHQvLyBEZWZhdWx0IHRvIFwiaW5kZXhcIiB3aGVuIGluZGV4RmlsZU5hbWUgaXMgYmxhbmtcblx0XHRjb25zdCBpbmRleEZpbGVOYW1lID0gY29udGVudFR5cGU/LmluZGV4RmlsZU5hbWUgfHwgXCJpbmRleFwiO1xuXHRcdGNvbnN0IGlzSW5kZXggPSBmaWxlLmJhc2VuYW1lID09PSBpbmRleEZpbGVOYW1lO1xuXHRcdGlmIChpc0luZGV4KSB7XG5cdFx0XHRpZiAoIWZpbGUucGFyZW50KSB7XG5cdFx0XHRcdG5ldyBOb3RpY2UoXCJDYW5ub3QgcmVuYW1lOiBmaWxlIGhhcyBubyBwYXJlbnQgZm9sZGVyLlwiKTtcblx0XHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0XHR9XG5cdFx0XHRwcmVmaXggPSBmaWxlLnBhcmVudC5uYW1lLnN0YXJ0c1dpdGgoXCJfXCIpID8gXCJfXCIgOiBcIlwiO1xuXHRcdFx0Y29uc3QgbmV3Rm9sZGVyTmFtZSA9IGAke3ByZWZpeH0ke2tlYmFiVGl0bGV9YDtcblx0XHRcdGNvbnN0IHBhcmVudEZvbGRlciA9IGZpbGUucGFyZW50LnBhcmVudDtcblx0XHRcdGlmICghcGFyZW50Rm9sZGVyKSB7XG5cdFx0XHRcdG5ldyBOb3RpY2UoXCJDYW5ub3QgcmVuYW1lOiBwYXJlbnQgZm9sZGVyIGhhcyBubyBwYXJlbnQuXCIpO1xuXHRcdFx0XHRyZXR1cm4gbnVsbDtcblx0XHRcdH1cblx0XHRcdC8vIEZpeCBwYXRoIGNvbnN0cnVjdGlvbiB0byBhdm9pZCBkb3VibGUgc2xhc2hlc1xuXHRcdFx0bGV0IG5ld0ZvbGRlclBhdGg6IHN0cmluZztcblx0XHRcdGlmIChwYXJlbnRGb2xkZXIucGF0aCA9PT0gXCJcIiB8fCBwYXJlbnRGb2xkZXIucGF0aCA9PT0gXCIvXCIpIHtcblx0XHRcdFx0Ly8gUGFyZW50IGlzIHZhdWx0IHJvb3Rcblx0XHRcdFx0bmV3Rm9sZGVyUGF0aCA9IG5ld0ZvbGRlck5hbWU7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHQvLyBQYXJlbnQgaXMgaW4gYSBzdWJmb2xkZXJcblx0XHRcdFx0bmV3Rm9sZGVyUGF0aCA9IGAke3BhcmVudEZvbGRlci5wYXRofS8ke25ld0ZvbGRlck5hbWV9YDtcblx0XHRcdH1cblxuXHRcdFx0Y29uc3QgZXhpc3RpbmdGb2xkZXIgPSB0aGlzLmFwcC52YXVsdC5nZXRBYnN0cmFjdEZpbGVCeVBhdGgobmV3Rm9sZGVyUGF0aCk7XG5cdFx0XHRpZiAoZXhpc3RpbmdGb2xkZXIgaW5zdGFuY2VvZiBURm9sZGVyKSB7XG5cdFx0XHRcdG5ldyBOb3RpY2UoYEZvbGRlciBhbHJlYWR5IGV4aXN0cyBhdCAke25ld0ZvbGRlclBhdGh9LmApO1xuXHRcdFx0XHRyZXR1cm4gbnVsbDtcblx0XHRcdH1cblxuXHRcdFx0dHJ5IHtcblx0XHRcdFx0YXdhaXQgdGhpcy5hcHAuZmlsZU1hbmFnZXIucmVuYW1lRmlsZShmaWxlLnBhcmVudCwgbmV3Rm9sZGVyUGF0aCk7XG5cdFx0XHR9IGNhdGNoIChlcnJvcikge1xuXHRcdFx0XHRjb25zdCBlcnJvck1lc3NhZ2UgPSBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvcik7XG5cdFx0XHRcdG5ldyBOb3RpY2UoYEZhaWxlZCB0byByZW5hbWUgZm9sZGVyOiAke2Vycm9yTWVzc2FnZX0uYCk7XG5cdFx0XHRcdHJldHVybiBudWxsO1xuXHRcdFx0fVxuXG5cdFx0XHRjb25zdCBuZXdGaWxlUGF0aCA9IGAke25ld0ZvbGRlclBhdGh9LyR7ZmlsZS5uYW1lfWA7XG5cdFx0XHRjb25zdCBuZXdGaWxlID0gdGhpcy5hcHAudmF1bHQuZ2V0QWJzdHJhY3RGaWxlQnlQYXRoKG5ld0ZpbGVQYXRoKTtcblx0XHRcdGlmICghKG5ld0ZpbGUgaW5zdGFuY2VvZiBURmlsZSkpIHtcblx0XHRcdFx0bmV3IE5vdGljZShcIkZhaWxlZCB0byBsb2NhdGUgcmVuYW1lZCBmaWxlLlwiKTtcblx0XHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0XHR9XG5cblxuXHRcdFx0cmV0dXJuIG5ld0ZpbGU7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGlmICghZmlsZS5wYXJlbnQpIHtcblx0XHRcdFx0bmV3IE5vdGljZShcIkNhbm5vdCByZW5hbWU6IGZpbGUgaGFzIG5vIHBhcmVudCBmb2xkZXIuXCIpO1xuXHRcdFx0XHRyZXR1cm4gbnVsbDtcblx0XHRcdH1cblx0XHRcdHByZWZpeCA9IGZpbGUuYmFzZW5hbWUuc3RhcnRzV2l0aChcIl9cIikgPyBcIl9cIiA6IFwiXCI7XG5cdFx0XHQvLyBQcmVzZXJ2ZSB0aGUgb3JpZ2luYWwgZmlsZSBleHRlbnNpb25cblx0XHRcdGNvbnN0IGV4dGVuc2lvbiA9IGZpbGUuZXh0ZW5zaW9uO1xuXHRcdFx0Y29uc3QgbmV3TmFtZSA9IGAke3ByZWZpeH0ke2tlYmFiVGl0bGV9LiR7ZXh0ZW5zaW9ufWA7XG5cdFx0XHRjb25zdCBuZXdQYXRoID0gYCR7ZmlsZS5wYXJlbnQucGF0aH0vJHtuZXdOYW1lfWA7XG5cblx0XHRcdGNvbnN0IGV4aXN0aW5nRmlsZSA9IHRoaXMuYXBwLnZhdWx0LmdldEFic3RyYWN0RmlsZUJ5UGF0aChuZXdQYXRoKTtcblx0XHRcdGlmIChleGlzdGluZ0ZpbGUgaW5zdGFuY2VvZiBURmlsZSAmJiBleGlzdGluZ0ZpbGUgIT09IGZpbGUpIHtcblx0XHRcdFx0bmV3IE5vdGljZShgRmlsZSBhbHJlYWR5IGV4aXN0cyBhdCAke25ld1BhdGh9LmApO1xuXHRcdFx0XHRyZXR1cm4gbnVsbDtcblx0XHRcdH1cblxuXHRcdFx0Ly8gVXNlIGZpbGVNYW5hZ2VyLnJlbmFtZUZpbGUoKSB3aGljaCBhdXRvbWF0aWNhbGx5IHVwZGF0ZXMgbGlua3Ncblx0XHRcdGF3YWl0IHRoaXMuYXBwLmZpbGVNYW5hZ2VyLnJlbmFtZUZpbGUoZmlsZSwgbmV3UGF0aCk7XG5cdFx0XHRjb25zdCBuZXdGaWxlID0gdGhpcy5hcHAudmF1bHQuZ2V0QWJzdHJhY3RGaWxlQnlQYXRoKG5ld1BhdGgpO1xuXHRcdFx0aWYgKCEobmV3RmlsZSBpbnN0YW5jZW9mIFRGaWxlKSkge1xuXHRcdFx0XHRuZXcgTm90aWNlKFwiRmFpbGVkIHRvIGxvY2F0ZSByZW5hbWVkIGZpbGUuXCIpO1xuXHRcdFx0XHRyZXR1cm4gbnVsbDtcblx0XHRcdH1cblxuXG5cdFx0XHRyZXR1cm4gbmV3RmlsZTtcblx0XHR9XG5cdH1cblxuXHRwcml2YXRlIGFzeW5jIHJlbmFtZUZpbGVTdHJ1Y3R1cmUoZmlsZTogVEZpbGUsIGtlYmFiVGl0bGU6IHN0cmluZywgcHJlZml4OiBzdHJpbmcsIGNvbnRlbnRUeXBlOiBDb250ZW50VHlwZSB8IG51bGwpOiBQcm9taXNlPFRGaWxlIHwgbnVsbD4ge1xuXHRcdGlmICghZmlsZS5wYXJlbnQpIHtcblx0XHRcdG5ldyBOb3RpY2UoXCJDYW5ub3QgcmVuYW1lOiBmaWxlIGhhcyBubyBwYXJlbnQgZm9sZGVyLlwiKTtcblx0XHRcdHJldHVybiBudWxsO1xuXHRcdH1cblxuXHRcdC8vIENoZWNrIGlmIHRoaXMgaXMgYW4gaW5kZXggZmlsZSAtIGlmIHNvLCByZW5hbWUgdGhlIHBhcmVudCBmb2xkZXIgaW5zdGVhZFxuXHRcdC8vIFNtYXJ0IGRldGVjdGlvbjogb25seSB0cmVhdCBhcyBpbmRleCBpZiBpbmRleEZpbGVOYW1lIGlzIHNwZWNpZmllZCBhbmQgbWF0Y2hlc1xuXHRcdGNvbnN0IGluZGV4RmlsZU5hbWUgPSBjb250ZW50VHlwZT8uaW5kZXhGaWxlTmFtZSB8fCBcIlwiO1xuXHRcdGNvbnN0IGlzSW5kZXggPSBpbmRleEZpbGVOYW1lICYmXG5cdFx0XHRpbmRleEZpbGVOYW1lLnRyaW0oKSAhPT0gXCJcIiAmJlxuXHRcdFx0ZmlsZS5iYXNlbmFtZSA9PT0gaW5kZXhGaWxlTmFtZTtcblxuXHRcdGlmIChpc0luZGV4KSB7XG5cdFx0XHRwcmVmaXggPSBmaWxlLnBhcmVudC5uYW1lLnN0YXJ0c1dpdGgoXCJfXCIpID8gXCJfXCIgOiBcIlwiO1xuXHRcdFx0Y29uc3QgbmV3Rm9sZGVyTmFtZSA9IGAke3ByZWZpeH0ke2tlYmFiVGl0bGV9YDtcblx0XHRcdGNvbnN0IHBhcmVudEZvbGRlciA9IGZpbGUucGFyZW50LnBhcmVudDtcblx0XHRcdGlmICghcGFyZW50Rm9sZGVyKSB7XG5cdFx0XHRcdG5ldyBOb3RpY2UoXCJDYW5ub3QgcmVuYW1lOiBwYXJlbnQgZm9sZGVyIGhhcyBubyBwYXJlbnQuXCIpO1xuXHRcdFx0XHRyZXR1cm4gbnVsbDtcblx0XHRcdH1cblx0XHRcdC8vIEZpeCBwYXRoIGNvbnN0cnVjdGlvbiB0byBhdm9pZCBkb3VibGUgc2xhc2hlc1xuXHRcdFx0bGV0IG5ld0ZvbGRlclBhdGg6IHN0cmluZztcblx0XHRcdGlmIChwYXJlbnRGb2xkZXIucGF0aCA9PT0gXCJcIiB8fCBwYXJlbnRGb2xkZXIucGF0aCA9PT0gXCIvXCIpIHtcblx0XHRcdFx0Ly8gUGFyZW50IGlzIHZhdWx0IHJvb3Rcblx0XHRcdFx0bmV3Rm9sZGVyUGF0aCA9IG5ld0ZvbGRlck5hbWU7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHQvLyBQYXJlbnQgaXMgaW4gYSBzdWJmb2xkZXJcblx0XHRcdFx0bmV3Rm9sZGVyUGF0aCA9IGAke3BhcmVudEZvbGRlci5wYXRofS8ke25ld0ZvbGRlck5hbWV9YDtcblx0XHRcdH1cblxuXHRcdFx0Y29uc3QgZXhpc3RpbmdGb2xkZXIgPSB0aGlzLmFwcC52YXVsdC5nZXRBYnN0cmFjdEZpbGVCeVBhdGgobmV3Rm9sZGVyUGF0aCk7XG5cdFx0XHRpZiAoZXhpc3RpbmdGb2xkZXIgaW5zdGFuY2VvZiBURm9sZGVyKSB7XG5cdFx0XHRcdG5ldyBOb3RpY2UoYEZvbGRlciBhbHJlYWR5IGV4aXN0cyBhdCAke25ld0ZvbGRlclBhdGh9LmApO1xuXHRcdFx0XHRyZXR1cm4gbnVsbDtcblx0XHRcdH1cblxuXHRcdFx0Ly8gQ2FsY3VsYXRlIHRoZSBuZXcgZmlsZSBwYXRoIGJlZm9yZSByZW5hbWluZ1xuXHRcdFx0Y29uc3QgbmV3RmlsZVBhdGggPSBgJHtuZXdGb2xkZXJQYXRofS8ke2ZpbGUubmFtZX1gO1xuXG5cdFx0XHQvLyBUcmFjayB0aGF0IHRoaXMgZmlsZSB3aWxsIGJlIGNyZWF0ZWQgYnkgdGhlIHBsdWdpbiBCRUZPUkUgcmVuYW1pbmdcblx0XHRcdC8vIFRoaXMgcHJldmVudHMgdGhlIGNyZWF0ZSBldmVudCBmcm9tIHRyaWdnZXJpbmcgYW5vdGhlciBtb2RhbFxuXHRcdFx0aWYgKHRoaXMucGx1Z2luKSB7XG5cdFx0XHRcdHRoaXMucGx1Z2luLnBsdWdpbkNyZWF0ZWRGaWxlcy5zZXQobmV3RmlsZVBhdGgsIERhdGUubm93KCkpO1xuXHRcdFx0fVxuXG5cdFx0XHR0cnkge1xuXHRcdFx0XHRhd2FpdCB0aGlzLmFwcC5maWxlTWFuYWdlci5yZW5hbWVGaWxlKGZpbGUucGFyZW50LCBuZXdGb2xkZXJQYXRoKTtcblx0XHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHRcdGNvbnNvbGUuZXJyb3IoJ0ZpbGVPcGVyYXRpb25zOiBGb2xkZXIgcmVuYW1lIGZhaWxlZDonLCBlcnJvcik7XG5cdFx0XHRcdGNvbnN0IGVycm9yTWVzc2FnZSA9IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogU3RyaW5nKGVycm9yKTtcblx0XHRcdFx0bmV3IE5vdGljZShgRmFpbGVkIHRvIHJlbmFtZSBmb2xkZXI6ICR7ZXJyb3JNZXNzYWdlfS5gKTtcblx0XHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IG5ld0ZpbGUgPSB0aGlzLmFwcC52YXVsdC5nZXRBYnN0cmFjdEZpbGVCeVBhdGgobmV3RmlsZVBhdGgpO1xuXHRcdFx0aWYgKCEobmV3RmlsZSBpbnN0YW5jZW9mIFRGaWxlKSkge1xuXHRcdFx0XHRuZXcgTm90aWNlKFwiRmFpbGVkIHRvIGxvY2F0ZSByZW5hbWVkIGZpbGUuXCIpO1xuXHRcdFx0XHRyZXR1cm4gbnVsbDtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIG5ld0ZpbGU7XG5cdFx0fVxuXG5cdFx0Ly8gRm9yIG5vbi1pbmRleCBmaWxlcywgcmVuYW1lIHRoZSBmaWxlIGl0c2VsZlxuXHRcdHByZWZpeCA9IGZpbGUuYmFzZW5hbWUuc3RhcnRzV2l0aChcIl9cIikgPyBcIl9cIiA6IFwiXCI7XG5cdFx0Ly8gUHJlc2VydmUgdGhlIG9yaWdpbmFsIGZpbGUgZXh0ZW5zaW9uXG5cdFx0Y29uc3QgZXh0ZW5zaW9uID0gZmlsZS5leHRlbnNpb247XG5cdFx0Y29uc3QgbmV3TmFtZSA9IGAke3ByZWZpeH0ke2tlYmFiVGl0bGV9LiR7ZXh0ZW5zaW9ufWA7XG5cblx0XHQvLyBGaXggcGF0aCBjb25zdHJ1Y3Rpb24gdG8gYXZvaWQgZG91YmxlIHNsYXNoZXNcblx0XHRsZXQgbmV3UGF0aDogc3RyaW5nO1xuXHRcdGlmIChmaWxlLnBhcmVudC5wYXRoID09PSBcIlwiIHx8IGZpbGUucGFyZW50LnBhdGggPT09IFwiL1wiKSB7XG5cdFx0XHQvLyBGaWxlIGlzIGluIHZhdWx0IHJvb3Rcblx0XHRcdG5ld1BhdGggPSBuZXdOYW1lO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBGaWxlIGlzIGluIGEgc3ViZm9sZGVyXG5cdFx0XHRuZXdQYXRoID0gYCR7ZmlsZS5wYXJlbnQucGF0aH0vJHtuZXdOYW1lfWA7XG5cdFx0fVxuXG5cdFx0Y29uc3QgZXhpc3RpbmdGaWxlID0gdGhpcy5hcHAudmF1bHQuZ2V0QWJzdHJhY3RGaWxlQnlQYXRoKG5ld1BhdGgpO1xuXHRcdGlmIChleGlzdGluZ0ZpbGUgaW5zdGFuY2VvZiBURmlsZSAmJiBleGlzdGluZ0ZpbGUgIT09IGZpbGUpIHtcblx0XHRcdG5ldyBOb3RpY2UoYEZpbGUgYWxyZWFkeSBleGlzdHMgYXQgJHtuZXdQYXRofS5gKTtcblx0XHRcdHJldHVybiBudWxsO1xuXHRcdH1cblxuXHRcdC8vIFRyYWNrIHRoYXQgdGhpcyBmaWxlIHdpbGwgYmUgY3JlYXRlZCBieSB0aGUgcGx1Z2luIEJFRk9SRSByZW5hbWluZ1xuXHRcdC8vIFRoaXMgcHJldmVudHMgdGhlIGNyZWF0ZSBldmVudCBmcm9tIHRyaWdnZXJpbmcgYW5vdGhlciBtb2RhbFxuXHRcdGlmICh0aGlzLnBsdWdpbikge1xuXHRcdFx0dGhpcy5wbHVnaW4ucGx1Z2luQ3JlYXRlZEZpbGVzLnNldChuZXdQYXRoLCBEYXRlLm5vdygpKTtcblx0XHR9XG5cblx0XHR0cnkge1xuXHRcdFx0YXdhaXQgdGhpcy5hcHAuZmlsZU1hbmFnZXIucmVuYW1lRmlsZShmaWxlLCBuZXdQYXRoKTtcblx0XHR9IGNhdGNoIChlcnJvcikge1xuXHRcdFx0Y29uc29sZS5lcnJvcignRmlsZU9wZXJhdGlvbnM6IEZpbGUgcmVuYW1lIGZhaWxlZDonLCBlcnJvcik7XG5cdFx0XHRjb25zdCBlcnJvck1lc3NhZ2UgPSBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvcik7XG5cdFx0XHRuZXcgTm90aWNlKGBGYWlsZWQgdG8gcmVuYW1lIGZpbGU6ICR7ZXJyb3JNZXNzYWdlfS5gKTtcblx0XHRcdHJldHVybiBudWxsO1xuXHRcdH1cblxuXHRcdGNvbnN0IG5ld0ZpbGUgPSB0aGlzLmFwcC52YXVsdC5nZXRBYnN0cmFjdEZpbGVCeVBhdGgobmV3UGF0aCk7XG5cdFx0aWYgKCEobmV3RmlsZSBpbnN0YW5jZW9mIFRGaWxlKSkge1xuXHRcdFx0bmV3IE5vdGljZShcIkZhaWxlZCB0byBsb2NhdGUgcmVuYW1lZCBmaWxlLlwiKTtcblx0XHRcdHJldHVybiBudWxsO1xuXHRcdH1cblxuXHRcdHJldHVybiBuZXdGaWxlO1xuXHR9XG59XG4iLCAiLyoqXHJcbiAqIFV0aWxpdHkgZnVuY3Rpb25zIGZvciBtYXRjaGluZyBmaWxlIHBhdGhzIGFnYWluc3QgZm9sZGVyIHBhdHRlcm5zIHdpdGggd2lsZGNhcmQgc3VwcG9ydC5cclxuICogXHJcbiAqIFdpbGRjYXJkIHBhdHRlcm5zOlxyXG4gKiAtIGBkb2NzYCBtYXRjaGVzIGBkb2NzL2AgYW5kIGFueXRoaW5nIHVuZGVyIGl0XHJcbiAqIC0gYGRvY3Mve2FzdGVyaXNrfWAgbWF0Y2hlcyBgZG9jcy9hbnl0aGluZy9gIGFuZCBhbnl0aGluZyB1bmRlciBpdCAob25lIGxldmVsIGRlZXApXHJcbiAqIC0gYGRvY3Mve2FzdGVyaXNrfS97YXN0ZXJpc2t9YCBtYXRjaGVzIGBkb2NzL2FueXRoaW5nL2FueXRoaW5nL2AgYW5kIGFueXRoaW5nIHVuZGVyIGl0ICh0d28gbGV2ZWxzIGRlZXApXHJcbiAqIC0gZXRjLlxyXG4gKiBcclxuICogTm90ZToge2FzdGVyaXNrfSByZXByZXNlbnRzIHRoZSB3aWxkY2FyZCBjaGFyYWN0ZXIgKlxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBDaGVja3MgaWYgYSBmaWxlIHBhdGggbWF0Y2hlcyBhIGZvbGRlciBwYXR0ZXJuIChzdXBwb3J0cyB3aWxkY2FyZHMpXHJcbiAqIEBwYXJhbSBmaWxlUGF0aCBUaGUgZmlsZSBwYXRoIHRvIGNoZWNrIChlLmcuLCBcImRvY3MvZXhhbXBsZS1hL2dldHRpbmctc3RhcnRlZC5tZFwiKVxyXG4gKiBAcGFyYW0gZm9sZGVyUGF0dGVybiBUaGUgZm9sZGVyIHBhdHRlcm4gLSB1c2UgYXN0ZXJpc2sgZm9yIHdpbGRjYXJkcyAoZS5nLiwgXCJkb2NzXCIsIFwiZG9jcy9hc3Rlcmlza1wiLCBcImRvY3MvYXN0ZXJpc2svYXN0ZXJpc2tcIilcclxuICogQHJldHVybnMgdHJ1ZSBpZiB0aGUgZmlsZSBwYXRoIG1hdGNoZXMgdGhlIHBhdHRlcm5cclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBtYXRjaGVzRm9sZGVyUGF0dGVybihmaWxlUGF0aDogc3RyaW5nLCBmb2xkZXJQYXR0ZXJuOiBzdHJpbmcpOiBib29sZWFuIHtcclxuXHQvLyBOb3JtYWxpemUgZm9yIGNhc2UtaW5zZW5zaXRpdmUgbWF0Y2hpbmdcclxuXHRjb25zdCBub3JtYWxpemVkRmlsZVBhdGggPSBmaWxlUGF0aC50b0xvd2VyQ2FzZSgpO1xyXG5cdGNvbnN0IG5vcm1hbGl6ZWRQYXR0ZXJuID0gZm9sZGVyUGF0dGVybi50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL15cXC98XFwvJC9nLCBcIlwiKTtcclxuXHJcblx0Ly8gSGFuZGxlIGVtcHR5IGZvbGRlciBwYXR0ZXJuIChyb290IGZvbGRlcikgLSBtYXRjaGVzIGZpbGVzIGluIHZhdWx0IHJvb3Qgb25seVxyXG5cdGlmICghbm9ybWFsaXplZFBhdHRlcm4gfHwgbm9ybWFsaXplZFBhdHRlcm4udHJpbSgpID09PSBcIlwiKSB7XHJcblx0XHRyZXR1cm4gIW5vcm1hbGl6ZWRGaWxlUGF0aC5pbmNsdWRlcyhcIi9cIikgfHwgKG5vcm1hbGl6ZWRGaWxlUGF0aC5zcGxpdChcIi9cIikubGVuZ3RoID09PSAxKTtcclxuXHR9XHJcblxyXG5cdC8vIElmIHBhdHRlcm4gZG9lc24ndCBjb250YWluIHdpbGRjYXJkcywgdXNlIHNpbXBsZSBwcmVmaXggbWF0Y2hpbmdcclxuXHRpZiAoIW5vcm1hbGl6ZWRQYXR0ZXJuLmluY2x1ZGVzKFwiKlwiKSkge1xyXG5cdFx0cmV0dXJuIG5vcm1hbGl6ZWRGaWxlUGF0aCA9PT0gbm9ybWFsaXplZFBhdHRlcm4gfHwgbm9ybWFsaXplZEZpbGVQYXRoLnN0YXJ0c1dpdGgobm9ybWFsaXplZFBhdHRlcm4gKyBcIi9cIik7XHJcblx0fVxyXG5cclxuXHQvLyBDb252ZXJ0IHdpbGRjYXJkIHBhdHRlcm4gdG8gcmVnZXhcclxuXHQvLyBFc2NhcGUgc3BlY2lhbCByZWdleCBjaGFyYWN0ZXJzIGV4Y2VwdCAqXHJcblx0Y29uc3QgZXNjYXBlZFBhdHRlcm4gPSBub3JtYWxpemVkUGF0dGVyblxyXG5cdFx0LnJlcGxhY2UoL1suKz9eJHt9KCl8W1xcXVxcXFxdL2csIFwiXFxcXCQmXCIpXHJcblx0XHQucmVwbGFjZSgvXFwqL2csIFwiW14vXStcIik7IC8vIFdpbGRjYXJkIG1hdGNoZXMgYW55IHBhdGggc2VnbWVudCAobm9uLXNsYXNoIGNoYXJhY3RlcnMpXHJcblxyXG5cdC8vIENyZWF0ZSByZWdleCB0aGF0IG1hdGNoZXMgdGhlIHBhdHRlcm4gYW5kIGFueXRoaW5nIGFmdGVyIGl0XHJcblx0Y29uc3QgcmVnZXhQYXR0ZXJuID0gYF4ke2VzY2FwZWRQYXR0ZXJufSg/Oi98JClgO1xyXG5cdGNvbnN0IHJlZ2V4ID0gbmV3IFJlZ0V4cChyZWdleFBhdHRlcm4pO1xyXG5cdHJldHVybiByZWdleC50ZXN0KG5vcm1hbGl6ZWRGaWxlUGF0aCk7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBHZXRzIHRoZSBkZXB0aCBvZiBhIGZvbGRlciBwYXR0ZXJuIChudW1iZXIgb2Ygc2VnbWVudHMpXHJcbiAqIFVzZWQgZm9yIHByaW9yaXRpemluZyBtb3JlIHNwZWNpZmljIHBhdHRlcm5zXHJcbiAqIEJsYW5rL3Jvb3QgZm9sZGVyIGhhcyBkZXB0aCAwIChsZWFzdCBzcGVjaWZpYylcclxuICogQHBhcmFtIGZvbGRlclBhdHRlcm4gVGhlIGZvbGRlciBwYXR0ZXJuXHJcbiAqIEByZXR1cm5zIFRoZSBudW1iZXIgb2YgcGF0aCBzZWdtZW50cyBpbiB0aGUgcGF0dGVybiAoMCBmb3Igcm9vdC9ibGFuaylcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRQYXR0ZXJuRGVwdGgoZm9sZGVyUGF0dGVybjogc3RyaW5nKTogbnVtYmVyIHtcclxuXHRpZiAoIWZvbGRlclBhdHRlcm4gfHwgZm9sZGVyUGF0dGVybi50cmltKCkgPT09IFwiXCIpIHJldHVybiAwO1xyXG5cdHJldHVybiBmb2xkZXJQYXR0ZXJuLnNwbGl0KFwiL1wiKS5sZW5ndGg7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBTb3J0cyBjb250ZW50IHR5cGVzIGJ5IHBhdHRlcm4gc3BlY2lmaWNpdHkgKG1vcmUgc3BlY2lmaWMgcGF0dGVybnMgZmlyc3QpXHJcbiAqIFRoaXMgZW5zdXJlcyB0aGF0IG1vcmUgc3BlY2lmaWMgcGF0dGVybnMgYXJlIGNoZWNrZWQgYmVmb3JlIGxlc3Mgc3BlY2lmaWMgb25lc1xyXG4gKiBCbGFuay9yb290IGZvbGRlciBwYXR0ZXJucyAoZGVwdGggMCkgYXJlIHNvcnRlZCBsYXN0IChsZWFzdCBzcGVjaWZpYylcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBzb3J0QnlQYXR0ZXJuU3BlY2lmaWNpdHk8VCBleHRlbmRzIHsgZm9sZGVyOiBzdHJpbmcgfT4odHlwZXM6IFRbXSk6IFRbXSB7XHJcblx0cmV0dXJuIFsuLi50eXBlc10uc29ydCgoYSwgYikgPT4ge1xyXG5cdFx0Y29uc3QgZGVwdGhBID0gZ2V0UGF0dGVybkRlcHRoKGEuZm9sZGVyKTtcclxuXHRcdGNvbnN0IGRlcHRoQiA9IGdldFBhdHRlcm5EZXB0aChiLmZvbGRlcik7XHJcblx0XHQvLyBNb3JlIHNwZWNpZmljIChkZWVwZXIpIHBhdHRlcm5zIGZpcnN0XHJcblx0XHQvLyBCbGFuayBwYXR0ZXJucyAoZGVwdGggMCkgd2lsbCBiZSBzb3J0ZWQgbGFzdFxyXG5cdFx0cmV0dXJuIGRlcHRoQiAtIGRlcHRoQTtcclxuXHR9KTtcclxufVxyXG5cclxuIiwgIi8qKlxyXG4gKiBDb252ZXJ0cyBhIHN0cmluZyB0byBrZWJhYi1jYXNlLlxyXG4gKiBAcGFyYW0gc3RyIFRoZSBzdHJpbmcgdG8gY29udmVydFxyXG4gKiBAcmV0dXJucyBLZWJhYi1jYXNlIHN0cmluZ1xyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIHRvS2ViYWJDYXNlKHN0cjogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBzdHJcclxuICAgICAgICAucmVwbGFjZSgvKFthLXowLTldKShbQS1aXSkvZywgJyQxLSQyJylcclxuICAgICAgICAucmVwbGFjZSgvKFtBLVpdKShbQS1aXVthLXpdKS9nLCAnJDEtJDIkMycpXHJcbiAgICAgICAgLnRvTG93ZXJDYXNlKClcclxuICAgICAgICAucmVwbGFjZSgvW15hLXowLTlcXHMtXS9nLCBcIlwiKVxyXG4gICAgICAgIC50cmltKClcclxuICAgICAgICAucmVwbGFjZSgvXFxzKy9nLCBcIi1cIilcclxuICAgICAgICAucmVwbGFjZSgvLSsvZywgXCItXCIpXHJcbiAgICAgICAgLnJlcGxhY2UoL14tfC0kL2csIFwiXCIpO1xyXG59XHJcbiIsICJpbXBvcnQgeyBBcHAsIFRGaWxlLCBOb3RpY2UgfSBmcm9tIFwib2JzaWRpYW5cIjtcclxuaW1wb3J0IHsgQXN0cm9Db21wb3NlclNldHRpbmdzLCBQYXJzZWRGcm9udG1hdHRlciwgVGVtcGxhdGVWYWx1ZXMsIEtOT1dOX0FSUkFZX0tFWVMsIENvbnRlbnRUeXBlSWQsIEFzdHJvQ29tcG9zZXJQbHVnaW5JbnRlcmZhY2UgfSBmcm9tIFwiLi4vdHlwZXNcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBUZW1wbGF0ZVBhcnNlciB7XHJcblx0Y29uc3RydWN0b3IocHJpdmF0ZSBhcHA6IEFwcCwgcHJpdmF0ZSBzZXR0aW5nczogQXN0cm9Db21wb3NlclNldHRpbmdzLCBwcml2YXRlIHBsdWdpbj86IEFzdHJvQ29tcG9zZXJQbHVnaW5JbnRlcmZhY2UpIHsgfVxyXG5cclxuXHQvLyBHZXQgZnJlc2ggc2V0dGluZ3MgZnJvbSBwbHVnaW4gaWYgYXZhaWxhYmxlLCBvdGhlcndpc2UgdXNlIHN0b3JlZCBzZXR0aW5nc1xyXG5cdHByaXZhdGUgZ2V0U2V0dGluZ3MoKTogQXN0cm9Db21wb3NlclNldHRpbmdzIHtcclxuXHRcdC8vIEFsd2F5cyBwcmVmZXIgcGx1Z2luIHNldHRpbmdzICh0aGV5J3JlIGtlcHQgdXAgdG8gZGF0ZSlcclxuXHRcdGlmICh0aGlzLnBsdWdpbj8uc2V0dGluZ3MpIHtcclxuXHRcdFx0cmV0dXJuIHRoaXMucGx1Z2luLnNldHRpbmdzO1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIHRoaXMuc2V0dGluZ3M7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBDb252ZXJ0IGEgc3RyaW5nIHRvIGtlYmFiLWNhc2UgZm9yIHNsdWcgZ2VuZXJhdGlvblxyXG5cdCAqL1xyXG5cdHByaXZhdGUgdG9LZWJhYkNhc2Uoc3RyOiBzdHJpbmcpOiBzdHJpbmcge1xyXG5cdFx0cmV0dXJuIHN0clxyXG5cdFx0XHQudG9Mb3dlckNhc2UoKVxyXG5cdFx0XHQucmVwbGFjZSgvW15hLXowLTlcXHMtXS9nLCBcIlwiKVxyXG5cdFx0XHQudHJpbSgpXHJcblx0XHRcdC5yZXBsYWNlKC9cXHMrL2csIFwiLVwiKVxyXG5cdFx0XHQucmVwbGFjZSgvLSsvZywgXCItXCIpXHJcblx0XHRcdC5yZXBsYWNlKC9eLXwtJC9nLCBcIlwiKTtcclxuXHR9XHJcblxyXG5cdHBhcnNlRnJvbnRtYXR0ZXIoY29udGVudDogc3RyaW5nKTogUGFyc2VkRnJvbnRtYXR0ZXIge1xyXG5cdFx0bGV0IHByb3BlcnRpZXNFbmQgPSAwO1xyXG5cdFx0bGV0IHByb3BlcnRpZXNUZXh0ID0gXCJcIjtcclxuXHRcdGNvbnN0IGV4aXN0aW5nUHJvcGVydGllczogUmVjb3JkPHN0cmluZywgc3RyaW5nW10+ID0ge307XHJcblxyXG5cdFx0Ly8gUGFyc2UgZXhpc3RpbmcgcHJvcGVydGllcyB3aXRoIGZhbGxiYWNrIGZvciBtaXNzaW5nIHNlY29uZCAtLS1cclxuXHRcdGlmIChjb250ZW50LnN0YXJ0c1dpdGgoXCItLS1cIikpIHtcclxuXHRcdFx0cHJvcGVydGllc0VuZCA9IGNvbnRlbnQuaW5kZXhPZihcIlxcbi0tLVwiLCAzKTtcclxuXHRcdFx0aWYgKHByb3BlcnRpZXNFbmQgPT09IC0xKSB7XHJcblx0XHRcdFx0cHJvcGVydGllc0VuZCA9IGNvbnRlbnQubGVuZ3RoOyAvLyBUcmVhdCBlbnRpcmUgY29udGVudCBhcyBwcm9wZXJ0aWVzIGlmIG5vIHNlY29uZCAtLS1cclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRwcm9wZXJ0aWVzRW5kICs9IDQ7IC8vIE1vdmUgcGFzdCB0aGUgc2Vjb25kIC0tLVxyXG5cdFx0XHR9XHJcblx0XHRcdHByb3BlcnRpZXNUZXh0ID0gY29udGVudC5zbGljZSg0LCBwcm9wZXJ0aWVzRW5kIC0gNCkudHJpbSgpO1xyXG5cclxuXHRcdFx0dHJ5IHtcclxuXHRcdFx0XHRsZXQgY3VycmVudEtleTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XHJcblx0XHRcdFx0Y29uc3QgYXJyYXlLZXlzID0gbmV3IFNldDxzdHJpbmc+KCk7IC8vIFRyYWNrIHdoaWNoIGtleXMgYXJlIGFycmF5c1xyXG5cclxuXHRcdFx0XHRwcm9wZXJ0aWVzVGV4dC5zcGxpdChcIlxcblwiKS5mb3JFYWNoKChsaW5lKSA9PiB7XHJcblx0XHRcdFx0XHRjb25zdCB0cmltbWVkTGluZSA9IGxpbmUudHJpbSgpO1xyXG5cclxuXHRcdFx0XHRcdC8vIE1hdGNoIHByb3BlcnR5IGxpbmVzIC0gbW9yZSBmbGV4aWJsZSByZWdleCB0byBoYW5kbGUgdmFyaW91cyBwcm9wZXJ0eSBuYW1lc1xyXG5cdFx0XHRcdFx0Y29uc3QgbWF0Y2ggPSB0cmltbWVkTGluZS5tYXRjaCgvXihbYS16QS1aX11bYS16QS1aMC05Xy1dKik6XFxzKiguKikkLyk7XHJcblx0XHRcdFx0XHRpZiAobWF0Y2gpIHtcclxuXHRcdFx0XHRcdFx0Y29uc3QgWywga2V5LCB2YWx1ZV0gPSBtYXRjaDtcclxuXHRcdFx0XHRcdFx0Y3VycmVudEtleSA9IGtleTtcclxuXHRcdFx0XHRcdFx0Y29uc3QgdHJpbW1lZFZhbHVlID0gdmFsdWUgPyB2YWx1ZS50cmltKCkgOiBcIlwiO1xyXG5cclxuXHRcdFx0XHRcdFx0Ly8gQ2hlY2sgZm9yIGJyYWNrZXQtc3ludGF4IGFycmF5czogW2l0ZW1dIG9yIFtcIml0ZW0xXCIsIFwiaXRlbTJcIl0gb3IgW2l0ZW0xLCBpdGVtMl1cclxuXHRcdFx0XHRcdFx0Y29uc3QgYnJhY2tldEFycmF5TWF0Y2ggPSB0cmltbWVkVmFsdWUubWF0Y2goL15cXFsoLiopXFxdJC8pO1xyXG5cdFx0XHRcdFx0XHRpZiAoYnJhY2tldEFycmF5TWF0Y2gpIHtcclxuXHRcdFx0XHRcdFx0XHQvLyBUaGlzIGlzIGEgYnJhY2tldC1mb3JtYXQgYXJyYXlcclxuXHRcdFx0XHRcdFx0XHRjb25zdCBhcnJheUNvbnRlbnQgPSBicmFja2V0QXJyYXlNYXRjaFsxXS50cmltKCk7XHJcblx0XHRcdFx0XHRcdFx0ZXhpc3RpbmdQcm9wZXJ0aWVzW2tleV0gPSBbXTtcclxuXHRcdFx0XHRcdFx0XHRhcnJheUtleXMuYWRkKGtleSk7IC8vIE1hcmsgdGhpcyBrZXkgYXMgYW4gYXJyYXlcclxuXHJcblx0XHRcdFx0XHRcdFx0aWYgKGFycmF5Q29udGVudCkge1xyXG5cdFx0XHRcdFx0XHRcdFx0Ly8gUGFyc2UgYXJyYXkgaXRlbXMgLSBoYW5kbGUgYm90aCBxdW90ZWQgYW5kIHVucXVvdGVkIHZhbHVlc1xyXG5cdFx0XHRcdFx0XHRcdFx0Ly8gU3BsaXQgYnkgY29tbWEsIGJ1dCByZXNwZWN0IHF1b3Rlc1xyXG5cdFx0XHRcdFx0XHRcdFx0Y29uc3QgaXRlbXM6IHN0cmluZ1tdID0gW107XHJcblx0XHRcdFx0XHRcdFx0XHRsZXQgY3VycmVudEl0ZW0gPSBcIlwiO1xyXG5cdFx0XHRcdFx0XHRcdFx0bGV0IGluUXVvdGVzID0gZmFsc2U7XHJcblx0XHRcdFx0XHRcdFx0XHRsZXQgcXVvdGVDaGFyID0gJyc7XHJcblxyXG5cdFx0XHRcdFx0XHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBhcnJheUNvbnRlbnQubGVuZ3RoOyBpKyspIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0Y29uc3QgY2hhciA9IGFycmF5Q29udGVudFtpXTtcclxuXHJcblx0XHRcdFx0XHRcdFx0XHRcdGlmICghaW5RdW90ZXMgJiYgKGNoYXIgPT09ICdcIicgfHwgY2hhciA9PT0gXCInXCIpKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0aW5RdW90ZXMgPSB0cnVlO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHF1b3RlQ2hhciA9IGNoYXI7XHJcblx0XHRcdFx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoaW5RdW90ZXMgJiYgY2hhciA9PT0gcXVvdGVDaGFyKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gQ2hlY2sgaWYgaXQncyBlc2NhcGVkXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKGkgPiAwICYmIGFycmF5Q29udGVudFtpIC0gMV0gPT09ICdcXFxcJykge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y3VycmVudEl0ZW0gKz0gY2hhcjtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0aW5RdW90ZXMgPSBmYWxzZTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHF1b3RlQ2hhciA9ICcnO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdFx0fSBlbHNlIGlmICghaW5RdW90ZXMgJiYgY2hhciA9PT0gJywnKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gRW5kIG9mIGN1cnJlbnQgaXRlbVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNvbnN0IHRyaW1tZWRJdGVtID0gY3VycmVudEl0ZW0udHJpbSgpO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmICh0cmltbWVkSXRlbSkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gUmVtb3ZlIHN1cnJvdW5kaW5nIHF1b3RlcyBpZiBwcmVzZW50XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjb25zdCB1bnF1b3RlZCA9IHRyaW1tZWRJdGVtLnJlcGxhY2UoL15bXCInXXxbXCInXSQvZywgJycpO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0aXRlbXMucHVzaCh1bnF1b3RlZCk7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGN1cnJlbnRJdGVtID0gXCJcIjtcclxuXHRcdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRjdXJyZW50SXRlbSArPSBjaGFyO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHRcdFx0Ly8gQWRkIHRoZSBsYXN0IGl0ZW1cclxuXHRcdFx0XHRcdFx0XHRcdGlmIChjdXJyZW50SXRlbS50cmltKCkpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0Y29uc3QgdHJpbW1lZEl0ZW0gPSBjdXJyZW50SXRlbS50cmltKCk7XHJcblx0XHRcdFx0XHRcdFx0XHRcdGNvbnN0IHVucXVvdGVkID0gdHJpbW1lZEl0ZW0ucmVwbGFjZSgvXltcIiddfFtcIiddJC9nLCAnJyk7XHJcblx0XHRcdFx0XHRcdFx0XHRcdGl0ZW1zLnB1c2godW5xdW90ZWQpO1xyXG5cdFx0XHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0XHRcdGV4aXN0aW5nUHJvcGVydGllc1trZXldID0gaXRlbXM7XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRcdC8vIE5vdCBhIGJyYWNrZXQgYXJyYXksIGNoZWNrIGZvciBvdGhlciBhcnJheSBmb3JtYXRzXHJcblx0XHRcdFx0XHRcdFx0Y29uc3QgaXNLbm93bkFycmF5S2V5ID0gS05PV05fQVJSQVlfS0VZUy5pbmNsdWRlcyhrZXkgYXMgdHlwZW9mIEtOT1dOX0FSUkFZX0tFWVNbbnVtYmVyXSk7XHJcblx0XHRcdFx0XHRcdFx0Y29uc3QgaXNFbXB0eUFycmF5ID0gIXRyaW1tZWRWYWx1ZSB8fCB0cmltbWVkVmFsdWUgPT09IFwiXCI7XHJcblx0XHRcdFx0XHRcdFx0Y29uc3QgaXNBcnJheVByb3BlcnR5ID0gaXNLbm93bkFycmF5S2V5IHx8IGlzRW1wdHlBcnJheTtcclxuXHJcblx0XHRcdFx0XHRcdFx0aWYgKGlzQXJyYXlQcm9wZXJ0eSkge1xyXG5cdFx0XHRcdFx0XHRcdFx0ZXhpc3RpbmdQcm9wZXJ0aWVzW2tleV0gPSBbXTtcclxuXHRcdFx0XHRcdFx0XHRcdGFycmF5S2V5cy5hZGQoa2V5KTsgLy8gTWFyayB0aGlzIGtleSBhcyBhbiBhcnJheVxyXG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdFx0XHQvLyBTdHJpcCBzdXJyb3VuZGluZyBxdW90ZXMgZnJvbSBzdHJpbmcgdmFsdWVzXHJcblx0XHRcdFx0XHRcdFx0XHRjb25zdCB1bnF1b3RlZFZhbHVlID0gdHJpbW1lZFZhbHVlLnJlcGxhY2UoL15bXCInXXxbXCInXSQvZywgJycpO1xyXG5cdFx0XHRcdFx0XHRcdFx0ZXhpc3RpbmdQcm9wZXJ0aWVzW2tleV0gPSBbdW5xdW90ZWRWYWx1ZV07XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9IGVsc2UgaWYgKGN1cnJlbnRLZXkgJiYgdHJpbW1lZExpbmUuc3RhcnRzV2l0aChcIi0gXCIpKSB7XHJcblx0XHRcdFx0XHRcdC8vIENoZWNrIGlmIGN1cnJlbnQga2V5IGlzIGFuIGFycmF5IHByb3BlcnR5XHJcblx0XHRcdFx0XHRcdGNvbnN0IGlzQXJyYXlQcm9wZXJ0eSA9IGFycmF5S2V5cy5oYXMoY3VycmVudEtleSk7XHJcblxyXG5cdFx0XHRcdFx0XHRpZiAoaXNBcnJheVByb3BlcnR5KSB7XHJcblx0XHRcdFx0XHRcdFx0Y29uc3QgaXRlbSA9IHRyaW1tZWRMaW5lLnJlcGxhY2UoL14tXFxzKi8sIFwiXCIpO1xyXG5cdFx0XHRcdFx0XHRcdGlmIChpdGVtKSBleGlzdGluZ1Byb3BlcnRpZXNbY3VycmVudEtleV0ucHVzaChpdGVtKTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fSBlbHNlIGlmICh0cmltbWVkTGluZSAmJiAhdHJpbW1lZExpbmUuc3RhcnRzV2l0aChcIi0gXCIpICYmICF0cmltbWVkTGluZS5zdGFydHNXaXRoKFwiI1wiKSkge1xyXG5cdFx0XHRcdFx0XHQvLyBIYW5kbGUgdW5yZWNvZ25pemVkIHByb3BlcnRpZXMgdGhhdCBkb24ndCBtYXRjaCB0aGUgc3RhbmRhcmQgZm9ybWF0XHJcblx0XHRcdFx0XHRcdC8vIFRoaXMgaXMgYSBmYWxsYmFjayB0byBwcmVzZXJ2ZSBwcm9wZXJ0aWVzIHRoYXQgbWlnaHQgaGF2ZSBzcGVjaWFsIGZvcm1hdHRpbmdcclxuXHRcdFx0XHRcdFx0Y29uc3Qga2V5TWF0Y2ggPSB0cmltbWVkTGluZS5tYXRjaCgvXihbXjpdKyk6XFxzKiguKikkLyk7XHJcblx0XHRcdFx0XHRcdGlmIChrZXlNYXRjaCkge1xyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IFssIGtleSwgdmFsdWVdID0ga2V5TWF0Y2g7XHJcblx0XHRcdFx0XHRcdFx0aWYgKCFleGlzdGluZ1Byb3BlcnRpZXNba2V5XSkge1xyXG5cdFx0XHRcdFx0XHRcdFx0ZXhpc3RpbmdQcm9wZXJ0aWVzW2tleV0gPSBbdmFsdWUgPyB2YWx1ZS50cmltKCkgOiBcIlwiXTtcclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9KTtcclxuXHRcdFx0XHQvLyBQcmVzZXJ2ZSBhcnJheSBrZXlzIGlmIHRoZXkgZXhpc3Qgd2l0aG91dCB2YWx1ZXNcclxuXHRcdFx0XHRLTk9XTl9BUlJBWV9LRVlTLmZvckVhY2goa2V5ID0+IHtcclxuXHRcdFx0XHRcdGlmIChwcm9wZXJ0aWVzVGV4dC5pbmNsdWRlcyhrZXkgKyAnOicpICYmICFleGlzdGluZ1Byb3BlcnRpZXNba2V5XSkge1xyXG5cdFx0XHRcdFx0XHRleGlzdGluZ1Byb3BlcnRpZXNba2V5XSA9IFtdO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHR9IGNhdGNoIHtcclxuXHRcdFx0XHQvLyBGYWxsYmFjayB0byB0ZW1wbGF0ZSBpZiBwYXJzaW5nIGZhaWxzXHJcblx0XHRcdFx0bmV3IE5vdGljZShcIkZhbGxpbmcgYmFjayB0byB0ZW1wbGF0ZSBkdWUgdG8gcGFyc2luZyBlcnJvci5cIik7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHRjb25zdCBib2R5Q29udGVudCA9IGNvbnRlbnQuc2xpY2UocHJvcGVydGllc0VuZCk7XHJcblx0XHRyZXR1cm4ge1xyXG5cdFx0XHRwcm9wZXJ0aWVzOiBleGlzdGluZ1Byb3BlcnRpZXMsXHJcblx0XHRcdHByb3BlcnRpZXNUZXh0LFxyXG5cdFx0XHRwcm9wZXJ0aWVzRW5kLFxyXG5cdFx0XHRib2R5Q29udGVudFxyXG5cdFx0fTtcclxuXHR9XHJcblxyXG5cdHBhcnNlVGVtcGxhdGUodGVtcGxhdGVTdHJpbmc6IHN0cmluZywgdGl0bGU6IHN0cmluZyk6IHsgdGVtcGxhdGVQcm9wczogc3RyaW5nW107IHRlbXBsYXRlVmFsdWVzOiBUZW1wbGF0ZVZhbHVlcyB9IHtcclxuXHRcdGNvbnN0IHRlbXBsYXRlTGluZXMgPSB0ZW1wbGF0ZVN0cmluZy5zcGxpdChcIlxcblwiKTtcclxuXHRcdGNvbnN0IHRlbXBsYXRlUHJvcHM6IHN0cmluZ1tdID0gW107XHJcblx0XHRjb25zdCB0ZW1wbGF0ZVZhbHVlczogVGVtcGxhdGVWYWx1ZXMgPSB7fTtcclxuXHRcdGxldCBpblByb3BlcnRpZXMgPSBmYWxzZTtcclxuXHJcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHRlbXBsYXRlTGluZXMubGVuZ3RoOyBpKyspIHtcclxuXHRcdFx0Y29uc3QgbGluZSA9IHRlbXBsYXRlTGluZXNbaV0udHJpbSgpO1xyXG5cdFx0XHRpZiAobGluZSA9PT0gXCItLS1cIikge1xyXG5cdFx0XHRcdGluUHJvcGVydGllcyA9ICFpblByb3BlcnRpZXM7XHJcblx0XHRcdFx0aWYgKCFpblByb3BlcnRpZXMpIHtcclxuXHRcdFx0XHRcdGJyZWFrOyAvLyBTdG9wIGF0IHNlY29uZCAtLS0gdG8gZXhjbHVkZSBwb3N0LXByb3BlcnR5IGNvbnRlbnRcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0Y29udGludWU7XHJcblx0XHRcdH1cclxuXHRcdFx0aWYgKGluUHJvcGVydGllcykge1xyXG5cdFx0XHRcdGNvbnN0IG1hdGNoID0gbGluZS5tYXRjaCgvXihcXHcrKTpcXHMqKC4qKSQvKTtcclxuXHRcdFx0XHRpZiAobWF0Y2gpIHtcclxuXHRcdFx0XHRcdGNvbnN0IFssIGtleSwgdmFsdWVdID0gbWF0Y2g7XHJcblx0XHRcdFx0XHR0ZW1wbGF0ZVByb3BzLnB1c2goa2V5KTtcclxuXHJcblx0XHRcdFx0XHQvLyBDaGVjayBpZiB0aGlzIGlzIGFuIGFycmF5IHByb3BlcnR5IChrbm93biBhcnJheSBrZXlzIG9yIFlBTUwgbGlzdCBmb3JtYXQpXHJcblx0XHRcdFx0XHRjb25zdCBpc0tub3duQXJyYXlLZXkgPSBLTk9XTl9BUlJBWV9LRVlTLmluY2x1ZGVzKGtleSBhcyB0eXBlb2YgS05PV05fQVJSQVlfS0VZU1tudW1iZXJdKTtcclxuXHRcdFx0XHRcdC8vIENoZWNrIGlmIGl0J3MgYSBZQU1MIGxpc3QgZm9ybWF0IChubyB2YWx1ZSBhZnRlciBjb2xvbiwgZW1wdHkgYnJhY2tldHMsIG9yIGVtcHR5IHZhbHVlIG1lYW5zIGl0J3MgYW4gYXJyYXkpXHJcblx0XHRcdFx0XHRjb25zdCBpc0VtcHR5QXJyYXkgPSAhdmFsdWUgfHwgdmFsdWUudHJpbSgpID09PSBcIlwiIHx8IHZhbHVlLnRyaW0oKSA9PT0gXCJbXVwiO1xyXG5cdFx0XHRcdFx0Y29uc3QgaXNBcnJheVByb3BlcnR5ID0gaXNLbm93bkFycmF5S2V5IHx8IGlzRW1wdHlBcnJheTtcclxuXHJcblx0XHRcdFx0XHRpZiAoaXNBcnJheVByb3BlcnR5KSB7XHJcblx0XHRcdFx0XHRcdC8vIEhhbmRsZSBhcnJheSBwcm9wZXJ0aWVzXHJcblx0XHRcdFx0XHRcdGlmICh2YWx1ZSAmJiB2YWx1ZS5zdGFydHNXaXRoKFwiW1wiKSkge1xyXG5cdFx0XHRcdFx0XHRcdC8vIEhhbmRsZSBicmFja2V0IGZvcm1hdDogW1wiaXRlbTFcIiwgXCJpdGVtMlwiXVxyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IGl0ZW1zID0gdmFsdWVcclxuXHRcdFx0XHRcdFx0XHRcdC5yZXBsYWNlKC9bW1xcXV0vZywgXCJcIilcclxuXHRcdFx0XHRcdFx0XHRcdC5zcGxpdChcIixcIilcclxuXHRcdFx0XHRcdFx0XHRcdC5tYXAodCA9PiB0LnRyaW0oKSlcclxuXHRcdFx0XHRcdFx0XHRcdC5maWx0ZXIodCA9PiB0KTtcclxuXHRcdFx0XHRcdFx0XHR0ZW1wbGF0ZVZhbHVlc1trZXldID0gaXRlbXM7XHJcblx0XHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdFx0Ly8gSGFuZGxlIFlBTUwgbGlzdCBmb3JtYXQ6IGVtcHR5IG9yIHdpdGggLSBpdGVtc1xyXG5cdFx0XHRcdFx0XHRcdHRlbXBsYXRlVmFsdWVzW2tleV0gPSBbXTtcclxuXHRcdFx0XHRcdFx0XHQvLyBMb29rIGFoZWFkIGZvciBpdGVtIGxpc3RcclxuXHRcdFx0XHRcdFx0XHRmb3IgKGxldCBqID0gaSArIDE7IGogPCB0ZW1wbGF0ZUxpbmVzLmxlbmd0aDsgaisrKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRjb25zdCBuZXh0TGluZSA9IHRlbXBsYXRlTGluZXNbal0udHJpbSgpO1xyXG5cdFx0XHRcdFx0XHRcdFx0aWYgKG5leHRMaW5lLnN0YXJ0c1dpdGgoXCItIFwiKSkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRjb25zdCBpdGVtID0gbmV4dExpbmUucmVwbGFjZSgvXi1cXHMqLywgXCJcIikudHJpbSgpO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoaXRlbSkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNvbnN0IGFycmF5VmFsdWUgPSB0ZW1wbGF0ZVZhbHVlc1trZXldO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmIChBcnJheS5pc0FycmF5KGFycmF5VmFsdWUpKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRhcnJheVZhbHVlLnB1c2goaXRlbSk7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHR9IGVsc2UgaWYgKG5leHRMaW5lID09PSBcIi0tLVwiIHx8IChuZXh0TGluZSAmJiAhbmV4dExpbmUuc3RhcnRzV2l0aChcIi0gXCIpICYmIG5leHRMaW5lLmluY2x1ZGVzKFwiOlwiKSkpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gU3RvcCBhdCBuZXh0IHByb3BlcnR5IG9yIGVuZCBvZiBwcm9wZXJ0aWVzIHNlY3Rpb25cclxuXHRcdFx0XHRcdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHQvLyBUaGlzIGlzIGEgc3RyaW5nIHByb3BlcnR5LCBub3QgYW4gYXJyYXlcclxuXHRcdFx0XHRcdFx0Y29uc3Qgc2x1ZyA9IHRoaXMudG9LZWJhYkNhc2UodGl0bGUpO1xyXG5cdFx0XHRcdFx0XHRjb25zdCBzZXR0aW5ncyA9IHRoaXMuZ2V0U2V0dGluZ3MoKTtcclxuXHRcdFx0XHRcdFx0Y29uc3Qgc3RyaW5nVmFsdWUgPSAodmFsdWUgfHwgXCJcIilcclxuXHRcdFx0XHRcdFx0XHQucmVwbGFjZSgvXFx7XFx7dGl0bGVcXH1cXH0vZywgdGl0bGUpXHJcblx0XHRcdFx0XHRcdFx0LnJlcGxhY2UoL1xce1xce2RhdGVcXH1cXH0vZywgd2luZG93Lm1vbWVudChuZXcgRGF0ZSgpKS5mb3JtYXQoc2V0dGluZ3MuZGF0ZUZvcm1hdCkpXHJcblx0XHRcdFx0XHRcdFx0LnJlcGxhY2UoL1xce1xce3NsdWdcXH1cXH0vZywgc2x1Zyk7XHJcblx0XHRcdFx0XHRcdC8vIFN0b3JlIGFzIGEgc2luZ2xlIHN0cmluZyB2YWx1ZSwgbm90IGluIGFuIGFycmF5XHJcblx0XHRcdFx0XHRcdHRlbXBsYXRlVmFsdWVzW2tleV0gPSBzdHJpbmdWYWx1ZTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4geyB0ZW1wbGF0ZVByb3BzLCB0ZW1wbGF0ZVZhbHVlcyB9O1xyXG5cdH1cclxuXHJcblx0YnVpbGRGcm9udG1hdHRlckNvbnRlbnQoZmluYWxQcm9wczogUmVjb3JkPHN0cmluZywgc3RyaW5nW10+LCBhcnJheUtleXM/OiBTZXQ8c3RyaW5nPik6IHN0cmluZyB7XHJcblx0XHRsZXQgbmV3Q29udGVudCA9IFwiLS0tXFxuXCI7XHJcblx0XHRmb3IgKGNvbnN0IGtleSBpbiBmaW5hbFByb3BzKSB7XHJcblx0XHRcdC8vIENoZWNrIGlmIHRoaXMgaXMgYW4gYXJyYXkgcHJvcGVydHlcclxuXHRcdFx0Y29uc3QgaXNBcnJheVByb3BlcnR5ID0gS05PV05fQVJSQVlfS0VZUy5pbmNsdWRlcyhrZXkgYXMgdHlwZW9mIEtOT1dOX0FSUkFZX0tFWVNbbnVtYmVyXSkgfHxcclxuXHRcdFx0XHQoYXJyYXlLZXlzICYmIGFycmF5S2V5cy5oYXMoa2V5KSk7XHJcblxyXG5cdFx0XHRpZiAoaXNBcnJheVByb3BlcnR5KSB7XHJcblx0XHRcdFx0bmV3Q29udGVudCArPSBgJHtrZXl9OlxcbmA7XHJcblx0XHRcdFx0aWYgKGZpbmFsUHJvcHNba2V5XS5sZW5ndGggPiAwKSB7XHJcblx0XHRcdFx0XHRmaW5hbFByb3BzW2tleV0uZm9yRWFjaChpdGVtID0+IHtcclxuXHRcdFx0XHRcdFx0bmV3Q29udGVudCArPSBgICAtICR7aXRlbX1cXG5gO1xyXG5cdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdG5ld0NvbnRlbnQgKz0gYCR7a2V5fTogJHtmaW5hbFByb3BzW2tleV1bMF0gfHwgXCJcIn1cXG5gO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHRuZXdDb250ZW50ICs9IFwiLS0tXCI7XHJcblx0XHRyZXR1cm4gbmV3Q29udGVudDtcclxuXHR9XHJcblxyXG5cdGFzeW5jIHVwZGF0ZVRpdGxlSW5Gcm9udG1hdHRlcihmaWxlOiBURmlsZSwgbmV3VGl0bGU6IHN0cmluZywgdHlwZTogQ29udGVudFR5cGVJZCk6IFByb21pc2U8dm9pZD4ge1xyXG5cdFx0Ly8gQ2hlY2sgaWYgdGVtcGxhdGUgaGFzIHt7dGl0bGV9fSAtIGlmIG5vdCwgZG9uJ3QgdXBkYXRlIGZyb250bWF0dGVyIGF0IGFsbFxyXG5cdFx0Y29uc3QgdGl0bGVLZXkgPSB0aGlzLmdldFRpdGxlS2V5KHR5cGUpO1xyXG5cdFx0Y29uc3QgaGFzVGl0bGVJblRlbXBsYXRlID0gdGhpcy50ZW1wbGF0ZUhhc1RpdGxlKHR5cGUpO1xyXG5cclxuXHRcdC8vIElmIHRlbXBsYXRlIGRvZXNuJ3QgaGF2ZSB7e3RpdGxlfX0sIGRvbid0IG1vZGlmeSBmcm9udG1hdHRlclxyXG5cdFx0aWYgKCFoYXNUaXRsZUluVGVtcGxhdGUpIHtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cclxuXHRcdGNvbnN0IGNvbnRlbnQgPSBhd2FpdCB0aGlzLmFwcC52YXVsdC5yZWFkKGZpbGUpO1xyXG5cdFx0bGV0IHByb3BlcnRpZXNFbmQgPSAwO1xyXG5cdFx0bGV0IHByb3BlcnRpZXNUZXh0ID0gXCJcIjtcclxuXHRcdGxldCBoYXNGcm9udG1hdHRlciA9IGZhbHNlO1xyXG5cclxuXHRcdGlmIChjb250ZW50LnN0YXJ0c1dpdGgoXCItLS1cIikpIHtcclxuXHRcdFx0aGFzRnJvbnRtYXR0ZXIgPSB0cnVlO1xyXG5cdFx0XHRwcm9wZXJ0aWVzRW5kID0gY29udGVudC5pbmRleE9mKFwiXFxuLS0tXCIsIDMpO1xyXG5cdFx0XHRpZiAocHJvcGVydGllc0VuZCA9PT0gLTEpIHtcclxuXHRcdFx0XHRwcm9wZXJ0aWVzRW5kID0gY29udGVudC5sZW5ndGg7XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0cHJvcGVydGllc0VuZCArPSA0O1xyXG5cdFx0XHR9XHJcblx0XHRcdHByb3BlcnRpZXNUZXh0ID0gY29udGVudC5zbGljZSg0LCBwcm9wZXJ0aWVzRW5kIC0gNCkudHJpbSgpO1xyXG5cdFx0fVxyXG5cclxuXHRcdGNvbnN0IHByb3BPcmRlcjogc3RyaW5nW10gPSBbXTtcclxuXHRcdGNvbnN0IGV4aXN0aW5nOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCBzdHJpbmdbXT4gPSB7fTtcclxuXHRcdGxldCBjdXJyZW50S2V5OiBzdHJpbmcgfCBudWxsID0gbnVsbDtcclxuXHRcdGxldCB0aXRsZUtleVBvc2l0aW9uID0gLTE7IC8vIFRyYWNrIHRoZSBvcmlnaW5hbCBwb3NpdGlvbiBvZiB0aGUgdGl0bGUga2V5XHJcblxyXG5cdFx0Y29uc3QgYXJyYXlLZXlzID0gbmV3IFNldDxzdHJpbmc+KCk7IC8vIFRyYWNrIHdoaWNoIGtleXMgYXJlIGFycmF5c1xyXG5cclxuXHRcdHByb3BlcnRpZXNUZXh0LnNwbGl0KFwiXFxuXCIpLmZvckVhY2goKGxpbmUsIGluZGV4KSA9PiB7XHJcblx0XHRcdGNvbnN0IHRyaW1tZWRMaW5lID0gbGluZS50cmltKCk7XHJcblxyXG5cdFx0XHQvLyBNYXRjaCBwcm9wZXJ0eSBsaW5lcyAtIG1vcmUgZmxleGlibGUgcmVnZXggdG8gaGFuZGxlIHZhcmlvdXMgcHJvcGVydHkgbmFtZXNcclxuXHRcdFx0Y29uc3QgbWF0Y2ggPSB0cmltbWVkTGluZS5tYXRjaCgvXihbYS16QS1aX11bYS16QS1aMC05Xy1dKik6XFxzKiguKikkLyk7XHJcblx0XHRcdGlmIChtYXRjaCkge1xyXG5cdFx0XHRcdGNvbnN0IFssIGtleSwgdmFsdWVdID0gbWF0Y2g7XHJcblx0XHRcdFx0cHJvcE9yZGVyLnB1c2goa2V5KTtcclxuXHRcdFx0XHRjdXJyZW50S2V5ID0ga2V5O1xyXG5cclxuXHRcdFx0XHQvLyBUcmFjayB0aGUgb3JpZ2luYWwgcG9zaXRpb24gb2YgdGhlIHRpdGxlIGtleVxyXG5cdFx0XHRcdGlmIChrZXkgPT09IHRpdGxlS2V5KSB7XHJcblx0XHRcdFx0XHR0aXRsZUtleVBvc2l0aW9uID0gaW5kZXg7XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRjb25zdCBpc0tub3duQXJyYXlLZXkgPSBLTk9XTl9BUlJBWV9LRVlTLmluY2x1ZGVzKGtleSBhcyB0eXBlb2YgS05PV05fQVJSQVlfS0VZU1tudW1iZXJdKTtcclxuXHRcdFx0XHRjb25zdCBpc0VtcHR5QXJyYXkgPSAhdmFsdWUgfHwgdmFsdWUudHJpbSgpID09PSBcIlwiIHx8IHZhbHVlLnRyaW0oKSA9PT0gXCJbXVwiO1xyXG5cdFx0XHRcdGNvbnN0IGlzQXJyYXlQcm9wZXJ0eSA9IGlzS25vd25BcnJheUtleSB8fCBpc0VtcHR5QXJyYXk7XHJcblxyXG5cdFx0XHRcdGlmIChpc0FycmF5UHJvcGVydHkpIHtcclxuXHRcdFx0XHRcdGV4aXN0aW5nW2tleV0gPSBbXTtcclxuXHRcdFx0XHRcdGFycmF5S2V5cy5hZGQoa2V5KTsgLy8gTWFyayB0aGlzIGtleSBhcyBhbiBhcnJheVxyXG5cdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRleGlzdGluZ1trZXldID0gdmFsdWUgPyB2YWx1ZS50cmltKCkgOiBcIlwiO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSBlbHNlIGlmIChjdXJyZW50S2V5ICYmIGFycmF5S2V5cy5oYXMoY3VycmVudEtleSkgJiYgdHJpbW1lZExpbmUuc3RhcnRzV2l0aChcIi0gXCIpKSB7XHJcblx0XHRcdFx0Ly8gSGFuZGxlIGFycmF5IGl0ZW1zXHJcblx0XHRcdFx0Y29uc3QgaXRlbSA9IHRyaW1tZWRMaW5lLnJlcGxhY2UoL14tXFxzKi8sIFwiXCIpO1xyXG5cdFx0XHRcdGlmIChpdGVtKSAoZXhpc3RpbmdbY3VycmVudEtleV0gYXMgc3RyaW5nW10pLnB1c2goaXRlbSk7XHJcblx0XHRcdH0gZWxzZSBpZiAodHJpbW1lZExpbmUgJiYgIXRyaW1tZWRMaW5lLnN0YXJ0c1dpdGgoXCItIFwiKSAmJiAhdHJpbW1lZExpbmUuc3RhcnRzV2l0aChcIiNcIikpIHtcclxuXHRcdFx0XHQvLyBIYW5kbGUgdW5yZWNvZ25pemVkIHByb3BlcnRpZXMgdGhhdCBkb24ndCBtYXRjaCB0aGUgc3RhbmRhcmQgZm9ybWF0XHJcblx0XHRcdFx0Ly8gVGhpcyBpcyBhIGZhbGxiYWNrIHRvIHByZXNlcnZlIHByb3BlcnRpZXMgdGhhdCBtaWdodCBoYXZlIHNwZWNpYWwgZm9ybWF0dGluZ1xyXG5cdFx0XHRcdGNvbnN0IGtleU1hdGNoID0gdHJpbW1lZExpbmUubWF0Y2goL14oW146XSspOlxccyooLiopJC8pO1xyXG5cdFx0XHRcdGlmIChrZXlNYXRjaCkge1xyXG5cdFx0XHRcdFx0Y29uc3QgWywga2V5LCB2YWx1ZV0gPSBrZXlNYXRjaDtcclxuXHRcdFx0XHRcdGlmICghcHJvcE9yZGVyLmluY2x1ZGVzKGtleSkpIHtcclxuXHRcdFx0XHRcdFx0cHJvcE9yZGVyLnB1c2goa2V5KTtcclxuXHRcdFx0XHRcdFx0ZXhpc3Rpbmdba2V5XSA9IHZhbHVlID8gdmFsdWUudHJpbSgpIDogXCJcIjtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH0pO1xyXG5cclxuXHRcdC8vIFByb3Blcmx5IGVzY2FwZSBZQU1MIHN0cmluZyB2YWx1ZXNcclxuXHRcdC8vIFlBTUwgc3RyaW5ncyB3aXRoIHF1b3RlcyBuZWVkIHRvIGJlIHdyYXBwZWQgaW4gc2luZ2xlIHF1b3RlcyBvciBlc2NhcGVkIHByb3Blcmx5XHJcblx0XHRsZXQgdGl0bGVWYWw6IHN0cmluZztcclxuXHRcdGlmIChuZXdUaXRsZS5pbmNsdWRlcygnXCInKSB8fCBuZXdUaXRsZS5pbmNsdWRlcyhcIidcIikgfHwgbmV3VGl0bGUuaW5jbHVkZXMoJ1xcbicpIHx8IG5ld1RpdGxlLmluY2x1ZGVzKCdcXFxcJykpIHtcclxuXHRcdFx0Ly8gRm9yIHN0cmluZ3Mgd2l0aCBxdW90ZXMsIG5ld2xpbmVzLCBvciBiYWNrc2xhc2hlcywgdXNlIHNpbmdsZSBxdW90ZXMgYW5kIGVzY2FwZSBzaW5nbGUgcXVvdGVzXHJcblx0XHRcdHRpdGxlVmFsID0gYCcke25ld1RpdGxlLnJlcGxhY2UoLycvZywgXCInJ1wiKX0nYDtcclxuXHRcdH0gZWxzZSBpZiAobmV3VGl0bGUuaW5jbHVkZXMoXCIgXCIpIHx8IG5ld1RpdGxlLmluY2x1ZGVzKFwiOlwiKSB8fCBuZXdUaXRsZS5pbmNsdWRlcyhcIiNcIikgfHwgbmV3VGl0bGUuaW5jbHVkZXMoXCJAXCIpKSB7XHJcblx0XHRcdC8vIEZvciBzdHJpbmdzIHdpdGggc3BhY2VzIG9yIHNwZWNpYWwgWUFNTCBjaGFyYWN0ZXJzLCB3cmFwIGluIGRvdWJsZSBxdW90ZXMgYW5kIGVzY2FwZSBkb3VibGUgcXVvdGVzXHJcblx0XHRcdHRpdGxlVmFsID0gYFwiJHtuZXdUaXRsZS5yZXBsYWNlKC9cIi9nLCAnXFxcXFwiJyl9XCJgO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0Ly8gRm9yIHNpbXBsZSBzdHJpbmdzLCBubyBxdW90ZXMgbmVlZGVkXHJcblx0XHRcdHRpdGxlVmFsID0gbmV3VGl0bGU7XHJcblx0XHR9XHJcblx0XHRleGlzdGluZ1t0aXRsZUtleV0gPSB0aXRsZVZhbDtcclxuXHJcblx0XHQvLyBBbHNvIHVwZGF0ZSBzbHVnIGlmIGl0IGV4aXN0cyBpbiBmcm9udG1hdHRlclxyXG5cdFx0aWYgKFwic2x1Z1wiIGluIGV4aXN0aW5nKSB7XHJcblx0XHRcdGNvbnN0IG5ld1NsdWcgPSB0aGlzLnRvS2ViYWJDYXNlKG5ld1RpdGxlKTtcclxuXHRcdFx0ZXhpc3RpbmdbXCJzbHVnXCJdID0gbmV3U2x1ZztcclxuXHRcdH1cclxuXHJcblx0XHQvLyBJZiB0aXRsZSBrZXkgd2FzIGZvdW5kIGluIG9yaWdpbmFsIHByb3BlcnRpZXMsIHByZXNlcnZlIGl0cyBwb3NpdGlvblxyXG5cdFx0Ly8gT3RoZXJ3aXNlLCBhZGQgaXQgYXQgdGhlIGVuZFxyXG5cdFx0aWYgKHRpdGxlS2V5UG9zaXRpb24gPT09IC0xKSB7XHJcblx0XHRcdC8vIFRpdGxlIGtleSBub3QgZm91bmQgaW4gb3JpZ2luYWwgcHJvcGVydGllcywgYWRkIGl0IGF0IHRoZSBlbmRcclxuXHRcdFx0cHJvcE9yZGVyLnB1c2godGl0bGVLZXkpO1xyXG5cdFx0fVxyXG5cdFx0Ly8gSWYgdGl0bGVLZXlQb3NpdGlvbiA+PSAwLCB0aGUgdGl0bGUga2V5IGlzIGFscmVhZHkgaW4gcHJvcE9yZGVyIGF0IHRoZSBjb3JyZWN0IHBvc2l0aW9uXHJcblxyXG5cdFx0Ly8gT25seSBjcmVhdGUvdXBkYXRlIGZyb250bWF0dGVyIGlmIGl0IGFscmVhZHkgZXhpc3RzXHJcblx0XHQvLyBEb24ndCBjcmVhdGUgZnJvbnRtYXR0ZXIgZnJvbSBzY3JhdGNoIGlmIGZpbGUgaGFkIG5vbmVcclxuXHRcdGlmICghaGFzRnJvbnRtYXR0ZXIpIHtcclxuXHRcdFx0Ly8gRmlsZSBoYWQgbm8gZnJvbnRtYXR0ZXIgLSBkb24ndCBjcmVhdGUgaXQsIGp1c3QgcmV0dXJuXHJcblx0XHRcdC8vIFRoZSByZW5hbWUgYWxyZWFkeSBoYXBwZW5lZCwgd2UganVzdCBkb24ndCB1cGRhdGUgZnJvbnRtYXR0ZXJcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8vIEJ1aWxkIG5ldyBjb250ZW50IHdpdGggZnJvbnRtYXR0ZXJcclxuXHRcdGxldCBuZXdDb250ZW50ID0gXCItLS1cXG5cIjtcclxuXHRcdGZvciAoY29uc3Qga2V5IG9mIHByb3BPcmRlcikge1xyXG5cdFx0XHRjb25zdCB2YWwgPSBleGlzdGluZ1trZXldO1xyXG5cdFx0XHRpZiAoQXJyYXkuaXNBcnJheSh2YWwpKSB7XHJcblx0XHRcdFx0bmV3Q29udGVudCArPSBgJHtrZXl9OlxcbmA7XHJcblx0XHRcdFx0aWYgKHZhbC5sZW5ndGggPiAwKSB7XHJcblx0XHRcdFx0XHR2YWwuZm9yRWFjaCgoaXRlbTogc3RyaW5nKSA9PiB7XHJcblx0XHRcdFx0XHRcdG5ld0NvbnRlbnQgKz0gYCAgLSAke2l0ZW19XFxuYDtcclxuXHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRuZXdDb250ZW50ICs9IGAke2tleX06ICR7dmFsIHx8IFwiXCJ9XFxuYDtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0bmV3Q29udGVudCArPSBcIi0tLVxcblwiO1xyXG5cclxuXHRcdC8vIEdldCBib2R5IGNvbnRlbnQgKGZyb250bWF0dGVyIGFscmVhZHkgZXhpc3RlZCwgc28gd2Uga25vdyBwcm9wZXJ0aWVzRW5kIGlzIHNldClcclxuXHRcdGNvbnN0IGJvZHlDb250ZW50ID0gY29udGVudC5zbGljZShwcm9wZXJ0aWVzRW5kKTtcclxuXHRcdG5ld0NvbnRlbnQgKz0gYm9keUNvbnRlbnQ7XHJcblxyXG5cdFx0YXdhaXQgdGhpcy5hcHAudmF1bHQubW9kaWZ5KGZpbGUsIG5ld0NvbnRlbnQpO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBnZXRUaXRsZUtleSh0eXBlOiBDb250ZW50VHlwZUlkKTogc3RyaW5nIHtcclxuXHRcdGlmICh0eXBlID09PSBcIm5vdGVcIikgcmV0dXJuIFwidGl0bGVcIjtcclxuXHJcblx0XHRjb25zdCBzZXR0aW5ncyA9IHRoaXMuZ2V0U2V0dGluZ3MoKTtcclxuXHRcdGNvbnN0IGNvbnRlbnRUeXBlcyA9IHNldHRpbmdzLmNvbnRlbnRUeXBlcyB8fCBbXTtcclxuXHRcdGNvbnN0IGNvbnRlbnRUeXBlID0gY29udGVudFR5cGVzLmZpbmQoY3QgPT4gY3QuaWQgPT09IHR5cGUpO1xyXG5cdFx0aWYgKCFjb250ZW50VHlwZSkgcmV0dXJuIFwidGl0bGVcIjtcclxuXHJcblx0XHRjb25zdCB0ZW1wbGF0ZSA9IGNvbnRlbnRUeXBlLnRlbXBsYXRlO1xyXG5cdFx0Y29uc3QgbGluZXMgPSB0ZW1wbGF0ZS5zcGxpdChcIlxcblwiKTtcclxuXHRcdGxldCBpblByb3BlcnRpZXMgPSBmYWxzZTtcclxuXHRcdGZvciAoY29uc3QgbGluZSBvZiBsaW5lcykge1xyXG5cdFx0XHRjb25zdCB0cmltbWVkID0gbGluZS50cmltKCk7XHJcblx0XHRcdGlmICh0cmltbWVkID09PSBcIi0tLVwiKSB7XHJcblx0XHRcdFx0aW5Qcm9wZXJ0aWVzID0gIWluUHJvcGVydGllcztcclxuXHRcdFx0XHRjb250aW51ZTtcclxuXHRcdFx0fVxyXG5cdFx0XHRpZiAoaW5Qcm9wZXJ0aWVzKSB7XHJcblx0XHRcdFx0Y29uc3QgbWF0Y2ggPSB0cmltbWVkLm1hdGNoKC9eKFxcdyspOlxccyooLispJC8pO1xyXG5cdFx0XHRcdGlmIChtYXRjaCkge1xyXG5cdFx0XHRcdFx0Y29uc3Qga2V5ID0gbWF0Y2hbMV07XHJcblx0XHRcdFx0XHRjb25zdCB2YWx1ZSA9IG1hdGNoWzJdO1xyXG5cdFx0XHRcdFx0aWYgKHZhbHVlLmluY2x1ZGVzKFwie3t0aXRsZX19XCIpKSB7XHJcblx0XHRcdFx0XHRcdHJldHVybiBrZXk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gXCJ0aXRsZVwiO1xyXG5cdH1cclxuXHJcblx0Ly8gQ2hlY2sgaWYgdGhlIHRlbXBsYXRlIGZvciB0aGlzIGNvbnRlbnQgdHlwZSBoYXMge3t0aXRsZX19XHJcblx0cHJpdmF0ZSB0ZW1wbGF0ZUhhc1RpdGxlKHR5cGU6IENvbnRlbnRUeXBlSWQpOiBib29sZWFuIHtcclxuXHRcdGlmICh0eXBlID09PSBcIm5vdGVcIikgcmV0dXJuIHRydWU7IC8vIE5vdGVzIGFsd2F5cyBoYXZlIHRpdGxlXHJcblxyXG5cdFx0Y29uc3Qgc2V0dGluZ3MgPSB0aGlzLmdldFNldHRpbmdzKCk7XHJcblx0XHRjb25zdCBjb250ZW50VHlwZXMgPSBzZXR0aW5ncy5jb250ZW50VHlwZXMgfHwgW107XHJcblx0XHRjb25zdCBjb250ZW50VHlwZSA9IGNvbnRlbnRUeXBlcy5maW5kKGN0ID0+IGN0LmlkID09PSB0eXBlKTtcclxuXHRcdGlmICghY29udGVudFR5cGUpIHJldHVybiB0cnVlOyAvLyBEZWZhdWx0IHRvIHRydWUgZm9yIHNhZmV0eVxyXG5cclxuXHRcdGNvbnN0IHRlbXBsYXRlID0gY29udGVudFR5cGUudGVtcGxhdGU7XHJcblx0XHRyZXR1cm4gdGVtcGxhdGUuaW5jbHVkZXMoXCJ7e3RpdGxlfX1cIik7XHJcblx0fVxyXG59XHJcbiIsICJpbXBvcnQgeyBFZGl0b3IsIFRGaWxlLCBOb3RpY2UgfSBmcm9tIFwib2JzaWRpYW5cIjtcbmltcG9ydCB7IEFzdHJvQ29tcG9zZXJTZXR0aW5ncyB9IGZyb20gXCIuLi90eXBlc1wiO1xuXG5pbXBvcnQgeyBtYXRjaGVzRm9sZGVyUGF0dGVybiwgc29ydEJ5UGF0dGVyblNwZWNpZmljaXR5IH0gZnJvbSBcIi4vcGF0aC1tYXRjaGluZ1wiO1xuaW1wb3J0IHsgdG9LZWJhYkNhc2UgfSBmcm9tIFwiLi9zdHJpbmctdXRpbHNcIjtcblxuZXhwb3J0IGNsYXNzIExpbmtDb252ZXJ0ZXIge1xuXHRjb25zdHJ1Y3Rvcihwcml2YXRlIHNldHRpbmdzOiBBc3Ryb0NvbXBvc2VyU2V0dGluZ3MsIHByaXZhdGUgcGx1Z2luPzogeyBzZXR0aW5ncz86IEFzdHJvQ29tcG9zZXJTZXR0aW5ncyB9KSB7IH1cblxuXHQvLyBHZXQgZnJlc2ggc2V0dGluZ3MgZnJvbSBwbHVnaW4gaWYgYXZhaWxhYmxlLCBvdGhlcndpc2UgdXNlIHN0b3JlZCBzZXR0aW5nc1xuXHRwcml2YXRlIGdldFNldHRpbmdzKCk6IEFzdHJvQ29tcG9zZXJTZXR0aW5ncyB7XG5cdFx0Ly8gQWx3YXlzIHByZWZlciBwbHVnaW4gc2V0dGluZ3MgKHRoZXkncmUga2VwdCB1cCB0byBkYXRlKVxuXHRcdGlmICh0aGlzLnBsdWdpbj8uc2V0dGluZ3MpIHtcblx0XHRcdHJldHVybiB0aGlzLnBsdWdpbi5zZXR0aW5ncztcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXMuc2V0dGluZ3M7XG5cdH1cblxuXHQvLyBMb2NhbCB0b0tlYmFiQ2FzZSByZW1vdmVkLCB1c2luZyBpbXBvcnRlZCBvbmUgaW5zdGVhZFxuXG5cdGdldEFzdHJvVXJsRnJvbUludGVybmFsTGluayhsaW5rOiBzdHJpbmcpOiBzdHJpbmcge1xuXHRcdGNvbnN0IGhhc2hJbmRleCA9IGxpbmsuaW5kZXhPZignIycpO1xuXHRcdGxldCBwYXRoID0gaGFzaEluZGV4ID49IDAgPyBsaW5rLnNsaWNlKDAsIGhhc2hJbmRleCkgOiBsaW5rO1xuXHRcdGNvbnN0IGFuY2hvciA9IGhhc2hJbmRleCA+PSAwID8gbGluay5zbGljZShoYXNoSW5kZXgpIDogJyc7XG5cblx0XHQvLyBVUkwgZGVjb2RlIHRoZSBwYXRoIHRvIGhhbmRsZSBlbmNvZGVkIGNoYXJhY3RlcnMgbGlrZSAlMjBcblx0XHRwYXRoID0gZGVjb2RlVVJJQ29tcG9uZW50KHBhdGgpO1xuXHRcdHBhdGggPSBwYXRoLnJlcGxhY2UoL1xcLihtZHxtZHgpJC8sIFwiXCIpO1xuXG5cdFx0Ly8gRGV0ZXJtaW5lIGNvbnRlbnQgdHlwZSBhbmQgYXBwcm9wcmlhdGUgYmFzZSBwYXRoIHVzaW5nIHBhdHRlcm4gc3BlY2lmaWNpdHlcblx0XHQvLyBTdXBwb3J0IGJvdGggLm1kIGFuZCAubWR4IGV4dGVuc2lvbnNcblx0XHRjb25zdCBmaWxlRXh0ZW5zaW9uID0gbGluay5lbmRzV2l0aCgnLm1keCcpID8gJy5tZHgnIDogJy5tZCc7XG5cdFx0Y29uc3QgY29udGVudFR5cGVJbmZvID0gdGhpcy5nZXRDb250ZW50VHlwZUZvclBhdGgocGF0aCArIGZpbGVFeHRlbnNpb24pO1xuXHRcdGxldCBiYXNlUGF0aCA9IGNvbnRlbnRUeXBlSW5mby5iYXNlUGF0aCB8fCBcIlwiO1xuXHRcdGxldCBjb250ZW50Rm9sZGVyID0gY29udGVudFR5cGVJbmZvLmNvbnRlbnRGb2xkZXIgfHwgXCJcIjtcblx0XHRsZXQgaW5kZXhGaWxlTmFtZSA9IGNvbnRlbnRUeXBlSW5mby5pbmRleEZpbGVOYW1lIHx8IFwiXCI7XG5cblxuXHRcdC8vIFN0cmlwIGNvbnRlbnQgZm9sZGVyIGlmIHByZXNlbnRcblx0XHRpZiAoY29udGVudEZvbGRlcikge1xuXHRcdFx0cGF0aCA9IHBhdGguc2xpY2UoY29udGVudEZvbGRlci5sZW5ndGggKyAxKTtcblx0XHR9XG5cblx0XHRsZXQgYWRkVHJhaWxpbmdTbGFzaCA9IGZhbHNlO1xuXG5cdFx0Ly8gU21hcnQgZGV0ZWN0aW9uOiBpZiB0aGUgZmlsZW5hbWUgbWF0Y2hlcyB0aGUgaW5kZXggZmlsZSBuYW1lIChyZWdhcmRsZXNzIG9mIGNyZWF0aW9uIG1vZGUpLFxuXHRcdC8vIHRyZWF0IGl0IGFzIGZvbGRlci1iYXNlZCBsb2dpY1xuXHRcdC8vIE5vdGU6IFdlIG9ubHkgc2V0IGFkZFRyYWlsaW5nU2xhc2ggaGVyZTsgdGhlIGZpbmFsIGNoZWNrIHdpbGwgcHJldmVudCBpdCBpZiB0aGVyZSdzIGFuIGFuY2hvclxuXHRcdGNvbnN0IHBhcnRzID0gcGF0aC5zcGxpdCgnLycpO1xuXHRcdGNvbnN0IGxhc3RQYXJ0ID0gcGFydHNbcGFydHMubGVuZ3RoIC0gMV07XG5cblx0XHQvLyBDaGVjayBpZiB0aGUgbGFzdCBwYXJ0IG1hdGNoZXMgdGhlIHNwZWNpZmllZCBpbmRleCBmaWxlIG5hbWVcblx0XHRpZiAoaW5kZXhGaWxlTmFtZSAmJiBpbmRleEZpbGVOYW1lLnRyaW0oKSAhPT0gXCJcIiAmJiBsYXN0UGFydCA9PT0gaW5kZXhGaWxlTmFtZSkge1xuXHRcdFx0cGFydHMucG9wKCk7XG5cdFx0XHRwYXRoID0gcGFydHMuam9pbignLycpO1xuXHRcdFx0YWRkVHJhaWxpbmdTbGFzaCA9IHRydWU7XG5cdFx0fVxuXHRcdC8vIENoZWNrIGlmIHRoZSBsYXN0IHBhcnQgbWF0Y2hlcyB0aGUgZGVmYXVsdCBcImluZGV4XCIgKHdoZW4gbm8gaW5kZXhGaWxlTmFtZSBpcyBzcGVjaWZpZWQpXG5cdFx0ZWxzZSBpZiAoKCFpbmRleEZpbGVOYW1lIHx8IGluZGV4RmlsZU5hbWUudHJpbSgpID09PSBcIlwiKSAmJiBsYXN0UGFydCA9PT0gXCJpbmRleFwiKSB7XG5cdFx0XHRwYXJ0cy5wb3AoKTtcblx0XHRcdHBhdGggPSBwYXJ0cy5qb2luKCcvJyk7XG5cdFx0XHRhZGRUcmFpbGluZ1NsYXNoID0gdHJ1ZTtcblx0XHR9XG5cblx0XHRjb25zdCBzbHVnUGFydHMgPSBwYXRoLnNwbGl0KCcvJykubWFwKHBhcnQgPT4gdG9LZWJhYkNhc2UocGFydCkpO1xuXHRcdGNvbnN0IHNsdWcgPSBzbHVnUGFydHMuam9pbignLycpO1xuXG5cdFx0Ly8gRm9ybWF0IGJhc2UgcGF0aFxuXHRcdGlmIChiYXNlUGF0aCkge1xuXHRcdFx0Ly8gQWRkIGxlYWRpbmcgc2xhc2ggaWYgbm90IHByZXNlbnQgdG8gbWFrZSBpdCBhYnNvbHV0ZSBmcm9tIHJvb3Rcblx0XHRcdGlmICghYmFzZVBhdGguc3RhcnRzV2l0aChcIi9cIikpIHtcblx0XHRcdFx0YmFzZVBhdGggPSBcIi9cIiArIGJhc2VQYXRoO1xuXHRcdFx0fVxuXHRcdFx0Ly8gQWRkIHRyYWlsaW5nIHNsYXNoIGlmIG5vdCBwcmVzZW50XG5cdFx0XHRpZiAoIWJhc2VQYXRoLmVuZHNXaXRoKFwiL1wiKSkge1xuXHRcdFx0XHRiYXNlUGF0aCArPSBcIi9cIjtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gV2hlbiBubyBiYXNlIHBhdGggaXMgc3BlY2lmaWVkLCBhZGQgbGVhZGluZyBzbGFzaCB0byBtYWtlIGl0IGFic29sdXRlIGZyb20gcm9vdFxuXHRcdFx0YmFzZVBhdGggPSBcIi9cIjtcblx0XHR9XG5cblx0XHQvLyBEZXRlcm1pbmUgaWYgd2Ugc2hvdWxkIGFkZCB0cmFpbGluZyBzbGFzaFxuXHRcdC8vIENSSVRJQ0FMOiBOZXZlciBhZGQgdHJhaWxpbmcgc2xhc2ggYmVmb3JlIGFuIGFuY2hvciAoZS5nLiwgL2Fib3V0I2hlYWRpbmcgbm90IC9hYm91dC8jaGVhZGluZylcblx0XHQvLyBUaGlzIGlzIGVzcGVjaWFsbHkgaW1wb3J0YW50IGZvciBhbmNob3IgbGlua3MgZnJvbSBjb3B5IGhlYWRpbmcgVVJMIGZ1bmN0aW9uYWxpdHlcblx0XHQvLyBBbmNob3IgbGlua3Mgc2hvdWxkIE5FVkVSIGhhdmUgdHJhaWxpbmcgc2xhc2hlcywgcmVnYXJkbGVzcyBvZiBzZXR0aW5nc1xuXHRcdGNvbnN0IHNldHRpbmdzID0gdGhpcy5nZXRTZXR0aW5ncygpO1xuXHRcdGNvbnN0IHNob3VsZEFkZFRyYWlsaW5nU2xhc2ggPSAoc2V0dGluZ3MuYWRkVHJhaWxpbmdTbGFzaFRvTGlua3MgfHwgYWRkVHJhaWxpbmdTbGFzaCkgJiYgIWFuY2hvcjtcblxuXHRcdHJldHVybiBgJHtiYXNlUGF0aH0ke3NsdWd9JHtzaG91bGRBZGRUcmFpbGluZ1NsYXNoID8gJy8nIDogJyd9JHthbmNob3J9YDtcblx0fVxuXG5cdHByaXZhdGUgZ2V0QXN0cm9VcmxGcm9tSW50ZXJuYWxMaW5rV2l0aENvbnRleHQobGluazogc3RyaW5nLCBjdXJyZW50RmlsZVBhdGg6IHN0cmluZywgY3VycmVudEZpbGVDb250ZW50VHlwZTogeyBiYXNlUGF0aDogc3RyaW5nOyBjcmVhdGlvbk1vZGU6IFwiZmlsZVwiIHwgXCJmb2xkZXJcIjsgaW5kZXhGaWxlTmFtZTogc3RyaW5nOyBjb250ZW50Rm9sZGVyOiBzdHJpbmcgfSk6IHN0cmluZyB7XG5cblx0XHRjb25zdCBoYXNoSW5kZXggPSBsaW5rLmluZGV4T2YoJyMnKTtcblx0XHRsZXQgcGF0aCA9IGhhc2hJbmRleCA+PSAwID8gbGluay5zbGljZSgwLCBoYXNoSW5kZXgpIDogbGluaztcblx0XHRjb25zdCBhbmNob3IgPSBoYXNoSW5kZXggPj0gMCA/IGxpbmsuc2xpY2UoaGFzaEluZGV4KSA6ICcnO1xuXG5cdFx0Ly8gVVJMIGRlY29kZSB0aGUgcGF0aCB0byBoYW5kbGUgZW5jb2RlZCBjaGFyYWN0ZXJzIGxpa2UgJTIwXG5cdFx0cGF0aCA9IGRlY29kZVVSSUNvbXBvbmVudChwYXRoKTtcblx0XHRwYXRoID0gcGF0aC5yZXBsYWNlKC9cXC4obWR8bWR4KSQvLCBcIlwiKTtcblxuXG5cdFx0Ly8gRGV0ZXJtaW5lIGNvbnRlbnQgdHlwZSBhbmQgYXBwcm9wcmlhdGUgYmFzZSBwYXRoXG5cdFx0bGV0IGJhc2VQYXRoID0gXCJcIjtcblx0XHRsZXQgY29udGVudEZvbGRlciA9IFwiXCI7XG5cdFx0bGV0IGluZGV4RmlsZU5hbWUgPSBcIlwiO1xuXG5cdFx0Ly8gVXNlIHRoZSBzYW1lIGxvZ2ljIGFzIGdldENvbnRlbnRUeXBlRm9yUGF0aCBidXQgZm9yIHRoZSB0YXJnZXQgbGlua1xuXHRcdC8vIFN1cHBvcnQgYm90aCAubWQgYW5kIC5tZHggZXh0ZW5zaW9ucyAtIHRyeSAubWR4IGZpcnN0IGlmIGxpbmsgc3VnZ2VzdHMgaXRcblx0XHRjb25zdCBmaWxlRXh0ZW5zaW9uID0gbGluay5lbmRzV2l0aCgnLm1keCcpID8gJy5tZHgnIDogJy5tZCc7XG5cdFx0Y29uc3QgdGFyZ2V0Q29udGVudFR5cGUgPSB0aGlzLmdldENvbnRlbnRUeXBlRm9yUGF0aChwYXRoICsgZmlsZUV4dGVuc2lvbik7XG5cblx0XHQvLyBJZiB0YXJnZXQgbGluayBkb2Vzbid0IGhhdmUgYSBjbGVhciBjb250ZW50IHR5cGUgKG5vIGZvbGRlciBwYXRoKSwgdXNlIGN1cnJlbnQgZmlsZSdzIGNvbnRlbnQgdHlwZVxuXHRcdGlmICghdGFyZ2V0Q29udGVudFR5cGUuYmFzZVBhdGggJiYgY3VycmVudEZpbGVDb250ZW50VHlwZS5iYXNlUGF0aCkge1xuXHRcdFx0YmFzZVBhdGggPSBjdXJyZW50RmlsZUNvbnRlbnRUeXBlLmJhc2VQYXRoO1xuXHRcdFx0aW5kZXhGaWxlTmFtZSA9IGN1cnJlbnRGaWxlQ29udGVudFR5cGUuaW5kZXhGaWxlTmFtZTtcblx0XHRcdGNvbnRlbnRGb2xkZXIgPSBjdXJyZW50RmlsZUNvbnRlbnRUeXBlLmNvbnRlbnRGb2xkZXI7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGJhc2VQYXRoID0gdGFyZ2V0Q29udGVudFR5cGUuYmFzZVBhdGg7XG5cdFx0XHRpbmRleEZpbGVOYW1lID0gdGFyZ2V0Q29udGVudFR5cGUuaW5kZXhGaWxlTmFtZTtcblx0XHRcdGNvbnRlbnRGb2xkZXIgPSB0YXJnZXRDb250ZW50VHlwZS5jb250ZW50Rm9sZGVyO1xuXHRcdH1cblxuXHRcdC8vIFN0cmlwIGNvbnRlbnQgZm9sZGVyIGlmIHByZXNlbnRcblx0XHRpZiAoY29udGVudEZvbGRlcikge1xuXHRcdFx0cGF0aCA9IHBhdGguc2xpY2UoY29udGVudEZvbGRlci5sZW5ndGggKyAxKTtcblx0XHR9XG5cblx0XHRsZXQgYWRkVHJhaWxpbmdTbGFzaCA9IGZhbHNlO1xuXG5cdFx0Ly8gU21hcnQgZGV0ZWN0aW9uOiBpZiB0aGUgZmlsZW5hbWUgbWF0Y2hlcyB0aGUgaW5kZXggZmlsZSBuYW1lIChyZWdhcmRsZXNzIG9mIGNyZWF0aW9uIG1vZGUpLFxuXHRcdC8vIHRyZWF0IGl0IGFzIGZvbGRlci1iYXNlZCBsb2dpY1xuXHRcdC8vIE5vdGU6IFdlIG9ubHkgc2V0IGFkZFRyYWlsaW5nU2xhc2ggaGVyZTsgdGhlIGZpbmFsIGNoZWNrIHdpbGwgcHJldmVudCBpdCBpZiB0aGVyZSdzIGFuIGFuY2hvclxuXHRcdGNvbnN0IHBhcnRzID0gcGF0aC5zcGxpdCgnLycpO1xuXHRcdGNvbnN0IGxhc3RQYXJ0ID0gcGFydHNbcGFydHMubGVuZ3RoIC0gMV07XG5cblx0XHQvLyBDaGVjayBpZiB0aGUgbGFzdCBwYXJ0IG1hdGNoZXMgdGhlIHNwZWNpZmllZCBpbmRleCBmaWxlIG5hbWVcblx0XHRpZiAoaW5kZXhGaWxlTmFtZSAmJiBpbmRleEZpbGVOYW1lLnRyaW0oKSAhPT0gXCJcIiAmJiBsYXN0UGFydCA9PT0gaW5kZXhGaWxlTmFtZSkge1xuXHRcdFx0cGFydHMucG9wKCk7XG5cdFx0XHRwYXRoID0gcGFydHMuam9pbignLycpO1xuXHRcdFx0YWRkVHJhaWxpbmdTbGFzaCA9IHRydWU7XG5cdFx0fVxuXHRcdC8vIENoZWNrIGlmIHRoZSBsYXN0IHBhcnQgbWF0Y2hlcyB0aGUgZGVmYXVsdCBcImluZGV4XCIgKHdoZW4gbm8gaW5kZXhGaWxlTmFtZSBpcyBzcGVjaWZpZWQpXG5cdFx0ZWxzZSBpZiAoKCFpbmRleEZpbGVOYW1lIHx8IGluZGV4RmlsZU5hbWUudHJpbSgpID09PSBcIlwiKSAmJiBsYXN0UGFydCA9PT0gXCJpbmRleFwiKSB7XG5cdFx0XHRwYXJ0cy5wb3AoKTtcblx0XHRcdHBhdGggPSBwYXJ0cy5qb2luKCcvJyk7XG5cdFx0XHRhZGRUcmFpbGluZ1NsYXNoID0gdHJ1ZTtcblx0XHR9XG5cblx0XHRjb25zdCBzbHVnUGFydHMgPSBwYXRoLnNwbGl0KCcvJykubWFwKHBhcnQgPT4gdG9LZWJhYkNhc2UocGFydCkpO1xuXHRcdGNvbnN0IHNsdWcgPSBzbHVnUGFydHMuam9pbignLycpO1xuXG5cdFx0Ly8gRm9ybWF0IGJhc2UgcGF0aFxuXHRcdGlmIChiYXNlUGF0aCkge1xuXHRcdFx0Ly8gQWRkIGxlYWRpbmcgc2xhc2ggaWYgbm90IHByZXNlbnQgdG8gbWFrZSBpdCBhYnNvbHV0ZSBmcm9tIHJvb3Rcblx0XHRcdGlmICghYmFzZVBhdGguc3RhcnRzV2l0aChcIi9cIikpIHtcblx0XHRcdFx0YmFzZVBhdGggPSBcIi9cIiArIGJhc2VQYXRoO1xuXHRcdFx0fVxuXHRcdFx0Ly8gQWRkIHRyYWlsaW5nIHNsYXNoIGlmIG5vdCBwcmVzZW50XG5cdFx0XHRpZiAoIWJhc2VQYXRoLmVuZHNXaXRoKFwiL1wiKSkge1xuXHRcdFx0XHRiYXNlUGF0aCArPSBcIi9cIjtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gV2hlbiBubyBiYXNlIHBhdGggaXMgc3BlY2lmaWVkLCBhZGQgbGVhZGluZyBzbGFzaCB0byBtYWtlIGl0IGFic29sdXRlIGZyb20gcm9vdFxuXHRcdFx0YmFzZVBhdGggPSBcIi9cIjtcblx0XHR9XG5cblx0XHQvLyBEZXRlcm1pbmUgaWYgd2Ugc2hvdWxkIGFkZCB0cmFpbGluZyBzbGFzaFxuXHRcdC8vIENSSVRJQ0FMOiBOZXZlciBhZGQgdHJhaWxpbmcgc2xhc2ggYmVmb3JlIGFuIGFuY2hvciAoZS5nLiwgL2Fib3V0I2hlYWRpbmcgbm90IC9hYm91dC8jaGVhZGluZylcblx0XHQvLyBUaGlzIGlzIGVzcGVjaWFsbHkgaW1wb3J0YW50IGZvciBhbmNob3IgbGlua3MgZnJvbSBjb3B5IGhlYWRpbmcgVVJMIGZ1bmN0aW9uYWxpdHlcblx0XHQvLyBBbmNob3IgbGlua3Mgc2hvdWxkIE5FVkVSIGhhdmUgdHJhaWxpbmcgc2xhc2hlcywgcmVnYXJkbGVzcyBvZiBzZXR0aW5nc1xuXHRcdGNvbnN0IHNldHRpbmdzID0gdGhpcy5nZXRTZXR0aW5ncygpO1xuXHRcdGNvbnN0IHNob3VsZEFkZFRyYWlsaW5nU2xhc2ggPSAoc2V0dGluZ3MuYWRkVHJhaWxpbmdTbGFzaFRvTGlua3MgfHwgYWRkVHJhaWxpbmdTbGFzaCkgJiYgIWFuY2hvcjtcblxuXHRcdHJldHVybiBgJHtiYXNlUGF0aH0ke3NsdWd9JHtzaG91bGRBZGRUcmFpbGluZ1NsYXNoID8gJy8nIDogJyd9JHthbmNob3J9YDtcblx0fVxuXG5cdHByaXZhdGUgaXNJbkNvbmZpZ3VyZWRDb250ZW50RGlyZWN0b3J5KGZpbGVQYXRoOiBzdHJpbmcpOiBib29sZWFuIHtcblx0XHQvLyBDaGVjayBhbGwgY29udGVudCB0eXBlcywgc29ydGVkIGJ5IHBhdHRlcm4gc3BlY2lmaWNpdHkgKG1vcmUgc3BlY2lmaWMgZmlyc3QpXG5cdFx0Y29uc3Qgc2V0dGluZ3MgPSB0aGlzLmdldFNldHRpbmdzKCk7XG5cdFx0Y29uc3QgY29udGVudFR5cGVzID0gc2V0dGluZ3MuY29udGVudFR5cGVzIHx8IFtdO1xuXHRcdGNvbnN0IHNvcnRlZFR5cGVzID0gc29ydEJ5UGF0dGVyblNwZWNpZmljaXR5KGNvbnRlbnRUeXBlcyk7XG5cblx0XHRmb3IgKGNvbnN0IGNvbnRlbnRUeXBlIG9mIHNvcnRlZFR5cGVzKSB7XG5cdFx0XHRpZiAoIWNvbnRlbnRUeXBlLmVuYWJsZWQpIGNvbnRpbnVlO1xuXG5cdFx0XHQvLyBIYW5kbGUgYmxhbmsgZm9sZGVyIChyb290KSAtIG1hdGNoZXMgZmlsZXMgaW4gdmF1bHQgcm9vdCBvbmx5XG5cdFx0XHRpZiAoIWNvbnRlbnRUeXBlLmZvbGRlciB8fCBjb250ZW50VHlwZS5mb2xkZXIudHJpbSgpID09PSBcIlwiKSB7XG5cdFx0XHRcdGlmICghZmlsZVBhdGguaW5jbHVkZXMoXCIvXCIpIHx8IGZpbGVQYXRoLnNwbGl0KFwiL1wiKS5sZW5ndGggPT09IDEpIHtcblx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIGlmIChtYXRjaGVzRm9sZGVyUGF0dGVybihmaWxlUGF0aCwgY29udGVudFR5cGUuZm9sZGVyKSkge1xuXHRcdFx0XHQvLyBDaGVjayBpZ25vcmVTdWJmb2xkZXJzIGlmIGZvbGRlciBpcyBzcGVjaWZpZWRcblx0XHRcdFx0aWYgKGNvbnRlbnRUeXBlLmlnbm9yZVN1YmZvbGRlcnMpIHtcblx0XHRcdFx0XHRjb25zdCBwYXRoU2VnbWVudHMgPSBmaWxlUGF0aC5zcGxpdChcIi9cIik7XG5cdFx0XHRcdFx0Y29uc3QgcGF0aERlcHRoID0gcGF0aFNlZ21lbnRzLmxlbmd0aDtcblx0XHRcdFx0XHRjb25zdCBwYXR0ZXJuU2VnbWVudHMgPSBjb250ZW50VHlwZS5mb2xkZXIuc3BsaXQoXCIvXCIpO1xuXHRcdFx0XHRcdGNvbnN0IGV4cGVjdGVkRGVwdGggPSBwYXR0ZXJuU2VnbWVudHMubGVuZ3RoO1xuXG5cdFx0XHRcdFx0aWYgKGNvbnRlbnRUeXBlLmNyZWF0aW9uTW9kZSA9PT0gXCJmb2xkZXJcIikge1xuXHRcdFx0XHRcdFx0Ly8gRm9yIGZvbGRlci1iYXNlZCBjcmVhdGlvbiwgZmlsZXMgYXJlIG9uZSBsZXZlbCBkZWVwZXIgKGUuZy4sIHRlc3QvbXktZmlsZS9pbmRleC5tZClcblx0XHRcdFx0XHRcdC8vIFNvIHdlIG5lZWQgdG8gYWxsb3cgb25lIGV4dHJhIGxldmVsIGJleW9uZCB0aGUgcGF0dGVybiBkZXB0aFxuXHRcdFx0XHRcdFx0Y29uc3QgZm9sZGVyRGVwdGggPSBwYXRoRGVwdGggLSAxOyAvLyBTdWJ0cmFjdCAxIGZvciB0aGUgaW5kZXgubWQgZmlsZVxuXHRcdFx0XHRcdFx0aWYgKGZvbGRlckRlcHRoID09PSBleHBlY3RlZERlcHRoIHx8IGZvbGRlckRlcHRoID09PSBleHBlY3RlZERlcHRoICsgMSkge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0Ly8gRm9yIGZpbGUtYmFzZWQgY3JlYXRpb24sIGZpbGVzIGFyZSBhdCB0aGUgc2FtZSBkZXB0aCBhcyB0aGUgcGF0dGVyblxuXHRcdFx0XHRcdFx0aWYgKHBhdGhEZXB0aCA9PT0gZXhwZWN0ZWREZXB0aCkge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHRwcml2YXRlIGdldENvbnRlbnRUeXBlRm9yUGF0aChmaWxlUGF0aDogc3RyaW5nKTogeyBiYXNlUGF0aDogc3RyaW5nOyBjcmVhdGlvbk1vZGU6IFwiZmlsZVwiIHwgXCJmb2xkZXJcIjsgaW5kZXhGaWxlTmFtZTogc3RyaW5nOyBjb250ZW50Rm9sZGVyOiBzdHJpbmcgfSB7XG5cdFx0Ly8gQ2hlY2sgYWxsIGNvbnRlbnQgdHlwZXMsIHNvcnRlZCBieSBwYXR0ZXJuIHNwZWNpZmljaXR5IChtb3JlIHNwZWNpZmljIGZpcnN0KVxuXHRcdGNvbnN0IHNldHRpbmdzID0gdGhpcy5nZXRTZXR0aW5ncygpO1xuXHRcdGNvbnN0IGNvbnRlbnRUeXBlcyA9IHNldHRpbmdzLmNvbnRlbnRUeXBlcyB8fCBbXTtcblx0XHRjb25zdCBzb3J0ZWRUeXBlcyA9IHNvcnRCeVBhdHRlcm5TcGVjaWZpY2l0eShjb250ZW50VHlwZXMpO1xuXG5cdFx0Zm9yIChjb25zdCBjb250ZW50VHlwZSBvZiBzb3J0ZWRUeXBlcykge1xuXHRcdFx0aWYgKCFjb250ZW50VHlwZS5lbmFibGVkKSBjb250aW51ZTtcblxuXHRcdFx0Ly8gSGFuZGxlIGJsYW5rIGZvbGRlciAocm9vdCkgLSBtYXRjaGVzIGZpbGVzIGluIHZhdWx0IHJvb3Qgb25seVxuXHRcdFx0aWYgKCFjb250ZW50VHlwZS5mb2xkZXIgfHwgY29udGVudFR5cGUuZm9sZGVyLnRyaW0oKSA9PT0gXCJcIikge1xuXHRcdFx0XHRpZiAoIWZpbGVQYXRoLmluY2x1ZGVzKFwiL1wiKSB8fCBmaWxlUGF0aC5zcGxpdChcIi9cIikubGVuZ3RoID09PSAxKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0XHRcdGJhc2VQYXRoOiBjb250ZW50VHlwZS5saW5rQmFzZVBhdGggfHwgXCJcIixcblx0XHRcdFx0XHRcdGNyZWF0aW9uTW9kZTogY29udGVudFR5cGUuY3JlYXRpb25Nb2RlLFxuXHRcdFx0XHRcdFx0aW5kZXhGaWxlTmFtZTogY29udGVudFR5cGUuaW5kZXhGaWxlTmFtZSB8fCBcIlwiLFxuXHRcdFx0XHRcdFx0Y29udGVudEZvbGRlcjogXCJcIlxuXHRcdFx0XHRcdH07XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSBpZiAobWF0Y2hlc0ZvbGRlclBhdHRlcm4oZmlsZVBhdGgsIGNvbnRlbnRUeXBlLmZvbGRlcikpIHtcblx0XHRcdFx0Ly8gQ2hlY2sgaWdub3JlU3ViZm9sZGVycyBpZiBmb2xkZXIgaXMgc3BlY2lmaWVkXG5cdFx0XHRcdGlmIChjb250ZW50VHlwZS5pZ25vcmVTdWJmb2xkZXJzKSB7XG5cdFx0XHRcdFx0Y29uc3QgcGF0aFNlZ21lbnRzID0gZmlsZVBhdGguc3BsaXQoXCIvXCIpO1xuXHRcdFx0XHRcdGNvbnN0IHBhdGhEZXB0aCA9IHBhdGhTZWdtZW50cy5sZW5ndGg7XG5cdFx0XHRcdFx0Y29uc3QgcGF0dGVyblNlZ21lbnRzID0gY29udGVudFR5cGUuZm9sZGVyLnNwbGl0KFwiL1wiKTtcblx0XHRcdFx0XHRjb25zdCBleHBlY3RlZERlcHRoID0gcGF0dGVyblNlZ21lbnRzLmxlbmd0aDtcblxuXHRcdFx0XHRcdGlmIChjb250ZW50VHlwZS5jcmVhdGlvbk1vZGUgPT09IFwiZm9sZGVyXCIpIHtcblx0XHRcdFx0XHRcdC8vIEZvciBmb2xkZXItYmFzZWQgY3JlYXRpb24sIGZpbGVzIGFyZSBvbmUgbGV2ZWwgZGVlcGVyIChlLmcuLCB0ZXN0L215LWZpbGUvaW5kZXgubWQpXG5cdFx0XHRcdFx0XHQvLyBTbyB3ZSBuZWVkIHRvIGFsbG93IG9uZSBleHRyYSBsZXZlbCBiZXlvbmQgdGhlIHBhdHRlcm4gZGVwdGhcblx0XHRcdFx0XHRcdGNvbnN0IGZvbGRlckRlcHRoID0gcGF0aERlcHRoIC0gMTsgLy8gU3VidHJhY3QgMSBmb3IgdGhlIGluZGV4Lm1kIGZpbGVcblx0XHRcdFx0XHRcdGlmIChmb2xkZXJEZXB0aCA9PT0gZXhwZWN0ZWREZXB0aCB8fCBmb2xkZXJEZXB0aCA9PT0gZXhwZWN0ZWREZXB0aCArIDEpIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0XHRcdFx0XHRiYXNlUGF0aDogY29udGVudFR5cGUubGlua0Jhc2VQYXRoIHx8IFwiXCIsXG5cdFx0XHRcdFx0XHRcdFx0Y3JlYXRpb25Nb2RlOiBjb250ZW50VHlwZS5jcmVhdGlvbk1vZGUsXG5cdFx0XHRcdFx0XHRcdFx0aW5kZXhGaWxlTmFtZTogY29udGVudFR5cGUuaW5kZXhGaWxlTmFtZSB8fCBcIlwiLFxuXHRcdFx0XHRcdFx0XHRcdGNvbnRlbnRGb2xkZXI6IGNvbnRlbnRUeXBlLmZvbGRlclxuXHRcdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHQvLyBGb3IgZmlsZS1iYXNlZCBjcmVhdGlvbiwgZmlsZXMgYXJlIGF0IHRoZSBzYW1lIGRlcHRoIGFzIHRoZSBwYXR0ZXJuXG5cdFx0XHRcdFx0XHRpZiAocGF0aERlcHRoID09PSBleHBlY3RlZERlcHRoKSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0XHRcdFx0YmFzZVBhdGg6IGNvbnRlbnRUeXBlLmxpbmtCYXNlUGF0aCB8fCBcIlwiLFxuXHRcdFx0XHRcdFx0XHRcdGNyZWF0aW9uTW9kZTogY29udGVudFR5cGUuY3JlYXRpb25Nb2RlLFxuXHRcdFx0XHRcdFx0XHRcdGluZGV4RmlsZU5hbWU6IGNvbnRlbnRUeXBlLmluZGV4RmlsZU5hbWUgfHwgXCJcIixcblx0XHRcdFx0XHRcdFx0XHRjb250ZW50Rm9sZGVyOiBjb250ZW50VHlwZS5mb2xkZXJcblx0XHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0XHRcdGJhc2VQYXRoOiBjb250ZW50VHlwZS5saW5rQmFzZVBhdGggfHwgXCJcIixcblx0XHRcdFx0XHRcdGNyZWF0aW9uTW9kZTogY29udGVudFR5cGUuY3JlYXRpb25Nb2RlLFxuXHRcdFx0XHRcdFx0aW5kZXhGaWxlTmFtZTogY29udGVudFR5cGUuaW5kZXhGaWxlTmFtZSB8fCBcIlwiLFxuXHRcdFx0XHRcdFx0Y29udGVudEZvbGRlcjogY29udGVudFR5cGUuZm9sZGVyXG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIERlZmF1bHQgZmFsbGJhY2tcblx0XHRyZXR1cm4ge1xuXHRcdFx0YmFzZVBhdGg6IFwiXCIsXG5cdFx0XHRjcmVhdGlvbk1vZGU6IFwiZmlsZVwiLFxuXHRcdFx0aW5kZXhGaWxlTmFtZTogXCJcIixcblx0XHRcdGNvbnRlbnRGb2xkZXI6IFwiXCJcblx0XHR9O1xuXHR9XG5cblx0Y29udmVydFdpa2lsaW5rc0ZvckFzdHJvKGVkaXRvcjogRWRpdG9yLCBmaWxlOiBURmlsZSB8IG51bGwpOiB2b2lkIHtcblx0XHRpZiAoIShmaWxlIGluc3RhbmNlb2YgVEZpbGUpKSB7XG5cdFx0XHRuZXcgTm90aWNlKFwiTm8gYWN0aXZlIGZpbGUuXCIpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIFByZXNlcnZlIGN1cnNvciBwb3NpdGlvbiBiZWZvcmUgbW9kaWZ5aW5nIGNvbnRlbnRcblx0XHRjb25zdCBjdXJzb3IgPSBlZGl0b3IuZ2V0Q3Vyc29yKCk7XG5cdFx0Y29uc3Qgb3JpZ2luYWxMaW5lID0gY3Vyc29yLmxpbmU7XG5cdFx0Y29uc3Qgb3JpZ2luYWxDaCA9IGN1cnNvci5jaDtcblx0XHRjb25zdCBvcmlnaW5hbENvbnRlbnQgPSBlZGl0b3IuZ2V0VmFsdWUoKTtcblx0XHRjb25zdCBvcmlnaW5hbExpbmVDb3VudCA9IG9yaWdpbmFsQ29udGVudC5zcGxpdCgnXFxuJykubGVuZ3RoO1xuXHRcdGNvbnN0IG9yaWdpbmFsTGluZUxlbmd0aCA9IG9yaWdpbmFsQ29udGVudC5zcGxpdCgnXFxuJylbb3JpZ2luYWxMaW5lXT8ubGVuZ3RoIHx8IDA7XG5cblx0XHRjb25zdCBjb250ZW50ID0gZWRpdG9yLmdldFZhbHVlKCk7XG5cdFx0bGV0IG5ld0NvbnRlbnQgPSBjb250ZW50O1xuXHRcdGxldCBjb252ZXJ0ZWRDb3VudCA9IDA7XG5cdFx0bGV0IHNraXBwZWRDb3VudCA9IDA7XG5cdFx0Y29uc3Qgc2tpcHBlZExpbmtzOiBzdHJpbmdbXSA9IFtdO1xuXG5cdFx0Ly8gRGV0ZXJtaW5lIHRoZSBjdXJyZW50IGZpbGUncyBjb250ZW50IHR5cGUgZm9yIHJlbGF0aXZlIGxpbmtzXG5cdFx0Y29uc3QgY3VycmVudEZpbGVDb250ZW50VHlwZSA9IHRoaXMuZ2V0Q29udGVudFR5cGVGb3JQYXRoKGZpbGUucGF0aCk7XG5cblx0XHQvLyBEZWZpbmUgY29tbW9uIGltYWdlIGV4dGVuc2lvbnNcblx0XHRjb25zdCBpbWFnZUV4dGVuc2lvbnMgPSAvXFwuKHBuZ3xqcGd8anBlZ3xnaWZ8c3ZnKSQvaTtcblxuXHRcdC8vIEhlbHBlciBmdW5jdGlvbiB0byBjaGVjayBpZiBhIGxpbmsgY2FuIGJlIHJlbGlhYmx5IGNvbnZlcnRlZFxuXHRcdGNvbnN0IGNhbkNvbnZlcnRMaW5rID0gKGxpbmtUZXh0OiBzdHJpbmcpOiBib29sZWFuID0+IHtcblx0XHRcdC8vIERvbid0IGNvbnZlcnQgaWYgaXQncyBhbiBpbWFnZVxuXHRcdFx0aWYgKGltYWdlRXh0ZW5zaW9ucy50ZXN0KGxpbmtUZXh0KSkge1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9XG5cblx0XHRcdC8vIERvbid0IGNvbnZlcnQgZXh0ZXJuYWwgbGlua3Ncblx0XHRcdGlmIChsaW5rVGV4dC5tYXRjaCgvXmh0dHBzPzpcXC9cXC8vKSkge1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9XG5cblx0XHRcdC8vIERvbid0IGNvbnZlcnQgaWYgaXQncyBub3QgYSAubWQgb3IgLm1keCBmaWxlIGFuZCBkb2Vzbid0IGxvb2sgbGlrZSBhIHZhbGlkIGludGVybmFsIGxpbmtcblx0XHRcdGlmICghbGlua1RleHQuaW5jbHVkZXMoJy5tZCcpICYmICFsaW5rVGV4dC5pbmNsdWRlcygnLm1keCcpICYmICFsaW5rVGV4dC5tYXRjaCgvXlthLXpBLVowLTlfLV0rKFxcL1thLXpBLVowLTlfLV0rKSokLykpIHtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBDaGVjayBpZiB0aGUgdGFyZ2V0IGZpbGUgaXMgaW4gYW55IGNvbmZpZ3VyZWQgY29udGVudCBkaXJlY3Rvcnlcblx0XHRcdC8vIFN1cHBvcnQgYm90aCAubWQgYW5kIC5tZHggZXh0ZW5zaW9uc1xuXHRcdFx0bGV0IHRhcmdldFBhdGg6IHN0cmluZztcblx0XHRcdGlmIChsaW5rVGV4dC5lbmRzV2l0aCgnLm1kJykgfHwgbGlua1RleHQuZW5kc1dpdGgoJy5tZHgnKSkge1xuXHRcdFx0XHR0YXJnZXRQYXRoID0gbGlua1RleHQ7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHQvLyBEZWZhdWx0IHRvIC5tZCBpZiBubyBleHRlbnNpb24gc3BlY2lmaWVkXG5cdFx0XHRcdHRhcmdldFBhdGggPSBsaW5rVGV4dCArICcubWQnO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBDaGVjayBpZiBpdCdzIGluIGEgY29uZmlndXJlZCBjb250ZW50IGRpcmVjdG9yeVxuXHRcdFx0Y29uc3QgaXNJbkNvbmZpZ3VyZWREaXJlY3RvcnkgPSB0aGlzLmlzSW5Db25maWd1cmVkQ29udGVudERpcmVjdG9yeSh0YXJnZXRQYXRoKTtcblxuXHRcdFx0Ly8gQWxzbyBjaGVjayBpZiBpdCdzIGEgc2ltcGxlIGZpbGVuYW1lIChubyBwYXRoKSBhbmQgY3VycmVudCBmaWxlIGhhcyBhIGNvbnRlbnQgdHlwZVxuXHRcdFx0Y29uc3QgaXNTaW1wbGVGaWxlbmFtZSA9ICF0YXJnZXRQYXRoLmluY2x1ZGVzKCcvJyk7XG5cdFx0XHRjb25zdCBoYXNDdXJyZW50Q29udGVudFR5cGUgPSBjdXJyZW50RmlsZUNvbnRlbnRUeXBlLmJhc2VQYXRoICE9PSBcIlwiIHx8IGN1cnJlbnRGaWxlQ29udGVudFR5cGUuY3JlYXRpb25Nb2RlICE9PSBcImZpbGVcIiB8fCBjdXJyZW50RmlsZUNvbnRlbnRUeXBlLmluZGV4RmlsZU5hbWUgIT09IFwiXCI7XG5cblx0XHRcdHJldHVybiBpc0luQ29uZmlndXJlZERpcmVjdG9yeSB8fCAoaXNTaW1wbGVGaWxlbmFtZSAmJiBoYXNDdXJyZW50Q29udGVudFR5cGUpO1xuXHRcdH07XG5cblx0XHQvLyBIYW5kbGUgcmVndWxhciBXaWtpbGlua3MgKG5vbi1pbWFnZSlcblx0XHRuZXdDb250ZW50ID0gbmV3Q29udGVudC5yZXBsYWNlKFxuXHRcdFx0L1xcW1xcWyhbXlxcXXxdKykoXFx8KFteXFxdXSspKT9cXF1cXF0vZyxcblx0XHRcdChtYXRjaDogc3RyaW5nLCBsaW5rVGV4dDogc3RyaW5nLCBfcGlwZTogc3RyaW5nIHwgdW5kZWZpbmVkLCBkaXNwbGF5VGV4dDogc3RyaW5nIHwgdW5kZWZpbmVkKSA9PiB7XG5cdFx0XHRcdC8vIENoZWNrIGlmIGl0J3MgYW4gaW1hZ2UgV2lraWxpbmtcblx0XHRcdFx0aWYgKGltYWdlRXh0ZW5zaW9ucy50ZXN0KGxpbmtUZXh0KSkge1xuXHRcdFx0XHRcdHNraXBwZWRDb3VudCsrO1xuXHRcdFx0XHRcdHNraXBwZWRMaW5rcy5wdXNoKGxpbmtUZXh0KTtcblx0XHRcdFx0XHRyZXR1cm4gbWF0Y2g7IC8vIElnbm9yZSBhbmQgcmV0dXJuIG9yaWdpbmFsIGltYWdlIFdpa2lsaW5rXG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBDaGVjayBpZiB3ZSBjYW4gcmVsaWFibHkgY29udmVydCB0aGlzIGxpbmtcblx0XHRcdFx0aWYgKCFjYW5Db252ZXJ0TGluayhsaW5rVGV4dCkpIHtcblx0XHRcdFx0XHRza2lwcGVkQ291bnQrKztcblx0XHRcdFx0XHRza2lwcGVkTGlua3MucHVzaChsaW5rVGV4dCk7XG5cdFx0XHRcdFx0cmV0dXJuIG1hdGNoOyAvLyBSZXR1cm4gb3JpZ2luYWwgaWYgd2UgY2FuJ3QgY29udmVydCByZWxpYWJseVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0Y29uc3QgZGlzcGxheSA9IGRpc3BsYXlUZXh0IHx8IGxpbmtUZXh0LnJlcGxhY2UoL1xcLihtZHxtZHgpJC8sIFwiXCIpO1xuXG5cdFx0XHRcdC8vIEZvciByZWxhdGl2ZSBsaW5rcyAobm8gZm9sZGVyIHBhdGgpLCB1c2UgY3VycmVudCBmaWxlJ3MgY29udGVudCB0eXBlXG5cdFx0XHRcdGNvbnN0IHVybCA9IHRoaXMuZ2V0QXN0cm9VcmxGcm9tSW50ZXJuYWxMaW5rV2l0aENvbnRleHQobGlua1RleHQsIGZpbGUucGF0aCwgY3VycmVudEZpbGVDb250ZW50VHlwZSk7XG5cblx0XHRcdFx0Y29udmVydGVkQ291bnQrKztcblx0XHRcdFx0cmV0dXJuIGBbJHtkaXNwbGF5fV0oJHt1cmx9KWA7XG5cdFx0XHR9XG5cdFx0KTtcblxuXHRcdC8vIEhhbmRsZSBzdGFuZGFyZCBNYXJrZG93biBsaW5rcyAobm9uLWltYWdlLCBub24tZXh0ZXJuYWwpXG5cdFx0Ly8gT25seSBwcm9jZXNzIGxpbmtzIHRoYXQgY29udGFpbiAubWQgb3IgLm1keCB0byBhdm9pZCBwcm9jZXNzaW5nIGFscmVhZHktY29udmVydGVkIGxpbmtzXG5cdFx0bmV3Q29udGVudCA9IG5ld0NvbnRlbnQucmVwbGFjZShcblx0XHRcdC9cXFsoW15cXF1dKylcXF1cXCgoW14pXStcXC4obWR8bWR4KVteKV0qKVxcKS9nLFxuXHRcdFx0KG1hdGNoOiBzdHJpbmcsIGRpc3BsYXlUZXh0OiBzdHJpbmcsIGxpbms6IHN0cmluZykgPT4ge1xuXHRcdFx0XHQvLyBDaGVjayBpZiBpdCdzIGFuIGltYWdlIGxpbmsgb3IgZXh0ZXJuYWwgbGlua1xuXHRcdFx0XHRpZiAobGluay5tYXRjaCgvXmh0dHBzPzpcXC9cXC8vKSB8fCBpbWFnZUV4dGVuc2lvbnMudGVzdChsaW5rKSkge1xuXHRcdFx0XHRcdHNraXBwZWRDb3VudCsrO1xuXHRcdFx0XHRcdHNraXBwZWRMaW5rcy5wdXNoKGxpbmspO1xuXHRcdFx0XHRcdHJldHVybiBtYXRjaDsgLy8gSWdub3JlIGV4dGVybmFsIG9yIGltYWdlIGxpbmtzXG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBDaGVjayBpZiB3ZSBjYW4gcmVsaWFibHkgY29udmVydCB0aGlzIGxpbmtcblx0XHRcdFx0aWYgKCFjYW5Db252ZXJ0TGluayhsaW5rKSkge1xuXHRcdFx0XHRcdHNraXBwZWRDb3VudCsrO1xuXHRcdFx0XHRcdHNraXBwZWRMaW5rcy5wdXNoKGxpbmspO1xuXHRcdFx0XHRcdHJldHVybiBtYXRjaDsgLy8gUmV0dXJuIG9yaWdpbmFsIGlmIHdlIGNhbid0IGNvbnZlcnQgcmVsaWFibHlcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGNvbnN0IHVybCA9IHRoaXMuZ2V0QXN0cm9VcmxGcm9tSW50ZXJuYWxMaW5rV2l0aENvbnRleHQobGluaywgZmlsZS5wYXRoLCBjdXJyZW50RmlsZUNvbnRlbnRUeXBlKTtcblxuXHRcdFx0XHRjb252ZXJ0ZWRDb3VudCsrO1xuXHRcdFx0XHRyZXR1cm4gYFske2Rpc3BsYXlUZXh0fV0oJHt1cmx9KWA7XG5cdFx0XHR9XG5cdFx0KTtcblxuXHRcdC8vIEhhbmRsZSBpbWFnZSBsaW5rcyBpbiBNYXJrZG93biBmb3JtYXQgKGUuZy4sICFbSW1hZ2VdKG1vdW50YWlucy5wbmcpKVxuXHRcdG5ld0NvbnRlbnQgPSBuZXdDb250ZW50LnJlcGxhY2UoXG5cdFx0XHQvIVxcWyguKj8pXFxdXFwoKFteKV0rKVxcKS9nLFxuXHRcdFx0KG1hdGNoOiBzdHJpbmcpID0+IHtcblx0XHRcdFx0c2tpcHBlZENvdW50Kys7XG5cdFx0XHRcdHJldHVybiBtYXRjaDsgLy8gSWdub3JlIGFsbCBpbWFnZSBsaW5rc1xuXHRcdFx0fVxuXHRcdCk7XG5cblx0XHQvLyBIYW5kbGUge3tlbWJlZH19IHN5bnRheFxuXHRcdG5ld0NvbnRlbnQgPSBuZXdDb250ZW50LnJlcGxhY2UoL1xce1xceyhbXn1dKylcXH1cXH0vZywgKG1hdGNoOiBzdHJpbmcsIGZpbGVOYW1lOiBzdHJpbmcpID0+IHtcblx0XHRcdGlmIChpbWFnZUV4dGVuc2lvbnMudGVzdChmaWxlTmFtZSkpIHtcblx0XHRcdFx0c2tpcHBlZENvdW50Kys7XG5cdFx0XHRcdHNraXBwZWRMaW5rcy5wdXNoKGZpbGVOYW1lKTtcblx0XHRcdFx0cmV0dXJuIG1hdGNoOyAvLyBJZ25vcmUgZW1iZWRkZWQgaW1hZ2VzXG5cdFx0XHR9XG5cblx0XHRcdC8vIENoZWNrIGlmIHdlIGNhbiByZWxpYWJseSBjb252ZXJ0IHRoaXMgbGlua1xuXHRcdFx0aWYgKCFjYW5Db252ZXJ0TGluayhmaWxlTmFtZSkpIHtcblx0XHRcdFx0c2tpcHBlZENvdW50Kys7XG5cdFx0XHRcdHNraXBwZWRMaW5rcy5wdXNoKGZpbGVOYW1lKTtcblx0XHRcdFx0cmV0dXJuIG1hdGNoOyAvLyBSZXR1cm4gb3JpZ2luYWwgaWYgd2UgY2FuJ3QgY29udmVydCByZWxpYWJseVxuXHRcdFx0fVxuXG5cdFx0XHRjb25zdCB1cmwgPSB0aGlzLmdldEFzdHJvVXJsRnJvbUludGVybmFsTGlua1dpdGhDb250ZXh0KGZpbGVOYW1lLCBmaWxlLnBhdGgsIGN1cnJlbnRGaWxlQ29udGVudFR5cGUpO1xuXG5cdFx0XHRjb252ZXJ0ZWRDb3VudCsrO1xuXHRcdFx0cmV0dXJuIGBbRW1iZWRkZWQ6ICR7ZmlsZU5hbWV9XSgke3VybH0pYDtcblx0XHR9KTtcblxuXHRcdGVkaXRvci5zZXRWYWx1ZShuZXdDb250ZW50KTtcblxuXHRcdC8vIFJlc3RvcmUgY3Vyc29yIHBvc2l0aW9uLCBhZGp1c3RpbmcgZm9yIGNvbnRlbnQgY2hhbmdlc1xuXHRcdGNvbnN0IG5ld0xpbmVDb3VudCA9IG5ld0NvbnRlbnQuc3BsaXQoJ1xcbicpLmxlbmd0aDtcblx0XHRjb25zdCBuZXdMaW5lTGVuZ3RoID0gbmV3Q29udGVudC5zcGxpdCgnXFxuJylbb3JpZ2luYWxMaW5lXT8ubGVuZ3RoIHx8IDA7XG5cblx0XHQvLyBDYWxjdWxhdGUgbmV3IGN1cnNvciBwb3NpdGlvblxuXHRcdGxldCBuZXdMaW5lID0gb3JpZ2luYWxMaW5lO1xuXHRcdGxldCBuZXdDaCA9IG9yaWdpbmFsQ2g7XG5cblx0XHQvLyBJZiBjb250ZW50IGxlbmd0aCBjaGFuZ2VkLCBhZGp1c3QgY3Vyc29yIHBvc2l0aW9uXG5cdFx0aWYgKG5ld0xpbmVDb3VudCAhPT0gb3JpZ2luYWxMaW5lQ291bnQpIHtcblx0XHRcdC8vIElmIGxpbmVzIHdlcmUgYWRkZWQvcmVtb3ZlZCBiZWZvcmUgY3Vyc29yLCBhZGp1c3QgbGluZSBudW1iZXJcblx0XHRcdC8vIEZvciBzaW1wbGljaXR5LCBrZWVwIHNhbWUgbGluZSBpZiBpdCBzdGlsbCBleGlzdHMsIG90aGVyd2lzZSBjbGFtcCB0byBlbmRcblx0XHRcdGlmIChuZXdMaW5lID49IG5ld0xpbmVDb3VudCkge1xuXHRcdFx0XHRuZXdMaW5lID0gTWF0aC5tYXgoMCwgbmV3TGluZUNvdW50IC0gMSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gQWRqdXN0IGNvbHVtbiBwb3NpdGlvbiBpZiBsaW5lIGxlbmd0aCBjaGFuZ2VkXG5cdFx0aWYgKG5ld0xpbmVMZW5ndGggIT09IG9yaWdpbmFsTGluZUxlbmd0aCkge1xuXHRcdFx0Ly8gSWYgbGluZSBnb3Qgc2hvcnRlciwgY2xhbXAgdG8gZW5kIG9mIGxpbmVcblx0XHRcdGlmIChuZXdDaCA+IG5ld0xpbmVMZW5ndGgpIHtcblx0XHRcdFx0bmV3Q2ggPSBNYXRoLm1heCgwLCBuZXdMaW5lTGVuZ3RoKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBSZXN0b3JlIGN1cnNvciBwb3NpdGlvblxuXHRcdGVkaXRvci5zZXRDdXJzb3IoeyBsaW5lOiBuZXdMaW5lLCBjaDogbmV3Q2ggfSk7XG5cblx0XHQvLyBTaG93IGFwcHJvcHJpYXRlIG5vdGljZSBiYXNlZCBvbiByZXN1bHRzXG5cdFx0aWYgKGNvbnZlcnRlZENvdW50ID4gMCAmJiBza2lwcGVkQ291bnQgPT09IDApIHtcblx0XHRcdG5ldyBOb3RpY2UoYENvbnZlcnRlZCAke2NvbnZlcnRlZENvdW50fSBpbnRlcm5hbCBsaW5rJHtjb252ZXJ0ZWRDb3VudCA+IDEgPyAncycgOiAnJ30gZm9yIEFzdHJvLmApO1xuXHRcdH0gZWxzZSBpZiAoY29udmVydGVkQ291bnQgPiAwICYmIHNraXBwZWRDb3VudCA+IDApIHtcblx0XHRcdG5ldyBOb3RpY2UoYENvbnZlcnRlZCAke2NvbnZlcnRlZENvdW50fSBsaW5rJHtjb252ZXJ0ZWRDb3VudCA+IDEgPyAncycgOiAnJ30gZm9yIEFzdHJvLiBTa2lwcGVkICR7c2tpcHBlZENvdW50fSBsaW5rJHtza2lwcGVkQ291bnQgPiAxID8gJ3MnIDogJyd9IG91dHNpZGUgY29uZmlndXJlZCBjb250ZW50IGRpcmVjdG9yaWVzLmApO1xuXHRcdH0gZWxzZSBpZiAoc2tpcHBlZENvdW50ID4gMCkge1xuXHRcdFx0bmV3IE5vdGljZShgTm8gbGlua3MgY29udmVydGVkLiBBbGwgJHtza2lwcGVkQ291bnR9IGxpbmske3NraXBwZWRDb3VudCA+IDEgPyAncycgOiAnJ30gYXJlIG91dHNpZGUgY29uZmlndXJlZCBjb250ZW50IGRpcmVjdG9yaWVzIG9yIGFyZSBpbWFnZXMvZXh0ZXJuYWwgbGlua3MuYCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdG5ldyBOb3RpY2UoXCJObyBpbnRlcm5hbCBsaW5rcyBmb3VuZCB0byBjb252ZXJ0LlwiKTtcblx0XHR9XG5cdH1cbn1cbiIsICJpbXBvcnQgeyBBcHAsIE1vZGFsLCBURmlsZSwgTm90aWNlLCBQbGF0Zm9ybSwgTWFya2Rvd25WaWV3IH0gZnJvbSBcIm9ic2lkaWFuXCI7XG5pbXBvcnQgeyBBc3Ryb0NvbXBvc2VyUGx1Z2luSW50ZXJmYWNlLCBDb250ZW50VHlwZUlkIH0gZnJvbSBcIi4uL3R5cGVzXCI7XG5pbXBvcnQgeyBGaWxlT3BlcmF0aW9ucyB9IGZyb20gXCIuLi91dGlscy9maWxlLW9wZXJhdGlvbnNcIjtcbmltcG9ydCB7IFRlbXBsYXRlUGFyc2VyIH0gZnJvbSBcIi4uL3V0aWxzL3RlbXBsYXRlLXBhcnNpbmdcIjtcbmltcG9ydCB7IHRvS2ViYWJDYXNlIH0gZnJvbSBcIi4uL3V0aWxzL3N0cmluZy11dGlsc1wiO1xuXG5leHBvcnQgY2xhc3MgVGl0bGVNb2RhbCBleHRlbmRzIE1vZGFsIHtcblx0ZmlsZTogVEZpbGUgfCBudWxsO1xuXHRwbHVnaW46IEFzdHJvQ29tcG9zZXJQbHVnaW5JbnRlcmZhY2U7XG5cdHR5cGU6IENvbnRlbnRUeXBlSWQ7XG5cdGlzUmVuYW1lOiBib29sZWFuO1xuXHRpc05ld05vdGU6IGJvb2xlYW47XG5cdHRpdGxlSW5wdXQhOiBIVE1MSW5wdXRFbGVtZW50O1xuXHRwcml2YXRlIGZpbGVPcHM6IEZpbGVPcGVyYXRpb25zO1xuXHRwcml2YXRlIHRlbXBsYXRlUGFyc2VyOiBUZW1wbGF0ZVBhcnNlcjtcblxuXHRjb25zdHJ1Y3RvcihhcHA6IEFwcCwgZmlsZTogVEZpbGUgfCBudWxsLCBwbHVnaW46IEFzdHJvQ29tcG9zZXJQbHVnaW5JbnRlcmZhY2UsIHR5cGU6IENvbnRlbnRUeXBlSWQsIGlzUmVuYW1lID0gZmFsc2UsIGlzTmV3Tm90ZSA9IGZhbHNlKSB7XG5cdFx0c3VwZXIoYXBwKTtcblx0XHR0aGlzLmZpbGUgPSBmaWxlO1xuXHRcdHRoaXMucGx1Z2luID0gcGx1Z2luO1xuXHRcdHRoaXMudHlwZSA9IHR5cGU7XG5cdFx0dGhpcy5pc1JlbmFtZSA9IGlzUmVuYW1lO1xuXHRcdHRoaXMuaXNOZXdOb3RlID0gaXNOZXdOb3RlO1xuXG5cdFx0Ly8gSW5pdGlhbGl6ZSB1dGlsaXRpZXMgd2l0aCBjdXJyZW50IHNldHRpbmdzXG5cdFx0Ly8gRmlsZU9wZXJhdGlvbnMgd2lsbCBnZXQgZnJlc2ggc2V0dGluZ3MgZnJvbSBwbHVnaW4gZHluYW1pY2FsbHlcblx0XHRjb25zdCBzZXR0aW5ncyA9IHBsdWdpbi5zZXR0aW5ncztcblx0XHR0aGlzLmZpbGVPcHMgPSBuZXcgRmlsZU9wZXJhdGlvbnMoYXBwLCBzZXR0aW5ncywgcGx1Z2luKTtcblx0XHR0aGlzLnRlbXBsYXRlUGFyc2VyID0gbmV3IFRlbXBsYXRlUGFyc2VyKGFwcCwgc2V0dGluZ3MpO1xuXHR9XG5cblx0YXN5bmMgZ2V0Q3VycmVudFRpdGxlQXN5bmMoKTogUHJvbWlzZTxzdHJpbmc+IHtcblx0XHRpZiAoIXRoaXMuZmlsZSkge1xuXHRcdFx0cmV0dXJuIFwiXCI7XG5cdFx0fVxuXG5cdFx0Ly8gUmVhZCB0aGUgZmlsZSBjb250ZW50IGRpcmVjdGx5IHRvIGVuc3VyZSB3ZSBoYXZlIHRoZSBsYXRlc3QgdGl0bGVcblx0XHR0cnkge1xuXHRcdFx0Y29uc3QgY29udGVudCA9IGF3YWl0IHRoaXMuYXBwLnZhdWx0LnJlYWQodGhpcy5maWxlKTtcblx0XHRcdGNvbnN0IHRpdGxlS2V5ID0gdGhpcy5maWxlT3BzLmdldFRpdGxlS2V5KHRoaXMudHlwZSk7XG5cdFx0XHRjb25zdCB7IHByb3BlcnRpZXMgfSA9IHRoaXMudGVtcGxhdGVQYXJzZXIucGFyc2VGcm9udG1hdHRlcihjb250ZW50KTtcblxuXHRcdFx0aWYgKHRpdGxlS2V5IGluIHByb3BlcnRpZXMpIHtcblx0XHRcdFx0Y29uc3QgdGl0bGVWYWx1ZSA9IHByb3BlcnRpZXNbdGl0bGVLZXldO1xuXHRcdFx0XHRpZiAoQXJyYXkuaXNBcnJheSh0aXRsZVZhbHVlKSAmJiB0aXRsZVZhbHVlLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0XHRyZXR1cm4gU3RyaW5nKHRpdGxlVmFsdWVbMF0pO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmICh0aXRsZVZhbHVlICE9PSBudWxsICYmIHRpdGxlVmFsdWUgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdHJldHVybiBTdHJpbmcodGl0bGVWYWx1ZSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9IGNhdGNoIChlcnJvcikge1xuXHRcdFx0Y29uc29sZS5lcnJvcihcIkVycm9yIHJlYWRpbmcgZmlsZSBmb3IgdGl0bGU6XCIsIGVycm9yKTtcblx0XHR9XG5cblx0XHQvLyBGYWxsIGJhY2sgdG8gZmlsZW5hbWUtYmFzZWQgdGl0bGVcblx0XHRyZXR1cm4gdGhpcy5nZXRGYWxsYmFja1RpdGxlKCk7XG5cdH1cblxuXHRnZXRDdXJyZW50VGl0bGUoKTogc3RyaW5nIHtcblx0XHRpZiAoIXRoaXMuZmlsZSkge1xuXHRcdFx0cmV0dXJuIFwiXCI7XG5cdFx0fVxuXG5cdFx0Y29uc3QgdGl0bGVLZXkgPSB0aGlzLmZpbGVPcHMuZ2V0VGl0bGVLZXkodGhpcy50eXBlKTtcblx0XHRjb25zdCBjYWNoZSA9IHRoaXMuYXBwLm1ldGFkYXRhQ2FjaGUuZ2V0RmlsZUNhY2hlKHRoaXMuZmlsZSk7XG5cblx0XHRpZiAoY2FjaGU/LmZyb250bWF0dGVyICYmIHRpdGxlS2V5IGluIGNhY2hlLmZyb250bWF0dGVyKSB7XG5cdFx0XHRjb25zdCB0aXRsZVZhbHVlID0gY2FjaGUuZnJvbnRtYXR0ZXJbdGl0bGVLZXldIGFzIHVua25vd247XG5cdFx0XHRpZiAodHlwZW9mIHRpdGxlVmFsdWUgPT09ICdzdHJpbmcnKSB7XG5cdFx0XHRcdHJldHVybiB0aXRsZVZhbHVlO1xuXHRcdFx0fVxuXHRcdFx0aWYgKEFycmF5LmlzQXJyYXkodGl0bGVWYWx1ZSkgJiYgdGl0bGVWYWx1ZS5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdGNvbnN0IGZpcnN0VmFsdWUgPSB0aXRsZVZhbHVlWzBdIGFzIHVua25vd247XG5cdFx0XHRcdGlmICh0eXBlb2YgZmlyc3RWYWx1ZSA9PT0gJ3N0cmluZycpIHtcblx0XHRcdFx0XHRyZXR1cm4gZmlyc3RWYWx1ZTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoZmlyc3RWYWx1ZSAhPSBudWxsKSB7XG5cdFx0XHRcdFx0aWYgKHR5cGVvZiBmaXJzdFZhbHVlID09PSAnbnVtYmVyJyB8fCB0eXBlb2YgZmlyc3RWYWx1ZSA9PT0gJ2Jvb2xlYW4nKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gU3RyaW5nKGZpcnN0VmFsdWUpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRpZiAodHlwZW9mIGZpcnN0VmFsdWUgPT09ICdzdHJpbmcnKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gZmlyc3RWYWx1ZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGlmICh0aXRsZVZhbHVlID09IG51bGwpIHtcblx0XHRcdFx0cmV0dXJuICcnO1xuXHRcdFx0fVxuXHRcdFx0aWYgKHR5cGVvZiB0aXRsZVZhbHVlID09PSAnbnVtYmVyJyB8fCB0eXBlb2YgdGl0bGVWYWx1ZSA9PT0gJ2Jvb2xlYW4nKSB7XG5cdFx0XHRcdHJldHVybiBTdHJpbmcodGl0bGVWYWx1ZSk7XG5cdFx0XHR9XG5cdFx0XHRpZiAodHlwZW9mIHRpdGxlVmFsdWUgPT09ICdzdHJpbmcnKSB7XG5cdFx0XHRcdHJldHVybiB0aXRsZVZhbHVlO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuICcnO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcy5nZXRGYWxsYmFja1RpdGxlKCk7XG5cdH1cblxuXHRwcml2YXRlIGdldEZhbGxiYWNrVGl0bGUoKTogc3RyaW5nIHtcblx0XHRpZiAoIXRoaXMuZmlsZSkge1xuXHRcdFx0cmV0dXJuIFwiXCI7XG5cdFx0fVxuXG5cdFx0bGV0IGJhc2VuYW1lID0gdGhpcy5maWxlLmJhc2VuYW1lO1xuXHRcdGlmICh0aGlzLmZpbGUucGFyZW50ICYmIHRoaXMudHlwZSAhPT0gXCJub3RlXCIpIHtcblx0XHRcdGNvbnN0IGNvbnRlbnRUeXBlID0gdGhpcy5maWxlT3BzLmdldENvbnRlbnRUeXBlKHRoaXMudHlwZSk7XG5cdFx0XHRjb25zdCBpbmRleEZpbGVOYW1lID0gY29udGVudFR5cGU/LmluZGV4RmlsZU5hbWUgfHwgXCJcIjtcblx0XHRcdGlmIChpbmRleEZpbGVOYW1lLnRyaW0oKSAhPT0gXCJcIiAmJiBiYXNlbmFtZSA9PT0gaW5kZXhGaWxlTmFtZSkge1xuXHRcdFx0XHRiYXNlbmFtZSA9IHRoaXMuZmlsZS5wYXJlbnQubmFtZTtcblx0XHRcdH1cblx0XHR9XG5cdFx0aWYgKGJhc2VuYW1lLnN0YXJ0c1dpdGgoXCJfXCIpKSB7XG5cdFx0XHRiYXNlbmFtZSA9IGJhc2VuYW1lLnNsaWNlKDEpO1xuXHRcdH1cblx0XHRyZXR1cm4gYmFzZW5hbWUucmVwbGFjZSgvLS9nLCBcIiBcIikuc3BsaXQoXCIgXCIpLm1hcCh3b3JkID0+IHdvcmQuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyB3b3JkLnNsaWNlKDEpKS5qb2luKFwiIFwiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBFeHRyYWN0cyBhIHN1Z2dlc3RlZCB0aXRsZSBmcm9tIHRoZSBmaWxlIGJhc2VuYW1lIGZvciBuZXdseSBjcmVhdGVkIGZpbGVzLlxuXHQgKiBUaGlzIGlzIHVzZWQgd2hlbiBhIGZpbGUgaXMgY3JlYXRlZCBmcm9tIGEgbGluayAoZS5nLiwgW1tzRWZzbGVpZl1dKS5cblx0ICogUHJlc2VydmVzIHRoZSBvcmlnaW5hbCB0ZXh0IGFzIG11Y2ggYXMgcG9zc2libGUuXG5cdCAqL1xuXHRnZXRTdWdnZXN0ZWRUaXRsZUZyb21CYXNlbmFtZSgpOiBzdHJpbmcge1xuXHRcdGlmICghdGhpcy5maWxlKSB7XG5cdFx0XHRyZXR1cm4gXCJcIjtcblx0XHR9XG5cblx0XHRsZXQgYmFzZW5hbWUgPSB0aGlzLmZpbGUuYmFzZW5hbWU7XG5cblx0XHQvLyBIYW5kbGUgaW5kZXggZmlsZSBuYW1lcyAtIHVzZSBwYXJlbnQgZm9sZGVyIG5hbWUgaW5zdGVhZFxuXHRcdGlmICh0aGlzLmZpbGUucGFyZW50ICYmIHRoaXMudHlwZSAhPT0gXCJub3RlXCIpIHtcblx0XHRcdGNvbnN0IGNvbnRlbnRUeXBlID0gdGhpcy5maWxlT3BzLmdldENvbnRlbnRUeXBlKHRoaXMudHlwZSk7XG5cdFx0XHRjb25zdCBpbmRleEZpbGVOYW1lID0gY29udGVudFR5cGU/LmluZGV4RmlsZU5hbWUgfHwgXCJcIjtcblx0XHRcdGlmIChpbmRleEZpbGVOYW1lLnRyaW0oKSAhPT0gXCJcIiAmJiBiYXNlbmFtZSA9PT0gaW5kZXhGaWxlTmFtZSkge1xuXHRcdFx0XHRiYXNlbmFtZSA9IHRoaXMuZmlsZS5wYXJlbnQubmFtZTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBSZW1vdmUgbGVhZGluZyB1bmRlcnNjb3JlIGlmIHByZXNlbnRcblx0XHRpZiAoYmFzZW5hbWUuc3RhcnRzV2l0aChcIl9cIikpIHtcblx0XHRcdGJhc2VuYW1lID0gYmFzZW5hbWUuc2xpY2UoMSk7XG5cdFx0fVxuXG5cdFx0Ly8gUmV0dXJuIHRoZSBiYXNlbmFtZSBhcy1pcyB0byBwcmVzZXJ2ZSB1c2VyJ3Mgb3JpZ2luYWwgaW5wdXRcblx0XHQvLyAoZS5nLiwgXCJzRWZzbGVpZlwiIHN0YXlzIGFzIFwic0Vmc2xlaWZcIilcblx0XHRyZXR1cm4gYmFzZW5hbWU7XG5cdH1cblxuXHRvbk9wZW4oKSB7XG5cdFx0Y29uc3QgeyBjb250ZW50RWwgfSA9IHRoaXM7XG5cdFx0Y29udGVudEVsLmVtcHR5KCk7XG5cblx0XHQvLyBBZGQgbW9iaWxlLWZyaWVuZGx5IHBvc2l0aW9uaW5nIGNsYXNzIC0gY2hlY2sgYm90aCB3aWR0aCBhbmQgcGxhdGZvcm1cblx0XHRjb25zdCBpc01vYmlsZSA9IHdpbmRvdy5pbm5lcldpZHRoIDw9IDc2OCB8fCBQbGF0Zm9ybS5pc01vYmlsZTtcblx0XHRpZiAoaXNNb2JpbGUpIHtcblx0XHRcdHRoaXMubW9kYWxFbC5hZGRDbGFzcygnYXN0cm8tY29tcG9zZXItbW9iaWxlLW1vZGFsJyk7XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXMuaXNSZW5hbWUpIHtcblx0XHRcdGNvbnN0IHR5cGVOYW1lID0gdGhpcy5nZXRUeXBlRGlzcGxheU5hbWUoKTtcblxuXHRcdFx0aWYgKHRoaXMudHlwZSA9PT0gXCJub3RlXCIpIHtcblx0XHRcdFx0Ly8gRm9yIGdlbmVyaWMgbm90ZXMgb3V0c2lkZSBvZiBhbnkga25vd24gY29udGVudCB0eXBlXG5cdFx0XHRcdGNvbnRlbnRFbC5jcmVhdGVFbChcImgyXCIsIHsgdGV4dDogXCJSZW5hbWUgY29udGVudFwiIH0pO1xuXHRcdFx0XHRjb250ZW50RWwuY3JlYXRlRWwoXCJwXCIsIHsgdGV4dDogXCJFbnRlciBhIHRpdGxlIGZvciB0aGlzIGNvbnRlbnQ6XCIgfSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjb250ZW50RWwuY3JlYXRlRWwoXCJoMlwiLCB7IHRleHQ6IGBSZW5hbWUgJHt0eXBlTmFtZX0gY29udGVudGAgfSk7XG5cdFx0XHRcdGNvbnRlbnRFbC5jcmVhdGVFbChcInBcIiwgeyB0ZXh0OiBgRW50ZXIgbmV3IHRpdGxlIGZvciB5b3VyICR7dHlwZU5hbWV9IGNvbnRlbnQ6YCB9KTtcblx0XHRcdH1cblxuXHRcdFx0dGhpcy50aXRsZUlucHV0ID0gY29udGVudEVsLmNyZWF0ZUVsKFwiaW5wdXRcIiwge1xuXHRcdFx0XHR0eXBlOiBcInRleHRcIixcblx0XHRcdFx0cGxhY2Vob2xkZXI6IFwiTmV3IFRpdGxlXCIsXG5cdFx0XHRcdGNsczogXCJhc3Ryby1jb21wb3Nlci10aXRsZS1pbnB1dFwiXG5cdFx0XHR9KTtcblxuXHRcdFx0Ly8gQXN5bmMgbG9hZCB0aGUgY3VycmVudCB0aXRsZSBmcm9tIGZpbGVcblx0XHRcdHZvaWQgdGhpcy5nZXRDdXJyZW50VGl0bGVBc3luYygpLnRoZW4odGl0bGUgPT4ge1xuXHRcdFx0XHR0aGlzLnRpdGxlSW5wdXQudmFsdWUgPSB0aXRsZTtcblx0XHRcdH0pO1xuXHRcdH0gZWxzZSBpZiAodGhpcy5pc05ld05vdGUpIHtcblx0XHRcdGNvbnN0IHR5cGVOYW1lID0gdGhpcy5nZXRUeXBlRGlzcGxheU5hbWUoKTtcblxuXHRcdFx0aWYgKHRoaXMudHlwZSA9PT0gXCJub3RlXCIpIHtcblx0XHRcdFx0Y29udGVudEVsLmNyZWF0ZUVsKFwiaDJcIiwgeyB0ZXh0OiBcIk5ldyBjb250ZW50XCIgfSk7XG5cdFx0XHRcdGNvbnRlbnRFbC5jcmVhdGVFbChcInBcIiwgeyB0ZXh0OiBcIkVudGVyIGEgdGl0bGUgZm9yIHRoaXMgY29udGVudDpcIiB9KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNvbnRlbnRFbC5jcmVhdGVFbChcImgyXCIsIHsgdGV4dDogYENyZWF0ZSBuZXcgJHt0eXBlTmFtZX0gY29udGVudGAgfSk7XG5cdFx0XHRcdGNvbnRlbnRFbC5jcmVhdGVFbChcInBcIiwgeyB0ZXh0OiBgRW50ZXIgYSB0aXRsZSBmb3IgeW91ciBuZXcgJHt0eXBlTmFtZX0gY29udGVudDpgIH0pO1xuXHRcdFx0fVxuXG5cdFx0XHR0aGlzLnRpdGxlSW5wdXQgPSBjb250ZW50RWwuY3JlYXRlRWwoXCJpbnB1dFwiLCB7XG5cdFx0XHRcdHR5cGU6IFwidGV4dFwiLFxuXHRcdFx0XHRwbGFjZWhvbGRlcjogXCJOZXcgVGl0bGVcIixcblx0XHRcdFx0Y2xzOiBcImFzdHJvLWNvbXBvc2VyLXRpdGxlLWlucHV0XCJcblx0XHRcdH0pO1xuXHRcdFx0Ly8gTGVhdmUgaW5wdXQgZW1wdHkgZm9yIG5ldyBub3RlcyAtIHVzZXIgY2FuIHR5cGUgZGlyZWN0bHlcblx0XHR9IGVsc2Uge1xuXHRcdFx0Y29uc3QgdHlwZU5hbWUgPSB0aGlzLmdldFR5cGVEaXNwbGF5TmFtZSgpO1xuXG5cdFx0XHRpZiAodGhpcy50eXBlID09PSBcIm5vdGVcIikge1xuXHRcdFx0XHRjb250ZW50RWwuY3JlYXRlRWwoXCJoMlwiLCB7IHRleHQ6IFwiTmV3IGNvbnRlbnRcIiB9KTtcblx0XHRcdFx0Y29udGVudEVsLmNyZWF0ZUVsKFwicFwiLCB7IHRleHQ6IFwiRW50ZXIgYSB0aXRsZSBmb3IgdGhpcyBjb250ZW50OlwiIH0pO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y29udGVudEVsLmNyZWF0ZUVsKFwiaDJcIiwgeyB0ZXh0OiBgQ3JlYXRlIG5ldyAke3R5cGVOYW1lfSBjb250ZW50YCB9KTtcblx0XHRcdFx0Y29udGVudEVsLmNyZWF0ZUVsKFwicFwiLCB7IHRleHQ6IGBFbnRlciBhIHRpdGxlIGZvciB5b3VyIG5ldyAke3R5cGVOYW1lfSBjb250ZW50OmAgfSk7XG5cdFx0XHR9XG5cblx0XHRcdHRoaXMudGl0bGVJbnB1dCA9IGNvbnRlbnRFbC5jcmVhdGVFbChcImlucHV0XCIsIHtcblx0XHRcdFx0dHlwZTogXCJ0ZXh0XCIsXG5cdFx0XHRcdHBsYWNlaG9sZGVyOiBcIk5ldyBUaXRsZVwiLFxuXHRcdFx0XHRjbHM6IFwiYXN0cm8tY29tcG9zZXItdGl0bGUtaW5wdXRcIlxuXHRcdFx0fSk7XG5cdFx0XHQvLyBQcmUtcG9wdWxhdGUgd2l0aCBzdWdnZXN0ZWQgdGl0bGUgZnJvbSBiYXNlbmFtZSBpZiBhdmFpbGFibGVcblx0XHRcdC8vIFRoaXMgaGFuZGxlcyBmaWxlcyBjcmVhdGVkIGZyb20gbGlua3MgKGUuZy4sIFtbc0Vmc2xlaWZdXSlcblx0XHRcdGlmICh0aGlzLmZpbGUpIHtcblx0XHRcdFx0Y29uc3Qgc3VnZ2VzdGVkVGl0bGUgPSB0aGlzLmdldFN1Z2dlc3RlZFRpdGxlRnJvbUJhc2VuYW1lKCk7XG5cdFx0XHRcdGlmIChzdWdnZXN0ZWRUaXRsZSkge1xuXHRcdFx0XHRcdHRoaXMudGl0bGVJbnB1dC52YWx1ZSA9IHN1Z2dlc3RlZFRpdGxlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHRoaXMudGl0bGVJbnB1dC5mb2N1cygpO1xuXHRcdC8vIEZvciBuZXcgbm90ZXMsIGVuc3VyZSBjdXJzb3IgaXMgYXQgdGhlIHN0YXJ0IChwb3NpdGlvbiAwKVxuXHRcdGlmICh0aGlzLmlzTmV3Tm90ZSkge1xuXHRcdFx0c2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRcdHRoaXMudGl0bGVJbnB1dC5zZXRTZWxlY3Rpb25SYW5nZSgwLCAwKTtcblx0XHRcdH0sIDApO1xuXHRcdH1cblxuXHRcdGNvbnN0IGJ1dHRvbkNvbnRhaW5lciA9IGNvbnRlbnRFbC5jcmVhdGVEaXYoeyBjbHM6IFwiYXN0cm8tY29tcG9zZXItYnV0dG9uLWNvbnRhaW5lclwiIH0pO1xuXG5cdFx0Y29uc3QgY2FuY2VsQnV0dG9uID0gYnV0dG9uQ29udGFpbmVyLmNyZWF0ZUVsKFwiYnV0dG9uXCIsIHsgdGV4dDogXCJDYW5jZWxcIiwgY2xzOiBcImFzdHJvLWNvbXBvc2VyLWNhbmNlbC1idXR0b25cIiB9KTtcblx0XHRjYW5jZWxCdXR0b24ub25jbGljayA9ICgpID0+IHRoaXMuY2xvc2UoKTtcblxuXHRcdGNvbnN0IHN1Ym1pdEJ1dHRvbiA9IGJ1dHRvbkNvbnRhaW5lci5jcmVhdGVFbChcImJ1dHRvblwiLCB7IHRleHQ6IHRoaXMuaXNSZW5hbWUgPyBcIlJlbmFtZVwiIDogXCJDcmVhdGVcIiwgY2xzOiBbXCJhc3Ryby1jb21wb3Nlci1jcmVhdGUtYnV0dG9uXCIsIFwibW9kLWN0YVwiXSB9KTtcblx0XHRzdWJtaXRCdXR0b24ub25jbGljayA9ICgpID0+IHRoaXMuc3VibWl0KCk7XG5cblx0XHR0aGlzLnRpdGxlSW5wdXQuYWRkRXZlbnRMaXN0ZW5lcihcImtleXByZXNzXCIsIChlKSA9PiB7XG5cdFx0XHRpZiAoZS5rZXkgPT09IFwiRW50ZXJcIikgdm9pZCB0aGlzLnN1Ym1pdCgpO1xuXHRcdH0pO1xuXHR9XG5cblx0YXN5bmMgc3VibWl0KCkge1xuXHRcdGNvbnN0IHRpdGxlID0gdGhpcy50aXRsZUlucHV0LnZhbHVlLnRyaW0oKTtcblxuXHRcdGlmICghdGl0bGUpIHtcblx0XHRcdG5ldyBOb3RpY2UoXCJQbGVhc2UgZW50ZXIgYSB0aXRsZS5cIik7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0dHJ5IHtcblx0XHRcdGxldCBuZXdGaWxlOiBURmlsZSB8IG51bGwgPSBudWxsO1xuXHRcdFx0aWYgKHRoaXMuaXNSZW5hbWUpIHtcblx0XHRcdFx0bmV3RmlsZSA9IGF3YWl0IHRoaXMuZmlsZU9wcy5yZW5hbWVGaWxlKHsgZmlsZTogdGhpcy5maWxlISwgdGl0bGUsIHR5cGU6IHRoaXMudHlwZSB9KTtcblxuXHRcdFx0XHRpZiAobmV3RmlsZSkge1xuXHRcdFx0XHRcdGF3YWl0IHRoaXMudGVtcGxhdGVQYXJzZXIudXBkYXRlVGl0bGVJbkZyb250bWF0dGVyKG5ld0ZpbGUsIHRpdGxlLCB0aGlzLnR5cGUpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdC8vIHJlbmFtZUZpbGUgYWxyZWFkeSBzaG93ZWQgYW4gZXJyb3Igbm90aWNlLCBjbG9zZSBtb2RhbCBhbmQgcmV0dXJuXG5cdFx0XHRcdFx0dGhpcy5jbG9zZSgpO1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIGlmICh0aGlzLmlzTmV3Tm90ZSkge1xuXHRcdFx0XHQvLyBQcm9jZXNzIHRoZSBcIlVudGl0bGVkXCIgZmlsZSAtIHJlbmFtZSBpdCBhbmQgYWRkIHByb3BlcnRpZXNcblx0XHRcdFx0Ly8gVGhpcyByZXNwZWN0cyBjcmVhdGlvbk1vZGUgKGZvbGRlciB2cyBmaWxlKSBhbmQgZG9lc24ndCByZXF1aXJlIGRlbGV0aW9uXG5cdFx0XHRcdGlmICh0aGlzLmZpbGUpIHtcblx0XHRcdFx0XHRuZXdGaWxlID0gYXdhaXQgdGhpcy5maWxlT3BzLmNyZWF0ZUZpbGUoeyBmaWxlOiB0aGlzLmZpbGUsIHRpdGxlLCB0eXBlOiB0aGlzLnR5cGUgfSk7XG5cdFx0XHRcdFx0Ly8gQWx3YXlzIGluc2VydCBwcm9wZXJ0aWVzIHdoZW4gYXV0b0luc2VydFByb3BlcnRpZXMgaXMgZW5hYmxlZFxuXHRcdFx0XHRcdGNvbnN0IHNob3VsZEluc2VydFByb3BlcnRpZXMgPSB0aGlzLnBsdWdpbi5zZXR0aW5ncy5hdXRvSW5zZXJ0UHJvcGVydGllcztcblxuXHRcdFx0XHRcdGlmIChuZXdGaWxlICYmIHNob3VsZEluc2VydFByb3BlcnRpZXMpIHtcblx0XHRcdFx0XHRcdGF3YWl0IHRoaXMuYWRkUHJvcGVydGllc1RvRmlsZShuZXdGaWxlLCB0aXRsZSwgdGhpcy50eXBlKTtcblx0XHRcdFx0XHRcdC8vIFBvc2l0aW9uIGN1cnNvciBhdCBlbmQgYWZ0ZXIgcHJvcGVydGllcyBhcmUgYWRkZWRcblx0XHRcdFx0XHRcdHRoaXMucG9zaXRpb25DdXJzb3JBdEVuZChuZXdGaWxlKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSBpZiAodGhpcy5maWxlKSB7XG5cdFx0XHRcdC8vIFdlIGhhdmUgYW4gZXhpc3RpbmcgZmlsZSwgcHJvY2VzcyBpdFxuXHRcdFx0XHRuZXdGaWxlID0gYXdhaXQgdGhpcy5maWxlT3BzLmNyZWF0ZUZpbGUoeyBmaWxlOiB0aGlzLmZpbGUsIHRpdGxlLCB0eXBlOiB0aGlzLnR5cGUgfSk7XG5cdFx0XHRcdC8vIEFsd2F5cyBpbnNlcnQgcHJvcGVydGllcyB3aGVuIGF1dG9JbnNlcnRQcm9wZXJ0aWVzIGlzIGVuYWJsZWRcblx0XHRcdFx0Y29uc3Qgc2hvdWxkSW5zZXJ0UHJvcGVydGllcyA9IHRoaXMucGx1Z2luLnNldHRpbmdzLmF1dG9JbnNlcnRQcm9wZXJ0aWVzO1xuXG5cdFx0XHRcdGlmIChuZXdGaWxlICYmIHNob3VsZEluc2VydFByb3BlcnRpZXMpIHtcblx0XHRcdFx0XHRhd2FpdCB0aGlzLmFkZFByb3BlcnRpZXNUb0ZpbGUobmV3RmlsZSwgdGl0bGUsIHRoaXMudHlwZSk7XG5cdFx0XHRcdFx0Ly8gUG9zaXRpb24gY3Vyc29yIGF0IGVuZCBhZnRlciBwcm9wZXJ0aWVzIGFyZSBhZGRlZFxuXHRcdFx0XHRcdHRoaXMucG9zaXRpb25DdXJzb3JBdEVuZChuZXdGaWxlKTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Ly8gRmFsbGJhY2sgLSBjcmVhdGUgbmV3IGZpbGVcblx0XHRcdFx0bmV3RmlsZSA9IGF3YWl0IHRoaXMuY3JlYXRlTmV3RmlsZSh0aXRsZSk7XG5cdFx0XHR9XG5cblx0XHRcdGlmICghbmV3RmlsZSkge1xuXHRcdFx0XHRuZXcgTm90aWNlKGBGYWlsZWQgdG8gJHt0aGlzLmlzUmVuYW1lID8gXCJyZW5hbWVcIiA6IFwiY3JlYXRlXCJ9ICR7dGhpcy50eXBlfS5gKTtcblx0XHRcdFx0dGhpcy5jbG9zZSgpO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdGNvbnNvbGUuZXJyb3IoJ1RpdGxlTW9kYWw6IEVycm9yIGR1cmluZyBwcm9jZXNzOicsIGVycm9yKTtcblx0XHRcdGNvbnN0IGVycm9yTWVzc2FnZSA9IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogU3RyaW5nKGVycm9yKTtcblx0XHRcdG5ldyBOb3RpY2UoYEVycm9yICR7dGhpcy5pc1JlbmFtZSA/IFwicmVuYW1pbmdcIiA6IFwiY3JlYXRpbmdcIn0gJHt0aGlzLnR5cGV9OiAke2Vycm9yTWVzc2FnZX0uYCk7XG5cdFx0XHR0aGlzLmNsb3NlKCk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0dGhpcy5jbG9zZSgpO1xuXHR9XG5cblx0cHJpdmF0ZSBnZXRUeXBlRGlzcGxheU5hbWUoKTogc3RyaW5nIHtcblx0XHRpZiAodGhpcy50eXBlID09PSBcIm5vdGVcIikge1xuXHRcdFx0cmV0dXJuIFwiQ29udGVudFwiO1xuXHRcdH1cblx0XHRjb25zdCBjb250ZW50VHlwZSA9IHRoaXMuZmlsZU9wcy5nZXRDb250ZW50VHlwZSh0aGlzLnR5cGUpO1xuXHRcdHJldHVybiBjb250ZW50VHlwZSA/IGNvbnRlbnRUeXBlLm5hbWUgOiBcIkNvbnRlbnRcIjtcblx0fVxuXG5cdHByaXZhdGUgYXN5bmMgY3JlYXRlTmV3RmlsZSh0aXRsZTogc3RyaW5nKTogUHJvbWlzZTxURmlsZSB8IG51bGw+IHtcblx0XHQvLyBEZXRlcm1pbmUgdGhlIGFwcHJvcHJpYXRlIGZvbGRlciBiYXNlZCBvbiB3aGVyZSB0aGUgdXNlciBjcmVhdGVkIHRoZSBmaWxlXG5cdFx0bGV0IHRhcmdldEZvbGRlcjogc3RyaW5nO1xuXG5cdFx0Ly8gR2V0IHRoZSBkaXJlY3Rvcnkgd2hlcmUgdGhlIHVzZXIgY3JlYXRlZCB0aGUgZmlsZVxuXHRcdGNvbnN0IG9yaWdpbmFsRGlyID0gdGhpcy5maWxlPy5wYXJlbnQ/LnBhdGggfHwgXCJcIjtcblxuXHRcdGlmICh0aGlzLnR5cGUgIT09IFwibm90ZVwiKSB7XG5cdFx0XHRjb25zdCBjb250ZW50VHlwZSA9IHRoaXMuZmlsZU9wcy5nZXRDb250ZW50VHlwZSh0aGlzLnR5cGUpO1xuXHRcdFx0Ly8gRm9yIGNvbnRlbnQgdHlwZXMsIHJlc3BlY3QgdGhlIHVzZXIncyBjaG9zZW4gbG9jYXRpb24gKHN1YmZvbGRlcilcblx0XHRcdC8vIE9ubHkgdXNlIHRoZSBjb25maWd1cmVkIGZvbGRlciBpZiB0aGUgdXNlciBjcmVhdGVkIHRoZSBmaWxlIGluIHRoZSB2YXVsdCByb290XG5cdFx0XHRpZiAob3JpZ2luYWxEaXIgPT09IFwiXCIgfHwgb3JpZ2luYWxEaXIgPT09IFwiL1wiKSB7XG5cdFx0XHRcdHRhcmdldEZvbGRlciA9IGNvbnRlbnRUeXBlPy5mb2xkZXIgfHwgXCJcIjtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRhcmdldEZvbGRlciA9IG9yaWdpbmFsRGlyO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBGb3Igbm90ZXMsIHVzZSB0aGUgb3JpZ2luYWwgZGlyZWN0b3J5XG5cdFx0XHR0YXJnZXRGb2xkZXIgPSBvcmlnaW5hbERpcjtcblx0XHR9XG5cblx0XHQvLyBDcmVhdGUgdGhlIGZpbGVuYW1lIGZyb20gdGhlIHRpdGxlXG5cdFx0Y29uc3QgZmlsZW5hbWUgPSB0aGlzLmZpbGVPcHMuZ2VuZXJhdGVGaWxlbmFtZSh0aXRsZSk7XG5cdFx0Y29uc3QgY29udGVudFR5cGUgPSB0aGlzLmZpbGVPcHMuZ2V0Q29udGVudFR5cGUodGhpcy50eXBlKTtcblx0XHRjb25zdCBleHRlbnNpb24gPSBjb250ZW50VHlwZT8udXNlTWR4RXh0ZW5zaW9uID8gXCIubWR4XCIgOiBcIi5tZFwiO1xuXHRcdGNvbnN0IGZpbGVQYXRoID0gdGFyZ2V0Rm9sZGVyID8gYCR7dGFyZ2V0Rm9sZGVyfS8ke2ZpbGVuYW1lfSR7ZXh0ZW5zaW9ufWAgOiBgJHtmaWxlbmFtZX0ke2V4dGVuc2lvbn1gO1xuXG5cdFx0Ly8gVHJhY2sgdGhhdCB0aGlzIGZpbGUgd2lsbCBiZSBjcmVhdGVkIGJ5IHRoZSBwbHVnaW4gQkVGT1JFIGNyZWF0aW5nIGl0XG5cdFx0Ly8gVGhpcyBwcmV2ZW50cyB0aGUgY3JlYXRlIGV2ZW50IGZyb20gdHJpZ2dlcmluZyBhbm90aGVyIG1vZGFsXG5cdFx0aWYgKHRoaXMucGx1Z2luKSB7XG5cdFx0XHR0aGlzLnBsdWdpbi5wbHVnaW5DcmVhdGVkRmlsZXMuc2V0KGZpbGVQYXRoLCBEYXRlLm5vdygpKTtcblx0XHR9XG5cblx0XHQvLyBDcmVhdGUgdGhlIGZpbGUgd2l0aCBpbml0aWFsIGNvbnRlbnRcblx0XHRsZXQgaW5pdGlhbENvbnRlbnQgPSBcIlwiO1xuXHRcdC8vIEFsd2F5cyBpbnNlcnQgcHJvcGVydGllcyB3aGVuIGF1dG9JbnNlcnRQcm9wZXJ0aWVzIGlzIGVuYWJsZWRcblx0XHRpZiAodGhpcy5wbHVnaW4uc2V0dGluZ3MuYXV0b0luc2VydFByb3BlcnRpZXMpIHtcblx0XHRcdGluaXRpYWxDb250ZW50ID0gdGhpcy5nZW5lcmF0ZUluaXRpYWxDb250ZW50KHRpdGxlKTtcblx0XHR9XG5cblx0XHR0cnkge1xuXHRcdFx0Y29uc3QgbmV3RmlsZSA9IGF3YWl0IHRoaXMuYXBwLnZhdWx0LmNyZWF0ZShmaWxlUGF0aCwgaW5pdGlhbENvbnRlbnQpO1xuXG5cdFx0XHQvLyBPcGVuIHRoZSBuZXcgZmlsZVxuXHRcdFx0Y29uc3QgbGVhZiA9IHRoaXMuYXBwLndvcmtzcGFjZS5nZXRMZWFmKCk7XG5cdFx0XHRhd2FpdCBsZWFmLm9wZW5GaWxlKG5ld0ZpbGUpO1xuXG5cdFx0XHQvLyBQb3NpdGlvbiBjdXJzb3IgYXQgdGhlIGVuZCBvZiBjb250ZW50IGFmdGVyIGVkaXRvciBpcyByZWFkeVxuXHRcdFx0Ly8gVXNlIG11bHRpcGxlIGF0dGVtcHRzIHRvIGVuc3VyZSBpdCB3b3JrcyBldmVuIGlmIGVkaXRvciBpc24ndCByZWFkeSBpbW1lZGlhdGVseVxuXHRcdFx0Y29uc3QgcG9zaXRpb25DdXJzb3IgPSAoKSA9PiB7XG5cdFx0XHRcdGNvbnN0IHZpZXcgPSBsZWFmLnZpZXc7XG5cdFx0XHRcdGlmICh2aWV3IGluc3RhbmNlb2YgTWFya2Rvd25WaWV3ICYmIHZpZXcuZWRpdG9yKSB7XG5cdFx0XHRcdFx0Y29uc3QgZWRpdG9yID0gdmlldy5lZGl0b3I7XG5cdFx0XHRcdFx0Y29uc3QgY29udGVudCA9IGVkaXRvci5nZXRWYWx1ZSgpO1xuXHRcdFx0XHRcdGlmIChjb250ZW50KSB7XG5cdFx0XHRcdFx0XHRjb25zdCBsaW5lcyA9IGNvbnRlbnQuc3BsaXQoJ1xcbicpO1xuXHRcdFx0XHRcdFx0Y29uc3QgbGFzdExpbmUgPSBsaW5lcy5sZW5ndGggLSAxO1xuXHRcdFx0XHRcdFx0Y29uc3QgbGFzdExpbmVMZW5ndGggPSBsaW5lc1tsYXN0TGluZV0/Lmxlbmd0aCB8fCAwO1xuXHRcdFx0XHRcdFx0ZWRpdG9yLnNldEN1cnNvcih7IGxpbmU6IGxhc3RMaW5lLCBjaDogbGFzdExpbmVMZW5ndGggfSk7XG5cdFx0XHRcdFx0XHQvLyBGb2N1cyB0aGUgZWRpdG9yIHRvIGVuc3VyZSBjdXJzb3IgaXMgdmlzaWJsZSBhbmQgZmlsZW5hbWUgaXNuJ3Qgc2VsZWN0ZWRcblx0XHRcdFx0XHRcdGVkaXRvci5mb2N1cygpO1xuXHRcdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH07XG5cblx0XHRcdC8vIFRyeSBpbW1lZGlhdGVseVxuXHRcdFx0c2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRcdGlmICghcG9zaXRpb25DdXJzb3IoKSkge1xuXHRcdFx0XHRcdC8vIElmIGl0IGRpZG4ndCB3b3JrLCB0cnkgYWdhaW4gYWZ0ZXIgYSBsb25nZXIgZGVsYXlcblx0XHRcdFx0XHRzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdFx0XHRcdHBvc2l0aW9uQ3Vyc29yKCk7XG5cdFx0XHRcdFx0fSwgMjAwKTtcblx0XHRcdFx0fVxuXHRcdFx0fSwgMTAwKTtcblxuXHRcdFx0cmV0dXJuIG5ld0ZpbGU7XG5cdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdGNvbnN0IGVycm9yTWVzc2FnZSA9IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogU3RyaW5nKGVycm9yKTtcblx0XHRcdHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIGNyZWF0ZSBmaWxlOiAke2Vycm9yTWVzc2FnZX1gKTtcblx0XHR9XG5cdH1cblxuXHRwcml2YXRlIGdlbmVyYXRlSW5pdGlhbENvbnRlbnQodGl0bGU6IHN0cmluZyk6IHN0cmluZyB7XG5cdFx0Y29uc3Qgbm93ID0gbmV3IERhdGUoKTtcblx0XHRjb25zdCBkYXRlU3RyaW5nID0gd2luZG93Lm1vbWVudChub3cpLmZvcm1hdCh0aGlzLnBsdWdpbi5zZXR0aW5ncy5kYXRlRm9ybWF0KTtcblx0XHRjb25zdCBzbHVnID0gdG9LZWJhYkNhc2UodGl0bGUpO1xuXG5cdFx0bGV0IHRlbXBsYXRlOiBzdHJpbmc7XG5cdFx0aWYgKHRoaXMudHlwZSA9PT0gXCJub3RlXCIpIHtcblx0XHRcdC8vIEZvciBnZW5lcmljIG5vdGVzLCB1c2UgYSBzaW1wbGUgdGVtcGxhdGVcblx0XHRcdC8vIFByb3Blcmx5IGVzY2FwZSB0aGUgdGl0bGUgZm9yIFlBTUxcblx0XHRcdGNvbnN0IGVzY2FwZWRUaXRsZSA9IHRoaXMuZXNjYXBlWWFtbFN0cmluZyh0aXRsZSk7XG5cdFx0XHR0ZW1wbGF0ZSA9IGAtLS1cXG50aXRsZTogJHtlc2NhcGVkVGl0bGV9XFxuZGF0ZTogJHtkYXRlU3RyaW5nfVxcbi0tLVxcbmA7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNvbnN0IGNvbnRlbnRUeXBlID0gdGhpcy5maWxlT3BzLmdldENvbnRlbnRUeXBlKHRoaXMudHlwZSk7XG5cdFx0XHRpZiAoIWNvbnRlbnRUeXBlKSB7XG5cdFx0XHRcdGNvbnN0IGVzY2FwZWRUaXRsZSA9IHRoaXMuZXNjYXBlWWFtbFN0cmluZyh0aXRsZSk7XG5cdFx0XHRcdHRlbXBsYXRlID0gYC0tLVxcbnRpdGxlOiAke2VzY2FwZWRUaXRsZX1cXG5kYXRlOiAke2RhdGVTdHJpbmd9XFxuLS0tXFxuYDtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRlbXBsYXRlID0gY29udGVudFR5cGUudGVtcGxhdGU7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0dGVtcGxhdGUgPSB0ZW1wbGF0ZS5yZXBsYWNlKC9cXHtcXHt0aXRsZVxcfVxcfS9nLCB0aXRsZSk7XG5cdFx0dGVtcGxhdGUgPSB0ZW1wbGF0ZS5yZXBsYWNlKC9cXHtcXHtkYXRlXFx9XFx9L2csIGRhdGVTdHJpbmcpO1xuXHRcdHRlbXBsYXRlID0gdGVtcGxhdGUucmVwbGFjZSgvXFx7XFx7c2x1Z1xcfVxcfS9nLCBzbHVnKTtcblxuXHRcdHJldHVybiB0ZW1wbGF0ZTtcblx0fVxuXG5cdHByaXZhdGUgYXN5bmMgYWRkUHJvcGVydGllc1RvRmlsZShmaWxlOiBURmlsZSwgdGl0bGU6IHN0cmluZywgdHlwZTogQ29udGVudFR5cGVJZCkge1xuXHRcdGNvbnN0IG5vdyA9IG5ldyBEYXRlKCk7XG5cdFx0Y29uc3QgZGF0ZVN0cmluZyA9IHdpbmRvdy5tb21lbnQobm93KS5mb3JtYXQodGhpcy5wbHVnaW4uc2V0dGluZ3MuZGF0ZUZvcm1hdCk7XG5cdFx0Y29uc3Qgc2x1ZyA9IHRvS2ViYWJDYXNlKHRpdGxlKTtcblxuXHRcdGxldCB0ZW1wbGF0ZTogc3RyaW5nO1xuXHRcdGlmICh0eXBlID09PSBcIm5vdGVcIikge1xuXHRcdFx0Ly8gRm9yIGdlbmVyaWMgbm90ZXMsIHVzZSBhIHNpbXBsZSB0ZW1wbGF0ZVxuXHRcdFx0Ly8gUHJvcGVybHkgZXNjYXBlIHRoZSB0aXRsZSBmb3IgWUFNTFxuXHRcdFx0Y29uc3QgZXNjYXBlZFRpdGxlID0gdGhpcy5lc2NhcGVZYW1sU3RyaW5nKHRpdGxlKTtcblx0XHRcdHRlbXBsYXRlID0gYC0tLVxcbnRpdGxlOiAke2VzY2FwZWRUaXRsZX1cXG5kYXRlOiAke2RhdGVTdHJpbmd9XFxuLS0tXFxuYDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Y29uc3QgY29udGVudFR5cGUgPSB0aGlzLmZpbGVPcHMuZ2V0Q29udGVudFR5cGUodHlwZSk7XG5cdFx0XHRpZiAoIWNvbnRlbnRUeXBlKSB7XG5cdFx0XHRcdGNvbnN0IGVzY2FwZWRUaXRsZSA9IHRoaXMuZXNjYXBlWWFtbFN0cmluZyh0aXRsZSk7XG5cdFx0XHRcdHRlbXBsYXRlID0gYC0tLVxcbnRpdGxlOiAke2VzY2FwZWRUaXRsZX1cXG5kYXRlOiAke2RhdGVTdHJpbmd9XFxuLS0tXFxuYDtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRlbXBsYXRlID0gY29udGVudFR5cGUudGVtcGxhdGU7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0dGVtcGxhdGUgPSB0ZW1wbGF0ZS5yZXBsYWNlKC9cXHtcXHt0aXRsZVxcfVxcfS9nLCB0aXRsZSk7XG5cdFx0dGVtcGxhdGUgPSB0ZW1wbGF0ZS5yZXBsYWNlKC9cXHtcXHtkYXRlXFx9XFx9L2csIGRhdGVTdHJpbmcpO1xuXHRcdHRlbXBsYXRlID0gdGVtcGxhdGUucmVwbGFjZSgvXFx7XFx7c2x1Z1xcfVxcfS9nLCBzbHVnKTtcblxuXHRcdC8vIEVuc3VyZSBubyBleHRyYSBuZXdsaW5lcyBvciAtLS0gYXJlIGFkZGVkIGJleW9uZCB0aGUgdGVtcGxhdGVcblx0XHRhd2FpdCB0aGlzLmFwcC52YXVsdC5tb2RpZnkoZmlsZSwgdGVtcGxhdGUpO1xuXHR9XG5cblx0cHJpdmF0ZSBwb3NpdGlvbkN1cnNvckF0RW5kKGZpbGU6IFRGaWxlKSB7XG5cdFx0Y29uc3QgcG9zaXRpb25DdXJzb3IgPSAoKSA9PiB7XG5cdFx0XHRjb25zdCB2aWV3ID0gdGhpcy5hcHAud29ya3NwYWNlLmdldEFjdGl2ZVZpZXdPZlR5cGUoTWFya2Rvd25WaWV3KTtcblx0XHRcdGlmICh2aWV3ICYmIHZpZXcuZmlsZSA9PT0gZmlsZSAmJiB2aWV3LmVkaXRvcikge1xuXHRcdFx0XHRjb25zdCBlZGl0b3IgPSB2aWV3LmVkaXRvcjtcblx0XHRcdFx0Y29uc3QgY29udGVudCA9IGVkaXRvci5nZXRWYWx1ZSgpO1xuXHRcdFx0XHRpZiAoY29udGVudCkge1xuXHRcdFx0XHRcdGNvbnN0IGxpbmVzID0gY29udGVudC5zcGxpdCgnXFxuJyk7XG5cdFx0XHRcdFx0Y29uc3QgbGFzdExpbmUgPSBsaW5lcy5sZW5ndGggLSAxO1xuXHRcdFx0XHRcdGNvbnN0IGxhc3RMaW5lTGVuZ3RoID0gbGluZXNbbGFzdExpbmVdPy5sZW5ndGggfHwgMDtcblx0XHRcdFx0XHRlZGl0b3Iuc2V0Q3Vyc29yKHsgbGluZTogbGFzdExpbmUsIGNoOiBsYXN0TGluZUxlbmd0aCB9KTtcblx0XHRcdFx0XHQvLyBGb2N1cyB0aGUgZWRpdG9yIHRvIGVuc3VyZSBjdXJzb3IgaXMgdmlzaWJsZVxuXHRcdFx0XHRcdGVkaXRvci5mb2N1cygpO1xuXHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fTtcblxuXHRcdHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0aWYgKCFwb3NpdGlvbkN1cnNvcigpKSB7XG5cdFx0XHRcdC8vIElmIGl0IGRpZG4ndCB3b3JrLCB0cnkgYWdhaW4gYWZ0ZXIgYSBsb25nZXIgZGVsYXlcblx0XHRcdFx0c2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRcdFx0cG9zaXRpb25DdXJzb3IoKTtcblx0XHRcdFx0fSwgMjAwKTtcblx0XHRcdH1cblx0XHR9LCAxMDApO1xuXHR9XG5cblx0cHJpdmF0ZSBlc2NhcGVZYW1sU3RyaW5nKHN0cjogc3RyaW5nKTogc3RyaW5nIHtcblx0XHQvLyBQcm9wZXJseSBlc2NhcGUgWUFNTCBzdHJpbmcgdmFsdWVzXG5cdFx0Ly8gWUFNTCBzdHJpbmdzIHdpdGggcXVvdGVzIG5lZWQgdG8gYmUgd3JhcHBlZCBpbiBzaW5nbGUgcXVvdGVzIG9yIGVzY2FwZWQgcHJvcGVybHlcblx0XHRpZiAoc3RyLmluY2x1ZGVzKCdcIicpIHx8IHN0ci5pbmNsdWRlcyhcIidcIikgfHwgc3RyLmluY2x1ZGVzKCdcXG4nKSB8fCBzdHIuaW5jbHVkZXMoJ1xcXFwnKSkge1xuXHRcdFx0Ly8gRm9yIHN0cmluZ3Mgd2l0aCBxdW90ZXMsIG5ld2xpbmVzLCBvciBiYWNrc2xhc2hlcywgdXNlIHNpbmdsZSBxdW90ZXMgYW5kIGVzY2FwZSBzaW5nbGUgcXVvdGVzXG5cdFx0XHRyZXR1cm4gYCcke3N0ci5yZXBsYWNlKC8nL2csIFwiJydcIil9J2A7XG5cdFx0fSBlbHNlIGlmIChzdHIuaW5jbHVkZXMoXCIgXCIpIHx8IHN0ci5pbmNsdWRlcyhcIjpcIikgfHwgc3RyLmluY2x1ZGVzKFwiI1wiKSB8fCBzdHIuaW5jbHVkZXMoXCJAXCIpKSB7XG5cdFx0XHQvLyBGb3Igc3RyaW5ncyB3aXRoIHNwYWNlcyBvciBzcGVjaWFsIFlBTUwgY2hhcmFjdGVycywgd3JhcCBpbiBkb3VibGUgcXVvdGVzIGFuZCBlc2NhcGUgZG91YmxlIHF1b3Rlc1xuXHRcdFx0cmV0dXJuIGBcIiR7c3RyLnJlcGxhY2UoL1wiL2csICdcXFxcXCInKX1cImA7XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIEZvciBzaW1wbGUgc3RyaW5ncywgbm8gcXVvdGVzIG5lZWRlZFxuXHRcdFx0cmV0dXJuIHN0cjtcblx0XHR9XG5cdH1cblxuXHRvbkNsb3NlKCkge1xuXHRcdGNvbnN0IHsgY29udGVudEVsIH0gPSB0aGlzO1xuXHRcdGNvbnRlbnRFbC5lbXB0eSgpO1xuXHR9XG59XG4iLCAiaW1wb3J0IHsgQXBwLCBQbHVnaW5TZXR0aW5nVGFiLCBTZXR0aW5nLCBQbGF0Zm9ybSwgc2V0SWNvbiB9IGZyb20gXCJvYnNpZGlhblwiO1xyXG5pbXBvcnQgeyBQbHVnaW4gfSBmcm9tIFwib2JzaWRpYW5cIjtcclxuaW1wb3J0IHsgQ29udGVudFR5cGUsIEFzdHJvQ29tcG9zZXJQbHVnaW5JbnRlcmZhY2UsIEFzdHJvQ29tcG9zZXJTZXR0aW5ncyB9IGZyb20gXCIuLi90eXBlc1wiO1xyXG5pbXBvcnQgeyBDb21tYW5kUGlja2VyTW9kYWwgfSBmcm9tIFwiLi9jb21wb25lbnRzL0NvbW1hbmRQaWNrZXJNb2RhbFwiO1xyXG5pbXBvcnQgeyBJY29uUGlja2VyTW9kYWwgfSBmcm9tIFwiLi9jb21wb25lbnRzL0ljb25QaWNrZXJNb2RhbFwiO1xyXG5pbXBvcnQgeyBDb25maXJtTW9kYWwgfSBmcm9tIFwiLi9jb21wb25lbnRzL0NvbmZpcm1Nb2RhbFwiO1xyXG5pbXBvcnQgeyBjcmVhdGVTZXR0aW5nc0dyb3VwIH0gZnJvbSBcIi4uL3V0aWxzL3NldHRpbmdzLWNvbXBhdFwiO1xyXG5pbXBvcnQgeyByZWdpc3RlckNvbnRlbnRUeXBlQ29tbWFuZHMgfSBmcm9tIFwiLi4vY29tbWFuZHNcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBBc3Ryb0NvbXBvc2VyU2V0dGluZ1RhYiBleHRlbmRzIFBsdWdpblNldHRpbmdUYWIge1xyXG5cdHBsdWdpbjogQXN0cm9Db21wb3NlclBsdWdpbkludGVyZmFjZTtcclxuXHRwdWJsaWMgaWNvbiA9ICdsdWNpZGUtcGVuY2lsLWxpbmUnO1xyXG5cdGF1dG9SZW5hbWVDb250YWluZXI6IEhUTUxFbGVtZW50IHwgbnVsbCA9IG51bGw7XHJcblx0cG9zdHNGb2xkZXJDb250YWluZXI6IEhUTUxFbGVtZW50IHwgbnVsbCA9IG51bGw7XHJcblx0b25seUF1dG9tYXRlQ29udGFpbmVyOiBIVE1MRWxlbWVudCB8IG51bGwgPSBudWxsO1xyXG5cdGNyZWF0aW9uTW9kZUNvbnRhaW5lcjogSFRNTEVsZW1lbnQgfCBudWxsID0gbnVsbDtcclxuXHRpbmRleEZpbGVDb250YWluZXI6IEhUTUxFbGVtZW50IHwgbnVsbCA9IG51bGw7XHJcblx0ZXhjbHVkZWREaXJzQ29udGFpbmVyOiBIVE1MRWxlbWVudCB8IG51bGwgPSBudWxsO1xyXG5cdHVuZGVyc2NvcmVQcmVmaXhDb250YWluZXI6IEhUTUxFbGVtZW50IHwgbnVsbCA9IG51bGw7XHJcblx0YXV0b0luc2VydENvbnRhaW5lcjogSFRNTEVsZW1lbnQgfCBudWxsID0gbnVsbDtcclxuXHRwYWdlc0ZpZWxkc0NvbnRhaW5lcjogSFRNTEVsZW1lbnQgfCBudWxsID0gbnVsbDtcclxuXHRwYWdlc0luZGV4RmlsZUNvbnRhaW5lcjogSFRNTEVsZW1lbnQgfCBudWxsID0gbnVsbDtcclxuXHRwYWdlc09ubHlBdXRvbWF0ZUNvbnRhaW5lcjogSFRNTEVsZW1lbnQgfCBudWxsID0gbnVsbDtcclxuXHR0ZXJtaW5hbENvbW1hbmRDb250YWluZXI6IEhUTUxFbGVtZW50IHwgbnVsbCA9IG51bGw7XHJcblx0Y29uZmlnQ29tbWFuZENvbnRhaW5lcjogSFRNTEVsZW1lbnQgfCBudWxsID0gbnVsbDtcclxuXHRjdXN0b21Db250ZW50VHlwZXNDb250YWluZXI6IEhUTUxFbGVtZW50IHwgbnVsbCA9IG51bGw7XHJcblx0dGVybWluYWxSaWJib25Ub2dnbGU6IFNldHRpbmcgfCBudWxsID0gbnVsbDtcclxuXHRjb25maWdSaWJib25Ub2dnbGU6IFNldHRpbmcgfCBudWxsID0gbnVsbDtcclxuXHRwcml2YXRlIHRlcm1pbmFsUmliYm9uVG9nZ2xlQ29tcG9uZW50OiB7IHNldERpc2FibGVkOiAoZGlzYWJsZWQ6IGJvb2xlYW4pID0+IHZvaWQgfSB8IG51bGwgPSBudWxsO1xyXG5cdHByaXZhdGUgY29uZmlnUmliYm9uVG9nZ2xlQ29tcG9uZW50OiB7IHNldERpc2FibGVkOiAoZGlzYWJsZWQ6IGJvb2xlYW4pID0+IHZvaWQgfSB8IG51bGwgPSBudWxsO1xyXG5cclxuXHRjb25zdHJ1Y3RvcihhcHA6IEFwcCwgcGx1Z2luOiBQbHVnaW4pIHtcclxuXHRcdHN1cGVyKGFwcCwgcGx1Z2luKTtcclxuXHRcdHRoaXMucGx1Z2luID0gcGx1Z2luIGFzIHVua25vd24gYXMgQXN0cm9Db21wb3NlclBsdWdpbkludGVyZmFjZTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIFJlZnJlc2gganVzdCB0aGUgY29udGVudCB0eXBlcyBzZWN0aW9uXHJcblx0ICogTW9yZSBlZmZpY2llbnQgdGhhbiByZWZyZXNoaW5nIHRoZSBlbnRpcmUgc2V0dGluZ3MgdGFiXHJcblx0ICovXHJcblx0cHVibGljIHJlZnJlc2hDb250ZW50VHlwZXMoKTogdm9pZCB7XHJcblx0XHRpZiAodGhpcy5jdXN0b21Db250ZW50VHlwZXNDb250YWluZXIpIHtcclxuXHRcdFx0dGhpcy5yZW5kZXJDdXN0b21Db250ZW50VHlwZXMoKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGRpc3BsYXkoKTogdm9pZCB7XHJcblx0XHRjb25zdCB7IGNvbnRhaW5lckVsIH0gPSB0aGlzO1xyXG5cdFx0Y29udGFpbmVyRWwuZW1wdHkoKTtcclxuXHJcblx0XHQvLyBVc2UgY3VycmVudCBwbHVnaW4gc2V0dGluZ3MgKGFscmVhZHkgbG9hZGVkIGFuZCB1cC10by1kYXRlKVxyXG5cdFx0Ly8gQWx3YXlzIHJlYWQgZnJlc2ggc2V0dGluZ3MgdG8gZW5zdXJlIHdlIHNob3cgbWlncmF0ZWQgY29udGVudCB0eXBlcyBpbW1lZGlhdGVseVxyXG5cdFx0Y29uc3Qgc2V0dGluZ3MgPSB0aGlzLnBsdWdpbi5zZXR0aW5ncztcclxuXHJcblx0XHQvLyBSZW5kZXIgdGhlIHNldHRpbmdzIHRhYiB3aXRoIGN1cnJlbnQgc2V0dGluZ3NcclxuXHRcdC8vIFRoaXMgd2lsbCBzaG93IGFsbCBjb250ZW50IHR5cGVzIGluY2x1ZGluZyBuZXdseSBtaWdyYXRlZCBvbmVzXHJcblx0XHR0aGlzLnJlbmRlclNldHRpbmdzVGFiKGNvbnRhaW5lckVsLCBzZXR0aW5ncyk7XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIHJlbmRlclNldHRpbmdzVGFiKGNvbnRhaW5lckVsOiBIVE1MRWxlbWVudCwgc2V0dGluZ3M6IEFzdHJvQ29tcG9zZXJTZXR0aW5ncyk6IHZvaWQge1xyXG5cclxuXHRcdC8vIEdsb2JhbCBzZXR0aW5ncyAoZmlyc3QgZ3JvdXAgLSBubyBoZWFkaW5nKVxyXG5cdFx0Y29uc3QgZ2VuZXJhbEdyb3VwID0gY3JlYXRlU2V0dGluZ3NHcm91cChjb250YWluZXJFbCwgdW5kZWZpbmVkLCAnYXN0cm8tY29tcG9zZXInKTtcclxuXHRcdGdlbmVyYWxHcm91cC5hZGRTZXR0aW5nKChzZXR0aW5nKSA9PiB7XHJcblx0XHRcdHNldHRpbmdcclxuXHRcdFx0XHQuc2V0TmFtZShcIkRhdGUgZm9ybWF0XCIpXHJcblx0XHRcdFx0Ly8gRGF0ZSBmb3JtYXQgY29kZXMgKE1NTU0sIHl5eXksIGV0Yy4pIGFyZSB0ZWNobmljYWwgbm90YXRpb24sIG5vdCBVSSB0ZXh0XHJcblx0XHRcdFx0LnNldERlc2MoXCJGb3JtYXQgZm9yIHRoZSBkYXRlIGluIHByb3BlcnRpZXMgKGUuZy4sIHl5eXktbW0tZGQsIE1NTU0gRCwgeXl5eSwgeXl5eS1tbS1kZCBISDptbSlcIilcclxuXHRcdFx0XHQuYWRkVGV4dCgodGV4dCkgPT5cclxuXHRcdFx0XHRcdHRleHRcclxuXHRcdFx0XHRcdFx0Ly8gXCJZWVlZLU1NLUREXCIgaXMgYSBkYXRlIGZvcm1hdCBwbGFjZWhvbGRlciwgbm90IFVJIHRleHRcclxuXHRcdFx0XHRcdFx0LnNldFBsYWNlaG9sZGVyKFwiWVlZWS1NTS1ERFwiKVxyXG5cdFx0XHRcdFx0XHQuc2V0VmFsdWUoc2V0dGluZ3MuZGF0ZUZvcm1hdClcclxuXHRcdFx0XHRcdFx0Lm9uQ2hhbmdlKGFzeW5jICh2YWx1ZTogc3RyaW5nKSA9PiB7XHJcblx0XHRcdFx0XHRcdFx0c2V0dGluZ3MuZGF0ZUZvcm1hdCA9IHZhbHVlIHx8IFwiWVlZWS1NTS1ERFwiO1xyXG5cdFx0XHRcdFx0XHRcdGF3YWl0IHRoaXMucGx1Z2luLnNhdmVTZXR0aW5ncygpO1xyXG5cdFx0XHRcdFx0XHR9KVxyXG5cdFx0XHRcdCk7XHJcblx0XHR9KTtcclxuXHJcblx0XHRnZW5lcmFsR3JvdXAuYWRkU2V0dGluZygoc2V0dGluZykgPT4ge1xyXG5cdFx0XHRzZXR0aW5nXHJcblx0XHRcdFx0LnNldE5hbWUoXCJFbmFibGUgY29weSBoZWFkaW5nIGxpbmtzXCIpXHJcblx0XHRcdFx0LnNldERlc2MoXCJBZGQgcmlnaHQtY2xpY2sgY29udGV4dCBtZW51IG9wdGlvbiB0byBjb3B5IGhlYWRpbmcgbGlua3MgaW4gdmFyaW91cyBmb3JtYXRzLlwiKVxyXG5cdFx0XHRcdC5hZGRUb2dnbGUoKHRvZ2dsZSkgPT5cclxuXHRcdFx0XHRcdHRvZ2dsZVxyXG5cdFx0XHRcdFx0XHQuc2V0VmFsdWUoc2V0dGluZ3MuZW5hYmxlQ29weUhlYWRpbmdMaW5rKVxyXG5cdFx0XHRcdFx0XHQub25DaGFuZ2UoYXN5bmMgKHZhbHVlOiBib29sZWFuKSA9PiB7XHJcblx0XHRcdFx0XHRcdFx0c2V0dGluZ3MuZW5hYmxlQ29weUhlYWRpbmdMaW5rID0gdmFsdWU7XHJcblx0XHRcdFx0XHRcdFx0YXdhaXQgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7XHJcblx0XHRcdFx0XHRcdFx0dGhpcy51cGRhdGVDb3B5SGVhZGluZ0ZpZWxkcygpO1xyXG5cdFx0XHRcdFx0XHR9KVxyXG5cdFx0XHRcdCk7XHJcblx0XHR9KTtcclxuXHJcblx0XHRnZW5lcmFsR3JvdXAuYWRkU2V0dGluZygoc2V0dGluZykgPT4ge1xyXG5cdFx0XHRzZXR0aW5nXHJcblx0XHRcdFx0LnNldE5hbWUoXCJEZWZhdWx0IGhlYWRpbmcgbGluayBmb3JtYXRcIilcclxuXHRcdFx0XHQvLyBcIkFzdHJvXCIgaXMgYSBwcm9wZXIgbm91biAoZnJhbWV3b3JrIG5hbWUpIGFuZCBzaG91bGQgYmUgY2FwaXRhbGl6ZWRcclxuXHRcdFx0XHQuc2V0RGVzYyhcIkNob29zZSB0aGUgZGVmYXVsdCBmb3JtYXQgZm9yIGNvcGllZCBoZWFkaW5nIGxpbmtzLiBPYnNpZGlhbiBmb3JtYXQgcmVzcGVjdHMgeW91ciBPYnNpZGlhbiBzZXR0aW5ncyBmb3Igd2lraWxpbmsgdnMgbWFya2Rvd24gcHJlZmVyZW5jZS4gQXN0cm8gbGluayB1c2VzIHlvdXIgbGluayBiYXNlIHBhdGggZnJvbSBhYm92ZSBhbmQgY29udmVydHMgdGhlIGhlYWRpbmcgaW50byBrZWJhYi1jYXNlIGZvcm1hdCBhcyBhbiBhbmNob3IgbGlua1wiKVxyXG5cdFx0XHRcdC5hZGREcm9wZG93bigoZHJvcGRvd24pID0+XHJcblx0XHRcdFx0XHRkcm9wZG93blxyXG5cdFx0XHRcdFx0XHQuYWRkT3B0aW9uKFwib2JzaWRpYW5cIiwgXCJPYnNpZGlhbiBsaW5rXCIpXHJcblx0XHRcdFx0XHRcdC5hZGRPcHRpb24oXCJhc3Ryb1wiLCBcIkFzdHJvIGxpbmtcIilcclxuXHRcdFx0XHRcdFx0LnNldFZhbHVlKHNldHRpbmdzLmNvcHlIZWFkaW5nTGlua0Zvcm1hdClcclxuXHRcdFx0XHRcdFx0Lm9uQ2hhbmdlKGFzeW5jICh2YWx1ZTogc3RyaW5nKSA9PiB7XHJcblx0XHRcdFx0XHRcdFx0c2V0dGluZ3MuY29weUhlYWRpbmdMaW5rRm9ybWF0ID0gdmFsdWUgYXMgXCJvYnNpZGlhblwiIHwgXCJhc3Ryb1wiO1xyXG5cdFx0XHRcdFx0XHRcdGF3YWl0IHRoaXMucGx1Z2luLnNhdmVTZXR0aW5ncygpO1xyXG5cdFx0XHRcdFx0XHR9KVxyXG5cdFx0XHRcdCk7XHJcblx0XHRcdC8vIEFkZCBjb25kaXRpb25hbCB2aXNpYmlsaXR5IGNsYXNzZXMgLSBrZWVwIHNldHRpbmcgaW4gZ3JvdXBcclxuXHRcdFx0c2V0dGluZy5zZXR0aW5nRWwuY2xhc3NMaXN0LnRvZ2dsZShcImFzdHJvLWNvbXBvc2VyLXNldHRpbmctY29udGFpbmVyLXZpc2libGVcIiwgc2V0dGluZ3MuZW5hYmxlQ29weUhlYWRpbmdMaW5rKTtcclxuXHRcdFx0c2V0dGluZy5zZXR0aW5nRWwuY2xhc3NMaXN0LnRvZ2dsZShcImFzdHJvLWNvbXBvc2VyLXNldHRpbmctY29udGFpbmVyLWhpZGRlblwiLCAhc2V0dGluZ3MuZW5hYmxlQ29weUhlYWRpbmdMaW5rKTtcclxuXHRcdH0pO1xyXG5cclxuXHRcdGdlbmVyYWxHcm91cC5hZGRTZXR0aW5nKChzZXR0aW5nKSA9PiB7XHJcblx0XHRcdHNldHRpbmdcclxuXHRcdFx0XHQuc2V0TmFtZShcIkFkZCB0cmFpbGluZyBzbGFzaCB0byBsaW5rc1wiKVxyXG5cdFx0XHRcdC5zZXREZXNjKFwiQWRkIHRyYWlsaW5nIHNsYXNoZXMgdG8gYWxsIGNvbnZlcnRlZCBpbnRlcm5hbCBsaW5rcyAoZS5nLiwgL2Fib3V0LyBpbnN0ZWFkIG9mIC9hYm91dCkuXCIpXHJcblx0XHRcdFx0LmFkZFRvZ2dsZSgodG9nZ2xlKSA9PlxyXG5cdFx0XHRcdFx0dG9nZ2xlXHJcblx0XHRcdFx0XHRcdC5zZXRWYWx1ZShzZXR0aW5ncy5hZGRUcmFpbGluZ1NsYXNoVG9MaW5rcylcclxuXHRcdFx0XHRcdFx0Lm9uQ2hhbmdlKGFzeW5jICh2YWx1ZTogYm9vbGVhbikgPT4ge1xyXG5cdFx0XHRcdFx0XHRcdHNldHRpbmdzLmFkZFRyYWlsaW5nU2xhc2hUb0xpbmtzID0gdmFsdWU7XHJcblx0XHRcdFx0XHRcdFx0YXdhaXQgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7XHJcblx0XHRcdFx0XHRcdH0pXHJcblx0XHRcdFx0KTtcclxuXHRcdH0pO1xyXG5cclxuXHRcdGdlbmVyYWxHcm91cC5hZGRTZXR0aW5nKChzZXR0aW5nKSA9PiB7XHJcblx0XHRcdHNldHRpbmdcclxuXHRcdFx0XHQuc2V0TmFtZShcIlByb2Nlc3MgYmFja2dyb3VuZCBmaWxlIGNoYW5nZXNcIilcclxuXHRcdFx0XHQvLyBUZWNobmljYWwgdGVybXMgbGlrZSBcIk9ic2lkaWFuXCIsIFwiZ2l0XCIgYXJlIHByb3BlciBub3VucyBpbiB0aGlzIGNvbnRleHRcclxuXHRcdFx0XHQuc2V0RGVzYyhcIkF1dG9tYXRpY2FsbHkgcHJvY2VzcyBuZXcgZmlsZXMgd2hlbiB0aGV5J3JlIGNoYW5nZWQgaW4gdGhlIGJhY2tncm91bmQgKGJ5IEdpdCBvciBvdGhlciBwbHVnaW5zKS4gRGlzYWJsZSB0byBwcmV2ZW50IG1vZGFsIHNwYW0gd2hlbiBmaWxlcyBhcmUgYWxyZWFkeSBwcm9jZXNzZWQgb24gb3RoZXIgZGV2aWNlcyBkdXJpbmcgYSBzeW5jLlwiKVxyXG5cdFx0XHRcdC5hZGRUb2dnbGUoKHRvZ2dsZSkgPT5cclxuXHRcdFx0XHRcdHRvZ2dsZVxyXG5cdFx0XHRcdFx0XHQuc2V0VmFsdWUoc2V0dGluZ3MucHJvY2Vzc0JhY2tncm91bmRGaWxlQ2hhbmdlcylcclxuXHRcdFx0XHRcdFx0Lm9uQ2hhbmdlKGFzeW5jICh2YWx1ZTogYm9vbGVhbikgPT4ge1xyXG5cdFx0XHRcdFx0XHRcdHNldHRpbmdzLnByb2Nlc3NCYWNrZ3JvdW5kRmlsZUNoYW5nZXMgPSB2YWx1ZTtcclxuXHRcdFx0XHRcdFx0XHRhd2FpdCB0aGlzLnBsdWdpbi5zYXZlU2V0dGluZ3MoKTtcclxuXHRcdFx0XHRcdFx0fSlcclxuXHRcdFx0XHQpO1xyXG5cdFx0fSk7XHJcblxyXG5cdFx0Z2VuZXJhbEdyb3VwLmFkZFNldHRpbmcoKHNldHRpbmcpID0+IHtcclxuXHRcdFx0c2V0dGluZ1xyXG5cdFx0XHRcdC8vIFwiTURYXCIgaXMgYSBwcm9wZXIgbm91biAoZmlsZSBmb3JtYXQpIGFuZCBzaG91bGQgYmUgY2FwaXRhbGl6ZWRcclxuXHRcdFx0XHQuc2V0TmFtZShcIlNob3cgTURYIGZpbGVzIGluIGZpbGUgZXhwbG9yZXJcIilcclxuXHRcdFx0XHQuc2V0RGVzYyhcIk1ha2UgLm1keCBmaWxlcyB2aXNpYmxlIGluIE9ic2lkaWFuJ3MgZmlsZSBleHBsb3Jlci4gUmVxdWlyZXMgcmVsb2FkIHRvIHRha2UgZWZmZWN0LlwiKVxyXG5cdFx0XHRcdC5hZGRUb2dnbGUoKHRvZ2dsZSkgPT5cclxuXHRcdFx0XHRcdHRvZ2dsZVxyXG5cdFx0XHRcdFx0XHQuc2V0VmFsdWUoc2V0dGluZ3Muc2hvd01keEZpbGVzSW5FeHBsb3JlcilcclxuXHRcdFx0XHRcdFx0Lm9uQ2hhbmdlKGFzeW5jICh2YWx1ZTogYm9vbGVhbikgPT4ge1xyXG5cdFx0XHRcdFx0XHRcdHNldHRpbmdzLnNob3dNZHhGaWxlc0luRXhwbG9yZXIgPSB2YWx1ZTtcclxuXHRcdFx0XHRcdFx0XHRhd2FpdCB0aGlzLnBsdWdpbi5zYXZlU2V0dGluZ3MoKTtcclxuXHRcdFx0XHRcdFx0fSlcclxuXHRcdFx0XHQpO1xyXG5cdFx0fSk7XHJcblxyXG5cdFx0Ly8gUHJvcGVydHkgYXV0b21hdGlvblxyXG5cdFx0Y29uc3QgYXV0b21hdGlvbkdyb3VwID0gY3JlYXRlU2V0dGluZ3NHcm91cChjb250YWluZXJFbCwgXCJQcm9wZXJ0eSBhdXRvbWF0aW9uXCIsICdhc3Ryby1jb21wb3NlcicpO1xyXG5cclxuXHRcdC8vIEF1dG8taW5zZXJ0IHByb3BlcnRpZXMgKG1vdmVkIGZyb20gZ2VuZXJhbEdyb3VwKVxyXG5cdFx0YXV0b21hdGlvbkdyb3VwLmFkZFNldHRpbmcoKHNldHRpbmcpID0+IHtcclxuXHRcdFx0c2V0dGluZ1xyXG5cdFx0XHRcdC5zZXROYW1lKFwiQXV0by1pbnNlcnQgcHJvcGVydGllc1wiKVxyXG5cdFx0XHRcdC5zZXREZXNjKFwiQXV0b21hdGljYWxseSBpbnNlcnQgdGhlIHByb3BlcnRpZXMgdGVtcGxhdGUgd2hlbiBjcmVhdGluZyBuZXcgZmlsZXMuXCIpXHJcblx0XHRcdFx0LmFkZFRvZ2dsZSgodG9nZ2xlKSA9PlxyXG5cdFx0XHRcdFx0dG9nZ2xlXHJcblx0XHRcdFx0XHRcdC5zZXRWYWx1ZShzZXR0aW5ncy5hdXRvSW5zZXJ0UHJvcGVydGllcylcclxuXHRcdFx0XHRcdFx0Lm9uQ2hhbmdlKGFzeW5jICh2YWx1ZTogYm9vbGVhbikgPT4ge1xyXG5cdFx0XHRcdFx0XHRcdHNldHRpbmdzLmF1dG9JbnNlcnRQcm9wZXJ0aWVzID0gdmFsdWU7XHJcblx0XHRcdFx0XHRcdFx0YXdhaXQgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7XHJcblx0XHRcdFx0XHRcdH0pXHJcblx0XHRcdFx0KTtcclxuXHRcdH0pO1xyXG5cclxuXHRcdGF1dG9tYXRpb25Hcm91cC5hZGRTZXR0aW5nKChzZXR0aW5nKSA9PiB7XHJcblx0XHRcdHNldHRpbmdcclxuXHRcdFx0XHQuc2V0TmFtZShcIlVwZGF0ZSBkYXRlIG9uIHB1Ymxpc2hcIilcclxuXHRcdFx0XHQuc2V0RGVzYyhcIlVwZGF0ZSAnZGF0ZScgcHJvcGVydHkgd2hlbiBzd2l0Y2hpbmcgZnJvbSBkcmFmdCB0byBwdWJsaXNoZWQgc3RhdHVzLlwiKVxyXG5cdFx0XHRcdC5hZGRUb2dnbGUoKHRvZ2dsZSkgPT5cclxuXHRcdFx0XHRcdHRvZ2dsZVxyXG5cdFx0XHRcdFx0XHQuc2V0VmFsdWUoc2V0dGluZ3Muc3luY0RyYWZ0RGF0ZSlcclxuXHRcdFx0XHRcdFx0Lm9uQ2hhbmdlKGFzeW5jICh2YWx1ZTogYm9vbGVhbikgPT4ge1xyXG5cdFx0XHRcdFx0XHRcdHNldHRpbmdzLnN5bmNEcmFmdERhdGUgPSB2YWx1ZTtcclxuXHRcdFx0XHRcdFx0XHRhd2FpdCB0aGlzLnBsdWdpbi5zYXZlU2V0dGluZ3MoKTtcclxuXHRcdFx0XHRcdFx0XHR0aGlzLmRpc3BsYXkoKTsgLy8gUXVpY2sgcmVmcmVzaCB0byBzaG93L2hpZGUgZmllbGRzXHJcblx0XHRcdFx0XHRcdH0pXHJcblx0XHRcdFx0KTtcclxuXHRcdH0pO1xyXG5cclxuXHRcdGlmIChzZXR0aW5ncy5zeW5jRHJhZnREYXRlKSB7XHJcblx0XHRcdGF1dG9tYXRpb25Hcm91cC5hZGRTZXR0aW5nKChzZXR0aW5nKSA9PiB7XHJcblx0XHRcdFx0c2V0dGluZ1xyXG5cdFx0XHRcdFx0LnNldE5hbWUoXCJEcmFmdCBwcm9wZXJ0eSBuYW1lXCIpXHJcblx0XHRcdFx0XHQuc2V0RGVzYyhcIlRoZSBwcm9wZXJ0eSBmaWVsZCB0byB1c2UgZm9yIGRyYWZ0IHN0YXR1cy5cIilcclxuXHRcdFx0XHRcdC5hZGRUZXh0KCh0ZXh0KSA9PlxyXG5cdFx0XHRcdFx0XHR0ZXh0XHJcblx0XHRcdFx0XHRcdFx0LnNldFBsYWNlaG9sZGVyKFwiZHJhZnRcIilcclxuXHRcdFx0XHRcdFx0XHQuc2V0VmFsdWUoc2V0dGluZ3MuZHJhZnRQcm9wZXJ0eSB8fCBcIlwiKVxyXG5cdFx0XHRcdFx0XHRcdC5vbkNoYW5nZShhc3luYyAodmFsdWU6IHN0cmluZykgPT4ge1xyXG5cdFx0XHRcdFx0XHRcdFx0c2V0dGluZ3MuZHJhZnRQcm9wZXJ0eSA9IHZhbHVlO1xyXG5cdFx0XHRcdFx0XHRcdFx0YXdhaXQgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7XHJcblx0XHRcdFx0XHRcdFx0XHR0aGlzLnBsdWdpbi5mcm9udG1hdHRlclNlcnZpY2U/LmluaXRpYWxpemVEcmFmdFN0YXR1c01hcCgpO1xyXG5cdFx0XHRcdFx0XHRcdH0pXHJcblx0XHRcdFx0XHQpO1xyXG5cdFx0XHR9KTtcclxuXHJcblx0XHRcdGF1dG9tYXRpb25Hcm91cC5hZGRTZXR0aW5nKChzZXR0aW5nKSA9PiB7XHJcblx0XHRcdFx0c2V0dGluZ1xyXG5cdFx0XHRcdFx0LnNldE5hbWUoXCJEcmFmdCBsb2dpY1wiKVxyXG5cdFx0XHRcdFx0LnNldERlc2MoXCJXaGV0aGVyIHRoZSBwcm9wZXJ0eSB2YWx1ZSAndHJ1ZScgbWVhbnMgaXQgaXMgYSBkcmFmdCBvciBwdWJsaXNoZWQuXCIpXHJcblx0XHRcdFx0XHQuYWRkRHJvcGRvd24oKGRyb3Bkb3duKSA9PlxyXG5cdFx0XHRcdFx0XHRkcm9wZG93blxyXG5cdFx0XHRcdFx0XHRcdC5hZGRPcHRpb24oXCJ0cnVlLWlzLWRyYWZ0XCIsIFwiVHJ1ZSA9IERyYWZ0XCIpXHJcblx0XHRcdFx0XHRcdFx0LmFkZE9wdGlvbihcImZhbHNlLWlzLWRyYWZ0XCIsIFwiVHJ1ZSA9IFB1Ymxpc2hlZFwiKVxyXG5cdFx0XHRcdFx0XHRcdC5zZXRWYWx1ZShzZXR0aW5ncy5kcmFmdExvZ2ljIHx8IFwidHJ1ZS1pcy1kcmFmdFwiKVxyXG5cdFx0XHRcdFx0XHRcdC5vbkNoYW5nZShhc3luYyAodmFsdWUpID0+IHtcclxuXHRcdFx0XHRcdFx0XHRcdHNldHRpbmdzLmRyYWZ0TG9naWMgPSB2YWx1ZSBhcyAndHJ1ZS1pcy1kcmFmdCcgfCAnZmFsc2UtaXMtZHJhZnQnO1xyXG5cdFx0XHRcdFx0XHRcdFx0YXdhaXQgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7XHJcblx0XHRcdFx0XHRcdFx0XHR0aGlzLnBsdWdpbi5mcm9udG1hdHRlclNlcnZpY2U/LmluaXRpYWxpemVEcmFmdFN0YXR1c01hcCgpO1xyXG5cdFx0XHRcdFx0XHRcdH0pXHJcblx0XHRcdFx0XHQpO1xyXG5cdFx0XHR9KTtcclxuXHJcblx0XHRcdGF1dG9tYXRpb25Hcm91cC5hZGRTZXR0aW5nKChzZXR0aW5nKSA9PiB7XHJcblx0XHRcdFx0c2V0dGluZ1xyXG5cdFx0XHRcdFx0LnNldE5hbWUoXCJQdWJsaXNoZWQgZGF0ZSBwcm9wZXJ0eSBuYW1lXCIpXHJcblx0XHRcdFx0XHQuc2V0RGVzYyhcIlRoZSBwcm9wZXJ0eSBmaWVsZCB0byB1cGRhdGUgd2hlbiBwdWJsaXNoZWQgKGUuZy4sICdkYXRlJyBvciAncHViRGF0ZScpLlwiKVxyXG5cdFx0XHRcdFx0LmFkZFRleHQoKHRleHQpID0+XHJcblx0XHRcdFx0XHRcdHRleHRcclxuXHRcdFx0XHRcdFx0XHQuc2V0UGxhY2Vob2xkZXIoXCJkYXRlXCIpXHJcblx0XHRcdFx0XHRcdFx0LnNldFZhbHVlKHNldHRpbmdzLnB1Ymxpc2hEYXRlRmllbGQgfHwgXCJcIilcclxuXHRcdFx0XHRcdFx0XHQub25DaGFuZ2UoYXN5bmMgKHZhbHVlOiBzdHJpbmcpID0+IHtcclxuXHRcdFx0XHRcdFx0XHRcdHNldHRpbmdzLnB1Ymxpc2hEYXRlRmllbGQgPSB2YWx1ZTtcclxuXHRcdFx0XHRcdFx0XHRcdGF3YWl0IHRoaXMucGx1Z2luLnNhdmVTZXR0aW5ncygpO1xyXG5cdFx0XHRcdFx0XHRcdH0pXHJcblx0XHRcdFx0XHQpO1xyXG5cdFx0XHR9KTtcclxuXHRcdH1cclxuXHJcblx0XHQvLyBDb250ZW50IHR5cGVzXHJcblx0XHRjb25zdCBjb250ZW50VHlwZXNHcm91cCA9IGNyZWF0ZVNldHRpbmdzR3JvdXAoY29udGFpbmVyRWwsIFwiQ29udGVudCB0eXBlc1wiLCAnYXN0cm8tY29tcG9zZXInKTtcclxuXHJcblx0XHQvLyBBZGQgY29udGFpbmVyIGFzIGEgc2V0dGluZyAtIGhpZGUgdGhlIHNldHRpbmcncyBkZWZhdWx0IFVJLCBhZGQgb3VyIGNvbnRhaW5lciBpbnNpZGVcclxuXHRcdGNvbnRlbnRUeXBlc0dyb3VwLmFkZFNldHRpbmcoKHNldHRpbmcpID0+IHtcclxuXHRcdFx0Ly8gSGlkZSB0aGUgc2V0dGluZydzIGRlZmF1bHQgVUkgZWxlbWVudHMgdXNpbmcgQ1NTIGNsYXNzZXNcclxuXHRcdFx0c2V0dGluZy5zZXR0aW5nRWwuYWRkQ2xhc3MoXCJhc3Ryby1jb21wb3Nlci1zZXR0aW5nLWhpZGRlbi1lbGVtZW50c1wiKTtcclxuXHRcdFx0c2V0dGluZy5zZXR0aW5nRWwuYWRkQ2xhc3MoXCJhc3Ryby1jb21wb3Nlci1zZXR0aW5nLWNvbnRhaW5lci1mdWxsLXdpZHRoXCIpO1xyXG5cdFx0XHQvLyBBZGQgb3VyIGNvbnRhaW5lciBpbnNpZGUgdGhlIHNldHRpbmcgZWxlbWVudCAtIGVuc3VyZSBpdCdzIHZpc2libGVcclxuXHRcdFx0dGhpcy5jdXN0b21Db250ZW50VHlwZXNDb250YWluZXIgPSBzZXR0aW5nLnNldHRpbmdFbC5jcmVhdGVEaXYoe1xyXG5cdFx0XHRcdGNsczogXCJjdXN0b20tY29udGVudC10eXBlcy1jb250YWluZXIgYXN0cm8tY29tcG9zZXItY3VzdG9tLXR5cGVzLWNvbnRhaW5lci12aXNpYmxlXCJcclxuXHRcdFx0fSk7XHJcblx0XHR9KTtcclxuXHRcdC8vIFJlbmRlciBjb250ZW50IHR5cGVzIGFmdGVyIGNvbnRhaW5lciBpcyBjcmVhdGVkXHJcblx0XHRpZiAodGhpcy5jdXN0b21Db250ZW50VHlwZXNDb250YWluZXIpIHtcclxuXHRcdFx0dGhpcy5yZW5kZXJDdXN0b21Db250ZW50VHlwZXMoKTtcclxuXHRcdH1cclxuXHJcblx0XHQvLyBEZXZlbG9wZXIgY29tbWFuZHMgKGRlc2t0b3Agb25seSAtIG5vdCBhdmFpbGFibGUgb24gbW9iaWxlKVxyXG5cdFx0aWYgKCFQbGF0Zm9ybS5pc01vYmlsZSkge1xyXG5cdFx0XHRjb25zdCBkZXZlbG9wZXJHcm91cCA9IGNyZWF0ZVNldHRpbmdzR3JvdXAoY29udGFpbmVyRWwsIFwiRGV2ZWxvcGVyIGNvbW1hbmRzXCIsICdhc3Ryby1jb21wb3NlcicpO1xyXG5cclxuXHRcdFx0Ly8gVGVybWluYWwgY29tbWFuZCBzZXR0aW5nc1xyXG5cdFx0XHRkZXZlbG9wZXJHcm91cC5hZGRTZXR0aW5nKChzZXR0aW5nKSA9PiB7XHJcblx0XHRcdFx0c2V0dGluZ1xyXG5cdFx0XHRcdFx0LnNldE5hbWUoXCJFbmFibGUgb3BlbiB0ZXJtaW5hbCBjb21tYW5kXCIpXHJcblx0XHRcdFx0XHQuc2V0RGVzYyhcIkVuYWJsZSBjb21tYW5kIHRvIG9wZW4gdGVybWluYWwgaW4gcHJvamVjdCByb290IGRpcmVjdG9yeS5cIilcclxuXHRcdFx0XHRcdC5hZGRUb2dnbGUoKHRvZ2dsZSkgPT5cclxuXHRcdFx0XHRcdFx0dG9nZ2xlXHJcblx0XHRcdFx0XHRcdFx0LnNldFZhbHVlKHNldHRpbmdzLmVuYWJsZU9wZW5UZXJtaW5hbENvbW1hbmQpXHJcblx0XHRcdFx0XHRcdFx0Lm9uQ2hhbmdlKGFzeW5jICh2YWx1ZTogYm9vbGVhbikgPT4ge1xyXG5cdFx0XHRcdFx0XHRcdFx0c2V0dGluZ3MuZW5hYmxlT3BlblRlcm1pbmFsQ29tbWFuZCA9IHZhbHVlO1xyXG5cdFx0XHRcdFx0XHRcdFx0YXdhaXQgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7XHJcblx0XHRcdFx0XHRcdFx0XHR0aGlzLnVwZGF0ZVRlcm1pbmFsQ29tbWFuZEZpZWxkcygpO1xyXG5cdFx0XHRcdFx0XHRcdFx0Ly8gcmVnaXN0ZXJSaWJib25JY29ucyBjaGVja3MgYm90aCBjb21tYW5kIGFuZCBpY29uIHNldHRpbmdzXHJcblx0XHRcdFx0XHRcdFx0XHQvLyBJZiBjb21tYW5kIGlzIGVuYWJsZWQgQU5EIGljb24gaXMgZW5hYmxlZCwgaXQgd2lsbCBzaG93OyBvdGhlcndpc2UgaXQgd2lsbCBoaWRlXHJcblx0XHRcdFx0XHRcdFx0XHRpZiAodGhpcy5wbHVnaW4ucmVnaXN0ZXJSaWJib25JY29ucykge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHR0aGlzLnBsdWdpbi5yZWdpc3RlclJpYmJvbkljb25zKCk7XHJcblx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0fSlcclxuXHRcdFx0XHRcdCk7XHJcblx0XHRcdH0pO1xyXG5cclxuXHRcdFx0Ly8gQ3JlYXRlIGNvbnRhaW5lciBmb3IgdGVybWluYWwgY29tbWFuZCBmaWVsZHMgLSBrZWVwIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IHdpdGggdXBkYXRlIG1ldGhvZHNcclxuXHRcdFx0dGhpcy50ZXJtaW5hbENvbW1hbmRDb250YWluZXIgPSBjb250YWluZXJFbC5jcmVhdGVEaXYoeyBjbHM6IFwidGVybWluYWwtY29tbWFuZC1maWVsZHNcIiB9KTtcclxuXHRcdFx0dGhpcy50ZXJtaW5hbENvbW1hbmRDb250YWluZXIuY2xhc3NMaXN0LnRvZ2dsZShcImFzdHJvLWNvbXBvc2VyLXNldHRpbmctY29udGFpbmVyLXZpc2libGVcIiwgc2V0dGluZ3MuZW5hYmxlT3BlblRlcm1pbmFsQ29tbWFuZCk7XHJcblx0XHRcdHRoaXMudGVybWluYWxDb21tYW5kQ29udGFpbmVyLmNsYXNzTGlzdC50b2dnbGUoXCJhc3Ryby1jb21wb3Nlci1zZXR0aW5nLWNvbnRhaW5lci1oaWRkZW5cIiwgIXNldHRpbmdzLmVuYWJsZU9wZW5UZXJtaW5hbENvbW1hbmQpO1xyXG5cclxuXHRcdFx0ZGV2ZWxvcGVyR3JvdXAuYWRkU2V0dGluZygoc2V0dGluZykgPT4ge1xyXG5cdFx0XHRcdGNvbnN0IGRlc2NGcmFnbWVudCA9IGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTtcclxuXHRcdFx0XHQvLyBUZXh0IGlzIGFscmVhZHkgaW4gc2VudGVuY2UgY2FzZTsgXCJPYnNpZGlhblwiIGlzIGEgcHJvcGVyIG5vdW5cclxuXHRcdFx0XHRkZXNjRnJhZ21lbnQuY3JlYXRlRWwoXCJkaXZcIiwgeyB0ZXh0OiBcIlBhdGggcmVsYXRpdmUgdG8gdGhlIE9ic2lkaWFuIHZhdWx0IHJvb3QgZm9sZGVyLiBVc2UgLi4vLi4gZm9yIHR3byBsZXZlbHMgdXAuIExlYXZlIGJsYW5rIHRvIHVzZSB0aGUgdmF1bHQgZm9sZGVyXCIgfSk7XHJcblx0XHRcdFx0ZGVzY0ZyYWdtZW50LmNyZWF0ZUVsKFwiZGl2XCIsIHsgdGV4dDogXCJUaGlzIGlzIHdoZXJlIHRoZSB0ZXJtaW5hbCB3aWxsIG9wZW4uIEFic29sdXRlIHBhdGhzIHdvcmsgYWxzby5cIiB9KTtcclxuXHRcdFx0XHRzZXR0aW5nXHJcblx0XHRcdFx0XHQuc2V0TmFtZShcIlByb2plY3Qgcm9vdCBkaXJlY3RvcnkgcGF0aFwiKVxyXG5cdFx0XHRcdFx0LnNldERlc2MoZGVzY0ZyYWdtZW50KVxyXG5cdFx0XHRcdFx0LmFkZFRleHQoKHRleHQpID0+XHJcblx0XHRcdFx0XHRcdHRleHRcclxuXHRcdFx0XHRcdFx0XHQuc2V0UGxhY2Vob2xkZXIoXCIuLi8uLlwiKVxyXG5cdFx0XHRcdFx0XHRcdC5zZXRWYWx1ZShzZXR0aW5ncy50ZXJtaW5hbFByb2plY3RSb290UGF0aClcclxuXHRcdFx0XHRcdFx0XHQub25DaGFuZ2UoYXN5bmMgKHZhbHVlOiBzdHJpbmcpID0+IHtcclxuXHRcdFx0XHRcdFx0XHRcdHNldHRpbmdzLnRlcm1pbmFsUHJvamVjdFJvb3RQYXRoID0gdmFsdWU7XHJcblx0XHRcdFx0XHRcdFx0XHRhd2FpdCB0aGlzLnBsdWdpbi5zYXZlU2V0dGluZ3MoKTtcclxuXHRcdFx0XHRcdFx0XHR9KVxyXG5cdFx0XHRcdFx0KTtcclxuXHRcdFx0XHQvLyBBZGQgY2xhc3MgZm9yIGNvbmRpdGlvbmFsIHZpc2liaWxpdHkgLSBrZWVwIHNldHRpbmcgaW4gZ3JvdXBcclxuXHRcdFx0XHRzZXR0aW5nLnNldHRpbmdFbC5jbGFzc0xpc3QudG9nZ2xlKFwiYXN0cm8tY29tcG9zZXItc2V0dGluZy1jb250YWluZXItdmlzaWJsZVwiLCBzZXR0aW5ncy5lbmFibGVPcGVuVGVybWluYWxDb21tYW5kKTtcclxuXHRcdFx0XHRzZXR0aW5nLnNldHRpbmdFbC5jbGFzc0xpc3QudG9nZ2xlKFwiYXN0cm8tY29tcG9zZXItc2V0dGluZy1jb250YWluZXItaGlkZGVuXCIsICFzZXR0aW5ncy5lbmFibGVPcGVuVGVybWluYWxDb21tYW5kKTtcclxuXHRcdFx0fSk7XHJcblxyXG5cdFx0XHRkZXZlbG9wZXJHcm91cC5hZGRTZXR0aW5nKChzZXR0aW5nKSA9PiB7XHJcblx0XHRcdFx0Y29uc3QgZGVzY0ZyYWdtZW50ID0gZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpO1xyXG5cdFx0XHRcdC8vIFRleHQgaXMgYWxyZWFkeSBpbiBzZW50ZW5jZSBjYXNlOyBwcm9wZXIgbm91bnMgb3IgcHJvZHVjdCBuYW1lcyBsaWtlIFwibWFjT1NcIiwgXCJXaW5kb3dzXCIsIFwiTGludXhcIlxyXG5cdFx0XHRcdGRlc2NGcmFnbWVudC5jcmVhdGVFbChcImRpdlwiLCB7IHRleHQ6IFwiTGVhdmUgYmxhbmsgdG8gdXNlIHBsYXRmb3JtIGRlZmF1bHRzLiBPbiBtYWNPUywgdGhlIGRlZmF1bHQgaXMgVGVybWluYWwuIE9uIFdpbmRvd3MsIGl0J3MgV2luZG93cyBUZXJtaW5hbCAoV2luIDExKSBvciBjbWQuZXhlIChXaW4gMTApLiBPbiBMaW51eCwgaXQncyBnbm9tZS10ZXJtaW5hbCwga29uc29sZSwgb3IgeHRlcm1cIiB9KTtcclxuXHRcdFx0XHQvLyBUZXh0IGlzIGFscmVhZHkgaW4gc2VudGVuY2UgY2FzZTsgcHJvcGVyIG5vdW5zIGxpa2UgXCJUZXJtaW5hbFwiLCBcImlUZXJtXCIsIFwiUG93ZXJTaGVsbFwiXHJcblx0XHRcdFx0ZGVzY0ZyYWdtZW50LmNyZWF0ZUVsKFwiZGl2XCIsIHsgdGV4dDogXCJFeGFtcGxlcyBpbmNsdWRlIFRlcm1pbmFsLCBpVGVybSwgUG93ZXJTaGVsbCwgYW5kIEFsYWNyaXR0eVwiIH0pO1xyXG5cdFx0XHRcdHNldHRpbmdcclxuXHRcdFx0XHRcdC5zZXROYW1lKFwiVGVybWluYWwgYXBwbGljYXRpb24gbmFtZVwiKVxyXG5cdFx0XHRcdFx0LnNldERlc2MoZGVzY0ZyYWdtZW50KVxyXG5cdFx0XHRcdFx0LmFkZFRleHQoKHRleHQpID0+XHJcblx0XHRcdFx0XHRcdHRleHRcclxuXHRcdFx0XHRcdFx0XHQuc2V0UGxhY2Vob2xkZXIoXCJUZXJtaW5hbFwiKVxyXG5cdFx0XHRcdFx0XHRcdC5zZXRWYWx1ZShzZXR0aW5ncy50ZXJtaW5hbEFwcGxpY2F0aW9uTmFtZSlcclxuXHRcdFx0XHRcdFx0XHQub25DaGFuZ2UoYXN5bmMgKHZhbHVlOiBzdHJpbmcpID0+IHtcclxuXHRcdFx0XHRcdFx0XHRcdHNldHRpbmdzLnRlcm1pbmFsQXBwbGljYXRpb25OYW1lID0gdmFsdWU7XHJcblx0XHRcdFx0XHRcdFx0XHRhd2FpdCB0aGlzLnBsdWdpbi5zYXZlU2V0dGluZ3MoKTtcclxuXHRcdFx0XHRcdFx0XHR9KVxyXG5cdFx0XHRcdFx0KTtcclxuXHRcdFx0XHQvLyBBZGQgY2xhc3MgZm9yIGNvbmRpdGlvbmFsIHZpc2liaWxpdHkgLSBrZWVwIHNldHRpbmcgaW4gZ3JvdXBcclxuXHRcdFx0XHRzZXR0aW5nLnNldHRpbmdFbC5jbGFzc0xpc3QudG9nZ2xlKFwiYXN0cm8tY29tcG9zZXItc2V0dGluZy1jb250YWluZXItdmlzaWJsZVwiLCBzZXR0aW5ncy5lbmFibGVPcGVuVGVybWluYWxDb21tYW5kKTtcclxuXHRcdFx0XHRzZXR0aW5nLnNldHRpbmdFbC5jbGFzc0xpc3QudG9nZ2xlKFwiYXN0cm8tY29tcG9zZXItc2V0dGluZy1jb250YWluZXItaGlkZGVuXCIsICFzZXR0aW5ncy5lbmFibGVPcGVuVGVybWluYWxDb21tYW5kKTtcclxuXHRcdFx0fSk7XHJcblxyXG5cdFx0XHRkZXZlbG9wZXJHcm91cC5hZGRTZXR0aW5nKChzZXR0aW5nKSA9PiB7XHJcblx0XHRcdFx0c2V0dGluZ1xyXG5cdFx0XHRcdFx0LnNldE5hbWUoXCJFbmFibGUgZGVidWcgbG9nZ2luZ1wiKVxyXG5cdFx0XHRcdFx0LnNldERlc2MoXCJMb2cgdGVybWluYWwgbGF1bmNoIGNvbW1hbmRzIGFuZCBwbGF0Zm9ybSBkZWNpc2lvbnMgdG8gdGhlIGRldmVsb3BlciBjb25zb2xlIGZvciB0cm91Ymxlc2hvb3RpbmcuXCIpXHJcblx0XHRcdFx0XHQuYWRkVG9nZ2xlKCh0b2dnbGUpID0+XHJcblx0XHRcdFx0XHRcdHRvZ2dsZVxyXG5cdFx0XHRcdFx0XHRcdC5zZXRWYWx1ZShzZXR0aW5ncy5lbmFibGVUZXJtaW5hbERlYnVnTG9nZ2luZylcclxuXHRcdFx0XHRcdFx0XHQub25DaGFuZ2UoYXN5bmMgKHZhbHVlOiBib29sZWFuKSA9PiB7XHJcblx0XHRcdFx0XHRcdFx0XHRzZXR0aW5ncy5lbmFibGVUZXJtaW5hbERlYnVnTG9nZ2luZyA9IHZhbHVlO1xyXG5cdFx0XHRcdFx0XHRcdFx0YXdhaXQgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7XHJcblx0XHRcdFx0XHRcdFx0fSlcclxuXHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0Ly8gQWRkIGNsYXNzIGZvciBjb25kaXRpb25hbCB2aXNpYmlsaXR5IC0ga2VlcCBzZXR0aW5nIGluIGdyb3VwXHJcblx0XHRcdFx0c2V0dGluZy5zZXR0aW5nRWwuY2xhc3NMaXN0LnRvZ2dsZShcImFzdHJvLWNvbXBvc2VyLXNldHRpbmctY29udGFpbmVyLXZpc2libGVcIiwgc2V0dGluZ3MuZW5hYmxlT3BlblRlcm1pbmFsQ29tbWFuZCk7XHJcblx0XHRcdFx0c2V0dGluZy5zZXR0aW5nRWwuY2xhc3NMaXN0LnRvZ2dsZShcImFzdHJvLWNvbXBvc2VyLXNldHRpbmctY29udGFpbmVyLWhpZGRlblwiLCAhc2V0dGluZ3MuZW5hYmxlT3BlblRlcm1pbmFsQ29tbWFuZCk7XHJcblx0XHRcdH0pO1xyXG5cclxuXHRcdFx0ZGV2ZWxvcGVyR3JvdXAuYWRkU2V0dGluZygoc2V0dGluZykgPT4ge1xyXG5cdFx0XHRcdHNldHRpbmdcclxuXHRcdFx0XHRcdC5zZXROYW1lKFwiU2hvdyBvcGVuIHRlcm1pbmFsIHJpYmJvbiBpY29uXCIpXHJcblx0XHRcdFx0XHQuc2V0RGVzYyhcIkFkZCBhIHJpYmJvbiBpY29uIHRvIGxhdW5jaCB0aGUgdGVybWluYWwgY29tbWFuZC5cIilcclxuXHRcdFx0XHRcdC5hZGRUb2dnbGUoKHRvZ2dsZSkgPT4ge1xyXG5cdFx0XHRcdFx0XHR0aGlzLnRlcm1pbmFsUmliYm9uVG9nZ2xlQ29tcG9uZW50ID0gdG9nZ2xlO1xyXG5cdFx0XHRcdFx0XHR0b2dnbGVcclxuXHRcdFx0XHRcdFx0XHQuc2V0VmFsdWUoc2V0dGluZ3MuZW5hYmxlVGVybWluYWxSaWJib25JY29uKVxyXG5cdFx0XHRcdFx0XHRcdC5zZXREaXNhYmxlZCghc2V0dGluZ3MuZW5hYmxlT3BlblRlcm1pbmFsQ29tbWFuZClcclxuXHRcdFx0XHRcdFx0XHQub25DaGFuZ2UoYXN5bmMgKHZhbHVlOiBib29sZWFuKSA9PiB7XHJcblx0XHRcdFx0XHRcdFx0XHQvLyBVcGRhdGUgc2V0dGluZ3MgZGlyZWN0bHkgb24gcGx1Z2luIGluc3RhbmNlXHJcblx0XHRcdFx0XHRcdFx0XHR0aGlzLnBsdWdpbi5zZXR0aW5ncy5lbmFibGVUZXJtaW5hbFJpYmJvbkljb24gPSB2YWx1ZTtcclxuXHRcdFx0XHRcdFx0XHRcdHNldHRpbmdzLmVuYWJsZVRlcm1pbmFsUmliYm9uSWNvbiA9IHZhbHVlO1xyXG5cdFx0XHRcdFx0XHRcdFx0YXdhaXQgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7XHJcblx0XHRcdFx0XHRcdFx0XHQvLyBTbWFsbCBkZWxheSB0byBlbnN1cmUgc2V0dGluZ3MgYXJlIHNhdmVkLCB0aGVuIHJlLXJlZ2lzdGVyXHJcblx0XHRcdFx0XHRcdFx0XHRzZXRUaW1lb3V0KCgpID0+IHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKHRoaXMucGx1Z2luLnJlZ2lzdGVyUmliYm9uSWNvbnMpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR0aGlzLnBsdWdpbi5yZWdpc3RlclJpYmJvbkljb25zKCk7XHJcblx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdH0sIDUwKTtcclxuXHRcdFx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdC8vIEFkZCBjbGFzcyBmb3IgY29uZGl0aW9uYWwgdmlzaWJpbGl0eSAtIGtlZXAgc2V0dGluZyBpbiBncm91cFxyXG5cdFx0XHRcdHNldHRpbmcuc2V0dGluZ0VsLmNsYXNzTGlzdC50b2dnbGUoXCJhc3Ryby1jb21wb3Nlci1zZXR0aW5nLWNvbnRhaW5lci12aXNpYmxlXCIsIHNldHRpbmdzLmVuYWJsZU9wZW5UZXJtaW5hbENvbW1hbmQpO1xyXG5cdFx0XHRcdHNldHRpbmcuc2V0dGluZ0VsLmNsYXNzTGlzdC50b2dnbGUoXCJhc3Ryby1jb21wb3Nlci1zZXR0aW5nLWNvbnRhaW5lci1oaWRkZW5cIiwgIXNldHRpbmdzLmVuYWJsZU9wZW5UZXJtaW5hbENvbW1hbmQpO1xyXG5cdFx0XHRcdC8vIFN0b3JlIHJlZmVyZW5jZSBmb3IgdXBkYXRpbmcgZGlzYWJsZWQgc3RhdGVcclxuXHRcdFx0XHR0aGlzLnRlcm1pbmFsUmliYm9uVG9nZ2xlID0gc2V0dGluZztcclxuXHRcdFx0fSk7XHJcblxyXG5cdFx0XHQvLyBDb25maWcgZmlsZSBjb21tYW5kIHNldHRpbmdzXHJcblx0XHRcdGRldmVsb3Blckdyb3VwLmFkZFNldHRpbmcoKHNldHRpbmcpID0+IHtcclxuXHRcdFx0XHRzZXR0aW5nXHJcblx0XHRcdFx0XHQuc2V0TmFtZShcIkVuYWJsZSBlZGl0IGNvbmZpZyBmaWxlIGNvbW1hbmRcIilcclxuXHRcdFx0XHRcdC5zZXREZXNjKFwiRW5hYmxlIGNvbW1hbmQgdG8gb3BlbiBhc3RybyBjb25maWcgZmlsZSBpbiBkZWZhdWx0IGVkaXRvci5cIilcclxuXHRcdFx0XHRcdC5hZGRUb2dnbGUoKHRvZ2dsZSkgPT5cclxuXHRcdFx0XHRcdFx0dG9nZ2xlXHJcblx0XHRcdFx0XHRcdFx0LnNldFZhbHVlKHNldHRpbmdzLmVuYWJsZU9wZW5Db25maWdGaWxlQ29tbWFuZClcclxuXHRcdFx0XHRcdFx0XHQub25DaGFuZ2UoYXN5bmMgKHZhbHVlOiBib29sZWFuKSA9PiB7XHJcblx0XHRcdFx0XHRcdFx0XHRzZXR0aW5ncy5lbmFibGVPcGVuQ29uZmlnRmlsZUNvbW1hbmQgPSB2YWx1ZTtcclxuXHRcdFx0XHRcdFx0XHRcdGF3YWl0IHRoaXMucGx1Z2luLnNhdmVTZXR0aW5ncygpO1xyXG5cdFx0XHRcdFx0XHRcdFx0dGhpcy51cGRhdGVDb25maWdDb21tYW5kRmllbGRzKCk7XHJcblx0XHRcdFx0XHRcdFx0XHQvLyByZWdpc3RlclJpYmJvbkljb25zIGNoZWNrcyBib3RoIGNvbW1hbmQgYW5kIGljb24gc2V0dGluZ3NcclxuXHRcdFx0XHRcdFx0XHRcdC8vIElmIGNvbW1hbmQgaXMgZW5hYmxlZCBBTkQgaWNvbiBpcyBlbmFibGVkLCBpdCB3aWxsIHNob3c7IG90aGVyd2lzZSBpdCB3aWxsIGhpZGVcclxuXHRcdFx0XHRcdFx0XHRcdGlmICh0aGlzLnBsdWdpbi5yZWdpc3RlclJpYmJvbkljb25zKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdHRoaXMucGx1Z2luLnJlZ2lzdGVyUmliYm9uSWNvbnMoKTtcclxuXHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHR9KVxyXG5cdFx0XHRcdFx0KTtcclxuXHRcdFx0fSk7XHJcblxyXG5cdFx0XHQvLyBDcmVhdGUgY29udGFpbmVyIGZvciBjb25maWcgY29tbWFuZCBmaWVsZHMgLSBrZWVwIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IHdpdGggdXBkYXRlIG1ldGhvZHNcclxuXHRcdFx0dGhpcy5jb25maWdDb21tYW5kQ29udGFpbmVyID0gY29udGFpbmVyRWwuY3JlYXRlRGl2KHsgY2xzOiBcImNvbmZpZy1jb21tYW5kLWZpZWxkc1wiIH0pO1xyXG5cdFx0XHR0aGlzLmNvbmZpZ0NvbW1hbmRDb250YWluZXIuY2xhc3NMaXN0LnRvZ2dsZShcImFzdHJvLWNvbXBvc2VyLXNldHRpbmctY29udGFpbmVyLXZpc2libGVcIiwgc2V0dGluZ3MuZW5hYmxlT3BlbkNvbmZpZ0ZpbGVDb21tYW5kKTtcclxuXHRcdFx0dGhpcy5jb25maWdDb21tYW5kQ29udGFpbmVyLmNsYXNzTGlzdC50b2dnbGUoXCJhc3Ryby1jb21wb3Nlci1zZXR0aW5nLWNvbnRhaW5lci1oaWRkZW5cIiwgIXNldHRpbmdzLmVuYWJsZU9wZW5Db25maWdGaWxlQ29tbWFuZCk7XHJcblxyXG5cdFx0XHRkZXZlbG9wZXJHcm91cC5hZGRTZXR0aW5nKChzZXR0aW5nKSA9PiB7XHJcblx0XHRcdFx0Y29uc3QgZGVzY0ZyYWdtZW50ID0gZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpO1xyXG5cdFx0XHRcdGRlc2NGcmFnbWVudC5jcmVhdGVFbChcImRpdlwiLCB7IHRleHQ6IFwiUGF0aCB0byB0aGUgY29uZmlnIGZpbGUgcmVsYXRpdmUgdG8gdGhlIHZhdWx0IHJvb3QuIFVzZSAuLi9jb25maWcudHMgb3IgLi4vLi4vYXN0cm8uY29uZmlnLm1qcy5cIiB9KTtcclxuXHRcdFx0XHRkZXNjRnJhZ21lbnQuY3JlYXRlRWwoXCJkaXZcIiwgeyB0ZXh0OiBcIkFic29sdXRlIHBhdGhzIHdvcmsgYWxzby5cIiB9KTtcclxuXHRcdFx0XHRzZXR0aW5nXHJcblx0XHRcdFx0XHQuc2V0TmFtZShcIkNvbmZpZyBmaWxlIHBhdGhcIilcclxuXHRcdFx0XHRcdC5zZXREZXNjKGRlc2NGcmFnbWVudClcclxuXHRcdFx0XHRcdC5hZGRUZXh0KCh0ZXh0KSA9PlxyXG5cdFx0XHRcdFx0XHR0ZXh0XHJcblx0XHRcdFx0XHRcdFx0LnNldFBsYWNlaG9sZGVyKFwiLi4vY29uZmlnLnRzXCIpXHJcblx0XHRcdFx0XHRcdFx0LnNldFZhbHVlKHNldHRpbmdzLmNvbmZpZ0ZpbGVQYXRoKVxyXG5cdFx0XHRcdFx0XHRcdC5vbkNoYW5nZShhc3luYyAodmFsdWU6IHN0cmluZykgPT4ge1xyXG5cdFx0XHRcdFx0XHRcdFx0c2V0dGluZ3MuY29uZmlnRmlsZVBhdGggPSB2YWx1ZTtcclxuXHRcdFx0XHRcdFx0XHRcdGF3YWl0IHRoaXMucGx1Z2luLnNhdmVTZXR0aW5ncygpO1xyXG5cdFx0XHRcdFx0XHRcdH0pXHJcblx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdC8vIEFkZCBjbGFzcyBmb3IgY29uZGl0aW9uYWwgdmlzaWJpbGl0eSAtIGtlZXAgc2V0dGluZyBpbiBncm91cFxyXG5cdFx0XHRcdHNldHRpbmcuc2V0dGluZ0VsLmNsYXNzTGlzdC50b2dnbGUoXCJhc3Ryby1jb21wb3Nlci1zZXR0aW5nLWNvbnRhaW5lci12aXNpYmxlXCIsIHNldHRpbmdzLmVuYWJsZU9wZW5Db25maWdGaWxlQ29tbWFuZCk7XHJcblx0XHRcdFx0c2V0dGluZy5zZXR0aW5nRWwuY2xhc3NMaXN0LnRvZ2dsZShcImFzdHJvLWNvbXBvc2VyLXNldHRpbmctY29udGFpbmVyLWhpZGRlblwiLCAhc2V0dGluZ3MuZW5hYmxlT3BlbkNvbmZpZ0ZpbGVDb21tYW5kKTtcclxuXHRcdFx0fSk7XHJcblxyXG5cdFx0XHRkZXZlbG9wZXJHcm91cC5hZGRTZXR0aW5nKChzZXR0aW5nKSA9PiB7XHJcblx0XHRcdFx0c2V0dGluZ1xyXG5cdFx0XHRcdFx0LnNldE5hbWUoXCJTaG93IG9wZW4gY29uZmlnIHJpYmJvbiBpY29uXCIpXHJcblx0XHRcdFx0XHQuc2V0RGVzYyhcIkFkZCBhIHJpYmJvbiBpY29uIHRvIGxhdW5jaCB0aGUgY29uZmlnIGZpbGUgY29tbWFuZC5cIilcclxuXHRcdFx0XHRcdC5hZGRUb2dnbGUoKHRvZ2dsZSkgPT4ge1xyXG5cdFx0XHRcdFx0XHR0aGlzLmNvbmZpZ1JpYmJvblRvZ2dsZUNvbXBvbmVudCA9IHRvZ2dsZTtcclxuXHRcdFx0XHRcdFx0dG9nZ2xlXHJcblx0XHRcdFx0XHRcdFx0LnNldFZhbHVlKHNldHRpbmdzLmVuYWJsZUNvbmZpZ1JpYmJvbkljb24pXHJcblx0XHRcdFx0XHRcdFx0LnNldERpc2FibGVkKCFzZXR0aW5ncy5lbmFibGVPcGVuQ29uZmlnRmlsZUNvbW1hbmQpXHJcblx0XHRcdFx0XHRcdFx0Lm9uQ2hhbmdlKGFzeW5jICh2YWx1ZTogYm9vbGVhbikgPT4ge1xyXG5cdFx0XHRcdFx0XHRcdFx0Ly8gVXBkYXRlIHNldHRpbmdzIGRpcmVjdGx5IG9uIHBsdWdpbiBpbnN0YW5jZVxyXG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5wbHVnaW4uc2V0dGluZ3MuZW5hYmxlQ29uZmlnUmliYm9uSWNvbiA9IHZhbHVlO1xyXG5cdFx0XHRcdFx0XHRcdFx0c2V0dGluZ3MuZW5hYmxlQ29uZmlnUmliYm9uSWNvbiA9IHZhbHVlO1xyXG5cdFx0XHRcdFx0XHRcdFx0YXdhaXQgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7XHJcblx0XHRcdFx0XHRcdFx0XHQvLyBTbWFsbCBkZWxheSB0byBlbnN1cmUgc2V0dGluZ3MgYXJlIHNhdmVkLCB0aGVuIHJlLXJlZ2lzdGVyXHJcblx0XHRcdFx0XHRcdFx0XHRzZXRUaW1lb3V0KCgpID0+IHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKHRoaXMucGx1Z2luLnJlZ2lzdGVyUmliYm9uSWNvbnMpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR0aGlzLnBsdWdpbi5yZWdpc3RlclJpYmJvbkljb25zKCk7XHJcblx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdH0sIDUwKTtcclxuXHRcdFx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdC8vIEFkZCBjbGFzcyBmb3IgY29uZGl0aW9uYWwgdmlzaWJpbGl0eSAtIGtlZXAgc2V0dGluZyBpbiBncm91cFxyXG5cdFx0XHRcdHNldHRpbmcuc2V0dGluZ0VsLmNsYXNzTGlzdC50b2dnbGUoXCJhc3Ryby1jb21wb3Nlci1zZXR0aW5nLWNvbnRhaW5lci12aXNpYmxlXCIsIHNldHRpbmdzLmVuYWJsZU9wZW5Db25maWdGaWxlQ29tbWFuZCk7XHJcblx0XHRcdFx0c2V0dGluZy5zZXR0aW5nRWwuY2xhc3NMaXN0LnRvZ2dsZShcImFzdHJvLWNvbXBvc2VyLXNldHRpbmctY29udGFpbmVyLWhpZGRlblwiLCAhc2V0dGluZ3MuZW5hYmxlT3BlbkNvbmZpZ0ZpbGVDb21tYW5kKTtcclxuXHRcdFx0XHQvLyBTdG9yZSByZWZlcmVuY2UgZm9yIHVwZGF0aW5nIGRpc2FibGVkIHN0YXRlXHJcblx0XHRcdFx0dGhpcy5jb25maWdSaWJib25Ub2dnbGUgPSBzZXR0aW5nO1xyXG5cdFx0XHR9KTtcclxuXHJcblx0XHRcdC8vIEhlbHAgYnV0dG9uIHJlcGxhY2VtZW50IHRvZ2dsZSAocGFydCBvZiBkZXZlbG9wZXIgY29tbWFuZHMgZ3JvdXApXHJcblx0XHRcdGRldmVsb3Blckdyb3VwLmFkZFNldHRpbmcoKHNldHRpbmcpID0+IHtcclxuXHRcdFx0XHRzZXR0aW5nXHJcblx0XHRcdFx0XHQuc2V0TmFtZSgnU3dhcCBvdXQgaGVscCBidXR0b24gZm9yIGN1c3RvbSBhY3Rpb24nKVxyXG5cdFx0XHRcdFx0LnNldERlc2MoJ1JlcGxhY2UgdGhlIGhlbHAgYnV0dG9uIGluIHRoZSB2YXVsdCBwcm9maWxlIGFyZWEgd2l0aCBhIGN1c3RvbSBhY3Rpb24uJylcclxuXHRcdFx0XHRcdC5hZGRUb2dnbGUodG9nZ2xlID0+IHRvZ2dsZVxyXG5cdFx0XHRcdFx0XHQuc2V0VmFsdWUoc2V0dGluZ3MuaGVscEJ1dHRvblJlcGxhY2VtZW50Py5lbmFibGVkID8/IGZhbHNlKVxyXG5cdFx0XHRcdFx0XHQub25DaGFuZ2UoYXN5bmMgKHZhbHVlKSA9PiB7XHJcblx0XHRcdFx0XHRcdFx0aWYgKCFzZXR0aW5ncy5oZWxwQnV0dG9uUmVwbGFjZW1lbnQpIHtcclxuXHRcdFx0XHRcdFx0XHRcdHNldHRpbmdzLmhlbHBCdXR0b25SZXBsYWNlbWVudCA9IHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0ZW5hYmxlZDogZmFsc2UsXHJcblx0XHRcdFx0XHRcdFx0XHRcdGNvbW1hbmRJZDogJ2VkaXQtYXN0cm8tY29uZmlnJyxcclxuXHRcdFx0XHRcdFx0XHRcdFx0aWNvbklkOiAncm9ja2V0JyxcclxuXHRcdFx0XHRcdFx0XHRcdH07XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdHNldHRpbmdzLmhlbHBCdXR0b25SZXBsYWNlbWVudC5lbmFibGVkID0gdmFsdWU7XHJcblx0XHRcdFx0XHRcdFx0YXdhaXQgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7XHJcblx0XHRcdFx0XHRcdFx0Ly8gVHJpZ2dlciBoZWxwIGJ1dHRvbiByZXBsYWNlbWVudCB1cGRhdGUgKGl0IHdpbGwgcmVsb2FkIHNldHRpbmdzKVxyXG5cdFx0XHRcdFx0XHRcdGlmICh0aGlzLnBsdWdpbi51cGRhdGVIZWxwQnV0dG9uKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRhd2FpdCB0aGlzLnBsdWdpbi51cGRhdGVIZWxwQnV0dG9uKCk7XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdC8vIFJlLXJlbmRlciB0byBzaG93L2hpZGUgb3B0aW9uc1xyXG5cdFx0XHRcdFx0XHRcdHRoaXMuZGlzcGxheSgpO1xyXG5cdFx0XHRcdFx0XHR9KSk7XHJcblx0XHRcdH0pO1xyXG5cclxuXHRcdFx0Ly8gU2hvdyBjb21tYW5kIGFuZCBpY29uIHBpY2tlcnMgb25seSBpZiBlbmFibGVkIChwYXJ0IG9mIGRldmVsb3BlciBjb21tYW5kcyBncm91cClcclxuXHRcdFx0aWYgKHNldHRpbmdzLmhlbHBCdXR0b25SZXBsYWNlbWVudD8uZW5hYmxlZCkge1xyXG5cdFx0XHRcdC8vIENvbW1hbmQgcGlja2VyXHJcblx0XHRcdFx0Y29uc3QgY29tbWFuZE5hbWUgPSB0aGlzLmdldENvbW1hbmROYW1lKHNldHRpbmdzLmhlbHBCdXR0b25SZXBsYWNlbWVudC5jb21tYW5kSWQpO1xyXG5cdFx0XHRcdGRldmVsb3Blckdyb3VwLmFkZFNldHRpbmcoKHNldHRpbmcpID0+IHtcclxuXHRcdFx0XHRcdHNldHRpbmdcclxuXHRcdFx0XHRcdFx0LnNldE5hbWUoJ0NvbW1hbmQnKVxyXG5cdFx0XHRcdFx0XHQuc2V0RGVzYygnU2VsZWN0IHRoZSBjb21tYW5kIHRvIGV4ZWN1dGUgd2hlbiB0aGUgYnV0dG9uIGlzIGNsaWNrZWQuJylcclxuXHRcdFx0XHRcdFx0LmFkZEJ1dHRvbihidXR0b24gPT4gYnV0dG9uXHJcblx0XHRcdFx0XHRcdFx0LnNldEJ1dHRvblRleHQoY29tbWFuZE5hbWUgfHwgJ1NlbGVjdCBjb21tYW5kJylcclxuXHRcdFx0XHRcdFx0XHQub25DbGljaygoKSA9PiB7XHJcblx0XHRcdFx0XHRcdFx0XHRjb25zdCBtb2RhbCA9IG5ldyBDb21tYW5kUGlja2VyTW9kYWwodGhpcy5hcHAsIChjb21tYW5kSWQpID0+IHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0dm9pZCAoYXN5bmMgKCkgPT4ge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmICghc2V0dGluZ3MuaGVscEJ1dHRvblJlcGxhY2VtZW50KSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRzZXR0aW5ncy5oZWxwQnV0dG9uUmVwbGFjZW1lbnQgPSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGVuYWJsZWQ6IHRydWUsXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNvbW1hbmRJZDogJ2VkaXQtYXN0cm8tY29uZmlnJyxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWNvbklkOiAncm9ja2V0JyxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH07XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHNldHRpbmdzLmhlbHBCdXR0b25SZXBsYWNlbWVudC5jb21tYW5kSWQgPSBjb21tYW5kSWQ7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0YXdhaXQgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gVHJpZ2dlciBoZWxwIGJ1dHRvbiByZXBsYWNlbWVudCB1cGRhdGUgaW1tZWRpYXRlbHkgKGl0IHdpbGwgcmVsb2FkIHNldHRpbmdzKVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmICh0aGlzLnBsdWdpbi51cGRhdGVIZWxwQnV0dG9uKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRhd2FpdCB0aGlzLnBsdWdpbi51cGRhdGVIZWxwQnV0dG9uKCk7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vIFJlLXJlbmRlciB0byBzaG93IHVwZGF0ZWQgY29tbWFuZCBuYW1lXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5kaXNwbGF5KCk7XHJcblx0XHRcdFx0XHRcdFx0XHRcdH0pKCk7XHJcblx0XHRcdFx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdFx0XHRcdG1vZGFsLm9wZW4oKTtcclxuXHRcdFx0XHRcdFx0XHR9KSk7XHJcblx0XHRcdFx0fSk7XHJcblxyXG5cdFx0XHRcdC8vIEljb24gcGlja2VyXHJcblx0XHRcdFx0Y29uc3QgaWNvbk5hbWUgPSB0aGlzLmdldEljb25OYW1lKHNldHRpbmdzLmhlbHBCdXR0b25SZXBsYWNlbWVudC5pY29uSWQpO1xyXG5cdFx0XHRcdGRldmVsb3Blckdyb3VwLmFkZFNldHRpbmcoKHNldHRpbmcpID0+IHtcclxuXHRcdFx0XHRcdHNldHRpbmdcclxuXHRcdFx0XHRcdFx0LnNldE5hbWUoJ0ljb24nKVxyXG5cdFx0XHRcdFx0XHQuc2V0RGVzYygnU2VsZWN0IHRoZSBpY29uIHRvIGRpc3BsYXkgb24gdGhlIGJ1dHRvbi4nKVxyXG5cdFx0XHRcdFx0XHQuYWRkQnV0dG9uKGJ1dHRvbiA9PiBidXR0b25cclxuXHRcdFx0XHRcdFx0XHQuc2V0QnV0dG9uVGV4dChpY29uTmFtZSB8fCAnU2VsZWN0IGljb24uLi4nKVxyXG5cdFx0XHRcdFx0XHRcdC5vbkNsaWNrKCgpID0+IHtcclxuXHRcdFx0XHRcdFx0XHRcdGNvbnN0IG1vZGFsID0gbmV3IEljb25QaWNrZXJNb2RhbCh0aGlzLmFwcCwgKGljb25JZCkgPT4ge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHR2b2lkIChhc3luYyAoKSA9PiB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKCFzZXR0aW5ncy5oZWxwQnV0dG9uUmVwbGFjZW1lbnQpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHNldHRpbmdzLmhlbHBCdXR0b25SZXBsYWNlbWVudCA9IHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZW5hYmxlZDogdHJ1ZSxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y29tbWFuZElkOiAnZWRpdC1hc3Ryby1jb25maWcnLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpY29uSWQ6ICdyb2NrZXQnLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0c2V0dGluZ3MuaGVscEJ1dHRvblJlcGxhY2VtZW50Lmljb25JZCA9IGljb25JZDtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRhd2FpdCB0aGlzLnBsdWdpbi5zYXZlU2V0dGluZ3MoKTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBUcmlnZ2VyIGhlbHAgYnV0dG9uIHJlcGxhY2VtZW50IHVwZGF0ZSBpbW1lZGlhdGVseSAoaXQgd2lsbCByZWxvYWQgc2V0dGluZ3MpXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKHRoaXMucGx1Z2luLnVwZGF0ZUhlbHBCdXR0b24pIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGF3YWl0IHRoaXMucGx1Z2luLnVwZGF0ZUhlbHBCdXR0b24oKTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gUmUtcmVuZGVyIHRvIHNob3cgdXBkYXRlZCBpY29uIG5hbWVcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR0aGlzLmRpc3BsYXkoKTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0fSkoKTtcclxuXHRcdFx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0XHRcdFx0bW9kYWwub3BlbigpO1xyXG5cdFx0XHRcdFx0XHRcdH0pKTtcclxuXHRcdFx0XHR9KTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdHRoaXMudXBkYXRlQ29weUhlYWRpbmdGaWVsZHMoKTtcclxuXHRcdC8vIE9ubHkgdXBkYXRlIHRlcm1pbmFsL2NvbmZpZyBmaWVsZHMgaWYgbm90IG9uIG1vYmlsZVxyXG5cdFx0aWYgKCFQbGF0Zm9ybS5pc01vYmlsZSkge1xyXG5cdFx0XHR0aGlzLnVwZGF0ZVRlcm1pbmFsQ29tbWFuZEZpZWxkcygpO1xyXG5cdFx0XHR0aGlzLnVwZGF0ZUNvbmZpZ0NvbW1hbmRGaWVsZHMoKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cclxuXHR1cGRhdGVDb3B5SGVhZGluZ0ZpZWxkcygpIHtcclxuXHRcdGNvbnN0IHNldHRpbmdzID0gdGhpcy5wbHVnaW4uc2V0dGluZ3M7XHJcblx0XHRjb25zdCBpc1Zpc2libGUgPSBzZXR0aW5ncy5lbmFibGVDb3B5SGVhZGluZ0xpbms7XHJcblxyXG5cdFx0Ly8gVXBkYXRlIHRoZSBcIkRlZmF1bHQgaGVhZGluZyBsaW5rIGZvcm1hdFwiIHNldHRpbmcgZWxlbWVudCB2aXNpYmlsaXR5XHJcblx0XHRjb25zdCBjb250YWluZXJFbCA9IHRoaXMuY29udGFpbmVyRWw7XHJcblx0XHRjb25zdCBhbGxTZXR0aW5ncyA9IGNvbnRhaW5lckVsLnF1ZXJ5U2VsZWN0b3JBbGwoJy5zZXR0aW5nLWl0ZW0nKTtcclxuXHRcdGFsbFNldHRpbmdzLmZvckVhY2goKHNldHRpbmdFbCkgPT4ge1xyXG5cdFx0XHRjb25zdCBuYW1lRWwgPSBzZXR0aW5nRWwucXVlcnlTZWxlY3RvcignLnNldHRpbmctaXRlbS1uYW1lJyk7XHJcblx0XHRcdGlmIChuYW1lRWwgJiYgbmFtZUVsLnRleHRDb250ZW50Py50cmltKCkgPT09IFwiRGVmYXVsdCBoZWFkaW5nIGxpbmsgZm9ybWF0XCIpIHtcclxuXHRcdFx0XHRzZXR0aW5nRWwuY2xhc3NMaXN0LnRvZ2dsZShcImFzdHJvLWNvbXBvc2VyLXNldHRpbmctY29udGFpbmVyLXZpc2libGVcIiwgaXNWaXNpYmxlKTtcclxuXHRcdFx0XHRzZXR0aW5nRWwuY2xhc3NMaXN0LnRvZ2dsZShcImFzdHJvLWNvbXBvc2VyLXNldHRpbmctY29udGFpbmVyLWhpZGRlblwiLCAhaXNWaXNpYmxlKTtcclxuXHRcdFx0fVxyXG5cdFx0fSk7XHJcblx0fVxyXG5cclxuXHR1cGRhdGVUZXJtaW5hbENvbW1hbmRGaWVsZHMoKSB7XHJcblx0XHRjb25zdCBzZXR0aW5ncyA9IHRoaXMucGx1Z2luLnNldHRpbmdzO1xyXG5cdFx0Y29uc3QgaXNWaXNpYmxlID0gc2V0dGluZ3MuZW5hYmxlT3BlblRlcm1pbmFsQ29tbWFuZDtcclxuXHJcblx0XHQvLyBVcGRhdGUgY29udGFpbmVyIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5XHJcblx0XHRpZiAodGhpcy50ZXJtaW5hbENvbW1hbmRDb250YWluZXIpIHtcclxuXHRcdFx0dGhpcy50ZXJtaW5hbENvbW1hbmRDb250YWluZXIuY2xhc3NMaXN0LnRvZ2dsZShcImFzdHJvLWNvbXBvc2VyLXNldHRpbmctY29udGFpbmVyLXZpc2libGVcIiwgaXNWaXNpYmxlKTtcclxuXHRcdFx0dGhpcy50ZXJtaW5hbENvbW1hbmRDb250YWluZXIuY2xhc3NMaXN0LnRvZ2dsZShcImFzdHJvLWNvbXBvc2VyLXNldHRpbmctY29udGFpbmVyLWhpZGRlblwiLCAhaXNWaXNpYmxlKTtcclxuXHRcdH1cclxuXHJcblx0XHQvLyBVcGRhdGUgaW5kaXZpZHVhbCBzZXR0aW5nIGVsZW1lbnRzIHRoYXQgYXJlIGluIHRoZSBncm91cFxyXG5cdFx0Ly8gRmluZCBzZXR0aW5ncyBieSB0aGVpciBuYW1lIHRleHQgY29udGVudFxyXG5cdFx0Y29uc3QgY29udGFpbmVyRWwgPSB0aGlzLmNvbnRhaW5lckVsO1xyXG5cdFx0Y29uc3QgYWxsU2V0dGluZ3MgPSBjb250YWluZXJFbC5xdWVyeVNlbGVjdG9yQWxsKCcuc2V0dGluZy1pdGVtJyk7XHJcblx0XHRhbGxTZXR0aW5ncy5mb3JFYWNoKChzZXR0aW5nRWwpID0+IHtcclxuXHRcdFx0Y29uc3QgbmFtZUVsID0gc2V0dGluZ0VsLnF1ZXJ5U2VsZWN0b3IoJy5zZXR0aW5nLWl0ZW0tbmFtZScpO1xyXG5cdFx0XHRpZiAobmFtZUVsKSB7XHJcblx0XHRcdFx0Y29uc3QgbmFtZSA9IG5hbWVFbC50ZXh0Q29udGVudD8udHJpbSgpO1xyXG5cdFx0XHRcdGlmIChuYW1lID09PSBcIlByb2plY3Qgcm9vdCBkaXJlY3RvcnkgcGF0aFwiIHx8IG5hbWUgPT09IFwiU2hvdyBvcGVuIHRlcm1pbmFsIHJpYmJvbiBpY29uXCIpIHtcclxuXHRcdFx0XHRcdHNldHRpbmdFbC5jbGFzc0xpc3QudG9nZ2xlKFwiYXN0cm8tY29tcG9zZXItc2V0dGluZy1jb250YWluZXItdmlzaWJsZVwiLCBpc1Zpc2libGUpO1xyXG5cdFx0XHRcdFx0c2V0dGluZ0VsLmNsYXNzTGlzdC50b2dnbGUoXCJhc3Ryby1jb21wb3Nlci1zZXR0aW5nLWNvbnRhaW5lci1oaWRkZW5cIiwgIWlzVmlzaWJsZSk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9KTtcclxuXHJcblx0XHQvLyBVcGRhdGUgcmliYm9uIHRvZ2dsZSBkaXNhYmxlZCBzdGF0ZSB1c2luZyB0aGUgdG9nZ2xlIGNvbXBvbmVudFxyXG5cdFx0aWYgKHRoaXMudGVybWluYWxSaWJib25Ub2dnbGVDb21wb25lbnQpIHtcclxuXHRcdFx0dGhpcy50ZXJtaW5hbFJpYmJvblRvZ2dsZUNvbXBvbmVudC5zZXREaXNhYmxlZCghdGhpcy5wbHVnaW4uc2V0dGluZ3MuZW5hYmxlT3BlblRlcm1pbmFsQ29tbWFuZCk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHR1cGRhdGVDb25maWdDb21tYW5kRmllbGRzKCkge1xyXG5cdFx0Y29uc3Qgc2V0dGluZ3MgPSB0aGlzLnBsdWdpbi5zZXR0aW5ncztcclxuXHRcdGNvbnN0IGlzVmlzaWJsZSA9IHNldHRpbmdzLmVuYWJsZU9wZW5Db25maWdGaWxlQ29tbWFuZDtcclxuXHJcblx0XHQvLyBVcGRhdGUgY29udGFpbmVyIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5XHJcblx0XHRpZiAodGhpcy5jb25maWdDb21tYW5kQ29udGFpbmVyKSB7XHJcblx0XHRcdHRoaXMuY29uZmlnQ29tbWFuZENvbnRhaW5lci5jbGFzc0xpc3QudG9nZ2xlKFwiYXN0cm8tY29tcG9zZXItc2V0dGluZy1jb250YWluZXItdmlzaWJsZVwiLCBpc1Zpc2libGUpO1xyXG5cdFx0XHR0aGlzLmNvbmZpZ0NvbW1hbmRDb250YWluZXIuY2xhc3NMaXN0LnRvZ2dsZShcImFzdHJvLWNvbXBvc2VyLXNldHRpbmctY29udGFpbmVyLWhpZGRlblwiLCAhaXNWaXNpYmxlKTtcclxuXHRcdH1cclxuXHJcblx0XHQvLyBVcGRhdGUgaW5kaXZpZHVhbCBzZXR0aW5nIGVsZW1lbnRzIHRoYXQgYXJlIGluIHRoZSBncm91cFxyXG5cdFx0Ly8gRmluZCBzZXR0aW5ncyBieSB0aGVpciBuYW1lIHRleHQgY29udGVudFxyXG5cdFx0Y29uc3QgY29udGFpbmVyRWwgPSB0aGlzLmNvbnRhaW5lckVsO1xyXG5cdFx0Y29uc3QgYWxsU2V0dGluZ3MgPSBjb250YWluZXJFbC5xdWVyeVNlbGVjdG9yQWxsKCcuc2V0dGluZy1pdGVtJyk7XHJcblx0XHRhbGxTZXR0aW5ncy5mb3JFYWNoKChzZXR0aW5nRWwpID0+IHtcclxuXHRcdFx0Y29uc3QgbmFtZUVsID0gc2V0dGluZ0VsLnF1ZXJ5U2VsZWN0b3IoJy5zZXR0aW5nLWl0ZW0tbmFtZScpO1xyXG5cdFx0XHRpZiAobmFtZUVsKSB7XHJcblx0XHRcdFx0Y29uc3QgbmFtZSA9IG5hbWVFbC50ZXh0Q29udGVudD8udHJpbSgpO1xyXG5cdFx0XHRcdGlmIChuYW1lID09PSBcIkNvbmZpZyBmaWxlIHBhdGhcIiB8fCBuYW1lID09PSBcIlNob3cgb3BlbiBjb25maWcgcmliYm9uIGljb25cIikge1xyXG5cdFx0XHRcdFx0c2V0dGluZ0VsLmNsYXNzTGlzdC50b2dnbGUoXCJhc3Ryby1jb21wb3Nlci1zZXR0aW5nLWNvbnRhaW5lci12aXNpYmxlXCIsIGlzVmlzaWJsZSk7XHJcblx0XHRcdFx0XHRzZXR0aW5nRWwuY2xhc3NMaXN0LnRvZ2dsZShcImFzdHJvLWNvbXBvc2VyLXNldHRpbmctY29udGFpbmVyLWhpZGRlblwiLCAhaXNWaXNpYmxlKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH0pO1xyXG5cclxuXHRcdC8vIFVwZGF0ZSByaWJib24gdG9nZ2xlIGRpc2FibGVkIHN0YXRlIHVzaW5nIHRoZSB0b2dnbGUgY29tcG9uZW50XHJcblx0XHRpZiAodGhpcy5jb25maWdSaWJib25Ub2dnbGVDb21wb25lbnQpIHtcclxuXHRcdFx0dGhpcy5jb25maWdSaWJib25Ub2dnbGVDb21wb25lbnQuc2V0RGlzYWJsZWQoIXRoaXMucGx1Z2luLnNldHRpbmdzLmVuYWJsZU9wZW5Db25maWdGaWxlQ29tbWFuZCk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRjaGVja0ZvckZvbGRlckNvbmZsaWN0cygpIHtcclxuXHRcdGNvbnN0IHNldHRpbmdzID0gdGhpcy5wbHVnaW4uc2V0dGluZ3M7XHJcblx0XHRjb25zdCBibGFua0ZvbGRlcnM6IHN0cmluZ1tdID0gW107XHJcblx0XHRjb25zdCBmb2xkZXJDb25mbGljdHM6IHsgW2ZvbGRlcjogc3RyaW5nXTogc3RyaW5nW10gfSA9IHt9O1xyXG5cclxuXHRcdC8vIENoZWNrIGNvbnRlbnQgdHlwZXNcclxuXHRcdGNvbnN0IGNvbnRlbnRUeXBlcyA9IHNldHRpbmdzLmNvbnRlbnRUeXBlcyB8fCBbXTtcclxuXHRcdGZvciAoY29uc3QgY29udGVudFR5cGUgb2YgY29udGVudFR5cGVzKSB7XHJcblx0XHRcdGlmIChjb250ZW50VHlwZS5lbmFibGVkKSB7XHJcblx0XHRcdFx0aWYgKCFjb250ZW50VHlwZS5mb2xkZXIgfHwgY29udGVudFR5cGUuZm9sZGVyLnRyaW0oKSA9PT0gXCJcIikge1xyXG5cdFx0XHRcdFx0YmxhbmtGb2xkZXJzLnB1c2goY29udGVudFR5cGUubmFtZSB8fCBcIkNvbnRlbnRcIik7XHJcblx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdGlmICghZm9sZGVyQ29uZmxpY3RzW2NvbnRlbnRUeXBlLmZvbGRlcl0pIHtcclxuXHRcdFx0XHRcdFx0Zm9sZGVyQ29uZmxpY3RzW2NvbnRlbnRUeXBlLmZvbGRlcl0gPSBbXTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdGZvbGRlckNvbmZsaWN0c1tjb250ZW50VHlwZS5mb2xkZXJdLnB1c2goY29udGVudFR5cGUubmFtZSB8fCBcIkNvbnRlbnRcIik7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gQ2hlY2sgZm9yIGNvbmZsaWN0c1xyXG5cdFx0Ly8gV2FybmluZyBib3ggcmVtb3ZlZCAtIGNvbmZsaWN0cyBhcmUgc3RpbGwgZGV0ZWN0ZWQgYXQgcnVudGltZVxyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBhZGRDdXN0b21Db250ZW50VHlwZSgpIHtcclxuXHRcdGNvbnN0IHNldHRpbmdzID0gdGhpcy5wbHVnaW4uc2V0dGluZ3M7XHJcblx0XHRjb25zdCBjb250ZW50VHlwZXMgPSBzZXR0aW5ncy5jb250ZW50VHlwZXMgfHwgW107XHJcblx0XHRjb25zdCBuZXdUeXBlOiBDb250ZW50VHlwZSA9IHtcclxuXHRcdFx0aWQ6IGBjb250ZW50LSR7RGF0ZS5ub3coKX1gLFxyXG5cdFx0XHRuYW1lOiBgQ29udGVudCAke2NvbnRlbnRUeXBlcy5sZW5ndGggKyAxfWAsXHJcblx0XHRcdGZvbGRlcjogXCJcIixcclxuXHRcdFx0bGlua0Jhc2VQYXRoOiBcIlwiLFxyXG5cdFx0XHR0ZW1wbGF0ZTogJy0tLVxcbnRpdGxlOiBcInt7dGl0bGV9fVwiXFxuZGF0ZToge3tkYXRlfX1cXG4tLS1cXG4nLFxyXG5cdFx0XHRlbmFibGVkOiB0cnVlLFxyXG5cdFx0XHRjcmVhdGlvbk1vZGU6IFwiZmlsZVwiLFxyXG5cdFx0XHRpbmRleEZpbGVOYW1lOiBcIlwiLFxyXG5cdFx0XHRpZ25vcmVTdWJmb2xkZXJzOiBmYWxzZSxcclxuXHRcdFx0ZW5hYmxlVW5kZXJzY29yZVByZWZpeDogZmFsc2UsXHJcblx0XHRcdHVzZU1keEV4dGVuc2lvbjogZmFsc2UsXHJcblx0XHRcdG1vZGlmaWVkRGF0ZUZpZWxkOiBcIlwiLFxyXG5cdFx0fTtcclxuXHRcdGNvbnRlbnRUeXBlcy5wdXNoKG5ld1R5cGUpO1xyXG5cdFx0c2V0dGluZ3MuY29udGVudFR5cGVzID0gY29udGVudFR5cGVzO1xyXG5cdFx0dm9pZCB0aGlzLnBsdWdpbi5zYXZlU2V0dGluZ3MoKTtcclxuXHRcdHRoaXMucmVuZGVyQ3VzdG9tQ29udGVudFR5cGVzKCk7XHJcblx0XHR0aGlzLnBsdWdpbi5yZWdpc3RlckNyZWF0ZUV2ZW50KCk7XHJcblx0XHQvLyBSZS1yZWdpc3RlciBjb250ZW50IHR5cGUgY29tbWFuZHMgdG8gaW5jbHVkZSB0aGUgbmV3IHR5cGVcclxuXHRcdHJlZ2lzdGVyQ29udGVudFR5cGVDb21tYW5kcyh0aGlzLnBsdWdpbiBhcyB1bmtub3duIGFzIFBsdWdpbiwgc2V0dGluZ3MpO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSByZW5kZXJDdXN0b21Db250ZW50VHlwZXMoKSB7XHJcblx0XHRpZiAoIXRoaXMuY3VzdG9tQ29udGVudFR5cGVzQ29udGFpbmVyKSByZXR1cm47XHJcblxyXG5cdFx0dGhpcy5jdXN0b21Db250ZW50VHlwZXNDb250YWluZXIuZW1wdHkoKTtcclxuXHJcblx0XHQvLyBBbHdheXMgcmVhZCBmcmVzaCBzZXR0aW5ncyBmcm9tIHBsdWdpbiB0byBlbnN1cmUgd2UgaGF2ZSBsYXRlc3QgZGF0YVxyXG5cdFx0Ly8gVGhpcyBpcyBjcml0aWNhbCBhZnRlciBtaWdyYXRpb25cclxuXHRcdGNvbnN0IHNldHRpbmdzID0gdGhpcy5wbHVnaW4uc2V0dGluZ3M7XHJcblx0XHRjb25zdCBjb250ZW50VHlwZXMgPSBzZXR0aW5ncy5jb250ZW50VHlwZXMgfHwgW107XHJcblx0XHRjb250ZW50VHlwZXMuZm9yRWFjaCgoY3VzdG9tVHlwZTogQ29udGVudFR5cGUsIGluZGV4OiBudW1iZXIpID0+IHtcclxuXHRcdFx0aWYgKCF0aGlzLmN1c3RvbUNvbnRlbnRUeXBlc0NvbnRhaW5lcikgcmV0dXJuO1xyXG5cdFx0XHRjb25zdCB0eXBlQ29udGFpbmVyID0gdGhpcy5jdXN0b21Db250ZW50VHlwZXNDb250YWluZXIuY3JlYXRlRGl2KHtcclxuXHRcdFx0XHRjbHM6IFwiY3VzdG9tLWNvbnRlbnQtdHlwZS1pdGVtXCIsXHJcblx0XHRcdFx0YXR0cjogeyBcImRhdGEtdHlwZS1pZFwiOiBjdXN0b21UeXBlLmlkIH1cclxuXHRcdFx0fSk7XHJcblxyXG5cdFx0XHQvLyBIZWFkZXIgd2l0aCBjb250cm9sc1xyXG5cdFx0XHRjb25zdCBoZWFkZXIgPSB0eXBlQ29udGFpbmVyLmNyZWF0ZURpdih7IGNsczogXCJjdXN0b20tY29udGVudC10eXBlLWhlYWRlclwiIH0pO1xyXG5cdFx0XHRoZWFkZXIuY2xhc3NMaXN0LmFkZChcImFzdHJvLWNvbXBvc2VyLWN1c3RvbS10eXBlLWhlYWRlclwiKTtcclxuXHJcblx0XHRcdC8vIExlZnQgc2lkZSAtIGNvbGxhcHNlL2V4cGFuZCBidXR0b25cclxuXHRcdFx0Y29uc3QgY29sbGFwc2VCdXR0b24gPSBoZWFkZXIuY3JlYXRlRWwoXCJidXR0b25cIiwge1xyXG5cdFx0XHRcdGNsczogXCJhc3Ryby1jb21wb3Nlci1jb2xsYXBzZS1idXR0b25cIixcclxuXHRcdFx0XHRhdHRyOiB7IFwiYXJpYS1sYWJlbFwiOiBcIkNvbGxhcHNlL2V4cGFuZFwiIH1cclxuXHRcdFx0fSk7XHJcblx0XHRcdGNvbnN0IGlzQ29sbGFwc2VkID0gY3VzdG9tVHlwZS5jb2xsYXBzZWQgPz8gZmFsc2U7XHJcblx0XHRcdC8vIEFsd2F5cyB1c2UgY2hldnJvbi1kb3duLCByb3RhdGUgaXQgd2hlbiBjb2xsYXBzZWQgdG8gcG9pbnQgcmlnaHRcclxuXHRcdFx0c2V0SWNvbihjb2xsYXBzZUJ1dHRvbiwgXCJjaGV2cm9uLWRvd25cIik7XHJcblx0XHRcdGlmIChpc0NvbGxhcHNlZCkge1xyXG5cdFx0XHRcdGNvbGxhcHNlQnV0dG9uLmNsYXNzTGlzdC5hZGQoXCJpcy1jb2xsYXBzZWRcIik7XHJcblx0XHRcdH1cclxuXHRcdFx0Y29sbGFwc2VCdXR0b24uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsICgpID0+IHtcclxuXHRcdFx0XHR2b2lkIHRoaXMudG9nZ2xlQ29udGVudFR5cGVDb2xsYXBzZShjdXN0b21UeXBlLmlkKTtcclxuXHRcdFx0XHQvLyBVcGRhdGUgY2xhc3MgYWZ0ZXIgdG9nZ2xlIChpY29uIHN0YXlzIHRoZSBzYW1lLCBqdXN0IHJvdGF0ZXMpXHJcblx0XHRcdFx0Y29uc3QgdXBkYXRlZFR5cGUgPSB0aGlzLnBsdWdpbi5zZXR0aW5ncy5jb250ZW50VHlwZXMuZmluZCgoY3Q6IENvbnRlbnRUeXBlKSA9PiBjdC5pZCA9PT0gY3VzdG9tVHlwZS5pZCk7XHJcblx0XHRcdFx0aWYgKHVwZGF0ZWRUeXBlKSB7XHJcblx0XHRcdFx0XHRpZiAodXBkYXRlZFR5cGUuY29sbGFwc2VkKSB7XHJcblx0XHRcdFx0XHRcdGNvbGxhcHNlQnV0dG9uLmNsYXNzTGlzdC5hZGQoXCJpcy1jb2xsYXBzZWRcIik7XHJcblx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRjb2xsYXBzZUJ1dHRvbi5jbGFzc0xpc3QucmVtb3ZlKFwiaXMtY29sbGFwc2VkXCIpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSk7XHJcblxyXG5cdFx0XHQvLyBNaWRkbGUgbGVmdCAtIGNvbnRlbnQgdHlwZSBuYW1lXHJcblx0XHRcdGNvbnN0IGhlYWRlck5hbWUgPSBoZWFkZXIuY3JlYXRlRGl2KHsgY2xzOiBcImFzdHJvLWNvbXBvc2VyLWhlYWRlci1uYW1lXCIgfSk7XHJcblx0XHRcdGhlYWRlck5hbWUuY3JlYXRlRWwoXCJkaXZcIiwgeyB0ZXh0OiBjdXN0b21UeXBlLm5hbWUgfHwgYENvbnRlbnQgJHtpbmRleCArIDF9YCwgY2xzOiBcInNldHRpbmctaXRlbS1uYW1lXCIgfSk7XHJcblxyXG5cdFx0XHQvLyBNaWRkbGUgcmlnaHQgLSB1cC9kb3duIGJ1dHRvbnMgKHNpZGUtYnktc2lkZSlcclxuXHRcdFx0Y29uc3QgcmVvcmRlckNvbnRhaW5lciA9IGhlYWRlci5jcmVhdGVEaXYoeyBjbHM6IFwiYXN0cm8tY29tcG9zZXItcmVvcmRlci1idXR0b25zXCIgfSk7XHJcblx0XHRcdGNvbnN0IHVwQnV0dG9uID0gcmVvcmRlckNvbnRhaW5lci5jcmVhdGVFbChcImJ1dHRvblwiLCB7XHJcblx0XHRcdFx0Y2xzOiBcImFzdHJvLWNvbXBvc2VyLXJlb3JkZXItYnV0dG9uXCIsXHJcblx0XHRcdFx0YXR0cjogeyBcImFyaWEtbGFiZWxcIjogXCJNb3ZlIHVwXCIgfVxyXG5cdFx0XHR9KTtcclxuXHRcdFx0c2V0SWNvbih1cEJ1dHRvbiwgXCJjaGV2cm9uLXVwXCIpO1xyXG5cdFx0XHR1cEJ1dHRvbi5kaXNhYmxlZCA9IGluZGV4ID09PSAwO1xyXG5cdFx0XHR1cEJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKCkgPT4ge1xyXG5cdFx0XHRcdHZvaWQgdGhpcy5tb3ZlQ29udGVudFR5cGVVcChjdXN0b21UeXBlLmlkKTtcclxuXHRcdFx0fSk7XHJcblxyXG5cdFx0XHRjb25zdCBkb3duQnV0dG9uID0gcmVvcmRlckNvbnRhaW5lci5jcmVhdGVFbChcImJ1dHRvblwiLCB7XHJcblx0XHRcdFx0Y2xzOiBcImFzdHJvLWNvbXBvc2VyLXJlb3JkZXItYnV0dG9uXCIsXHJcblx0XHRcdFx0YXR0cjogeyBcImFyaWEtbGFiZWxcIjogXCJNb3ZlIGRvd25cIiB9XHJcblx0XHRcdH0pO1xyXG5cdFx0XHRzZXRJY29uKGRvd25CdXR0b24sIFwiY2hldnJvbi1kb3duXCIpO1xyXG5cdFx0XHRkb3duQnV0dG9uLmRpc2FibGVkID0gaW5kZXggPT09IGNvbnRlbnRUeXBlcy5sZW5ndGggLSAxO1xyXG5cdFx0XHRkb3duQnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PiB7XHJcblx0XHRcdFx0dm9pZCB0aGlzLm1vdmVDb250ZW50VHlwZURvd24oY3VzdG9tVHlwZS5pZCk7XHJcblx0XHRcdH0pO1xyXG5cclxuXHRcdFx0Ly8gUmlnaHQgc2lkZSAtIHRvZ2dsZVxyXG5cdFx0XHRjb25zdCB0b2dnbGVDb250YWluZXIgPSBoZWFkZXIuY3JlYXRlRGl2KHsgY2xzOiBcImNoZWNrYm94LWNvbnRhaW5lclwiIH0pO1xyXG5cdFx0XHRpZiAoY3VzdG9tVHlwZS5lbmFibGVkKSB7XHJcblx0XHRcdFx0dG9nZ2xlQ29udGFpbmVyLmNsYXNzTGlzdC5hZGQoXCJpcy1lbmFibGVkXCIpO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRjb25zdCB0b2dnbGUgPSB0b2dnbGVDb250YWluZXIuY3JlYXRlRWwoXCJpbnB1dFwiLCB7IHR5cGU6IFwiY2hlY2tib3hcIiwgY2xzOiBcImNoZWNrYm94LWlucHV0XCIgfSk7XHJcblx0XHRcdHRvZ2dsZS5jaGVja2VkID0gY3VzdG9tVHlwZS5lbmFibGVkO1xyXG5cclxuXHRcdFx0Ly8gQWRkIGNsaWNrIGV2ZW50IHRvIHRoZSBjb250YWluZXIgYXMgd2VsbFxyXG5cdFx0XHR0b2dnbGVDb250YWluZXIuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIChlKSA9PiB7XHJcblx0XHRcdFx0dm9pZCAoYXN5bmMgKCkgPT4ge1xyXG5cdFx0XHRcdFx0ZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG5cdFx0XHRcdFx0Y29uc3QgbmV3VmFsdWUgPSAhY3VzdG9tVHlwZS5lbmFibGVkO1xyXG5cdFx0XHRcdFx0Y3VzdG9tVHlwZS5lbmFibGVkID0gbmV3VmFsdWU7XHJcblx0XHRcdFx0XHR0b2dnbGUuY2hlY2tlZCA9IG5ld1ZhbHVlO1xyXG5cclxuXHRcdFx0XHRcdGF3YWl0IHRoaXMucGx1Z2luLnNhdmVTZXR0aW5ncygpO1xyXG5cdFx0XHRcdFx0dGhpcy5wbHVnaW4ucmVnaXN0ZXJDcmVhdGVFdmVudCgpO1xyXG5cclxuXHRcdFx0XHRcdC8vIFVwZGF0ZSB0aGUgY29udGFpbmVyIGNsYXNzIGZvciB2aXN1YWwgZmVlZGJhY2tcclxuXHRcdFx0XHRcdGlmIChuZXdWYWx1ZSkge1xyXG5cdFx0XHRcdFx0XHR0b2dnbGVDb250YWluZXIuY2xhc3NMaXN0LmFkZChcImlzLWVuYWJsZWRcIik7XHJcblx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHR0b2dnbGVDb250YWluZXIuY2xhc3NMaXN0LnJlbW92ZShcImlzLWVuYWJsZWRcIik7XHJcblx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0Ly8gVXBkYXRlIHZpc2liaWxpdHlcclxuXHRcdFx0XHRcdHRoaXMudXBkYXRlQ3VzdG9tQ29udGVudFR5cGVWaXNpYmlsaXR5KGN1c3RvbVR5cGUuaWQsIG5ld1ZhbHVlKTtcclxuXHJcblx0XHRcdFx0XHQvLyBSZS1yZWdpc3RlciBjb250ZW50IHR5cGUgY29tbWFuZHMgdG8gcmVmbGVjdCBlbmFibGVkL2Rpc2FibGVkIHN0YXRlXHJcblx0XHRcdFx0XHRyZWdpc3RlckNvbnRlbnRUeXBlQ29tbWFuZHModGhpcy5wbHVnaW4gYXMgdW5rbm93biBhcyBQbHVnaW4sIHRoaXMucGx1Z2luLnNldHRpbmdzKTtcclxuXHJcblx0XHRcdFx0XHQvLyBDb25mbGljdCBjaGVja2luZyByZW1vdmVkIGZyb20gc2V0dGluZ3MgVUlcclxuXHRcdFx0XHR9KSgpO1xyXG5cdFx0XHR9KTtcclxuXHJcblx0XHRcdC8vIEFsc28gYWRkIGNoYW5nZSBldmVudCBhcyBiYWNrdXBcclxuXHRcdFx0dG9nZ2xlLmFkZEV2ZW50TGlzdGVuZXIoXCJjaGFuZ2VcIiwgKGUpID0+IHtcclxuXHRcdFx0XHR2b2lkIChhc3luYyAoKSA9PiB7XHJcblx0XHRcdFx0XHRjb25zdCB2YWx1ZSA9IChlLnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50KS5jaGVja2VkO1xyXG5cdFx0XHRcdFx0Y3VzdG9tVHlwZS5lbmFibGVkID0gdmFsdWU7XHJcblx0XHRcdFx0XHRhd2FpdCB0aGlzLnBsdWdpbi5zYXZlU2V0dGluZ3MoKTtcclxuXHRcdFx0XHRcdHRoaXMucGx1Z2luLnJlZ2lzdGVyQ3JlYXRlRXZlbnQoKTtcclxuXHJcblx0XHRcdFx0XHQvLyBVcGRhdGUgdGhlIGNvbnRhaW5lciBjbGFzcyBmb3IgdmlzdWFsIGZlZWRiYWNrXHJcblx0XHRcdFx0XHRpZiAodmFsdWUpIHtcclxuXHRcdFx0XHRcdFx0dG9nZ2xlQ29udGFpbmVyLmNsYXNzTGlzdC5hZGQoXCJpcy1lbmFibGVkXCIpO1xyXG5cdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0dG9nZ2xlQ29udGFpbmVyLmNsYXNzTGlzdC5yZW1vdmUoXCJpcy1lbmFibGVkXCIpO1xyXG5cdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdC8vIFVwZGF0ZSB2aXNpYmlsaXR5XHJcblx0XHRcdFx0XHR0aGlzLnVwZGF0ZUN1c3RvbUNvbnRlbnRUeXBlVmlzaWJpbGl0eShjdXN0b21UeXBlLmlkLCB2YWx1ZSk7XHJcblxyXG5cdFx0XHRcdFx0Ly8gUmUtcmVnaXN0ZXIgY29udGVudCB0eXBlIGNvbW1hbmRzIHRvIHJlZmxlY3QgZW5hYmxlZC9kaXNhYmxlZCBzdGF0ZVxyXG5cdFx0XHRcdFx0cmVnaXN0ZXJDb250ZW50VHlwZUNvbW1hbmRzKHRoaXMucGx1Z2luIGFzIHVua25vd24gYXMgUGx1Z2luLCB0aGlzLnBsdWdpbi5zZXR0aW5ncyk7XHJcblx0XHRcdFx0fSkoKTtcclxuXHRcdFx0fSk7XHJcblxyXG5cdFx0XHQvLyBTZXR0aW5ncyBjb250YWluZXIgdGhhdCBjYW4gYmUgY29sbGFwc2VkXHJcblx0XHRcdGNvbnN0IHNldHRpbmdzQ29udGFpbmVyID0gdHlwZUNvbnRhaW5lci5jcmVhdGVEaXYoe1xyXG5cdFx0XHRcdGNsczogXCJjdXN0b20tY29udGVudC10eXBlLXNldHRpbmdzXCIsXHJcblx0XHRcdFx0YXR0cjogeyBcImRhdGEtdHlwZS1pZFwiOiBjdXN0b21UeXBlLmlkIH1cclxuXHRcdFx0fSk7XHJcblxyXG5cdFx0XHQvLyBTZXQgaW5pdGlhbCB2aXNpYmlsaXR5IHN0YXRlIGJhc2VkIG9uIGVuYWJsZWQgYW5kIGNvbGxhcHNlZCBzdGF0ZVxyXG5cdFx0XHRjb25zdCBpbml0aWFsbHlDb2xsYXBzZWQgPSBjdXN0b21UeXBlLmNvbGxhcHNlZCA/PyBmYWxzZTtcclxuXHRcdFx0Y29uc3QgaW5pdGlhbGx5VmlzaWJsZSA9IGN1c3RvbVR5cGUuZW5hYmxlZCAmJiAhaW5pdGlhbGx5Q29sbGFwc2VkO1xyXG5cdFx0XHRpZiAoaW5pdGlhbGx5VmlzaWJsZSkge1xyXG5cdFx0XHRcdHNldHRpbmdzQ29udGFpbmVyLmNsYXNzTGlzdC5hZGQoXCJhc3Ryby1jb21wb3Nlci1zZXR0aW5nLWNvbnRhaW5lci12aXNpYmxlXCIpO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdHNldHRpbmdzQ29udGFpbmVyLmNsYXNzTGlzdC5hZGQoXCJhc3Ryby1jb21wb3Nlci1zZXR0aW5nLWNvbnRhaW5lci1oaWRkZW5cIik7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdC8vIENvbnRlbnQgdHlwZSBuYW1lXHJcblx0XHRcdGNvbnN0IG5hbWVDb250YWluZXIgPSBzZXR0aW5nc0NvbnRhaW5lci5jcmVhdGVEaXYoKTtcclxuXHRcdFx0bmV3IFNldHRpbmcobmFtZUNvbnRhaW5lcilcclxuXHRcdFx0XHQuc2V0TmFtZShcIkNvbnRlbnQgdHlwZSBuYW1lXCIpXHJcblx0XHRcdFx0LnNldERlc2MoXCJEaXNwbGF5IG5hbWUgZm9yIHRoaXMgY29udGVudCB0eXBlIChlLmcuLCAncHJvamVjdHMnLCAnbm90ZXMnLCAndHV0b3JpYWxzJylcIilcclxuXHRcdFx0XHQuYWRkVGV4dCgodGV4dCkgPT4ge1xyXG5cdFx0XHRcdFx0dGV4dFxyXG5cdFx0XHRcdFx0XHQuc2V0UGxhY2Vob2xkZXIoXCJFbnRlciBjb250ZW50IHR5cGUgbmFtZVwiKVxyXG5cdFx0XHRcdFx0XHQuc2V0VmFsdWUoY3VzdG9tVHlwZS5uYW1lKVxyXG5cdFx0XHRcdFx0XHQub25DaGFuZ2UoYXN5bmMgKHZhbHVlOiBzdHJpbmcpID0+IHtcclxuXHRcdFx0XHRcdFx0XHRjdXN0b21UeXBlLm5hbWUgPSB2YWx1ZTtcclxuXHRcdFx0XHRcdFx0XHRhd2FpdCB0aGlzLnBsdWdpbi5zYXZlU2V0dGluZ3MoKTtcclxuXHRcdFx0XHRcdFx0XHQvLyBSZS1yZWdpc3RlciBjb250ZW50IHR5cGUgY29tbWFuZHMgdG8gdXBkYXRlIGNvbW1hbmQgbmFtZVxyXG5cdFx0XHRcdFx0XHRcdHJlZ2lzdGVyQ29udGVudFR5cGVDb21tYW5kcyh0aGlzLnBsdWdpbiBhcyB1bmtub3duIGFzIFBsdWdpbiwgdGhpcy5wbHVnaW4uc2V0dGluZ3MpO1xyXG5cdFx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHR9KTtcclxuXHJcblx0XHRcdC8vIEZvbGRlciBsb2NhdGlvblxyXG5cdFx0XHRjb25zdCBmb2xkZXJDb250YWluZXIgPSBzZXR0aW5nc0NvbnRhaW5lci5jcmVhdGVEaXYoKTtcclxuXHRcdFx0Y29uc3QgZm9sZGVyU2V0dGluZyA9IG5ldyBTZXR0aW5nKGZvbGRlckNvbnRhaW5lcilcclxuXHRcdFx0XHQuc2V0TmFtZShcIkZvbGRlciBsb2NhdGlvblwiKVxyXG5cdFx0XHRcdC5zZXREZXNjKFwiRm9sZGVyIHBhdGggd2hlcmUgdGhpcyBjb250ZW50IHR5cGUgd2lsbCBiZSBjcmVhdGVkLiBMZWF2ZSBibGFuayB0byB1c2UgdGhlIHZhdWx0IGZvbGRlci4gU3VwcG9ydHMgd2lsZGNhcmRzIGxpa2UgZGlyZWN0b3J5Lyogb3IgZGlyZWN0b3J5LyovKiB0byBtYXRjaCBzcGVjaWZpYyBmb2xkZXIgZGVwdGhzLlwiKVxyXG5cdFx0XHRcdC5hZGRUZXh0KCh0ZXh0KSA9PiB7XHJcblx0XHRcdFx0XHR0ZXh0XHJcblx0XHRcdFx0XHRcdC5zZXRQbGFjZWhvbGRlcihcIkVudGVyIGZvbGRlciBwYXRoIChlLmcuLCAnZG9jcycsICdkb2NzLyonLCAnZG9jcy8qLyonKSBvciBsZWF2ZSBibGFuayBmb3IgdmF1bHQgcm9vdFwiKVxyXG5cdFx0XHRcdFx0XHQuc2V0VmFsdWUoY3VzdG9tVHlwZS5mb2xkZXIpXHJcblx0XHRcdFx0XHRcdC5vbkNoYW5nZShhc3luYyAodmFsdWU6IHN0cmluZykgPT4ge1xyXG5cdFx0XHRcdFx0XHRcdGN1c3RvbVR5cGUuZm9sZGVyID0gdmFsdWU7XHJcblx0XHRcdFx0XHRcdFx0YXdhaXQgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7XHJcblx0XHRcdFx0XHRcdFx0dGhpcy5wbHVnaW4ucmVnaXN0ZXJDcmVhdGVFdmVudCgpO1xyXG5cdFx0XHRcdFx0XHRcdHRoaXMudXBkYXRlQ3VzdG9tQ29udGVudFR5cGVJZ25vcmVTdWJmb2xkZXJzRmllbGQoY3VzdG9tVHlwZS5pZCk7XHJcblx0XHRcdFx0XHRcdFx0Ly8gVXBkYXRlIGNvbmZsaWN0IHdhcm5pbmdzIGZvciBhbGwgY29udGVudCB0eXBlcyAoZm9sZGVyIGNoYW5nZSBtYXkgYWZmZWN0IG90aGVycylcclxuXHRcdFx0XHRcdFx0XHRjb25zdCBhbGxDb250ZW50VHlwZXMgPSB0aGlzLnBsdWdpbi5zZXR0aW5ncy5jb250ZW50VHlwZXMgfHwgW107XHJcblx0XHRcdFx0XHRcdFx0Zm9yIChjb25zdCBjdCBvZiBhbGxDb250ZW50VHlwZXMpIHtcclxuXHRcdFx0XHRcdFx0XHRcdHRoaXMudXBkYXRlRm9sZGVyQ29uZmxpY3RXYXJuaW5nKGN0LmlkLCBudWxsKTtcclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdH0pO1xyXG5cclxuXHRcdFx0Ly8gQWRkIGNvbmZsaWN0IHdhcm5pbmcgZWxlbWVudFxyXG5cdFx0XHRmb2xkZXJDb250YWluZXIuY3JlYXRlRGl2KHsgY2xzOiBcImFzdHJvLWNvbXBvc2VyLWNvbmZsaWN0LXdhcm5pbmcgaGlkZGVuXCIsIGF0dHI6IHsgXCJkYXRhLXR5cGUtaWRcIjogY3VzdG9tVHlwZS5pZCB9IH0pO1xyXG5cdFx0XHR0aGlzLnVwZGF0ZUZvbGRlckNvbmZsaWN0V2FybmluZyhjdXN0b21UeXBlLmlkLCBmb2xkZXJTZXR0aW5nKTtcclxuXHJcblx0XHRcdC8vIElnbm9yZSBzdWJmb2xkZXJzIChvbmx5IHNob3cgd2hlbiBmb2xkZXIgaXMgc2V0KVxyXG5cdFx0XHRjb25zdCBpZ25vcmVTdWJmb2xkZXJzQ29udGFpbmVyID0gc2V0dGluZ3NDb250YWluZXIuY3JlYXRlRGl2KHsgY2xzOiBcImN1c3RvbS1pZ25vcmUtc3ViZm9sZGVycy1maWVsZFwiIH0pO1xyXG5cdFx0XHRpZ25vcmVTdWJmb2xkZXJzQ29udGFpbmVyLnNldEF0dHJpYnV0ZShcImRhdGEtdHlwZS1pZFwiLCBjdXN0b21UeXBlLmlkKTtcclxuXHRcdFx0aWdub3JlU3ViZm9sZGVyc0NvbnRhaW5lci5jbGFzc0xpc3QudG9nZ2xlKFwiYXN0cm8tY29tcG9zZXItc2V0dGluZy1jb250YWluZXItdmlzaWJsZVwiLCAhIWN1c3RvbVR5cGUuZm9sZGVyKTtcclxuXHRcdFx0aWdub3JlU3ViZm9sZGVyc0NvbnRhaW5lci5jbGFzc0xpc3QudG9nZ2xlKFwiYXN0cm8tY29tcG9zZXItc2V0dGluZy1jb250YWluZXItaGlkZGVuXCIsICFjdXN0b21UeXBlLmZvbGRlcik7XHJcblx0XHRcdG5ldyBTZXR0aW5nKGlnbm9yZVN1YmZvbGRlcnNDb250YWluZXIpXHJcblx0XHRcdFx0LnNldE5hbWUoXCJJZ25vcmUgc3ViZm9sZGVyc1wiKVxyXG5cdFx0XHRcdC5zZXREZXNjKFwiV2hlbiBlbmFibGVkLCBhdXRvbWF0aW9uIHdpbGwgb25seSB0cmlnZ2VyIGZvciBuZXcgLm1kIGZpbGVzIHdpdGhpbiB0aGlzIGNvbnRlbnQgdHlwZSdzIGZvbGRlciBhbmQgb25lIGxldmVsIGRvd24gKGZvciBmb2xkZXItYmFzZWQgY29udGVudCkuIEZpbGVzIGluIGRlZXBlciBzdWJmb2xkZXJzIHdpbGwgYmUgaWdub3JlZC5cIilcclxuXHRcdFx0XHQuYWRkVG9nZ2xlKCh0b2dnbGUpID0+XHJcblx0XHRcdFx0XHR0b2dnbGVcclxuXHRcdFx0XHRcdFx0LnNldFZhbHVlKGN1c3RvbVR5cGUuaWdub3JlU3ViZm9sZGVycyB8fCBmYWxzZSlcclxuXHRcdFx0XHRcdFx0Lm9uQ2hhbmdlKGFzeW5jICh2YWx1ZTogYm9vbGVhbikgPT4ge1xyXG5cdFx0XHRcdFx0XHRcdGN1c3RvbVR5cGUuaWdub3JlU3ViZm9sZGVycyA9IHZhbHVlO1xyXG5cdFx0XHRcdFx0XHRcdGF3YWl0IHRoaXMucGx1Z2luLnNhdmVTZXR0aW5ncygpO1xyXG5cdFx0XHRcdFx0XHR9KVxyXG5cdFx0XHRcdCk7XHJcblxyXG5cdFx0XHQvLyBVbmRlcnNjb3JlIHByZWZpeFxyXG5cdFx0XHRjb25zdCB1bmRlcnNjb3JlUHJlZml4Q29udGFpbmVyID0gc2V0dGluZ3NDb250YWluZXIuY3JlYXRlRGl2KCk7XHJcblx0XHRcdG5ldyBTZXR0aW5nKHVuZGVyc2NvcmVQcmVmaXhDb250YWluZXIpXHJcblx0XHRcdFx0LnNldE5hbWUoXCJVc2UgdW5kZXJzY29yZSBwcmVmaXggZm9yIGRyYWZ0c1wiKVxyXG5cdFx0XHRcdC5zZXREZXNjKFwiQWRkIGFuIHVuZGVyc2NvcmUgcHJlZml4IChfY29udGVudC10aXRsZSkgdG8gbmV3IG5vdGVzIGJ5IGRlZmF1bHQgd2hlbiBlbmFibGVkLiBUaGlzIGhpZGVzIHRoZW0gZnJvbSBhc3Rybywgd2hpY2ggY2FuIGJlIGhlbHBmdWwgZm9yIGRyYWZ0c1wiKVxyXG5cdFx0XHRcdC5hZGRUb2dnbGUoKHRvZ2dsZSkgPT5cclxuXHRcdFx0XHRcdHRvZ2dsZVxyXG5cdFx0XHRcdFx0XHQuc2V0VmFsdWUoY3VzdG9tVHlwZS5lbmFibGVVbmRlcnNjb3JlUHJlZml4IHx8IGZhbHNlKVxyXG5cdFx0XHRcdFx0XHQub25DaGFuZ2UoYXN5bmMgKHZhbHVlOiBib29sZWFuKSA9PiB7XHJcblx0XHRcdFx0XHRcdFx0Y3VzdG9tVHlwZS5lbmFibGVVbmRlcnNjb3JlUHJlZml4ID0gdmFsdWU7XHJcblx0XHRcdFx0XHRcdFx0YXdhaXQgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7XHJcblx0XHRcdFx0XHRcdH0pXHJcblx0XHRcdFx0KTtcclxuXHJcblx0XHRcdC8vIExpbmsgYmFzZSBwYXRoXHJcblx0XHRcdGNvbnN0IGxpbmtDb250YWluZXIgPSBzZXR0aW5nc0NvbnRhaW5lci5jcmVhdGVEaXYoKTtcclxuXHRcdFx0bmV3IFNldHRpbmcobGlua0NvbnRhaW5lcilcclxuXHRcdFx0XHQuc2V0TmFtZShcIkxpbmsgYmFzZSBwYXRoXCIpXHJcblx0XHRcdFx0LnNldERlc2MoXCJCYXNlIHBhdGggZm9yIGNvbnZlcnRlZCBsaW5rcyAoZS5nLiwgJy9wcm9qZWN0cy8nLCAnL25vdGVzL3R1dG9yaWFscy8nLCBsZWF2ZSBibGFuayBmb3Igcm9vdCAvKS5cIilcclxuXHRcdFx0XHQuYWRkVGV4dCgodGV4dCkgPT4ge1xyXG5cdFx0XHRcdFx0dGV4dFxyXG5cdFx0XHRcdFx0XHQuc2V0UGxhY2Vob2xkZXIoXCJFbnRlciBsaW5rIGJhc2UgcGF0aFwiKVxyXG5cdFx0XHRcdFx0XHQuc2V0VmFsdWUoY3VzdG9tVHlwZS5saW5rQmFzZVBhdGggfHwgXCJcIilcclxuXHRcdFx0XHRcdFx0Lm9uQ2hhbmdlKGFzeW5jICh2YWx1ZTogc3RyaW5nKSA9PiB7XHJcblx0XHRcdFx0XHRcdFx0Y3VzdG9tVHlwZS5saW5rQmFzZVBhdGggPSB2YWx1ZTtcclxuXHRcdFx0XHRcdFx0XHRhd2FpdCB0aGlzLnBsdWdpbi5zYXZlU2V0dGluZ3MoKTtcclxuXHRcdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0fSk7XHJcblxyXG5cdFx0XHQvLyBDcmVhdGlvbiBtb2RlXHJcblx0XHRcdGNvbnN0IGNyZWF0aW9uTW9kZUNvbnRhaW5lciA9IHNldHRpbmdzQ29udGFpbmVyLmNyZWF0ZURpdigpO1xyXG5cdFx0XHRuZXcgU2V0dGluZyhjcmVhdGlvbk1vZGVDb250YWluZXIpXHJcblx0XHRcdFx0LnNldE5hbWUoXCJDcmVhdGlvbiBtb2RlXCIpXHJcblx0XHRcdFx0LnNldERlc2MoXCJIb3cgdG8gY3JlYXRlIG5ldyBlbnRyaWVzOiBmaWxlLWJhc2VkIG9yIGZvbGRlci1iYXNlZCB3aXRoIGFuIGluZGV4IGZpbGUuXCIpXHJcblx0XHRcdFx0LmFkZERyb3Bkb3duKChkcm9wZG93bikgPT5cclxuXHRcdFx0XHRcdGRyb3Bkb3duXHJcblx0XHRcdFx0XHRcdC5hZGRPcHRpb24oXCJmaWxlXCIsIFwiRmlsZS1iYXNlZCAoY29udGVudC10aXRsZS5tZClcIilcclxuXHRcdFx0XHRcdFx0LmFkZE9wdGlvbihcImZvbGRlclwiLCBcIkZvbGRlci1iYXNlZCAoY29udGVudC10aXRsZS9pbmRleC5tZClcIilcclxuXHRcdFx0XHRcdFx0LnNldFZhbHVlKGN1c3RvbVR5cGUuY3JlYXRpb25Nb2RlKVxyXG5cdFx0XHRcdFx0XHQub25DaGFuZ2UoYXN5bmMgKHZhbHVlOiBzdHJpbmcpID0+IHtcclxuXHRcdFx0XHRcdFx0XHRjdXN0b21UeXBlLmNyZWF0aW9uTW9kZSA9IHZhbHVlIGFzIFwiZmlsZVwiIHwgXCJmb2xkZXJcIjtcclxuXHRcdFx0XHRcdFx0XHRhd2FpdCB0aGlzLnBsdWdpbi5zYXZlU2V0dGluZ3MoKTtcclxuXHRcdFx0XHRcdFx0XHR0aGlzLnVwZGF0ZUN1c3RvbUNvbnRlbnRUeXBlSW5kZXhGaWxlRmllbGQoY3VzdG9tVHlwZS5pZCk7XHJcblx0XHRcdFx0XHRcdH0pXHJcblx0XHRcdFx0KTtcclxuXHJcblx0XHRcdC8vIEluZGV4IGZpbGUgbmFtZSAob25seSBzaG93IGZvciBmb2xkZXItYmFzZWQpXHJcblx0XHRcdGNvbnN0IGluZGV4RmlsZUNvbnRhaW5lciA9IHNldHRpbmdzQ29udGFpbmVyLmNyZWF0ZURpdih7IGNsczogXCJjdXN0b20taW5kZXgtZmlsZS1maWVsZFwiIH0pO1xyXG5cdFx0XHRpbmRleEZpbGVDb250YWluZXIuY2xhc3NMaXN0LnRvZ2dsZShcImFzdHJvLWNvbXBvc2VyLXNldHRpbmctY29udGFpbmVyLXZpc2libGVcIiwgY3VzdG9tVHlwZS5jcmVhdGlvbk1vZGUgPT09IFwiZm9sZGVyXCIpO1xyXG5cdFx0XHRpbmRleEZpbGVDb250YWluZXIuY2xhc3NMaXN0LnRvZ2dsZShcImFzdHJvLWNvbXBvc2VyLXNldHRpbmctY29udGFpbmVyLWhpZGRlblwiLCBjdXN0b21UeXBlLmNyZWF0aW9uTW9kZSAhPT0gXCJmb2xkZXJcIik7XHJcblx0XHRcdG5ldyBTZXR0aW5nKGluZGV4RmlsZUNvbnRhaW5lcilcclxuXHRcdFx0XHQuc2V0TmFtZShcIkluZGV4IGZpbGUgbmFtZVwiKVxyXG5cdFx0XHRcdC5zZXREZXNjKFwiTmFtZSBmb3IgaW5kZXggZmlsZXMgaW4gZm9sZGVyLWJhc2VkIGNvbnRlbnQgKHdpdGhvdXQgLm1kIGV4dGVuc2lvbikuIERlZmF1bHRzIHRvICdpbmRleCcgaWYgbGVmdCBibGFuay5cIilcclxuXHRcdFx0XHQuYWRkVGV4dCgodGV4dCkgPT5cclxuXHRcdFx0XHRcdHRleHRcclxuXHRcdFx0XHRcdFx0LnNldFBsYWNlaG9sZGVyKFwiaW5kZXhcIilcclxuXHRcdFx0XHRcdFx0LnNldFZhbHVlKGN1c3RvbVR5cGUuaW5kZXhGaWxlTmFtZSlcclxuXHRcdFx0XHRcdFx0Lm9uQ2hhbmdlKGFzeW5jICh2YWx1ZTogc3RyaW5nKSA9PiB7XHJcblx0XHRcdFx0XHRcdFx0Y3VzdG9tVHlwZS5pbmRleEZpbGVOYW1lID0gdmFsdWU7XHJcblx0XHRcdFx0XHRcdFx0YXdhaXQgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7XHJcblx0XHRcdFx0XHRcdH0pXHJcblx0XHRcdFx0KTtcclxuXHJcblx0XHRcdC8vIFVzZSBNRFggZXh0ZW5zaW9uXHJcblx0XHRcdGNvbnN0IHVzZU1keENvbnRhaW5lciA9IHNldHRpbmdzQ29udGFpbmVyLmNyZWF0ZURpdigpO1xyXG5cdFx0XHRuZXcgU2V0dGluZyh1c2VNZHhDb250YWluZXIpXHJcblx0XHRcdFx0Ly8gXCJNRFhcIiBpcyBhIHByb3BlciBub3VuIChmaWxlIGZvcm1hdCkgYW5kIHNob3VsZCBiZSBjYXBpdGFsaXplZFxyXG5cdFx0XHRcdC5zZXROYW1lKFwiVXNlIE1EWCBpbnN0ZWFkIG9mIE1EXCIpXHJcblx0XHRcdFx0LnNldERlc2MoXCJDcmVhdGUgZmlsZXMgd2l0aCAubWR4IGV4dGVuc2lvbiBpbnN0ZWFkIG9mIC5tZCBleHRlbnNpb24uXCIpXHJcblx0XHRcdFx0LmFkZFRvZ2dsZSgodG9nZ2xlKSA9PlxyXG5cdFx0XHRcdFx0dG9nZ2xlXHJcblx0XHRcdFx0XHRcdC5zZXRWYWx1ZShjdXN0b21UeXBlLnVzZU1keEV4dGVuc2lvbiB8fCBmYWxzZSlcclxuXHRcdFx0XHRcdFx0Lm9uQ2hhbmdlKGFzeW5jICh2YWx1ZTogYm9vbGVhbikgPT4ge1xyXG5cdFx0XHRcdFx0XHRcdGN1c3RvbVR5cGUudXNlTWR4RXh0ZW5zaW9uID0gdmFsdWU7XHJcblx0XHRcdFx0XHRcdFx0YXdhaXQgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7XHJcblx0XHRcdFx0XHRcdH0pXHJcblx0XHRcdFx0KTtcclxuXHJcblx0XHRcdC8vIE1vZGlmaWVkIGRhdGUgcHJvcGVydHlcclxuXHRcdFx0Y29uc3QgbW9kaWZpZWREYXRlQ29udGFpbmVyID0gc2V0dGluZ3NDb250YWluZXIuY3JlYXRlRGl2KCk7XHJcblx0XHRcdG5ldyBTZXR0aW5nKG1vZGlmaWVkRGF0ZUNvbnRhaW5lcilcclxuXHRcdFx0XHQuc2V0TmFtZShcIk1vZGlmaWVkIGRhdGUgcHJvcGVydHlcIilcclxuXHRcdFx0XHQuc2V0RGVzYyhcIlRoZSBwcm9wZXJ0eSBmaWVsZCB0byB1cGRhdGUgd2l0aCB0aGUgbW9kaWZpZWQgZGF0ZSBmb3IgdGhpcyBjb250ZW50IHR5cGUuIExlYXZlIGJsYW5rIHRvIGRpc2FibGUuXCIpXHJcblx0XHRcdFx0LmFkZFRleHQoKHRleHQpID0+XHJcblx0XHRcdFx0XHR0ZXh0XHJcblx0XHRcdFx0XHRcdC5zZXRQbGFjZWhvbGRlcihcIm1vZGlmaWVkXCIpXHJcblx0XHRcdFx0XHRcdC5zZXRWYWx1ZShjdXN0b21UeXBlLm1vZGlmaWVkRGF0ZUZpZWxkIHx8IFwiXCIpXHJcblx0XHRcdFx0XHRcdC5vbkNoYW5nZShhc3luYyAodmFsdWU6IHN0cmluZykgPT4ge1xyXG5cdFx0XHRcdFx0XHRcdGN1c3RvbVR5cGUubW9kaWZpZWREYXRlRmllbGQgPSB2YWx1ZTtcclxuXHRcdFx0XHRcdFx0XHRhd2FpdCB0aGlzLnBsdWdpbi5zYXZlU2V0dGluZ3MoKTtcclxuXHRcdFx0XHRcdFx0fSlcclxuXHRcdFx0XHQpO1xyXG5cclxuXHRcdFx0Ly8gVGVtcGxhdGVcclxuXHRcdFx0Y29uc3QgdGVtcGxhdGVDb250YWluZXIgPSBzZXR0aW5nc0NvbnRhaW5lci5jcmVhdGVEaXYoKTtcclxuXHRcdFx0bmV3IFNldHRpbmcodGVtcGxhdGVDb250YWluZXIpXHJcblx0XHRcdFx0LnNldE5hbWUoXCJQcm9wZXJ0aWVzIHRlbXBsYXRlXCIpXHJcblx0XHRcdFx0LmFkZFRleHRBcmVhKCh0ZXh0KSA9PiB7XHJcblx0XHRcdFx0XHR0ZXh0XHJcblx0XHRcdFx0XHRcdC5zZXRQbGFjZWhvbGRlcignLS0tXFxudGl0bGU6IFwie3t0aXRsZX19XCJcXG5kYXRlOiB7e2RhdGV9fVxcbi0tLVxcbicpXHJcblx0XHRcdFx0XHRcdC5zZXRWYWx1ZShjdXN0b21UeXBlLnRlbXBsYXRlKVxyXG5cdFx0XHRcdFx0XHQub25DaGFuZ2UoYXN5bmMgKHZhbHVlOiBzdHJpbmcpID0+IHtcclxuXHRcdFx0XHRcdFx0XHRjdXN0b21UeXBlLnRlbXBsYXRlID0gdmFsdWU7XHJcblx0XHRcdFx0XHRcdFx0YXdhaXQgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7XHJcblx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0dGV4dC5pbnB1dEVsLmNsYXNzTGlzdC5hZGQoXCJhc3Ryby1jb21wb3Nlci10ZW1wbGF0ZS10ZXh0YXJlYVwiKTtcclxuXHRcdFx0XHRcdHJldHVybiB0ZXh0O1xyXG5cdFx0XHRcdH0pXHJcblx0XHRcdFx0LnRoZW4oKHNldHRpbmcpID0+IHtcclxuXHRcdFx0XHRcdHNldHRpbmcuZGVzY0VsLmVtcHR5KCk7XHJcblx0XHRcdFx0XHRjb25zdCBkZXNjRGl2ID0gc2V0dGluZy5kZXNjRWwuY3JlYXRlRWwoXCJkaXZcIik7XHJcblx0XHRcdFx0XHRkZXNjRGl2LmNyZWF0ZUVsKFwiZGl2XCIsIHsgdGV4dDogXCJUZW1wbGF0ZSBmb3IgbmV3IGZpbGVzIG9mIHRoaXMgY29udGVudCB0eXBlLlwiIH0pO1xyXG5cdFx0XHRcdFx0ZGVzY0Rpdi5jcmVhdGVFbChcImRpdlwiLCB7IHRleHQ6IFwiVmFyaWFibGVzIGluY2x1ZGUge3t0aXRsZX19LCB7e2RhdGV9fSwgYW5kIHt7c2x1Z319LlwiIH0pO1xyXG5cdFx0XHRcdFx0ZGVzY0Rpdi5jcmVhdGVFbChcImRpdlwiLCB7IHRleHQ6IFwiRG8gbm90IHdyYXAge3tkYXRlfX0gaW4gcXVvdGVzIGFzIGl0IHJlcHJlc2VudHMgYSBkYXRldGltZSB2YWx1ZSwgbm90IGEgc3RyaW5nLlwiIH0pO1xyXG5cdFx0XHRcdH0pO1xyXG5cclxuXHRcdFx0Ly8gUmVtb3ZlIGJ1dHRvbiBhdCB0aGUgYm90dG9tIChubyBkaXZpZGVyKVxyXG5cdFx0XHRjb25zdCByZW1vdmVDb250YWluZXIgPSBzZXR0aW5nc0NvbnRhaW5lci5jcmVhdGVEaXYoKTtcclxuXHRcdFx0Y29uc3QgcmVtb3ZlU2V0dGluZyA9IG5ldyBTZXR0aW5nKHJlbW92ZUNvbnRhaW5lcilcclxuXHRcdFx0XHQuc2V0TmFtZShcIlwiKVxyXG5cdFx0XHRcdC5hZGRCdXR0b24oKGJ1dHRvbikgPT4ge1xyXG5cdFx0XHRcdFx0YnV0dG9uXHJcblx0XHRcdFx0XHRcdC5zZXRCdXR0b25UZXh0KFwiUmVtb3ZlXCIpXHJcblx0XHRcdFx0XHRcdC5zZXRXYXJuaW5nKClcclxuXHRcdFx0XHRcdFx0Lm9uQ2xpY2soYXN5bmMgKCkgPT4ge1xyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IGNvbnRlbnRUeXBlID0gdGhpcy5wbHVnaW4uc2V0dGluZ3MuY29udGVudFR5cGVzLmZpbmQoY3QgPT4gY3QuaWQgPT09IGN1c3RvbVR5cGUuaWQpO1xyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IHR5cGVOYW1lID0gY29udGVudFR5cGU/Lm5hbWUgfHwgXCJjb250ZW50IHR5cGVcIjtcclxuXHRcdFx0XHRcdFx0XHRjb25zdCBtb2RhbCA9IG5ldyBDb25maXJtTW9kYWwoXHJcblx0XHRcdFx0XHRcdFx0XHR0aGlzLmFwcCxcclxuXHRcdFx0XHRcdFx0XHRcdGBBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gcmVtb3ZlIFwiJHt0eXBlTmFtZX1cIj8gVGhpcyBhY3Rpb24gY2Fubm90IGJlIHVuZG9uZS5gLFxyXG5cdFx0XHRcdFx0XHRcdFx0XCJSZW1vdmVcIixcclxuXHRcdFx0XHRcdFx0XHRcdFwiQ2FuY2VsXCJcclxuXHRcdFx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IGNvbmZpcm1lZCA9IGF3YWl0IG1vZGFsLndhaXRGb3JSZXN1bHQoKTtcclxuXHRcdFx0XHRcdFx0XHRpZiAoY29uZmlybWVkKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRhd2FpdCB0aGlzLnJlbW92ZUN1c3RvbUNvbnRlbnRUeXBlKGN1c3RvbVR5cGUuaWQpO1xyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0fSk7XHJcblxyXG5cdFx0XHQvLyBIaWRlIHRoZSBkaXZpZGVyIGxpbmUgZm9yIHRoZSByZW1vdmUgYnV0dG9uXHJcblx0XHRcdHJlbW92ZVNldHRpbmcuc2V0dGluZ0VsLmNsYXNzTGlzdC5hZGQoXCJhc3Ryby1jb21wb3Nlci1yZW1vdmUtc2V0dGluZ1wiKTtcclxuXHJcblx0XHRcdC8vIFNldCBpbml0aWFsIHZpc2liaWxpdHkgKGNoZWNrcyBib3RoIGVuYWJsZWQgYW5kIGNvbGxhcHNlZCBzdGF0ZSlcclxuXHRcdFx0dGhpcy51cGRhdGVDdXN0b21Db250ZW50VHlwZVZpc2liaWxpdHkoY3VzdG9tVHlwZS5pZCwgY3VzdG9tVHlwZS5lbmFibGVkKTtcclxuXHRcdH0pO1xyXG5cclxuXHRcdC8vIFVwZGF0ZSBjb25mbGljdCB3YXJuaW5ncyBmb3IgYWxsIHR5cGVzIGFmdGVyIHJlbmRlcmluZyAoZm9sZGVyIGNoYW5nZXMgbWF5IGFmZmVjdCBvdGhlcnMpXHJcblx0XHRjb250ZW50VHlwZXMuZm9yRWFjaCgoY3VzdG9tVHlwZTogQ29udGVudFR5cGUpID0+IHtcclxuXHRcdFx0dGhpcy51cGRhdGVGb2xkZXJDb25mbGljdFdhcm5pbmcoY3VzdG9tVHlwZS5pZCwgbnVsbCk7XHJcblx0XHR9KTtcclxuXHJcblx0XHQvLyBBZGQgZmxvYXRpbmcgYnV0dG9uIGZvciBjcmVhdGluZyBuZXcgY3VzdG9tIGNvbnRlbnQgdHlwZXMgKG5vIHNldHRpbmdzIGJhY2tncm91bmQpXHJcblx0XHRjb25zdCBhZGRCdXR0b25Db250YWluZXIgPSB0aGlzLmN1c3RvbUNvbnRlbnRUeXBlc0NvbnRhaW5lci5jcmVhdGVEaXYoeyBjbHM6IFwiYXN0cm8tY29tcG9zZXItYWRkLWJ1dHRvbi1jb250YWluZXJcIiB9KTtcclxuXHRcdGNvbnN0IGFkZEJ1dHRvbiA9IGFkZEJ1dHRvbkNvbnRhaW5lci5jcmVhdGVFbChcImJ1dHRvblwiLCB7XHJcblx0XHRcdGNsczogXCJtb2QtY3RhXCIsXHJcblx0XHRcdHRleHQ6IFwiQWRkIGNvbnRlbnQgdHlwZVwiXHJcblx0XHR9KTtcclxuXHRcdGFkZEJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKCkgPT4ge1xyXG5cdFx0XHR0aGlzLmFkZEN1c3RvbUNvbnRlbnRUeXBlKCk7XHJcblx0XHR9KTtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgdXBkYXRlQ3VzdG9tQ29udGVudFR5cGVWaXNpYmlsaXR5KHR5cGVJZDogc3RyaW5nLCBlbmFibGVkOiBib29sZWFuKSB7XHJcblx0XHRjb25zdCBzZXR0aW5nc0NvbnRhaW5lciA9IHRoaXMuY3VzdG9tQ29udGVudFR5cGVzQ29udGFpbmVyPy5xdWVyeVNlbGVjdG9yKGBbZGF0YS10eXBlLWlkPVwiJHt0eXBlSWR9XCJdLmN1c3RvbS1jb250ZW50LXR5cGUtc2V0dGluZ3NgKSBhcyBIVE1MRWxlbWVudDtcclxuXHRcdGlmIChzZXR0aW5nc0NvbnRhaW5lcikge1xyXG5cdFx0XHRjb25zdCBjb250ZW50VHlwZXMgPSB0aGlzLnBsdWdpbi5zZXR0aW5ncy5jb250ZW50VHlwZXMgfHwgW107XHJcblx0XHRcdGNvbnN0IGNvbnRlbnRUeXBlID0gY29udGVudFR5cGVzLmZpbmQoKGN0OiBDb250ZW50VHlwZSkgPT4gY3QuaWQgPT09IHR5cGVJZCk7XHJcblx0XHRcdGNvbnN0IGlzQ29sbGFwc2VkID0gY29udGVudFR5cGU/LmNvbGxhcHNlZCA/PyBmYWxzZTtcclxuXHRcdFx0Y29uc3Qgc2hvdWxkQmVWaXNpYmxlID0gZW5hYmxlZCAmJiAhaXNDb2xsYXBzZWQ7XHJcblxyXG5cdFx0XHRzZXR0aW5nc0NvbnRhaW5lci5jbGFzc0xpc3QudG9nZ2xlKFwiYXN0cm8tY29tcG9zZXItc2V0dGluZy1jb250YWluZXItdmlzaWJsZVwiLCBzaG91bGRCZVZpc2libGUpO1xyXG5cdFx0XHRzZXR0aW5nc0NvbnRhaW5lci5jbGFzc0xpc3QudG9nZ2xlKFwiYXN0cm8tY29tcG9zZXItc2V0dGluZy1jb250YWluZXItaGlkZGVuXCIsICFzaG91bGRCZVZpc2libGUpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSB1cGRhdGVDdXN0b21Db250ZW50VHlwZUluZGV4RmlsZUZpZWxkKHR5cGVJZDogc3RyaW5nKSB7XHJcblx0XHRjb25zdCBjb250ZW50VHlwZXMgPSB0aGlzLnBsdWdpbi5zZXR0aW5ncy5jb250ZW50VHlwZXMgfHwgW107XHJcblx0XHRjb25zdCBjdXN0b21UeXBlID0gY29udGVudFR5cGVzLmZpbmQodHlwZSA9PiB0eXBlLmlkID09PSB0eXBlSWQpO1xyXG5cdFx0aWYgKCFjdXN0b21UeXBlKSByZXR1cm47XHJcblxyXG5cdFx0Y29uc3QgaW5kZXhGaWxlQ29udGFpbmVyID0gdGhpcy5jdXN0b21Db250ZW50VHlwZXNDb250YWluZXI/LnF1ZXJ5U2VsZWN0b3IoYFtkYXRhLXR5cGUtaWQ9XCIke3R5cGVJZH1cIl0gLmN1c3RvbS1pbmRleC1maWxlLWZpZWxkYCkgYXMgSFRNTEVsZW1lbnQ7XHJcblx0XHRpZiAoaW5kZXhGaWxlQ29udGFpbmVyKSB7XHJcblx0XHRcdGluZGV4RmlsZUNvbnRhaW5lci5jbGFzc0xpc3QudG9nZ2xlKFwiYXN0cm8tY29tcG9zZXItc2V0dGluZy1jb250YWluZXItdmlzaWJsZVwiLCBjdXN0b21UeXBlLmNyZWF0aW9uTW9kZSA9PT0gXCJmb2xkZXJcIik7XHJcblx0XHRcdGluZGV4RmlsZUNvbnRhaW5lci5jbGFzc0xpc3QudG9nZ2xlKFwiYXN0cm8tY29tcG9zZXItc2V0dGluZy1jb250YWluZXItaGlkZGVuXCIsIGN1c3RvbVR5cGUuY3JlYXRpb25Nb2RlICE9PSBcImZvbGRlclwiKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHByaXZhdGUgdXBkYXRlQ3VzdG9tQ29udGVudFR5cGVJZ25vcmVTdWJmb2xkZXJzRmllbGQodHlwZUlkOiBzdHJpbmcpIHtcclxuXHRcdGNvbnN0IGNvbnRlbnRUeXBlcyA9IHRoaXMucGx1Z2luLnNldHRpbmdzLmNvbnRlbnRUeXBlcyB8fCBbXTtcclxuXHRcdGNvbnN0IGN1c3RvbVR5cGUgPSBjb250ZW50VHlwZXMuZmluZCh0eXBlID0+IHR5cGUuaWQgPT09IHR5cGVJZCk7XHJcblx0XHRpZiAoIWN1c3RvbVR5cGUpIHJldHVybjtcclxuXHJcblx0XHRjb25zdCBpZ25vcmVTdWJmb2xkZXJzQ29udGFpbmVyID0gdGhpcy5jdXN0b21Db250ZW50VHlwZXNDb250YWluZXI/LnF1ZXJ5U2VsZWN0b3IoYFtkYXRhLXR5cGUtaWQ9XCIke3R5cGVJZH1cIl0uY3VzdG9tLWlnbm9yZS1zdWJmb2xkZXJzLWZpZWxkYCkgYXMgSFRNTEVsZW1lbnQ7XHJcblx0XHRpZiAoaWdub3JlU3ViZm9sZGVyc0NvbnRhaW5lcikge1xyXG5cdFx0XHRpZ25vcmVTdWJmb2xkZXJzQ29udGFpbmVyLmNsYXNzTGlzdC50b2dnbGUoXCJhc3Ryby1jb21wb3Nlci1zZXR0aW5nLWNvbnRhaW5lci12aXNpYmxlXCIsICEhY3VzdG9tVHlwZS5mb2xkZXIgJiYgY3VzdG9tVHlwZS5mb2xkZXIudHJpbSgpICE9PSBcIlwiKTtcclxuXHRcdFx0aWdub3JlU3ViZm9sZGVyc0NvbnRhaW5lci5jbGFzc0xpc3QudG9nZ2xlKFwiYXN0cm8tY29tcG9zZXItc2V0dGluZy1jb250YWluZXItaGlkZGVuXCIsICFjdXN0b21UeXBlLmZvbGRlciB8fCBjdXN0b21UeXBlLmZvbGRlci50cmltKCkgPT09IFwiXCIpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSB1cGRhdGVGb2xkZXJDb25mbGljdFdhcm5pbmcodHlwZUlkOiBzdHJpbmcsIHNldHRpbmc6IFNldHRpbmcgfCBudWxsKSB7XHJcblx0XHRjb25zdCBjb250ZW50VHlwZXMgPSB0aGlzLnBsdWdpbi5zZXR0aW5ncy5jb250ZW50VHlwZXMgfHwgW107XHJcblx0XHRjb25zdCBjdXJyZW50VHlwZSA9IGNvbnRlbnRUeXBlcy5maW5kKHR5cGUgPT4gdHlwZS5pZCA9PT0gdHlwZUlkKTtcclxuXHRcdGlmICghY3VycmVudFR5cGUpIHJldHVybjtcclxuXHJcblx0XHRjb25zdCBjb25mbGljdFdhcm5pbmdFbCA9IHRoaXMuY3VzdG9tQ29udGVudFR5cGVzQ29udGFpbmVyPy5xdWVyeVNlbGVjdG9yKGBbZGF0YS10eXBlLWlkPVwiJHt0eXBlSWR9XCJdLmFzdHJvLWNvbXBvc2VyLWNvbmZsaWN0LXdhcm5pbmdgKSBhcyBIVE1MRWxlbWVudDtcclxuXHRcdGlmICghY29uZmxpY3RXYXJuaW5nRWwpIHJldHVybjtcclxuXHJcblx0XHQvLyBGaW5kIGNvbmZsaWN0cyAtIG90aGVyIGNvbnRlbnQgdHlwZXMgd2l0aCB0aGUgc2FtZSBmb2xkZXIgcGF0dGVyblxyXG5cdFx0Y29uc3QgY3VycmVudEZvbGRlciA9IChjdXJyZW50VHlwZS5mb2xkZXIgfHwgXCJcIikudHJpbSgpO1xyXG5cdFx0Y29uc3QgY29uZmxpY3RpbmdUeXBlczogc3RyaW5nW10gPSBbXTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IG90aGVyVHlwZSBvZiBjb250ZW50VHlwZXMpIHtcclxuXHRcdFx0aWYgKG90aGVyVHlwZS5pZCA9PT0gdHlwZUlkIHx8ICFvdGhlclR5cGUuZW5hYmxlZCkgY29udGludWU7XHJcblxyXG5cdFx0XHRjb25zdCBvdGhlckZvbGRlciA9IChvdGhlclR5cGUuZm9sZGVyIHx8IFwiXCIpLnRyaW0oKTtcclxuXHJcblx0XHRcdC8vIENoZWNrIGlmIGZvbGRlcnMgY29uZmxpY3RcclxuXHRcdFx0Ly8gQm90aCBibGFuayA9IGNvbmZsaWN0IChib3RoIG1hdGNoIHZhdWx0IHJvb3QpXHJcblx0XHRcdGlmIChjdXJyZW50Rm9sZGVyID09PSBcIlwiICYmIG90aGVyRm9sZGVyID09PSBcIlwiKSB7XHJcblx0XHRcdFx0Y29uZmxpY3RpbmdUeXBlcy5wdXNoKG90aGVyVHlwZS5uYW1lIHx8IFwiVW5uYW1lZFwiKTtcclxuXHRcdFx0fVxyXG5cdFx0XHQvLyBTYW1lIGZvbGRlciA9IGNvbmZsaWN0XHJcblx0XHRcdGVsc2UgaWYgKGN1cnJlbnRGb2xkZXIgPT09IG90aGVyRm9sZGVyICYmIGN1cnJlbnRGb2xkZXIgIT09IFwiXCIpIHtcclxuXHRcdFx0XHRjb25mbGljdGluZ1R5cGVzLnB1c2gob3RoZXJUeXBlLm5hbWUgfHwgXCJVbm5hbWVkXCIpO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKGNvbmZsaWN0aW5nVHlwZXMubGVuZ3RoID4gMCkge1xyXG5cdFx0XHRjb25mbGljdFdhcm5pbmdFbC5yZW1vdmVDbGFzcyhcImhpZGRlblwiKTtcclxuXHRcdFx0Y29uZmxpY3RXYXJuaW5nRWwudGV4dENvbnRlbnQgPSBgQ29uZmxpY3Q6ICR7Y29uZmxpY3RpbmdUeXBlcy5qb2luKFwiLCBcIil9IGFsc28gdXNlJHtjb25mbGljdGluZ1R5cGVzLmxlbmd0aCA9PT0gMSA/IFwic1wiIDogXCJcIn0gdGhpcyBmb2xkZXIuIE1vcmUgc3BlY2lmaWMgcGF0dGVybnMgd2lsbCB0YWtlIHByaW9yaXR5LmA7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRjb25mbGljdFdhcm5pbmdFbC5hZGRDbGFzcyhcImhpZGRlblwiKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cclxuXHRwcml2YXRlIGFzeW5jIG1vdmVDb250ZW50VHlwZVVwKHR5cGVJZDogc3RyaW5nKSB7XHJcblx0XHRjb25zdCBzZXR0aW5ncyA9IHRoaXMucGx1Z2luLnNldHRpbmdzO1xyXG5cdFx0Y29uc3QgY29udGVudFR5cGVzID0gc2V0dGluZ3MuY29udGVudFR5cGVzIHx8IFtdO1xyXG5cdFx0Y29uc3QgY3VycmVudEluZGV4ID0gY29udGVudFR5cGVzLmZpbmRJbmRleCgoY3Q6IENvbnRlbnRUeXBlKSA9PiBjdC5pZCA9PT0gdHlwZUlkKTtcclxuXHJcblx0XHRpZiAoY3VycmVudEluZGV4IDw9IDApIHJldHVybjsgLy8gQWxyZWFkeSBhdCB0aGUgdG9wXHJcblxyXG5cdFx0Ly8gU3dhcCB3aXRoIHByZXZpb3VzIGl0ZW1cclxuXHRcdFtjb250ZW50VHlwZXNbY3VycmVudEluZGV4XSwgY29udGVudFR5cGVzW2N1cnJlbnRJbmRleCAtIDFdXSA9IFtjb250ZW50VHlwZXNbY3VycmVudEluZGV4IC0gMV0sIGNvbnRlbnRUeXBlc1tjdXJyZW50SW5kZXhdXTtcclxuXHRcdHNldHRpbmdzLmNvbnRlbnRUeXBlcyA9IGNvbnRlbnRUeXBlcztcclxuXHRcdGF3YWl0IHRoaXMucGx1Z2luLnNhdmVTZXR0aW5ncygpO1xyXG5cdFx0dGhpcy5yZW5kZXJDdXN0b21Db250ZW50VHlwZXMoKTtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgYXN5bmMgbW92ZUNvbnRlbnRUeXBlRG93bih0eXBlSWQ6IHN0cmluZykge1xyXG5cdFx0Y29uc3Qgc2V0dGluZ3MgPSB0aGlzLnBsdWdpbi5zZXR0aW5ncztcclxuXHRcdGNvbnN0IGNvbnRlbnRUeXBlcyA9IHNldHRpbmdzLmNvbnRlbnRUeXBlcyB8fCBbXTtcclxuXHRcdGNvbnN0IGN1cnJlbnRJbmRleCA9IGNvbnRlbnRUeXBlcy5maW5kSW5kZXgoKGN0OiBDb250ZW50VHlwZSkgPT4gY3QuaWQgPT09IHR5cGVJZCk7XHJcblxyXG5cdFx0aWYgKGN1cnJlbnRJbmRleCA8IDAgfHwgY3VycmVudEluZGV4ID49IGNvbnRlbnRUeXBlcy5sZW5ndGggLSAxKSByZXR1cm47IC8vIEFscmVhZHkgYXQgdGhlIGJvdHRvbVxyXG5cclxuXHRcdC8vIFN3YXAgd2l0aCBuZXh0IGl0ZW1cclxuXHRcdFtjb250ZW50VHlwZXNbY3VycmVudEluZGV4XSwgY29udGVudFR5cGVzW2N1cnJlbnRJbmRleCArIDFdXSA9IFtjb250ZW50VHlwZXNbY3VycmVudEluZGV4ICsgMV0sIGNvbnRlbnRUeXBlc1tjdXJyZW50SW5kZXhdXTtcclxuXHRcdHNldHRpbmdzLmNvbnRlbnRUeXBlcyA9IGNvbnRlbnRUeXBlcztcclxuXHRcdGF3YWl0IHRoaXMucGx1Z2luLnNhdmVTZXR0aW5ncygpO1xyXG5cdFx0dGhpcy5yZW5kZXJDdXN0b21Db250ZW50VHlwZXMoKTtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgYXN5bmMgdG9nZ2xlQ29udGVudFR5cGVDb2xsYXBzZSh0eXBlSWQ6IHN0cmluZykge1xyXG5cdFx0Y29uc3Qgc2V0dGluZ3MgPSB0aGlzLnBsdWdpbi5zZXR0aW5ncztcclxuXHRcdGNvbnN0IGNvbnRlbnRUeXBlcyA9IHNldHRpbmdzLmNvbnRlbnRUeXBlcyB8fCBbXTtcclxuXHRcdGNvbnN0IGNvbnRlbnRUeXBlID0gY29udGVudFR5cGVzLmZpbmQoKGN0OiBDb250ZW50VHlwZSkgPT4gY3QuaWQgPT09IHR5cGVJZCk7XHJcblxyXG5cdFx0aWYgKCFjb250ZW50VHlwZSkgcmV0dXJuO1xyXG5cclxuXHRcdGNvbnRlbnRUeXBlLmNvbGxhcHNlZCA9ICFjb250ZW50VHlwZS5jb2xsYXBzZWQ7XHJcblx0XHRhd2FpdCB0aGlzLnBsdWdpbi5zYXZlU2V0dGluZ3MoKTtcclxuXHRcdHRoaXMudXBkYXRlQ3VzdG9tQ29udGVudFR5cGVWaXNpYmlsaXR5KHR5cGVJZCwgY29udGVudFR5cGUuZW5hYmxlZCk7XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIGFzeW5jIHJlbW92ZUN1c3RvbUNvbnRlbnRUeXBlKHR5cGVJZDogc3RyaW5nKSB7XHJcblx0XHRjb25zdCBzZXR0aW5ncyA9IHRoaXMucGx1Z2luLnNldHRpbmdzO1xyXG5cdFx0Y29uc3QgY29udGVudFR5cGVzID0gc2V0dGluZ3MuY29udGVudFR5cGVzIHx8IFtdO1xyXG5cdFx0c2V0dGluZ3MuY29udGVudFR5cGVzID0gY29udGVudFR5cGVzLmZpbHRlcigoY3Q6IENvbnRlbnRUeXBlKSA9PiBjdC5pZCAhPT0gdHlwZUlkKTtcclxuXHRcdC8vIENSSVRJQ0FMOiBBd2FpdCB0aGUgc2F2ZSB0byBlbnN1cmUgZGVsZXRpb24gaXMgcGVyc2lzdGVkIGJlZm9yZSBhbnkgcmVsb2FkcyBoYXBwZW5cclxuXHRcdGF3YWl0IHRoaXMucGx1Z2luLnNhdmVTZXR0aW5ncygpO1xyXG5cdFx0dGhpcy5yZW5kZXJDdXN0b21Db250ZW50VHlwZXMoKTtcclxuXHRcdHRoaXMucGx1Z2luLnJlZ2lzdGVyQ3JlYXRlRXZlbnQoKTtcclxuXHRcdC8vIFJlLXJlZ2lzdGVyIGNvbnRlbnQgdHlwZSBjb21tYW5kcyB0byByZW1vdmUgdGhlIGRlbGV0ZWQgdHlwZVxyXG5cdFx0cmVnaXN0ZXJDb250ZW50VHlwZUNvbW1hbmRzKHRoaXMucGx1Z2luIGFzIHVua25vd24gYXMgUGx1Z2luLCBzZXR0aW5ncyk7XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIGdldENvbW1hbmROYW1lKGNvbW1hbmRJZDogc3RyaW5nKTogc3RyaW5nIHtcclxuXHRcdGlmICghY29tbWFuZElkKSByZXR1cm4gJyc7XHJcblx0XHR0cnkge1xyXG5cdFx0XHRjb25zdCBjb21tYW5kUmVnaXN0cnkgPSAodGhpcy5hcHAgYXMgdW5rbm93biBhcyB7IGNvbW1hbmRzPzogeyBsaXN0Q29tbWFuZHM/OiAoKSA9PiBBcnJheTx7IGlkOiBzdHJpbmc7IG5hbWU6IHN0cmluZyB9PjsgY29tbWFuZHM/OiBSZWNvcmQ8c3RyaW5nLCB7IGlkOiBzdHJpbmc7IG5hbWU6IHN0cmluZyB9PiB9IH0pLmNvbW1hbmRzO1xyXG5cclxuXHRcdFx0Ly8gTWV0aG9kIDE6IFRyeSBsaXN0Q29tbWFuZHMoKVxyXG5cdFx0XHRpZiAoY29tbWFuZFJlZ2lzdHJ5ICYmIHR5cGVvZiBjb21tYW5kUmVnaXN0cnkubGlzdENvbW1hbmRzID09PSAnZnVuY3Rpb24nKSB7XHJcblx0XHRcdFx0dHJ5IHtcclxuXHRcdFx0XHRcdGNvbnN0IGFsbENvbW1hbmRzID0gY29tbWFuZFJlZ2lzdHJ5Lmxpc3RDb21tYW5kcygpO1xyXG5cdFx0XHRcdFx0Y29uc3QgY29tbWFuZCA9IGFsbENvbW1hbmRzLmZpbmQoKGNtZDogeyBpZDogc3RyaW5nOyBuYW1lPzogc3RyaW5nIH0pID0+IGNtZC5pZCA9PT0gY29tbWFuZElkKTtcclxuXHRcdFx0XHRcdGlmIChjb21tYW5kPy5uYW1lKSB7XHJcblx0XHRcdFx0XHRcdHJldHVybiBjb21tYW5kLm5hbWU7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fSBjYXRjaCAoZSkge1xyXG5cdFx0XHRcdFx0Y29uc29sZS53YXJuKCdbQXN0cm8gQ29tcG9zZXJdIEVycm9yIGdldHRpbmcgY29tbWFuZCBuYW1lIHZpYSBsaXN0Q29tbWFuZHMoKTonLCBlKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdC8vIE1ldGhvZCAyOiBUcnkgYWNjZXNzaW5nIHRoZSBpbnRlcm5hbCBjb21tYW5kcyByZWdpc3RyeSBkaXJlY3RseVxyXG5cdFx0XHR0cnkge1xyXG5cdFx0XHRcdGNvbnN0IHJlZ2lzdHJ5ID0gY29tbWFuZFJlZ2lzdHJ5Py5jb21tYW5kcztcclxuXHRcdFx0XHRpZiAocmVnaXN0cnkgJiYgdHlwZW9mIHJlZ2lzdHJ5ID09PSAnb2JqZWN0Jykge1xyXG5cdFx0XHRcdFx0Y29uc3QgY29tbWFuZCA9IChyZWdpc3RyeSBhcyBSZWNvcmQ8c3RyaW5nLCB7IG5hbWU/OiBzdHJpbmcgfT4pW2NvbW1hbmRJZF07XHJcblx0XHRcdFx0XHRpZiAoY29tbWFuZD8ubmFtZSkge1xyXG5cdFx0XHRcdFx0XHRyZXR1cm4gY29tbWFuZC5uYW1lO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSBjYXRjaCAoZSkge1xyXG5cdFx0XHRcdGNvbnNvbGUud2FybignW0FzdHJvIENvbXBvc2VyXSBFcnJvciBnZXR0aW5nIGNvbW1hbmQgbmFtZSB2aWEgcmVnaXN0cnk6JywgZSk7XHJcblx0XHRcdH1cclxuXHRcdH0gY2F0Y2ggKGUpIHtcclxuXHRcdFx0Y29uc29sZS53YXJuKCdbQXN0cm8gQ29tcG9zZXJdIEVycm9yIGdldHRpbmcgY29tbWFuZCBuYW1lOicsIGUpO1xyXG5cdFx0fVxyXG5cdFx0Ly8gUmV0dXJuIGVtcHR5IHN0cmluZyBpZiBjb21tYW5kIG5vdCBmb3VuZCwgc28gaXQgc2hvd3MgXCJTZWxlY3QgY29tbWFuZC4uLlwiIHBsYWNlaG9sZGVyXHJcblx0XHRyZXR1cm4gJyc7XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIGdldEljb25OYW1lKGljb25JZDogc3RyaW5nKTogc3RyaW5nIHtcclxuXHRcdGlmICghaWNvbklkKSByZXR1cm4gJyc7XHJcblx0XHQvLyBDb252ZXJ0IGljb24gSUQgdG8gYSByZWFkYWJsZSBuYW1lLCByZW1vdmluZyBsdWNpZGUtIHByZWZpeCBpZiBwcmVzZW50XHJcblx0XHRyZXR1cm4gaWNvbklkXHJcblx0XHRcdC5yZXBsYWNlKC9ebHVjaWRlLS8sICcnKSAvLyBSZW1vdmUgbHVjaWRlLSBwcmVmaXhcclxuXHRcdFx0LnNwbGl0KCctJylcclxuXHRcdFx0Lm1hcCh3b3JkID0+IHdvcmQuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyB3b3JkLnNsaWNlKDEpKVxyXG5cdFx0XHQuam9pbignICcpO1xyXG5cdH1cclxufVxyXG4iLCAiLyoqXHJcbiAqIENvbW1hbmQgUGlja2VyIE1vZGFsXHJcbiAqIFNlYXJjaGFibGUgbW9kYWwgZm9yIHNlbGVjdGluZyBhbiBPYnNpZGlhbiBjb21tYW5kXHJcbiAqL1xyXG5cclxuaW1wb3J0IHsgQXBwLCBGdXp6eVN1Z2dlc3RNb2RhbCB9IGZyb20gJ29ic2lkaWFuJztcclxuXHJcbmludGVyZmFjZSBDb21tYW5kT3B0aW9uIHtcclxuXHRpZDogc3RyaW5nO1xyXG5cdG5hbWU6IHN0cmluZztcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIENvbW1hbmRQaWNrZXJNb2RhbCBleHRlbmRzIEZ1enp5U3VnZ2VzdE1vZGFsPENvbW1hbmRPcHRpb24+IHtcclxuXHRwcml2YXRlIG9uU2VsZWN0OiAoY29tbWFuZElkOiBzdHJpbmcpID0+IHZvaWQ7XHJcblxyXG5cdGNvbnN0cnVjdG9yKGFwcDogQXBwLCBvblNlbGVjdDogKGNvbW1hbmRJZDogc3RyaW5nKSA9PiB2b2lkKSB7XHJcblx0XHRzdXBlcihhcHApO1xyXG5cdFx0dGhpcy5vblNlbGVjdCA9IG9uU2VsZWN0O1xyXG5cdH1cclxuXHJcblx0Z2V0SXRlbXMoKTogQ29tbWFuZE9wdGlvbltdIHtcclxuXHRcdC8vIEdldCBhbGwgYXZhaWxhYmxlIGNvbW1hbmRzXHJcblx0XHQvLyBUcnkgbXVsdGlwbGUgbWV0aG9kcyB0byBlbnN1cmUgd2UgZ2V0IEFMTCBjb21tYW5kcywgbm90IGp1c3QgY29udGV4dC1maWx0ZXJlZCBvbmVzXHJcblx0XHRjb25zdCBjb21tYW5kUmVnaXN0cnkgPSAodGhpcy5hcHAgYXMgeyBjb21tYW5kcz86IHsgbGlzdENvbW1hbmRzPzogKCkgPT4gQ29tbWFuZE9wdGlvbltdOyBjb21tYW5kcz86IFJlY29yZDxzdHJpbmcsIENvbW1hbmRPcHRpb24+OyBjb21tYW5kUmVnaXN0cnk/OiBSZWNvcmQ8c3RyaW5nLCBDb21tYW5kT3B0aW9uPiB9IH0pLmNvbW1hbmRzO1xyXG5cdFx0XHJcblx0XHQvLyBVc2UgYSBTZXQgdG8gZGVkdXBsaWNhdGUgYnkgY29tbWFuZCBJRFxyXG5cdFx0Y29uc3QgY29tbWFuZE1hcCA9IG5ldyBNYXA8c3RyaW5nLCBDb21tYW5kT3B0aW9uPigpO1xyXG5cdFx0XHJcblx0XHQvLyBNZXRob2QgMTogVHJ5IGxpc3RDb21tYW5kcygpIC0gYnV0IHRoaXMgbWlnaHQgYmUgY29udGV4dC1maWx0ZXJlZFxyXG5cdFx0aWYgKGNvbW1hbmRSZWdpc3RyeSAmJiB0eXBlb2YgY29tbWFuZFJlZ2lzdHJ5Lmxpc3RDb21tYW5kcyA9PT0gJ2Z1bmN0aW9uJykge1xyXG5cdFx0XHR0cnkge1xyXG5cdFx0XHRcdGNvbnN0IGNvbW1hbmRzID0gY29tbWFuZFJlZ2lzdHJ5Lmxpc3RDb21tYW5kcygpO1xyXG5cdFx0XHRcdGZvciAoY29uc3QgY29tbWFuZCBvZiBjb21tYW5kcykge1xyXG5cdFx0XHRcdFx0aWYgKGNvbW1hbmQgJiYgY29tbWFuZC5pZCAmJiBjb21tYW5kLm5hbWUgJiYgIWNvbW1hbmRNYXAuaGFzKGNvbW1hbmQuaWQpKSB7XHJcblx0XHRcdFx0XHRcdGNvbW1hbmRNYXAuc2V0KGNvbW1hbmQuaWQsIHtcclxuXHRcdFx0XHRcdFx0XHRpZDogY29tbWFuZC5pZCxcclxuXHRcdFx0XHRcdFx0XHRuYW1lOiBjb21tYW5kLm5hbWVcclxuXHRcdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9IGNhdGNoIChlKSB7XHJcblx0XHRcdFx0Y29uc29sZS53YXJuKCdbQXN0cm8gQ29tcG9zZXJdIEVycm9yIGdldHRpbmcgY29tbWFuZHMgdmlhIGxpc3RDb21tYW5kcygpOicsIGUpO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHRcclxuXHRcdC8vIE1ldGhvZCAyOiBUcnkgYWNjZXNzaW5nIHRoZSBpbnRlcm5hbCBjb21tYW5kcyByZWdpc3RyeSBkaXJlY3RseVxyXG5cdFx0Ly8gVGhpcyBzaG91bGQgZ2l2ZSB1cyBBTEwgY29tbWFuZHMgcmVnYXJkbGVzcyBvZiBjb250ZXh0XHJcblx0XHR0cnkge1xyXG5cdFx0XHRjb25zdCByZWdpc3RyeSA9IGNvbW1hbmRSZWdpc3RyeT8uY29tbWFuZHM7XHJcblx0XHRcdGlmIChyZWdpc3RyeSAmJiB0eXBlb2YgcmVnaXN0cnkgPT09ICdvYmplY3QnKSB7XHJcblx0XHRcdFx0Y29uc3QgYWxsQ29tbWFuZHMgPSBPYmplY3QudmFsdWVzKHJlZ2lzdHJ5KTtcclxuXHRcdFx0XHRmb3IgKGNvbnN0IGNvbW1hbmQgb2YgYWxsQ29tbWFuZHMpIHtcclxuXHRcdFx0XHRcdGlmIChjb21tYW5kICYmIGNvbW1hbmQuaWQgJiYgY29tbWFuZC5uYW1lICYmICFjb21tYW5kTWFwLmhhcyhjb21tYW5kLmlkKSkge1xyXG5cdFx0XHRcdFx0XHRjb21tYW5kTWFwLnNldChjb21tYW5kLmlkLCB7XHJcblx0XHRcdFx0XHRcdFx0aWQ6IGNvbW1hbmQuaWQsXHJcblx0XHRcdFx0XHRcdFx0bmFtZTogY29tbWFuZC5uYW1lXHJcblx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fSBjYXRjaCAoZSkge1xyXG5cdFx0XHRjb25zb2xlLndhcm4oJ1tBc3RybyBDb21wb3Nlcl0gRXJyb3IgZ2V0dGluZyBjb21tYW5kcyB2aWEgcmVnaXN0cnk6JywgZSk7XHJcblx0XHR9XHJcblx0XHRcclxuXHRcdC8vIE1ldGhvZCAzOiBUcnkgYWNjZXNzaW5nIHZpYSBpbnRlcm5hbCBzdHJ1Y3R1cmUgKGZhbGxiYWNrKVxyXG5cdFx0dHJ5IHtcclxuXHRcdFx0Y29uc3QgaW50ZXJuYWxSZWdpc3RyeSA9IGNvbW1hbmRSZWdpc3RyeT8uY29tbWFuZFJlZ2lzdHJ5O1xyXG5cdFx0XHRpZiAoaW50ZXJuYWxSZWdpc3RyeSAmJiB0eXBlb2YgaW50ZXJuYWxSZWdpc3RyeSA9PT0gJ29iamVjdCcpIHtcclxuXHRcdFx0XHRjb25zdCBhbGxDb21tYW5kcyA9IE9iamVjdC52YWx1ZXMoaW50ZXJuYWxSZWdpc3RyeSk7XHJcblx0XHRcdFx0Zm9yIChjb25zdCBjb21tYW5kIG9mIGFsbENvbW1hbmRzKSB7XHJcblx0XHRcdFx0XHRpZiAoY29tbWFuZCAmJiBjb21tYW5kLmlkICYmIGNvbW1hbmQubmFtZSAmJiAhY29tbWFuZE1hcC5oYXMoY29tbWFuZC5pZCkpIHtcclxuXHRcdFx0XHRcdFx0Y29tbWFuZE1hcC5zZXQoY29tbWFuZC5pZCwge1xyXG5cdFx0XHRcdFx0XHRcdGlkOiBjb21tYW5kLmlkLFxyXG5cdFx0XHRcdFx0XHRcdG5hbWU6IGNvbW1hbmQubmFtZVxyXG5cdFx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH0gY2F0Y2ggKGUpIHtcclxuXHRcdFx0Y29uc29sZS53YXJuKCdbQXN0cm8gQ29tcG9zZXJdIEVycm9yIGdldHRpbmcgY29tbWFuZHMgdmlhIGludGVybmFsIHJlZ2lzdHJ5OicsIGUpO1xyXG5cdFx0fVxyXG5cdFx0XHJcblx0XHRjb25zdCBjb21tYW5kT3B0aW9ucyA9IEFycmF5LmZyb20oY29tbWFuZE1hcC52YWx1ZXMoKSk7XHJcblx0XHRcclxuXHRcdC8vIFNvcnQgYWxwaGFiZXRpY2FsbHkgYnkgbmFtZVxyXG5cdFx0Y29tbWFuZE9wdGlvbnMuc29ydCgoYSwgYikgPT4gYS5uYW1lLmxvY2FsZUNvbXBhcmUoYi5uYW1lKSk7XHJcblx0XHRcclxuXHRcdHJldHVybiBjb21tYW5kT3B0aW9ucztcclxuXHR9XHJcblxyXG5cdGdldEl0ZW1UZXh0KGl0ZW06IENvbW1hbmRPcHRpb24pOiBzdHJpbmcge1xyXG5cdFx0cmV0dXJuIGl0ZW0ubmFtZTtcclxuXHR9XHJcblxyXG5cdG9uQ2hvb3NlSXRlbShpdGVtOiBDb21tYW5kT3B0aW9uLCBldnQ6IE1vdXNlRXZlbnQgfCBLZXlib2FyZEV2ZW50KTogdm9pZCB7XHJcblx0XHR0aGlzLm9uU2VsZWN0KGl0ZW0uaWQpO1xyXG5cdH1cclxuXHJcblx0Ly8gT3ZlcnJpZGUgdG8gc2hvdyBjb21tYW5kIG5hbWUgb25seVxyXG5cdHJlbmRlclN1Z2dlc3Rpb24obWF0Y2g6IHsgaXRlbTogQ29tbWFuZE9wdGlvbiB9LCBlbDogSFRNTEVsZW1lbnQpOiB2b2lkIHtcclxuXHRcdGNvbnN0IGl0ZW0gPSBtYXRjaC5pdGVtO1xyXG5cdFx0ZWwuY3JlYXRlRGl2KHsgY2xzOiAnc3VnZ2VzdGlvbi10aXRsZScsIHRleHQ6IGl0ZW0ubmFtZSB9KTtcclxuXHR9XHJcbn1cclxuXHJcbiIsICIvKipcclxuICogSWNvbiBQaWNrZXIgTW9kYWxcclxuICogU2VhcmNoYWJsZSBtb2RhbCBmb3Igc2VsZWN0aW5nIGEgTHVjaWRlIGljb25cclxuICovXHJcblxyXG5pbXBvcnQgeyBBcHAsIEZ1enp5U3VnZ2VzdE1vZGFsLCBzZXRJY29uLCBnZXRJY29uSWRzLCByZXF1aXJlQXBpVmVyc2lvbiB9IGZyb20gJ29ic2lkaWFuJztcclxuXHJcbmludGVyZmFjZSBJY29uT3B0aW9uIHtcclxuXHRpZDogc3RyaW5nO1xyXG5cdG5hbWU6IHN0cmluZztcclxufVxyXG5cclxuLy8gR2V0IGljb24gbGlzdCBmcm9tIE9ic2lkaWFuIEFQSSBpZiBhdmFpbGFibGUsIG90aGVyd2lzZSB1c2UgZmFsbGJhY2sgbGlzdFxyXG5jb25zdCBnZXRJY29uTGlzdCA9ICgpOiBzdHJpbmdbXSA9PiB7XHJcblx0aWYgKHJlcXVpcmVBcGlWZXJzaW9uICYmIHJlcXVpcmVBcGlWZXJzaW9uKCcxLjcuMycpICYmIGdldEljb25JZHMpIHtcclxuXHRcdHRyeSB7XHJcblx0XHRcdHJldHVybiBnZXRJY29uSWRzKCk7XHJcblx0XHR9IGNhdGNoIChlKSB7XHJcblx0XHRcdGNvbnNvbGUud2FybignW0FzdHJvIENvbXBvc2VyXSBFcnJvciBnZXR0aW5nIGljb24gSURzIGZyb20gT2JzaWRpYW46JywgZSk7XHJcblx0XHR9XHJcblx0fVxyXG5cdC8vIEZhbGxiYWNrIHRvIGEgYmFzaWMgbGlzdCBpZiBBUEkgaXMgbm90IGF2YWlsYWJsZVxyXG5cdHJldHVybiBbXHJcblx0XHQnc2V0dGluZ3MtMicsICdzZXR0aW5ncycsICdoZWxwLWNpcmNsZScsICdpbmZvJywgJ3N0YXInLCAnaGVhcnQnLCAnYm9va21hcmsnLFxyXG5cdFx0J2hvbWUnLCAnc2VhcmNoJywgJ2JlbGwnLCAnbWFpbCcsICd1c2VyJywgJ3VzZXJzJywgJ2ZvbGRlcicsICdmaWxlJywgJ2ZpbGUtdGV4dCcsXHJcblx0XHQnaW1hZ2UnLCAndmlkZW8nLCAnbXVzaWMnLCAnY2FsZW5kYXInLCAnY2xvY2snLCAnZWRpdCcsICdwZW5jaWwnLCAndHJhc2gnLFxyXG5cdFx0J2NvcHknLCAnY3V0JywgJ3Bhc3RlJywgJ2Rvd25sb2FkJywgJ3VwbG9hZCcsICdzYXZlJywgJ3NoYXJlJywgJ2xpbmsnLFxyXG5cdFx0J2V4dGVybmFsLWxpbmsnLCAnbG9jaycsICd1bmxvY2snLCAnZXllJywgJ2V5ZS1vZmYnLCAna2V5JywgJ3NoaWVsZCcsXHJcblx0XHQnY2hlY2snLCAneCcsICdwbHVzJywgJ21pbnVzJywgJ2Fycm93LWxlZnQnLCAnYXJyb3ctcmlnaHQnLCAnYXJyb3ctdXAnLFxyXG5cdFx0J2Fycm93LWRvd24nLCAnY2hldnJvbi1sZWZ0JywgJ2NoZXZyb24tcmlnaHQnLCAnY2hldnJvbi11cCcsICdjaGV2cm9uLWRvd24nLFxyXG5cdFx0J21lbnUnLCAnbW9yZS1ob3Jpem9udGFsJywgJ21vcmUtdmVydGljYWwnLCAnZ3JpZCcsICdsaXN0JywgJ2xheW91dCcsXHJcblx0XHQnY29sdW1ucycsICdyb3dzJywgJ21heGltaXplJywgJ21pbmltaXplJywgJ3pvb20taW4nLCAnem9vbS1vdXQnLFxyXG5cdFx0J3JlZnJlc2gtY3cnLCAncGxheScsICdwYXVzZScsICdzdG9wJywgJ3N1bicsICdtb29uJywgJ2Nsb3VkJywgJ3phcCcsXHJcblx0XHQnd2FuZC0yJywgJ3dhbmQnLCAnd2FuZC1zcGFya2xlcycsICdwYWxldHRlJywgJ2JydXNoJywgJ3NsaWRlcnMnLFxyXG5cdFx0J3Bvd2VyJywgJ3dpZmknLCAnYmx1ZXRvb3RoJywgJ21vbml0b3InLCAnbGFwdG9wJywgJ3NtYXJ0cGhvbmUnLFxyXG5cdFx0J2NhbWVyYScsICdtaWMnLCAnaGVhZHBob25lcycsICdjb2RlJywgJ3Rlcm1pbmFsJywgJ3Rlcm1pbmFsLXNxdWFyZScsXHJcblx0XHQnZ2l0aHViJywgJ2dpdGxhYicsICdnaXQtYnJhbmNoJywgJ2dpdC1jb21taXQnLCAnZGF0YWJhc2UnLCAnc2VydmVyJyxcclxuXHRcdCdjbG91ZC1kb3dubG9hZCcsICdjbG91ZC11cGxvYWQnLCAndGFnJywgJ3RhZ3MnLCAnZmxhZycsICdwaW4nLFxyXG5cdFx0J21hcC1waW4nLCAnY29tcGFzcycsICdnbG9iZScsICdyb2NrZXQnLCAnY2FyJywgJ2Jpa2UnLCAncm9ib3QnLFxyXG5cdFx0J2FwcGxlJywgJ3dpbmRvd3MnLCAnbGludXgnLCAnY2hyb21lJywgJ2ZpcmVmb3gnLCAnc2FmYXJpJyxcclxuXHRcdCdjcmVkaXQtY2FyZCcsICd3YWxsZXQnLCAnY29pbnMnLCAnYm9vaycsICdib29rLW9wZW4nLCAnYXdhcmQnLFxyXG5cdFx0J3Ryb3BoeScsICdiYWRnZScsICd3cmVuY2gnLCAndG9vbCcsICdwYWNrYWdlJywgJ2JveCcsICdhcmNoaXZlJyxcclxuXHRcdCdzZW5kJywgJ3JlcGx5JywgJ2ZvcndhcmQnLCAnbWFpbC1vcGVuJywgJ3RhZy1wbHVzJywgJ3RhZy1taW51cycsXHJcblx0XHQnZmxhZy1vZmYnLCAncGluLW9mZicsICdtYXAtcGluLW9mZicsICduYXZpZ2F0aW9uJywgJ21hcCcsICdlYXJ0aCcsXHJcblx0XHQncGxhbmUnLCAnc2hpcCcsICdhbmNob3InLCAnaGVsaWNvcHRlcicsICdkcm9uZScsICdhbmRyb2lkJyxcclxuXHRcdCdrZXlob2xlJywgJ2tleXMnLCAnZmluZ2VycHJpbnQnLCAnc2NhbicsICdxci1jb2RlJywgJ2JhcmNvZGUnLFxyXG5cdFx0J3JlY2VpcHQnLCAncGlnZ3ktYmFuaycsICdiYW5rbm90ZSdcclxuXHRdO1xyXG59O1xyXG5cclxuLy8gQ29udmVydCBpY29uIElEcyB0byBJY29uT3B0aW9uIGZvcm1hdFxyXG5jb25zdCBMVUNJREVfSUNPTlM6IEljb25PcHRpb25bXSA9IGdldEljb25MaXN0KCkubWFwKGlkID0+ICh7XHJcblx0aWQ6IGlkLFxyXG5cdG5hbWU6IGlkXHJcblx0XHQucmVwbGFjZSgvXmx1Y2lkZS0vLCAnJykgLy8gUmVtb3ZlIGx1Y2lkZS0gcHJlZml4IGZvciBkaXNwbGF5XHJcblx0XHQucmVwbGFjZSgvLS9nLCAnICcpXHJcblx0XHQucmVwbGFjZSgvKF5cXHd7MX0pfChcXHMrXFx3ezF9KS9nLCAobGV0dGVyKSA9PiBsZXR0ZXIudG9VcHBlckNhc2UoKSlcclxufSkpLnNvcnQoKGEsIGIpID0+IGEubmFtZS5sb2NhbGVDb21wYXJlKGIubmFtZSkpO1xyXG5cclxuZXhwb3J0IGNsYXNzIEljb25QaWNrZXJNb2RhbCBleHRlbmRzIEZ1enp5U3VnZ2VzdE1vZGFsPEljb25PcHRpb24+IHtcclxuXHRwcml2YXRlIG9uU2VsZWN0OiAoaWNvbklkOiBzdHJpbmcpID0+IHZvaWQ7XHJcblxyXG5cdGNvbnN0cnVjdG9yKGFwcDogQXBwLCBvblNlbGVjdDogKGljb25JZDogc3RyaW5nKSA9PiB2b2lkKSB7XHJcblx0XHRzdXBlcihhcHApO1xyXG5cdFx0dGhpcy5vblNlbGVjdCA9IG9uU2VsZWN0O1xyXG5cdH1cclxuXHJcblx0Z2V0SXRlbXMoKTogSWNvbk9wdGlvbltdIHtcclxuXHRcdHJldHVybiBMVUNJREVfSUNPTlM7XHJcblx0fVxyXG5cclxuXHRnZXRJdGVtVGV4dChpdGVtOiBJY29uT3B0aW9uKTogc3RyaW5nIHtcclxuXHRcdHJldHVybiBpdGVtLm5hbWU7XHJcblx0fVxyXG5cclxuXHRvbkNob29zZUl0ZW0oaXRlbTogSWNvbk9wdGlvbiwgZXZ0OiBNb3VzZUV2ZW50IHwgS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xyXG5cdFx0Ly8gU3RhbmRhcmRpemUgaWNvbiBJRCBieSByZW1vdmluZyBsdWNpZGUtIHByZWZpeFxyXG5cdFx0Y29uc3Qgbm9ybWFsaXplZElkID0gaXRlbS5pZC5yZXBsYWNlKC9ebHVjaWRlLS8sICcnKTtcclxuXHRcdHRoaXMub25TZWxlY3Qobm9ybWFsaXplZElkKTtcclxuXHR9XHJcblxyXG5cdC8vIE92ZXJyaWRlIHRvIHNob3cgaWNvbiBwcmV2aWV3XHJcblx0cmVuZGVyU3VnZ2VzdGlvbihtYXRjaDogeyBpdGVtOiBJY29uT3B0aW9uIH0sIGVsOiBIVE1MRWxlbWVudCk6IHZvaWQge1xyXG5cdFx0Y29uc3QgaXRlbSA9IG1hdGNoLml0ZW07XHJcblx0XHRlbC5hZGRDbGFzcygnbW9kLWNvbXBsZXgnKTtcclxuXHRcdGNvbnN0IGNvbnRlbnQgPSBlbC5jcmVhdGVEaXYoeyBjbHM6ICdzdWdnZXN0aW9uLWNvbnRlbnQnIH0pO1xyXG5cdFx0Y29udGVudC5jcmVhdGVEaXYoeyBjbHM6ICdzdWdnZXN0aW9uLXRpdGxlJywgdGV4dDogaXRlbS5uYW1lIH0pO1xyXG5cclxuXHRcdC8vIENyZWF0ZSBpY29uIHByZXZpZXcgdXNpbmcgT2JzaWRpYW4ncyBzZXRJY29uXHJcblx0XHRjb25zdCBhdXggPSBlbC5jcmVhdGVEaXYoeyBjbHM6ICdzdWdnZXN0aW9uLWF1eCcgfSk7XHJcblx0XHRzZXRJY29uKGF1eC5jcmVhdGVTcGFuKHsgY2xzOiAnc3VnZ2VzdGlvbi1mbGFpcicgfSksIGl0ZW0uaWQpO1xyXG5cdH1cclxufVxyXG5cclxuIiwgImltcG9ydCB7IEFwcCwgTW9kYWwgfSBmcm9tIFwib2JzaWRpYW5cIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBDb25maXJtTW9kYWwgZXh0ZW5kcyBNb2RhbCB7XHJcblx0cmVzdWx0OiBib29sZWFuID0gZmFsc2U7XHJcblx0cmVzb2x2ZVByb21pc2U6ICgocmVzdWx0OiBib29sZWFuKSA9PiB2b2lkKSB8IG51bGwgPSBudWxsO1xyXG5cclxuXHRjb25zdHJ1Y3RvcihhcHA6IEFwcCwgcHJpdmF0ZSBtZXNzYWdlOiBzdHJpbmcsIHByaXZhdGUgY29uZmlybVRleHQ6IHN0cmluZyA9IFwiQ29uZmlybVwiLCBwcml2YXRlIGNhbmNlbFRleHQ6IHN0cmluZyA9IFwiQ2FuY2VsXCIpIHtcclxuXHRcdHN1cGVyKGFwcCk7XHJcblx0fVxyXG5cclxuXHRvbk9wZW4oKSB7XHJcblx0XHRjb25zdCB7IGNvbnRlbnRFbCB9ID0gdGhpcztcclxuXHRcdGNvbnRlbnRFbC5lbXB0eSgpO1xyXG5cdFx0Y29udGVudEVsLmFkZENsYXNzKFwiYXN0cm8tY29tcG9zZXItY29uZmlybS1tb2RhbFwiKTtcclxuXHJcblx0XHRjb250ZW50RWwuY3JlYXRlRWwoXCJwXCIsIHsgdGV4dDogdGhpcy5tZXNzYWdlIH0pO1xyXG5cclxuXHRcdGNvbnN0IGJ1dHRvbkNvbnRhaW5lciA9IGNvbnRlbnRFbC5jcmVhdGVEaXYoeyBjbHM6IFwibW9kYWwtYnV0dG9uLWNvbnRhaW5lclwiIH0pO1xyXG5cclxuXHRcdGNvbnN0IGNhbmNlbEJ1dHRvbiA9IGJ1dHRvbkNvbnRhaW5lci5jcmVhdGVFbChcImJ1dHRvblwiLCB7XHJcblx0XHRcdHRleHQ6IHRoaXMuY2FuY2VsVGV4dCxcclxuXHRcdH0pO1xyXG5cdFx0Y2FuY2VsQnV0dG9uLm9uY2xpY2sgPSAoKSA9PiB7XHJcblx0XHRcdHRoaXMucmVzdWx0ID0gZmFsc2U7XHJcblx0XHRcdHRoaXMuY2xvc2UoKTtcclxuXHRcdH07XHJcblxyXG5cdFx0Y29uc3QgY29uZmlybUJ1dHRvbiA9IGJ1dHRvbkNvbnRhaW5lci5jcmVhdGVFbChcImJ1dHRvblwiLCB7XHJcblx0XHRcdHRleHQ6IHRoaXMuY29uZmlybVRleHQsXHJcblx0XHRcdGNsczogXCJtb2QtY3RhIG1vZC13YXJuaW5nXCIsXHJcblx0XHR9KTtcclxuXHRcdGNvbmZpcm1CdXR0b24ub25jbGljayA9ICgpID0+IHtcclxuXHRcdFx0dGhpcy5yZXN1bHQgPSB0cnVlO1xyXG5cdFx0XHR0aGlzLmNsb3NlKCk7XHJcblx0XHR9O1xyXG5cdH1cclxuXHJcblx0b25DbG9zZSgpIHtcclxuXHRcdGNvbnN0IHsgY29udGVudEVsIH0gPSB0aGlzO1xyXG5cdFx0Y29udGVudEVsLmVtcHR5KCk7XHJcblx0XHRpZiAodGhpcy5yZXNvbHZlUHJvbWlzZSkge1xyXG5cdFx0XHR0aGlzLnJlc29sdmVQcm9taXNlKHRoaXMucmVzdWx0KTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGFzeW5jIHdhaXRGb3JSZXN1bHQoKTogUHJvbWlzZTxib29sZWFuPiB7XHJcblx0XHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcclxuXHRcdFx0dGhpcy5yZXNvbHZlUHJvbWlzZSA9IHJlc29sdmU7XHJcblx0XHRcdHRoaXMub3BlbigpO1xyXG5cdFx0fSk7XHJcblx0fVxyXG59XHJcblxyXG4iLCAiLyoqXHJcbiAqIENvbXBhdGliaWxpdHkgdXRpbGl0aWVzIGZvciBzZXR0aW5nc1xyXG4gKiBQcm92aWRlcyBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IGZvciBTZXR0aW5nR3JvdXAgKHJlcXVpcmVzIEFQSSAxLjExLjArKVxyXG4gKi9cclxuXHJcbmltcG9ydCB7IFNldHRpbmcsIHJlcXVpcmVBcGlWZXJzaW9uIH0gZnJvbSAnb2JzaWRpYW4nO1xyXG5pbXBvcnQgKiBhcyBPYnNpZGlhbk1vZHVsZSBmcm9tICdvYnNpZGlhbic7XHJcblxyXG4vKipcclxuICogSW50ZXJmYWNlIHRoYXQgd29ya3Mgd2l0aCBib3RoIFNldHRpbmdHcm91cCBhbmQgZmFsbGJhY2sgY29udGFpbmVyXHJcbiAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIFNldHRpbmdzQ29udGFpbmVyIHtcclxuXHRhZGRTZXR0aW5nKGNiOiAoc2V0dGluZzogU2V0dGluZykgPT4gdm9pZCk6IHZvaWQ7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBDcmVhdGVzIGEgc2V0dGluZ3MgY29udGFpbmVyIHRoYXQgdXNlcyBTZXR0aW5nR3JvdXAgaWYgYXZhaWxhYmxlIChBUEkgMS4xMS4wKyksXHJcbiAqIG90aGVyd2lzZSBmYWxscyBiYWNrIHRvIGNyZWF0aW5nIGEgaGVhZGluZyBhbmQgdXNpbmcgdGhlIGNvbnRhaW5lciBkaXJlY3RseS5cclxuICogXHJcbiAqIFVzZXMgcmVxdWlyZUFwaVZlcnNpb24oJzEuMTEuMCcpIHRvIGNoZWNrIGlmIFNldHRpbmdHcm91cCBpcyBhdmFpbGFibGUuXHJcbiAqIFRoaXMgaXMgdGhlIG9mZmljaWFsIE9ic2lkaWFuIEFQSSBtZXRob2QgZm9yIHZlcnNpb24gY2hlY2tpbmcuXHJcbiAqIFxyXG4gKiBAcGFyYW0gY29udGFpbmVyRWwgLSBUaGUgY29udGFpbmVyIGVsZW1lbnQgZm9yIHNldHRpbmdzXHJcbiAqIEBwYXJhbSBoZWFkaW5nIC0gVGhlIGhlYWRpbmcgdGV4dCBmb3IgdGhlIHNldHRpbmdzIGdyb3VwIChvcHRpb25hbClcclxuICogQHBhcmFtIG1hbmlmZXN0SWQgLSBUaGUgcGx1Z2luJ3MgbWFuaWZlc3QgSUQgZm9yIENTUyBzY29waW5nIChyZXF1aXJlZCBmb3IgZmFsbGJhY2sgbW9kZSlcclxuICogQHJldHVybnMgQSBjb250YWluZXIgdGhhdCBjYW4gYmUgdXNlZCB0byBhZGQgc2V0dGluZ3NcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVTZXR0aW5nc0dyb3VwKFxyXG5cdGNvbnRhaW5lckVsOiBIVE1MRWxlbWVudCxcclxuXHRoZWFkaW5nPzogc3RyaW5nLFxyXG5cdG1hbmlmZXN0SWQ/OiBzdHJpbmdcclxuKTogU2V0dGluZ3NDb250YWluZXIge1xyXG5cdC8vIENoZWNrIGlmIFNldHRpbmdHcm91cCBpcyBhdmFpbGFibGUgKEFQSSAxLjExLjArKVxyXG5cdC8vIHJlcXVpcmVBcGlWZXJzaW9uIGlzIHRoZSBvZmZpY2lhbCBPYnNpZGlhbiBBUEkgbWV0aG9kIGZvciB2ZXJzaW9uIGNoZWNraW5nXHJcblx0aWYgKHJlcXVpcmVBcGlWZXJzaW9uKCcxLjExLjAnKSkge1xyXG5cdFx0Ly8gVXNlIFNldHRpbmdHcm91cCAtIGl0J3MgZ3VhcmFudGVlZCB0byBleGlzdCBpZiByZXF1aXJlQXBpVmVyc2lvbiByZXR1cm5zIHRydWVcclxuXHRcdC8vIEFjY2VzcyBTZXR0aW5nR3JvdXAgdmlhIHR5cGUgYXNzZXJ0aW9uIHNpbmNlIGl0IG1heSBub3QgYmUgaW4gdHlwZSBkZWZpbml0aW9uc1xyXG5cdFx0Ly8gZm9yIG9sZGVyIFR5cGVTY3JpcHQgdmVyc2lvbnMsIGJ1dCBleGlzdHMgYXQgcnVudGltZSBpbiBPYnNpZGlhbiAxLjExLjArXHJcblx0XHQvLyBVc2luZyB1bmtub3duIGluc3RlYWQgb2YgYW55IHRvIHNhdGlzZnkgZXNsaW50IHdoaWxlIG1haW50YWluaW5nIHR5cGUgc2FmZXR5XHJcblx0XHRjb25zdCBTZXR0aW5nR3JvdXBDbGFzcyA9IChPYnNpZGlhbk1vZHVsZSBhcyB1bmtub3duIGFzIHsgU2V0dGluZ0dyb3VwPzogbmV3IChjb250YWluZXJFbDogSFRNTEVsZW1lbnQpID0+IHtcclxuXHRcdFx0c2V0SGVhZGluZyhoZWFkaW5nOiBzdHJpbmcpOiB7XHJcblx0XHRcdFx0YWRkU2V0dGluZyhjYjogKHNldHRpbmc6IFNldHRpbmcpID0+IHZvaWQpOiB2b2lkO1xyXG5cdFx0XHR9O1xyXG5cdFx0XHRhZGRTZXR0aW5nKGNiOiAoc2V0dGluZzogU2V0dGluZykgPT4gdm9pZCk6IHZvaWQ7XHJcblx0XHR9IH0pLlNldHRpbmdHcm91cDtcclxuXHRcdFxyXG5cdFx0aWYgKFNldHRpbmdHcm91cENsYXNzKSB7XHJcblx0XHRcdGNvbnN0IGdyb3VwID0gaGVhZGluZyBcclxuXHRcdFx0XHQ/IG5ldyBTZXR0aW5nR3JvdXBDbGFzcyhjb250YWluZXJFbCkuc2V0SGVhZGluZyhoZWFkaW5nKVxyXG5cdFx0XHRcdDogbmV3IFNldHRpbmdHcm91cENsYXNzKGNvbnRhaW5lckVsKTtcclxuXHRcdFx0cmV0dXJuIHtcclxuXHRcdFx0XHRhZGRTZXR0aW5nKGNiOiAoc2V0dGluZzogU2V0dGluZykgPT4gdm9pZCkge1xyXG5cdFx0XHRcdFx0Z3JvdXAuYWRkU2V0dGluZyhjYik7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9O1xyXG5cdFx0fVxyXG5cdH1cclxuXHRcclxuXHQvLyBGYWxsYmFjayBwYXRoIChlaXRoZXIgQVBJIDwgMS4xMS4wIG9yIFNldHRpbmdHcm91cCBub3QgZm91bmQpXHJcblx0Ly8gQWRkIHNjb3BpbmcgY2xhc3MgdG8gY29udGFpbmVyRWwgdG8gc2NvcGUgQ1NTIHRvIG9ubHkgdGhpcyBwbHVnaW4ncyBzZXR0aW5nc1xyXG5cdGlmIChtYW5pZmVzdElkKSB7XHJcblx0XHRjb250YWluZXJFbC5hZGRDbGFzcyhgJHttYW5pZmVzdElkfS1zZXR0aW5ncy1jb21wYXRgKTtcclxuXHR9XHJcblx0XHJcblx0e1xyXG5cdFx0Ly8gRmFsbGJhY2s6IENyZWF0ZSBhIGhlYWRpbmcgbWFudWFsbHkgZm9yIG9sZGVyIEFQSSB2ZXJzaW9uc1xyXG5cdFx0Ly8gTm90ZTogV2hpbGUgYmVzdCBwcmFjdGljZSBwcmVmZXJzIFNldHRpbmcuc2V0SGVhZGluZygpLCB0aGUgZmFsbGJhY2sgcGF0aFxyXG5cdFx0Ly8gaXMgZm9yIHZlcnNpb25zIHRoYXQgbWF5IG5vdCBzdXBwb3J0IGl0LCBzbyBtYW51YWwgaGVhZGluZyBpcyBhcHByb3ByaWF0ZSBoZXJlXHJcblx0XHRpZiAoaGVhZGluZykge1xyXG5cdFx0XHRjb25zdCBoZWFkaW5nRWwgPSBjb250YWluZXJFbC5jcmVhdGVEaXYoJ3NldHRpbmctZ3JvdXAtaGVhZGluZycpO1xyXG5cdFx0XHRoZWFkaW5nRWwuY3JlYXRlRWwoJ2gzJywgeyB0ZXh0OiBoZWFkaW5nIH0pO1xyXG5cdFx0fVxyXG5cdFx0XHJcblx0XHRyZXR1cm4ge1xyXG5cdFx0XHRhZGRTZXR0aW5nKGNiOiAoc2V0dGluZzogU2V0dGluZykgPT4gdm9pZCkge1xyXG5cdFx0XHRcdGNvbnN0IHNldHRpbmcgPSBuZXcgU2V0dGluZyhjb250YWluZXJFbCk7XHJcblx0XHRcdFx0Y2Ioc2V0dGluZyk7XHJcblx0XHRcdH1cclxuXHRcdH07XHJcblx0fVxyXG59XHJcbiIsICJpbXBvcnQgeyBURmlsZSwgSGVhZGluZ0NhY2hlLCBBcHAgfSBmcm9tIFwib2JzaWRpYW5cIjtcbmltcG9ydCB7IEFzdHJvQ29tcG9zZXJTZXR0aW5ncywgQXN0cm9Db21wb3NlclBsdWdpbkludGVyZmFjZSB9IGZyb20gXCIuLi90eXBlc1wiO1xuaW1wb3J0IHsgbWF0Y2hlc0ZvbGRlclBhdHRlcm4sIHNvcnRCeVBhdHRlcm5TcGVjaWZpY2l0eSB9IGZyb20gXCIuL3BhdGgtbWF0Y2hpbmdcIjtcbmltcG9ydCB7IHRvS2ViYWJDYXNlIH0gZnJvbSBcIi4vc3RyaW5nLXV0aWxzXCI7XG5cbmV4cG9ydCBjbGFzcyBIZWFkaW5nTGlua0dlbmVyYXRvciB7XG5cdGNvbnN0cnVjdG9yKHByaXZhdGUgc2V0dGluZ3M6IEFzdHJvQ29tcG9zZXJTZXR0aW5ncywgcHJpdmF0ZSBwbHVnaW4/OiBBc3Ryb0NvbXBvc2VyUGx1Z2luSW50ZXJmYWNlKSB7IH1cblxuXHQvLyBHZXQgZnJlc2ggc2V0dGluZ3MgZnJvbSBwbHVnaW4gaWYgYXZhaWxhYmxlLCBvdGhlcndpc2UgdXNlIHN0b3JlZCBzZXR0aW5nc1xuXHRwcml2YXRlIGdldFNldHRpbmdzKCk6IEFzdHJvQ29tcG9zZXJTZXR0aW5ncyB7XG5cdFx0Ly8gQWx3YXlzIHByZWZlciBwbHVnaW4gc2V0dGluZ3MgKHRoZXkncmUga2VwdCB1cCB0byBkYXRlKVxuXHRcdGlmICh0aGlzLnBsdWdpbj8uc2V0dGluZ3MpIHtcblx0XHRcdHJldHVybiB0aGlzLnBsdWdpbi5zZXR0aW5ncztcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXMuc2V0dGluZ3M7XG5cdH1cblxuXHQvKipcblx0ICogQ29udmVydHMgdGV4dCB0byBrZWJhYi1jYXNlIHNsdWcgZm9yIFVSTHNcblx0ICovXG5cdC8vIExvY2FsIHRvS2ViYWJDYXNlIHJlbW92ZWQsIHVzaW5nIGltcG9ydGVkIG9uZSBpbnN0ZWFkXG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIEFzdHJvLWNvbXBhdGlibGUgVVJMIGZyb20gYW4gaW50ZXJuYWwgbGluayAoY29waWVkIGZyb20gTGlua0NvbnZlcnRlcilcblx0ICovXG5cdHByaXZhdGUgZ2V0QXN0cm9VcmxGcm9tSW50ZXJuYWxMaW5rKGxpbms6IHN0cmluZyk6IHN0cmluZyB7XG5cdFx0Y29uc3QgaGFzaEluZGV4ID0gbGluay5pbmRleE9mKCcjJyk7XG5cdFx0bGV0IHBhdGggPSBoYXNoSW5kZXggPj0gMCA/IGxpbmsuc2xpY2UoMCwgaGFzaEluZGV4KSA6IGxpbms7XG5cdFx0Y29uc3QgYW5jaG9yID0gaGFzaEluZGV4ID49IDAgPyBsaW5rLnNsaWNlKGhhc2hJbmRleCkgOiAnJztcblxuXHRcdHBhdGggPSBwYXRoLnJlcGxhY2UoL1xcLm1kJC8sIFwiXCIpO1xuXG5cdFx0Ly8gRGV0ZXJtaW5lIGNvbnRlbnQgdHlwZSBhbmQgYXBwcm9wcmlhdGUgYmFzZSBwYXRoXG5cdFx0bGV0IGJhc2VQYXRoID0gXCJcIjtcblx0XHRsZXQgY29udGVudEZvbGRlciA9IFwiXCI7XG5cdFx0bGV0IGNyZWF0aW9uTW9kZTogXCJmaWxlXCIgfCBcImZvbGRlclwiID0gXCJmaWxlXCI7XG5cdFx0bGV0IGluZGV4RmlsZU5hbWUgPSBcIlwiO1xuXG5cdFx0Ly8gQ2hlY2sgYWxsIGNvbnRlbnQgdHlwZXMsIHNvcnRlZCBieSBwYXR0ZXJuIHNwZWNpZmljaXR5IChtb3JlIHNwZWNpZmljIGZpcnN0KVxuXHRcdGNvbnN0IHNldHRpbmdzID0gdGhpcy5nZXRTZXR0aW5ncygpO1xuXHRcdGNvbnN0IGNvbnRlbnRUeXBlcyA9IHNldHRpbmdzLmNvbnRlbnRUeXBlcyB8fCBbXTtcblx0XHRjb25zdCBzb3J0ZWRUeXBlcyA9IHNvcnRCeVBhdHRlcm5TcGVjaWZpY2l0eShjb250ZW50VHlwZXMpO1xuXG5cdFx0Zm9yIChjb25zdCBjb250ZW50VHlwZSBvZiBzb3J0ZWRUeXBlcykge1xuXHRcdFx0aWYgKCFjb250ZW50VHlwZS5lbmFibGVkKSBjb250aW51ZTtcblxuXHRcdFx0bGV0IG1hdGNoZXMgPSBmYWxzZTtcblxuXHRcdFx0Ly8gSGFuZGxlIGJsYW5rIGZvbGRlciAocm9vdCkgLSBtYXRjaGVzIGZpbGVzIGluIHZhdWx0IHJvb3Qgb25seVxuXHRcdFx0aWYgKCFjb250ZW50VHlwZS5mb2xkZXIgfHwgY29udGVudFR5cGUuZm9sZGVyLnRyaW0oKSA9PT0gXCJcIikge1xuXHRcdFx0XHRpZiAoIXBhdGguaW5jbHVkZXMoXCIvXCIpIHx8IHBhdGguc3BsaXQoXCIvXCIpLmxlbmd0aCA9PT0gMSkge1xuXHRcdFx0XHRcdG1hdGNoZXMgPSB0cnVlO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2UgaWYgKG1hdGNoZXNGb2xkZXJQYXR0ZXJuKHBhdGgsIGNvbnRlbnRUeXBlLmZvbGRlcikpIHtcblx0XHRcdFx0bWF0Y2hlcyA9IHRydWU7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChtYXRjaGVzKSB7XG5cdFx0XHRcdGNvbnRlbnRGb2xkZXIgPSBjb250ZW50VHlwZS5mb2xkZXIgfHwgXCJcIjtcblx0XHRcdFx0YmFzZVBhdGggPSBjb250ZW50VHlwZS5saW5rQmFzZVBhdGggfHwgXCJcIjtcblx0XHRcdFx0Y3JlYXRpb25Nb2RlID0gY29udGVudFR5cGUuY3JlYXRpb25Nb2RlO1xuXHRcdFx0XHRpbmRleEZpbGVOYW1lID0gY29udGVudFR5cGUuaW5kZXhGaWxlTmFtZSB8fCBcIlwiO1xuXHRcdFx0XHRicmVhazsgLy8gTW9zdCBzcGVjaWZpYyBwYXR0ZXJuIHdpbnNcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBTdHJpcCBjb250ZW50IGZvbGRlciBpZiBwcmVzZW50XG5cdFx0aWYgKGNvbnRlbnRGb2xkZXIpIHtcblx0XHRcdHBhdGggPSBwYXRoLnNsaWNlKGNvbnRlbnRGb2xkZXIubGVuZ3RoICsgMSk7XG5cdFx0fVxuXG5cdFx0bGV0IGFkZFRyYWlsaW5nU2xhc2ggPSBmYWxzZTtcblxuXHRcdC8vIFNtYXJ0IGRldGVjdGlvbjogaWYgdGhlIGZpbGVuYW1lIG1hdGNoZXMgdGhlIGluZGV4IGZpbGUgbmFtZSAocmVnYXJkbGVzcyBvZiBjcmVhdGlvbiBtb2RlKSxcblx0XHQvLyB0cmVhdCBpdCBhcyBmb2xkZXItYmFzZWQgbG9naWNcblx0XHQvLyBOb3RlOiBXZSBvbmx5IHNldCBhZGRUcmFpbGluZ1NsYXNoIGhlcmU7IHRoZSBmaW5hbCBjaGVjayB3aWxsIHByZXZlbnQgaXQgaWYgdGhlcmUncyBhbiBhbmNob3Jcblx0XHRpZiAoaW5kZXhGaWxlTmFtZSAmJiBpbmRleEZpbGVOYW1lLnRyaW0oKSAhPT0gXCJcIikge1xuXHRcdFx0Y29uc3QgcGFydHMgPSBwYXRoLnNwbGl0KCcvJyk7XG5cdFx0XHRpZiAocGFydHNbcGFydHMubGVuZ3RoIC0gMV0gPT09IGluZGV4RmlsZU5hbWUpIHtcblx0XHRcdFx0cGFydHMucG9wKCk7XG5cdFx0XHRcdHBhdGggPSBwYXJ0cy5qb2luKCcvJyk7XG5cdFx0XHRcdGFkZFRyYWlsaW5nU2xhc2ggPSB0cnVlO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSBpZiAoY3JlYXRpb25Nb2RlID09PSBcImZvbGRlclwiKSB7XG5cdFx0XHQvLyBGYWxsYmFjayB0byBvcmlnaW5hbCBsb2dpYyBpZiBubyBpbmRleCBmaWxlIG5hbWUgaXMgc3BlY2lmaWVkXG5cdFx0XHQvLyBEZWZhdWx0IHRvIFwiaW5kZXhcIiB3aGVuIGluZGV4RmlsZU5hbWUgaXMgYmxhbmtcblx0XHRcdGNvbnN0IGRlZmF1bHRJbmRleE5hbWUgPSBcImluZGV4XCI7XG5cdFx0XHRjb25zdCBwYXJ0cyA9IHBhdGguc3BsaXQoJy8nKTtcblx0XHRcdGlmIChwYXJ0c1twYXJ0cy5sZW5ndGggLSAxXSA9PT0gZGVmYXVsdEluZGV4TmFtZSkge1xuXHRcdFx0XHRwYXJ0cy5wb3AoKTtcblx0XHRcdFx0cGF0aCA9IHBhcnRzLmpvaW4oJy8nKTtcblx0XHRcdFx0YWRkVHJhaWxpbmdTbGFzaCA9IHRydWU7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Y29uc3Qgc2x1Z1BhcnRzID0gcGF0aC5zcGxpdCgnLycpLm1hcChwYXJ0ID0+IHRvS2ViYWJDYXNlKHBhcnQpKTtcblx0XHRjb25zdCBzbHVnID0gc2x1Z1BhcnRzLmpvaW4oJy8nKTtcblxuXHRcdC8vIEZvcm1hdCBiYXNlIHBhdGhcblx0XHRpZiAoYmFzZVBhdGgpIHtcblx0XHRcdGlmICghYmFzZVBhdGguc3RhcnRzV2l0aChcIi9cIikpIGJhc2VQYXRoID0gXCIvXCIgKyBiYXNlUGF0aDtcblx0XHRcdGlmICghYmFzZVBhdGguZW5kc1dpdGgoXCIvXCIpKSBiYXNlUGF0aCArPSBcIi9cIjtcblx0XHR9XG5cblx0XHQvLyBEZXRlcm1pbmUgaWYgd2Ugc2hvdWxkIGFkZCB0cmFpbGluZyBzbGFzaFxuXHRcdC8vIENSSVRJQ0FMOiBOZXZlciBhZGQgdHJhaWxpbmcgc2xhc2ggYmVmb3JlIGFuIGFuY2hvciAoZS5nLiwgL2Fib3V0I2hlYWRpbmcgbm90IC9hYm91dC8jaGVhZGluZylcblx0XHQvLyBUaGlzIGlzIGVzcGVjaWFsbHkgaW1wb3J0YW50IGZvciBhbmNob3IgbGlua3MgZnJvbSBjb3B5IGhlYWRpbmcgVVJMIGZ1bmN0aW9uYWxpdHlcblx0XHQvLyBBbmNob3IgbGlua3Mgc2hvdWxkIE5FVkVSIGhhdmUgdHJhaWxpbmcgc2xhc2hlcywgcmVnYXJkbGVzcyBvZiBzZXR0aW5nc1xuXHRcdGNvbnN0IHNob3VsZEFkZFRyYWlsaW5nU2xhc2ggPSAoc2V0dGluZ3MuYWRkVHJhaWxpbmdTbGFzaFRvTGlua3MgfHwgYWRkVHJhaWxpbmdTbGFzaCkgJiYgIWFuY2hvcjtcblxuXHRcdHJldHVybiBgJHtiYXNlUGF0aH0ke3NsdWd9JHtzaG91bGRBZGRUcmFpbGluZ1NsYXNoID8gJy8nIDogJyd9JHthbmNob3J9YDtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZW5lcmF0ZXMgYSBzdGFuZGFyZCBPYnNpZGlhbiBsaW5rIHRvIGEgaGVhZGluZywgcmVzcGVjdGluZyB1c2VyJ3MgbGluayBmb3JtYXQgcHJlZmVyZW5jZVxuXHQgKi9cblx0Z2VuZXJhdGVPYnNpZGlhbkxpbmsoYXBwOiBBcHAsIGZpbGU6IFRGaWxlLCBoZWFkaW5nOiBIZWFkaW5nQ2FjaGUpOiBzdHJpbmcge1xuXHRcdGNvbnN0IGhlYWRpbmdUZXh0ID0gaGVhZGluZy5oZWFkaW5nO1xuXG5cdFx0Ly8gQ2hlY2sgaWYgdXNlciBwcmVmZXJzIHdpa2lsaW5rcyBieSB0ZXN0aW5nIE9ic2lkaWFuJ3MgZGVmYXVsdCBiZWhhdmlvclxuXHRcdGNvbnN0IHRlc3RMaW5rID0gYXBwLmZpbGVNYW5hZ2VyLmdlbmVyYXRlTWFya2Rvd25MaW5rKGZpbGUsICcnLCAnJyk7XG5cdFx0aWYgKHRlc3RMaW5rLnN0YXJ0c1dpdGgoJ1tbJykpIHtcblx0XHRcdC8vIFVzZXIgcHJlZmVycyB3aWtpbGlua3MgLSB1c2UganVzdCB0aGUgZmlsZW5hbWUgKGJhc2VuYW1lKSB3aXRob3V0IHBhdGhcblx0XHRcdGNvbnN0IGZpbGVOYW1lID0gZmlsZS5iYXNlbmFtZTtcblx0XHRcdHJldHVybiBgW1ske2ZpbGVOYW1lfSMke2hlYWRpbmdUZXh0fXwke2hlYWRpbmdUZXh0fV1dYDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gVXNlciBwcmVmZXJzIG1hcmtkb3duIGxpbmtzIC0gdXNlIE9ic2lkaWFuJ3MgbWV0aG9kIHdpdGggaGVhZGluZyB0ZXh0IGFzLWlzIChVUkwtZW5jb2RlZClcblx0XHRcdC8vIEdldCB0aGUgYmFzZSBsaW5rIGZyb20gT2JzaWRpYW4gKHJlc3BlY3RzIHVzZXIncyBwYXRoIHNldHRpbmdzKVxuXHRcdFx0Y29uc3QgYmFzZUxpbmsgPSBhcHAuZmlsZU1hbmFnZXIuZ2VuZXJhdGVNYXJrZG93bkxpbmsoZmlsZSwgJycsICcnKTtcblx0XHRcdC8vIEV4dHJhY3QgdGhlIHBhdGggcGFydCBhbmQgYWRkIG91ciBhbmNob3Igd2l0aCBwcm9wZXIgZGlzcGxheSB0ZXh0XG5cdFx0XHRpZiAoYmFzZUxpbmsuc3RhcnRzV2l0aCgnW1snKSkge1xuXHRcdFx0XHQvLyBUaGlzIHNob3VsZG4ndCBoYXBwZW4gc2luY2Ugd2UncmUgaW4gdGhlIG1hcmtkb3duIGJyYW5jaCwgYnV0IGp1c3QgaW4gY2FzZVxuXHRcdFx0XHRjb25zdCBmaWxlTmFtZSA9IGZpbGUuYmFzZW5hbWU7XG5cdFx0XHRcdHJldHVybiBgW1ske2ZpbGVOYW1lfSMke2hlYWRpbmdUZXh0fXwke2hlYWRpbmdUZXh0fV1dYDtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdC8vIEV4dHJhY3QgdGhlIHBhdGggZnJvbSB0aGUgZ2VuZXJhdGVkIGxpbmsgYW5kIHJlY29uc3RydWN0IHdpdGggcHJvcGVyIGRpc3BsYXkgdGV4dFxuXHRcdFx0XHRjb25zdCBtYXRjaCA9IGJhc2VMaW5rLm1hdGNoKC9cXFsoW15cXF1dKylcXF1cXCgoW14pXSspXFwpLyk7XG5cdFx0XHRcdGlmIChtYXRjaCkge1xuXHRcdFx0XHRcdGNvbnN0IFssICwgcGF0aF0gPSBtYXRjaDtcblx0XHRcdFx0XHQvLyBGb3IgT2JzaWRpYW4sIHVzZSB0aGUgaGVhZGluZyB0ZXh0IGFzLWlzIChVUkwtZW5jb2RlZCksIG5vdCBrZWJhYi1jYXNlXG5cdFx0XHRcdFx0cmV0dXJuIGBbJHtoZWFkaW5nVGV4dH1dKCR7cGF0aH0jJHtlbmNvZGVVUklDb21wb25lbnQoaGVhZGluZ1RleHQpfSlgO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdC8vIEZhbGxiYWNrIHRvIG1hbnVhbCBjb25zdHJ1Y3Rpb25cblx0XHRcdFx0XHRjb25zdCBlbmNvZGVkRmlsZW5hbWUgPSBlbmNvZGVVUklDb21wb25lbnQoZmlsZS5uYW1lKTtcblx0XHRcdFx0XHQvLyBGb3IgT2JzaWRpYW4sIHVzZSB0aGUgaGVhZGluZyB0ZXh0IGFzLWlzIChVUkwtZW5jb2RlZClcblx0XHRcdFx0XHRyZXR1cm4gYFske2hlYWRpbmdUZXh0fV0oJHtlbmNvZGVkRmlsZW5hbWV9IyR7ZW5jb2RlVVJJQ29tcG9uZW50KGhlYWRpbmdUZXh0KX0pYDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBHZW5lcmF0ZXMgYSBzdGFuZGFyZCBPYnNpZGlhbiB3aWtpbGluayB0byBhIGhlYWRpbmdcblx0ICovXG5cdGdlbmVyYXRlT2JzaWRpYW5XaWtpbGluayhmaWxlOiBURmlsZSwgaGVhZGluZzogSGVhZGluZ0NhY2hlKTogc3RyaW5nIHtcblx0XHRjb25zdCBoZWFkaW5nVGV4dCA9IGhlYWRpbmcuaGVhZGluZztcblx0XHQvLyBVc2UganVzdCB0aGUgZmlsZW5hbWUgKGJhc2VuYW1lKSwgbm90IHRoZSBmdWxsIHBhdGhcblx0XHRjb25zdCBmaWxlTmFtZSA9IGZpbGUuYmFzZW5hbWU7XG5cdFx0cmV0dXJuIGBbWyR7ZmlsZU5hbWV9IyR7aGVhZGluZ1RleHR9fCR7aGVhZGluZ1RleHR9XV1gO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdlbmVyYXRlcyBhbiBBc3Ryby1jb21wYXRpYmxlIG1hcmtkb3duIGxpbmsgdG8gYSBoZWFkaW5nXG5cdCAqL1xuXHRnZW5lcmF0ZUFzdHJvTGluayhmaWxlOiBURmlsZSwgaGVhZGluZzogSGVhZGluZ0NhY2hlKTogc3RyaW5nIHtcblx0XHRjb25zdCBoZWFkaW5nVGV4dCA9IGhlYWRpbmcuaGVhZGluZztcblx0XHRjb25zdCBhbmNob3IgPSB0b0tlYmFiQ2FzZShoZWFkaW5nVGV4dCk7XG5cdFx0Ly8gVXNlIHRoZSBzYW1lIGxvZ2ljIGFzIHRoZSBleGlzdGluZyBsaW5rIGNvbnZlcnRlclxuXHRcdGNvbnN0IGludGVybmFsTGluayA9IGAke2ZpbGUucGF0aH0jJHthbmNob3J9YDtcblx0XHRjb25zdCBhc3Ryb1VybCA9IHRoaXMuZ2V0QXN0cm9VcmxGcm9tSW50ZXJuYWxMaW5rKGludGVybmFsTGluayk7XG5cdFx0cmV0dXJuIGBbJHtoZWFkaW5nVGV4dH1dKCR7YXN0cm9Vcmx9KWA7XG5cdH1cblxuXHQvKipcblx0ICogR2VuZXJhdGVzIGFuIEFzdHJvLWNvbXBhdGlibGUgd2lraWxpbmsgdG8gYSBoZWFkaW5nXG5cdCAqL1xuXHRnZW5lcmF0ZUFzdHJvV2lraWxpbmsoZmlsZTogVEZpbGUsIGhlYWRpbmc6IEhlYWRpbmdDYWNoZSk6IHN0cmluZyB7XG5cdFx0Y29uc3QgaGVhZGluZ1RleHQgPSBoZWFkaW5nLmhlYWRpbmc7XG5cdFx0Y29uc3QgYW5jaG9yID0gdG9LZWJhYkNhc2UoaGVhZGluZ1RleHQpO1xuXHRcdC8vIFVzZSB0aGUgc2FtZSBsb2dpYyBhcyB0aGUgZXhpc3RpbmcgbGluayBjb252ZXJ0ZXJcblx0XHRjb25zdCBpbnRlcm5hbExpbmsgPSBgJHtmaWxlLnBhdGh9IyR7YW5jaG9yfWA7XG5cdFx0Y29uc3QgYXN0cm9VcmwgPSB0aGlzLmdldEFzdHJvVXJsRnJvbUludGVybmFsTGluayhpbnRlcm5hbExpbmspO1xuXHRcdC8vIENyZWF0ZSBhIHdpa2lsaW5rIHdpdGggdGhlIEFzdHJvIFVSTCBhcyB0aGUgdGFyZ2V0XG5cdFx0cmV0dXJuIGBbWyR7aGVhZGluZ1RleHR9fCR7YXN0cm9Vcmx9XV1gO1xuXHR9XG5cblx0LyoqXG5cdCAqIEV4dHJhY3RzIHRoZSBVUkwgZnJvbSBhIG1hcmtkb3duIGxpbmsgb3Igd2lraWxpbmtcblx0ICovXG5cdGV4dHJhY3RVcmwobGluazogc3RyaW5nKTogc3RyaW5nIHtcblx0XHQvLyBIYW5kbGUgbWFya2Rvd24gbGlua3M6IFt0ZXh0XSh1cmwpXG5cdFx0Y29uc3QgbWFya2Rvd25NYXRjaCA9IGxpbmsubWF0Y2goL1xcWyhbXlxcXV0rKVxcXVxcKChbXildKylcXCkvKTtcblx0XHRpZiAobWFya2Rvd25NYXRjaCkge1xuXHRcdFx0cmV0dXJuIG1hcmtkb3duTWF0Y2hbMl07XG5cdFx0fVxuXG5cdFx0Ly8gSGFuZGxlIHdpa2lsaW5rczogW1twYXRoI2hlYWRpbmd8dGV4dF1dIG9yIFtbcGF0aCNoZWFkaW5nXV1cblx0XHRjb25zdCB3aWtpbGlua01hdGNoID0gbGluay5tYXRjaCgvXFxbXFxbKFteXFxdXSspXFxdXFxdLyk7XG5cdFx0aWYgKHdpa2lsaW5rTWF0Y2gpIHtcblx0XHRcdGNvbnN0IGNvbnRlbnQgPSB3aWtpbGlua01hdGNoWzFdO1xuXHRcdFx0Ly8gRXh0cmFjdCB0aGUgcGF0aCBwYXJ0IChiZWZvcmUgfCBpZiBwcmVzZW50KVxuXHRcdFx0Y29uc3QgcGF0aFBhcnQgPSBjb250ZW50LnNwbGl0KCd8JylbMF07XG5cdFx0XHRyZXR1cm4gcGF0aFBhcnQ7XG5cdFx0fVxuXG5cdFx0Ly8gSWYgaXQgZG9lc24ndCBtYXRjaCBlaXRoZXIgZm9ybWF0LCByZXR1cm4gYXMtaXMgKG1pZ2h0IGFscmVhZHkgYmUgYSBVUkwpXG5cdFx0cmV0dXJuIGxpbms7XG5cdH1cblxuXHQvKipcblx0ICogR2VuZXJhdGVzIHRoZSBhcHByb3ByaWF0ZSBsaW5rIGZvcm1hdCBiYXNlZCBvbiBzZXR0aW5nc1xuXHQgKi9cblx0Z2VuZXJhdGVMaW5rKGFwcDogQXBwLCBmaWxlOiBURmlsZSwgaGVhZGluZzogSGVhZGluZ0NhY2hlKTogc3RyaW5nIHtcblx0XHRjb25zdCBzZXR0aW5ncyA9IHRoaXMuZ2V0U2V0dGluZ3MoKTtcblx0XHRpZiAoc2V0dGluZ3MuY29weUhlYWRpbmdMaW5rRm9ybWF0ID09PSBcImFzdHJvXCIpIHtcblx0XHRcdC8vIEFzdHJvIGZvcm1hdCBhbHdheXMgdXNlcyBtYXJrZG93biBsaW5rcyAod2lraWxpbmtzIHdpdGggQXN0cm8gVVJMcyBkb24ndCBtYWtlIHNlbnNlKVxuXHRcdFx0cmV0dXJuIHRoaXMuZ2VuZXJhdGVBc3Ryb0xpbmsoZmlsZSwgaGVhZGluZyk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIFVzZSBPYnNpZGlhbidzIGJ1aWx0LWluIG1ldGhvZCB3aGljaCByZXNwZWN0cyB1c2VyIHNldHRpbmdzXG5cdFx0XHRyZXR1cm4gdGhpcy5nZW5lcmF0ZU9ic2lkaWFuTGluayhhcHAsIGZpbGUsIGhlYWRpbmcpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBGaW5kcyB0aGUgaGVhZGluZyBhdCBhIHNwZWNpZmljIGxpbmUgaW4gYSBmaWxlXG5cdCAqL1xuXHRmaW5kSGVhZGluZ0F0TGluZShhcHA6IEFwcCwgZmlsZTogVEZpbGUsIGxpbmU6IG51bWJlcik6IEhlYWRpbmdDYWNoZSB8IG51bGwge1xuXHRcdGNvbnN0IGNhY2hlID0gYXBwLm1ldGFkYXRhQ2FjaGUuZ2V0RmlsZUNhY2hlKGZpbGUpO1xuXHRcdGlmICghY2FjaGUgfHwgIWNhY2hlLmhlYWRpbmdzKSB7XG5cdFx0XHRyZXR1cm4gbnVsbDtcblx0XHR9XG5cblx0XHQvLyBGaW5kIHRoZSBoZWFkaW5nIHRoYXQgY29udGFpbnMgdGhpcyBsaW5lXG5cdFx0Zm9yIChsZXQgaSA9IGNhY2hlLmhlYWRpbmdzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG5cdFx0XHRjb25zdCBoZWFkaW5nID0gY2FjaGUuaGVhZGluZ3NbaV07XG5cdFx0XHRpZiAoaGVhZGluZy5wb3NpdGlvbi5zdGFydC5saW5lIDw9IGxpbmUpIHtcblx0XHRcdFx0cmV0dXJuIGhlYWRpbmc7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cbn1cbiIsICJpbXBvcnQgeyBBcHAsIE5vdGljZSB9IGZyb20gXCJvYnNpZGlhblwiO1xyXG5pbXBvcnQgeyBDb250ZW50VHlwZSwgQXN0cm9Db21wb3NlclBsdWdpbkludGVyZmFjZSB9IGZyb20gXCIuLi90eXBlc1wiO1xyXG5pbXBvcnQgeyBNaWdyYXRpb25Nb2RhbCwgTWlncmF0aW9uQ29uZmxpY3RSZXN1bHQgfSBmcm9tIFwiLi4vdWkvY29tcG9uZW50cy9NaWdyYXRpb25Nb2RhbFwiO1xyXG5pbXBvcnQgeyBBc3Ryb0NvbXBvc2VyU2V0dGluZ1RhYiB9IGZyb20gXCIuLi91aS9zZXR0aW5ncy10YWJcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBNaWdyYXRpb25TZXJ2aWNlIHtcclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgYXBwOiBBcHAsIHByaXZhdGUgcGx1Z2luOiBBc3Ryb0NvbXBvc2VyUGx1Z2luSW50ZXJmYWNlKSB7IH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIE1pZ3JhdGUgb2xkIHBvc3RzL3BhZ2VzIHNldHRpbmdzIHRvIHVuaWZpZWQgY29udGVudCB0eXBlc1xyXG4gICAgICovXHJcbiAgICBwdWJsaWMgYXN5bmMgbWlncmF0ZVNldHRpbmdzSWZOZWVkZWQoKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICAgICAgY29uc3Qgc2V0dGluZ3MgPSB0aGlzLnBsdWdpbi5zZXR0aW5ncztcclxuXHJcbiAgICAgICAgLy8gQ2hlY2sgaWYgbWlncmF0aW9uIGlzIGFscmVhZHkgY29tcGxldGVkXHJcbiAgICAgICAgaWYgKHNldHRpbmdzLm1pZ3JhdGlvbkNvbXBsZXRlZCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBDaGVjayBpZiB0aGVyZSBhcmUgb2xkIHNldHRpbmdzIHRvIG1pZ3JhdGVcclxuICAgICAgICBjb25zdCBoYXNQb3N0c1NldHRpbmdzID0gc2V0dGluZ3MuYXV0b21hdGVQb3N0Q3JlYXRpb24gIT09IHVuZGVmaW5lZCAmJiBzZXR0aW5ncy5hdXRvbWF0ZVBvc3RDcmVhdGlvbjtcclxuICAgICAgICBjb25zdCBoYXNQYWdlc1NldHRpbmdzID0gc2V0dGluZ3MuZW5hYmxlUGFnZXMgIT09IHVuZGVmaW5lZCAmJiBzZXR0aW5ncy5lbmFibGVQYWdlcztcclxuXHJcbiAgICAgICAgaWYgKCFoYXNQb3N0c1NldHRpbmdzICYmICFoYXNQYWdlc1NldHRpbmdzKSB7XHJcbiAgICAgICAgICAgIC8vIE5vIG9sZCBzZXR0aW5ncyB0byBtaWdyYXRlLCBtYXJrIGFzIGNvbXBsZXRlZFxyXG4gICAgICAgICAgICBzZXR0aW5ncy5taWdyYXRpb25Db21wbGV0ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLnBsdWdpbi5zYXZlU2V0dGluZ3MoKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gQ2hlY2sgZm9yIG5hbWluZyBjb25mbGljdHNcclxuICAgICAgICBjb25zdCBsZWdhY3lDb250ZW50VHlwZXMgPSAoc2V0dGluZ3MgYXMgdW5rbm93biBhcyB7IGN1c3RvbUNvbnRlbnRUeXBlcz86IENvbnRlbnRUeXBlW10gfSkuY3VzdG9tQ29udGVudFR5cGVzO1xyXG4gICAgICAgIGNvbnN0IGV4aXN0aW5nQ29udGVudFR5cGVzID0gc2V0dGluZ3MuY29udGVudFR5cGVzIHx8IGxlZ2FjeUNvbnRlbnRUeXBlcyB8fCBbXTtcclxuICAgICAgICBjb25zdCBjb25mbGljdHM6IHN0cmluZ1tdID0gW107XHJcbiAgICAgICAgaWYgKGV4aXN0aW5nQ29udGVudFR5cGVzLnNvbWUoKGN0OiBDb250ZW50VHlwZSkgPT4gY3QubmFtZSA9PT0gXCJQb3N0c1wiKSkge1xyXG4gICAgICAgICAgICBjb25mbGljdHMucHVzaChcIlBvc3RzXCIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoZXhpc3RpbmdDb250ZW50VHlwZXMuc29tZSgoY3Q6IENvbnRlbnRUeXBlKSA9PiBjdC5uYW1lID09PSBcIlBhZ2VzXCIpKSB7XHJcbiAgICAgICAgICAgIGNvbmZsaWN0cy5wdXNoKFwiUGFnZXNcIik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgc2hvdWxkTWlncmF0ZSA9IHRydWU7XHJcblxyXG4gICAgICAgIC8vIElmIGNvbmZsaWN0cyBleGlzdCwgcHJvbXB0IHVzZXJcclxuICAgICAgICBpZiAoY29uZmxpY3RzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgYXdhaXQgbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUpID0+IHtcclxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHZvaWQgKGFzeW5jICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1vZGFsID0gbmV3IE1pZ3JhdGlvbk1vZGFsKHRoaXMuYXBwLCBjb25mbGljdHMpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdGltZW91dFByb21pc2UgPSBuZXcgUHJvbWlzZTxNaWdyYXRpb25Db25mbGljdFJlc3VsdD4oKHRpbWVvdXRSZXNvbHZlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVvdXRSZXNvbHZlKHsgYWN0aW9uOiBcInNraXBcIiB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCAzMDAwMCk7IC8vIDMwIHNlY29uZCB0aW1lb3V0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBQcm9taXNlLnJhY2UoW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGFsLndhaXRGb3JSZXN1bHQoKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lb3V0UHJvbWlzZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5hY3Rpb24gPT09IFwic2tpcFwiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvdWxkTWlncmF0ZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBOb3RpY2UoXCJNaWdyYXRpb24gc2tpcHBlZC4gT2xkIHBvc3RzL3BhZ2VzIHNldHRpbmdzIHdpbGwgYmUgaWdub3JlZC5cIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oXCJNaWdyYXRpb24gbW9kYWwgZXJyb3I6XCIsIGVycm9yKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3VsZE1pZ3JhdGUgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBOb3RpY2UoXCJNaWdyYXRpb24gc2tpcHBlZCBkdWUgdG8gZXJyb3IuIFlvdSBjYW4gbWlncmF0ZSBtYW51YWxseSBpbiBzZXR0aW5ncy5cIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pKCk7XHJcbiAgICAgICAgICAgICAgICB9LCA1MDApOyAvLyBTbWFsbCBkZWxheSB0byBlbnN1cmUgVUkgaXMgcmVhZHlcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIXNob3VsZE1pZ3JhdGUpIHtcclxuICAgICAgICAgICAgc2V0dGluZ3MubWlncmF0aW9uQ29tcGxldGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIFBlcmZvcm0gbWlncmF0aW9uXHJcbiAgICAgICAgY29uc3QgbWlncmF0ZWRUeXBlczogQ29udGVudFR5cGVbXSA9IFtdO1xyXG5cclxuICAgICAgICAvLyBNaWdyYXRlIFBvc3RzXHJcbiAgICAgICAgaWYgKGhhc1Bvc3RzU2V0dGluZ3MgJiYgIWNvbmZsaWN0cy5pbmNsdWRlcyhcIlBvc3RzXCIpKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHBvc3RzVHlwZTogQ29udGVudFR5cGUgPSB7XHJcbiAgICAgICAgICAgICAgICBpZDogYHBvc3RzLSR7RGF0ZS5ub3coKX1gLFxyXG4gICAgICAgICAgICAgICAgbmFtZTogXCJQb3N0c1wiLFxyXG4gICAgICAgICAgICAgICAgZm9sZGVyOiBzZXR0aW5ncy5wb3N0c0ZvbGRlciB8fCBcIlwiLFxyXG4gICAgICAgICAgICAgICAgbGlua0Jhc2VQYXRoOiBzZXR0aW5ncy5wb3N0c0xpbmtCYXNlUGF0aCB8fCBcIlwiLFxyXG4gICAgICAgICAgICAgICAgdGVtcGxhdGU6IHNldHRpbmdzLmRlZmF1bHRUZW1wbGF0ZSB8fCAnLS0tXFxudGl0bGU6IFwie3t0aXRsZX19XCJcXG5kYXRlOiB7e2RhdGV9fVxcbnRhZ3M6IFtdXFxuLS0tXFxuJyxcclxuICAgICAgICAgICAgICAgIGVuYWJsZWQ6IHRydWUsXHJcbiAgICAgICAgICAgICAgICBjcmVhdGlvbk1vZGU6IHNldHRpbmdzLmNyZWF0aW9uTW9kZSB8fCBcImZpbGVcIixcclxuICAgICAgICAgICAgICAgIGluZGV4RmlsZU5hbWU6IHNldHRpbmdzLmluZGV4RmlsZU5hbWUgfHwgXCJcIixcclxuICAgICAgICAgICAgICAgIGlnbm9yZVN1YmZvbGRlcnM6IHNldHRpbmdzLm9ubHlBdXRvbWF0ZUluUG9zdHNGb2xkZXIgfHwgZmFsc2UsXHJcbiAgICAgICAgICAgICAgICBlbmFibGVVbmRlcnNjb3JlUHJlZml4OiBzZXR0aW5ncy5lbmFibGVVbmRlcnNjb3JlUHJlZml4IHx8IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgdXNlTWR4RXh0ZW5zaW9uOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIG1vZGlmaWVkRGF0ZUZpZWxkOiBcIlwiLFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICBtaWdyYXRlZFR5cGVzLnB1c2gocG9zdHNUeXBlKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIE1pZ3JhdGUgUGFnZXNcclxuICAgICAgICBpZiAoaGFzUGFnZXNTZXR0aW5ncyAmJiAhY29uZmxpY3RzLmluY2x1ZGVzKFwiUGFnZXNcIikpIHtcclxuICAgICAgICAgICAgY29uc3QgcGFnZXNUeXBlOiBDb250ZW50VHlwZSA9IHtcclxuICAgICAgICAgICAgICAgIGlkOiBgcGFnZXMtJHtEYXRlLm5vdygpfWAsXHJcbiAgICAgICAgICAgICAgICBuYW1lOiBcIlBhZ2VzXCIsXHJcbiAgICAgICAgICAgICAgICBmb2xkZXI6IHNldHRpbmdzLnBhZ2VzRm9sZGVyIHx8IFwiXCIsXHJcbiAgICAgICAgICAgICAgICBsaW5rQmFzZVBhdGg6IHNldHRpbmdzLnBhZ2VzTGlua0Jhc2VQYXRoIHx8IFwiXCIsXHJcbiAgICAgICAgICAgICAgICB0ZW1wbGF0ZTogc2V0dGluZ3MucGFnZVRlbXBsYXRlIHx8ICctLS1cXG50aXRsZTogXCJ7e3RpdGxlfX1cIlxcbmRlc2NyaXB0aW9uOiBcIlwiXFxuLS0tXFxuJyxcclxuICAgICAgICAgICAgICAgIGVuYWJsZWQ6IHRydWUsXHJcbiAgICAgICAgICAgICAgICBjcmVhdGlvbk1vZGU6IHNldHRpbmdzLnBhZ2VzQ3JlYXRpb25Nb2RlIHx8IFwiZmlsZVwiLFxyXG4gICAgICAgICAgICAgICAgaW5kZXhGaWxlTmFtZTogc2V0dGluZ3MucGFnZXNJbmRleEZpbGVOYW1lIHx8IFwiXCIsXHJcbiAgICAgICAgICAgICAgICBpZ25vcmVTdWJmb2xkZXJzOiBzZXR0aW5ncy5vbmx5QXV0b21hdGVJblBhZ2VzRm9sZGVyIHx8IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgZW5hYmxlVW5kZXJzY29yZVByZWZpeDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICB1c2VNZHhFeHRlbnNpb246IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgbW9kaWZpZWREYXRlRmllbGQ6IFwiXCIsXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIG1pZ3JhdGVkVHlwZXMucHVzaChwYWdlc1R5cGUpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgZXhpc3RpbmdGcm9tTmV3ID0gc2V0dGluZ3MuY29udGVudFR5cGVzIHx8IFtdO1xyXG4gICAgICAgIGNvbnN0IGV4aXN0aW5nRnJvbUxlZ2FjeSA9IGxlZ2FjeUNvbnRlbnRUeXBlcyB8fCBbXTtcclxuXHJcbiAgICAgICAgbGV0IGV4aXN0aW5nVHlwZXM6IENvbnRlbnRUeXBlW10gPSBleGlzdGluZ0Zyb21OZXcubGVuZ3RoID4gMCA/IGV4aXN0aW5nRnJvbU5ldyA6IGV4aXN0aW5nRnJvbUxlZ2FjeTtcclxuICAgICAgICBsZXQgZmluYWxUeXBlczogQ29udGVudFR5cGVbXSA9IFsuLi5leGlzdGluZ1R5cGVzXTtcclxuXHJcbiAgICAgICAgaWYgKG1pZ3JhdGVkVHlwZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBjb25zdCBleGlzdGluZ05hbWVzID0gbmV3IFNldChleGlzdGluZ1R5cGVzLm1hcChjdCA9PiBjdC5uYW1lKSk7XHJcbiAgICAgICAgICAgIGNvbnN0IG5ld01pZ3JhdGVkVHlwZXMgPSBtaWdyYXRlZFR5cGVzLmZpbHRlcihtdCA9PiAhZXhpc3RpbmdOYW1lcy5oYXMobXQubmFtZSkpO1xyXG5cclxuICAgICAgICAgICAgaWYgKG5ld01pZ3JhdGVkVHlwZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgZmluYWxUeXBlcyA9IFsuLi5leGlzdGluZ1R5cGVzLCAuLi5uZXdNaWdyYXRlZFR5cGVzXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgc2V0dGluZ3MuY29udGVudFR5cGVzID0gZmluYWxUeXBlcztcclxuXHJcbiAgICAgICAgLy8gQ2xlYW4gdXAgbGVnYWN5IGZpZWxkc1xyXG4gICAgICAgIGNvbnN0IGxlZ2FjeUZpZWxkcyA9IFtcclxuICAgICAgICAgICAgJ2N1c3RvbUNvbnRlbnRUeXBlcycsICdlbmFibGVVbmRlcnNjb3JlUHJlZml4JywgJ3Bvc3RzRm9sZGVyJywgJ3Bvc3RzTGlua0Jhc2VQYXRoJyxcclxuICAgICAgICAgICAgJ2F1dG9tYXRlUG9zdENyZWF0aW9uJywgJ2NyZWF0aW9uTW9kZScsICdpbmRleEZpbGVOYW1lJywgJ2V4Y2x1ZGVkRGlyZWN0b3JpZXMnLFxyXG4gICAgICAgICAgICAnb25seUF1dG9tYXRlSW5Qb3N0c0ZvbGRlcicsICdlbmFibGVQYWdlcycsICdwYWdlc0ZvbGRlcicsICdwYWdlc0xpbmtCYXNlUGF0aCcsXHJcbiAgICAgICAgICAgICdwYWdlc0NyZWF0aW9uTW9kZScsICdwYWdlc0luZGV4RmlsZU5hbWUnLCAncGFnZVRlbXBsYXRlJywgJ29ubHlBdXRvbWF0ZUluUGFnZXNGb2xkZXInXHJcbiAgICAgICAgXTtcclxuXHJcbiAgICAgICAgY29uc3Qgc2V0dGluZ3NSZWNvcmQgPSBzZXR0aW5ncyBhcyB1bmtub3duIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xyXG4gICAgICAgIGZvciAoY29uc3QgZmllbGQgb2YgbGVnYWN5RmllbGRzKSB7XHJcbiAgICAgICAgICAgIGRlbGV0ZSBzZXR0aW5nc1JlY29yZFtmaWVsZF07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBzZXR0aW5ncy5taWdyYXRpb25Db21wbGV0ZWQgPSB0cnVlO1xyXG4gICAgICAgIGF3YWl0IHRoaXMucGx1Z2luLnNhdmVTZXR0aW5ncygpO1xyXG4gICAgICAgIGF3YWl0IHRoaXMucGx1Z2luLmxvYWRTZXR0aW5ncygpO1xyXG5cclxuICAgICAgICBpZiAobWlncmF0ZWRUeXBlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIG5ldyBOb3RpY2UoYE1pZ3JhdGlvbiBjb21wbGV0ZWQ6ICR7bWlncmF0ZWRUeXBlcy5sZW5ndGh9IGNvbnRlbnQgdHlwZShzKSBtaWdyYXRlZC5gKTtcclxuXHJcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMucGx1Z2luLnNldHRpbmdzVGFiIGluc3RhbmNlb2YgQXN0cm9Db21wb3NlclNldHRpbmdUYWIpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBzZXR0aW5nc1RhYiA9IHRoaXMucGx1Z2luLnNldHRpbmdzVGFiO1xyXG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzZXR0aW5nc1RhYi5jdXN0b21Db250ZW50VHlwZXNDb250YWluZXIgfHwgc2V0dGluZ3NUYWIuY29udGFpbmVyRWwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldHRpbmdzVGFiLmRpc3BsYXkoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKFwiQ291bGQgbm90IHJlZnJlc2ggc2V0dGluZ3MgdGFiIGFmdGVyIG1pZ3JhdGlvbjpcIiwgZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9LCAzMDApO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG4iLCAiaW1wb3J0IHsgQXBwLCBNb2RhbCB9IGZyb20gXCJvYnNpZGlhblwiO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBNaWdyYXRpb25Db25mbGljdFJlc3VsdCB7XHJcblx0YWN0aW9uOiBcInNraXBcIiB8IFwibWlncmF0ZVwiO1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgTWlncmF0aW9uTW9kYWwgZXh0ZW5kcyBNb2RhbCB7XHJcblx0cmVzdWx0OiBNaWdyYXRpb25Db25mbGljdFJlc3VsdCB8IG51bGwgPSBudWxsO1xyXG5cdHJlc29sdmVQcm9taXNlOiAoKHJlc3VsdDogTWlncmF0aW9uQ29uZmxpY3RSZXN1bHQpID0+IHZvaWQpIHwgbnVsbCA9IG51bGw7XHJcblxyXG5cdGNvbnN0cnVjdG9yKGFwcDogQXBwLCBjb25mbGljdHM6IHN0cmluZ1tdKSB7XHJcblx0XHRzdXBlcihhcHApO1xyXG5cdH1cclxuXHJcblx0b25PcGVuKCkge1xyXG5cdFx0Y29uc3QgeyBjb250ZW50RWwgfSA9IHRoaXM7XHJcblx0XHRjb250ZW50RWwuZW1wdHkoKTtcclxuXHRcdGNvbnRlbnRFbC5hZGRDbGFzcyhcImFzdHJvLWNvbXBvc2VyLW1pZ3JhdGlvbi1tb2RhbFwiKTtcclxuXHJcblx0XHRjb250ZW50RWwuY3JlYXRlRWwoXCJoMlwiLCB7IHRleHQ6IFwiTWlncmF0aW9uIGNvbmZsaWN0IGRldGVjdGVkXCIgfSk7XHJcblxyXG5cdFx0Y29udGVudEVsLmNyZWF0ZUVsKFwicFwiLCB7XHJcblx0XHRcdHRleHQ6IFwiWW91IGhhdmUgZXhpc3RpbmcgY29udGVudCB0eXBlcyB3aXRoIG5hbWVzIHRoYXQgY29uZmxpY3Qgd2l0aCBwb3N0cyBvciBwYWdlcy4gSG93IHdvdWxkIHlvdSBsaWtlIHRvIHByb2NlZWQ/XCIsXHJcblx0XHR9KTtcclxuXHJcblx0XHRjb25zdCBjb25mbGljdExpc3QgPSBjb250ZW50RWwuY3JlYXRlRWwoXCJ1bFwiKTtcclxuXHRcdGNvbmZsaWN0TGlzdC5jcmVhdGVFbChcImxpXCIsIHsgdGV4dDogXCJTa2lwIG1pZ3JhdGlvbjoga2VlcCB5b3VyIGV4aXN0aW5nIHBvc3RzL3BhZ2VzIHNldHRpbmdzICh0aGV5IHdpbGwgYmUgaWdub3JlZClcIiB9KTtcclxuXHRcdGNvbmZsaWN0TGlzdC5jcmVhdGVFbChcImxpXCIsIHsgdGV4dDogXCJNaWdyYXRlIHdpdGggcmVuYW1lZCB0eXBlczogY3JlYXRlICdwb3N0cyAobWlncmF0ZWQpJyBhbmQgJ3BhZ2VzIChtaWdyYXRlZCknIGNvbnRlbnQgdHlwZXNcIiB9KTtcclxuXHJcblx0XHRjb25zdCBidXR0b25Db250YWluZXIgPSBjb250ZW50RWwuY3JlYXRlRGl2KHsgY2xzOiBcIm1vZGFsLWJ1dHRvbi1jb250YWluZXJcIiB9KTtcclxuXHJcblx0XHRjb25zdCBza2lwQnV0dG9uID0gYnV0dG9uQ29udGFpbmVyLmNyZWF0ZUVsKFwiYnV0dG9uXCIsIHtcclxuXHRcdFx0dGV4dDogXCJTa2lwIG1pZ3JhdGlvblwiLFxyXG5cdFx0XHRjbHM6IFwibW9kLWN0YVwiLFxyXG5cdFx0fSk7XHJcblx0XHRza2lwQnV0dG9uLm9uY2xpY2sgPSAoKSA9PiB7XHJcblx0XHRcdHRoaXMucmVzdWx0ID0geyBhY3Rpb246IFwic2tpcFwiIH07XHJcblx0XHRcdHRoaXMuY2xvc2UoKTtcclxuXHRcdH07XHJcblxyXG5cdFx0Y29uc3QgbWlncmF0ZUJ1dHRvbiA9IGJ1dHRvbkNvbnRhaW5lci5jcmVhdGVFbChcImJ1dHRvblwiLCB7XHJcblx0XHRcdHRleHQ6IFwiTWlncmF0ZSB3aXRoIHJlbmFtZWQgdHlwZXNcIixcclxuXHRcdFx0Y2xzOiBcIm1vZC1jdGFcIixcclxuXHRcdH0pO1xyXG5cdFx0bWlncmF0ZUJ1dHRvbi5vbmNsaWNrID0gKCkgPT4ge1xyXG5cdFx0XHR0aGlzLnJlc3VsdCA9IHsgYWN0aW9uOiBcIm1pZ3JhdGVcIiB9O1xyXG5cdFx0XHR0aGlzLmNsb3NlKCk7XHJcblx0XHR9O1xyXG5cdH1cclxuXHJcblx0b25DbG9zZSgpIHtcclxuXHRcdGNvbnN0IHsgY29udGVudEVsIH0gPSB0aGlzO1xyXG5cdFx0Y29udGVudEVsLmVtcHR5KCk7XHJcblx0XHRpZiAodGhpcy5yZXNvbHZlUHJvbWlzZSAmJiB0aGlzLnJlc3VsdCkge1xyXG5cdFx0XHR0aGlzLnJlc29sdmVQcm9taXNlKHRoaXMucmVzdWx0KTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGFzeW5jIHdhaXRGb3JSZXN1bHQoKTogUHJvbWlzZTxNaWdyYXRpb25Db25mbGljdFJlc3VsdD4ge1xyXG5cdFx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XHJcblx0XHRcdHRoaXMucmVzb2x2ZVByb21pc2UgPSByZXNvbHZlO1xyXG5cdFx0XHR0aGlzLm9wZW4oKTtcclxuXHRcdH0pO1xyXG5cdH1cclxufVxyXG5cclxuIiwgImltcG9ydCB7IEFwcCwgVEZpbGUsIE5vdGljZSB9IGZyb20gXCJvYnNpZGlhblwiO1xyXG5pbXBvcnQgeyBDb250ZW50VHlwZSwgQXN0cm9Db21wb3NlclBsdWdpbkludGVyZmFjZSB9IGZyb20gXCIuLi90eXBlc1wiO1xyXG5pbXBvcnQgeyBDT05TVEFOVFMgfSBmcm9tIFwiLi4vc2V0dGluZ3NcIjtcclxuaW1wb3J0IHsgbWF0Y2hlc0ZvbGRlclBhdHRlcm4sIHNvcnRCeVBhdHRlcm5TcGVjaWZpY2l0eSB9IGZyb20gXCIuLi91dGlscy9wYXRoLW1hdGNoaW5nXCI7XHJcbmltcG9ydCB7IFRpdGxlTW9kYWwgfSBmcm9tIFwiLi4vdWkvdGl0bGUtbW9kYWxcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBDcmVhdGVFdmVudFNlcnZpY2Uge1xyXG4gICAgcHJpdmF0ZSBsYXN0UHJvY2Vzc2VkRmlsZXM6IE1hcDxzdHJpbmcsIG51bWJlcj4gPSBuZXcgTWFwKCk7XHJcblxyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgcHJpdmF0ZSBhcHA6IEFwcCxcclxuICAgICAgICBwcml2YXRlIHBsdWdpbjogQXN0cm9Db21wb3NlclBsdWdpbkludGVyZmFjZVxyXG4gICAgKSB7IH1cclxuXHJcbiAgICBwdWJsaWMgaGFuZGxlQ3JlYXRlKGZpbGU6IFRGaWxlKTogdm9pZCB7XHJcbiAgICAgICAgdm9pZCAoYXN5bmMgKCkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xyXG5cclxuICAgICAgICAgICAgaWYgKCEoZmlsZSBpbnN0YW5jZW9mIFRGaWxlKSB8fCAoZmlsZS5leHRlbnNpb24gIT09IFwibWRcIiAmJiBmaWxlLmV4dGVuc2lvbiAhPT0gXCJtZHhcIikpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY29uc3QgZmlsZVBhdGggPSBmaWxlLnBhdGg7XHJcblxyXG4gICAgICAgICAgICAvLyBTa2lwIGlmIHRoaXMgZmlsZSB3YXMgY3JlYXRlZCBieSB0aGUgcGx1Z2luIGl0c2VsZiAoVFRMIGNoZWNrKVxyXG4gICAgICAgICAgICBjb25zdCBjcmVhdGVkVGltZSA9IHRoaXMucGx1Z2luLnBsdWdpbkNyZWF0ZWRGaWxlcy5nZXQoZmlsZVBhdGgpO1xyXG4gICAgICAgICAgICBpZiAoY3JlYXRlZFRpbWUgJiYgbm93IC0gY3JlYXRlZFRpbWUgPCA1ICogNjAgKiAxMDAwKSB7IC8vIDUgbWludXRlcyBUVExcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy8gUGVyLWZpbGUgZGVib3VuY2UgY2hlY2tcclxuICAgICAgICAgICAgY29uc3QgbGFzdFByb2Nlc3NlZCA9IHRoaXMubGFzdFByb2Nlc3NlZEZpbGVzLmdldChmaWxlUGF0aCkgfHwgMDtcclxuICAgICAgICAgICAgaWYgKGxhc3RQcm9jZXNzZWQgPiAwICYmIG5vdyAtIGxhc3RQcm9jZXNzZWQgPCBDT05TVEFOVFMuREVCT1VOQ0VfTVMpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy8gQ2xlYW4gdXAgb2xkIGVudHJpZXMgaW4gbG9jYWwgZGVib3VuY2UgbWFwXHJcbiAgICAgICAgICAgIGlmIChsYXN0UHJvY2Vzc2VkID4gMCAmJiBub3cgLSBsYXN0UHJvY2Vzc2VkID4gMjAwMCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sYXN0UHJvY2Vzc2VkRmlsZXMuZGVsZXRlKGZpbGVQYXRoKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy8gUGVyaW9kaWMgY2xlYW51cCBvZiBkZWJvdW5jZSBtYXBcclxuICAgICAgICAgICAgY29uc3QgcGVyaW9kaWNDdXRvZmYgPSBub3cgLSBDT05TVEFOVFMuREVCT1VOQ0VfTVMgKiAyO1xyXG4gICAgICAgICAgICBmb3IgKGNvbnN0IFtwYXRoLCB0aW1lXSBvZiB0aGlzLmxhc3RQcm9jZXNzZWRGaWxlcy5lbnRyaWVzKCkpIHtcclxuICAgICAgICAgICAgICAgIGlmICh0aW1lIDwgcGVyaW9kaWNDdXRvZmYpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmxhc3RQcm9jZXNzZWRGaWxlcy5kZWxldGUocGF0aCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGNvbnRlbnRUeXBlcyA9IHRoaXMucGx1Z2luLnNldHRpbmdzLmNvbnRlbnRUeXBlcyB8fCBbXTtcclxuICAgICAgICAgICAgY29uc3QgaGFzRW5hYmxlZENvbnRlbnRUeXBlcyA9IGNvbnRlbnRUeXBlcy5zb21lKGN0ID0+IGN0LmVuYWJsZWQpO1xyXG5cclxuICAgICAgICAgICAgaWYgKCFoYXNFbmFibGVkQ29udGVudFR5cGVzKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNvbnN0IHNvcnRlZENvbnRlbnRUeXBlcyA9IHNvcnRCeVBhdHRlcm5TcGVjaWZpY2l0eShjb250ZW50VHlwZXMpO1xyXG4gICAgICAgICAgICBsZXQgbWF0Y2hlZENvbnRlbnRUeXBlSWQ6IHN0cmluZyB8IG51bGwgPSBudWxsO1xyXG4gICAgICAgICAgICBjb25zdCBtYXRjaGluZ1R5cGVzOiBDb250ZW50VHlwZVtdID0gW107XHJcblxyXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGNvbnRlbnRUeXBlIG9mIHNvcnRlZENvbnRlbnRUeXBlcykge1xyXG4gICAgICAgICAgICAgICAgaWYgKCFjb250ZW50VHlwZS5lbmFibGVkKSBjb250aW51ZTtcclxuXHJcbiAgICAgICAgICAgICAgICBsZXQgbWF0Y2hlcyA9IGZhbHNlO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmICghY29udGVudFR5cGUuZm9sZGVyIHx8IGNvbnRlbnRUeXBlLmZvbGRlci50cmltKCkgPT09IFwiXCIpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIWZpbGVQYXRoLmluY2x1ZGVzKFwiL1wiKSB8fCBmaWxlUGF0aC5zcGxpdChcIi9cIikubGVuZ3RoID09PSAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoZXMgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobWF0Y2hlc0ZvbGRlclBhdHRlcm4oZmlsZVBhdGgsIGNvbnRlbnRUeXBlLmZvbGRlcikpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoY29udGVudFR5cGUuaWdub3JlU3ViZm9sZGVycykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXRoU2VnbWVudHMgPSBmaWxlUGF0aC5zcGxpdChcIi9cIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHBhdGhEZXB0aCA9IHBhdGhTZWdtZW50cy5sZW5ndGg7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHBhdHRlcm5TZWdtZW50cyA9IGNvbnRlbnRUeXBlLmZvbGRlci5zcGxpdChcIi9cIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGV4cGVjdGVkRGVwdGggPSBwYXR0ZXJuU2VnbWVudHMubGVuZ3RoO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnRlbnRUeXBlLmNyZWF0aW9uTW9kZSA9PT0gXCJmb2xkZXJcIikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZm9sZGVyRGVwdGggPSBwYXRoRGVwdGggLSAxO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZvbGRlckRlcHRoID09PSBleHBlY3RlZERlcHRoIHx8IGZvbGRlckRlcHRoID09PSBleHBlY3RlZERlcHRoICsgMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoZXMgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhdGhEZXB0aCA9PT0gZXhwZWN0ZWREZXB0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoZXMgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2hlcyA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmIChtYXRjaGVzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbWF0Y2hpbmdUeXBlcy5wdXNoKGNvbnRlbnRUeXBlKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIW1hdGNoZWRDb250ZW50VHlwZUlkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoZWRDb250ZW50VHlwZUlkID0gY29udGVudFR5cGUuaWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAobWF0Y2hpbmdUeXBlcy5sZW5ndGggPiAxKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB0eXBlTmFtZXMgPSBtYXRjaGluZ1R5cGVzLm1hcChjdCA9PiBjdC5uYW1lIHx8IFwiVW5uYW1lZFwiKS5qb2luKFwiLCBcIik7XHJcbiAgICAgICAgICAgICAgICBuZXcgTm90aWNlKGBNdWx0aXBsZSBjb250ZW50IHR5cGVzICgke3R5cGVOYW1lc30pIG1hdGNoIHRoaXMgZmlsZS4gVXNpbmcgbW9zdCBzcGVjaWZpYzogJHttYXRjaGluZ1R5cGVzWzBdLm5hbWUgfHwgXCJVbm5hbWVkXCJ9YCk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICghbWF0Y2hlZENvbnRlbnRUeXBlSWQpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY29uc3Qgc3RhdCA9IGF3YWl0IHRoaXMuYXBwLnZhdWx0LmFkYXB0ZXIuc3RhdChmaWxlLnBhdGgpO1xyXG4gICAgICAgICAgICBjb25zdCBpc05ld05vdGUgPSBzdGF0Py5tdGltZSAmJiAobm93IC0gc3RhdC5tdGltZSA8IENPTlNUQU5UUy5TVEFUX01USU1FX1RIUkVTSE9MRCk7XHJcblxyXG4gICAgICAgICAgICBpZiAoIWlzTmV3Tm90ZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvLyBDSEVDSyBCQUNLR1JPVU5EIFBST0NFU1NJTkcgT05MWSBGT1IgTk9OLUNSRUFUSU9OIEVWRU5UU1xyXG4gICAgICAgICAgICAvLyBBY3R1YWxseSwgaGFuZGxlQ3JlYXRlIGlzIE9OTFkgZm9yIGNyZWF0aW9uLiBcclxuICAgICAgICAgICAgLy8gVGhlIGNoZWNrIHdhcyBwcmV2ZW50aW5nIHRoZSBtb2RhbCBmcm9tIG9wZW5pbmcgaWYgdGhlIGFjdGl2ZSBmaWxlIHdhcyBub3QgeWV0IHNldCB0byB0aGUgbmV3IGZpbGUuXHJcbiAgICAgICAgICAgIGNvbnN0IGFjdGl2ZUZpbGUgPSB0aGlzLmFwcC53b3Jrc3BhY2UuZ2V0QWN0aXZlRmlsZSgpO1xyXG4gICAgICAgICAgICBjb25zdCBpc0FjdGl2ZUZpbGUgPSBhY3RpdmVGaWxlICYmIGFjdGl2ZUZpbGUucGF0aCA9PT0gZmlsZS5wYXRoO1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMucGx1Z2luLnNldHRpbmdzLnByb2Nlc3NCYWNrZ3JvdW5kRmlsZUNoYW5nZXMgJiYgIWlzQWN0aXZlRmlsZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgNTApKTtcclxuXHJcbiAgICAgICAgICAgIGxldCBjb250ZW50OiBzdHJpbmc7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBjb250ZW50ID0gYXdhaXQgdGhpcy5hcHAudmF1bHQucmVhZChmaWxlKTtcclxuICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJFcnJvciByZWFkaW5nIGZpbGUgZm9yIGNyZWF0ZSBkZXRlY3Rpb246XCIsIGVycm9yKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKGNvbnRlbnQudHJpbSgpLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgIGlmIChjb250ZW50LnN0YXJ0c1dpdGgoJy0tLScpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZnJvbnRtYXR0ZXJFbmQgPSBjb250ZW50LmluZGV4T2YoJ1xcbi0tLScsIDMpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChmcm9udG1hdHRlckVuZCAhPT0gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZnJvbnRtYXR0ZXJUZXh0ID0gY29udGVudC5zbGljZSg0LCBmcm9udG1hdHRlckVuZCkudHJpbSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBsaW5lcyA9IGZyb250bWF0dGVyVGV4dC5zcGxpdCgnXFxuJykuZmlsdGVyKGxpbmUgPT4gbGluZS50cmltKCkubGVuZ3RoID4gMCk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMucGx1Z2luLnNldHRpbmdzLnByb2Nlc3NCYWNrZ3JvdW5kRmlsZUNoYW5nZXMgJiYgbGluZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobGluZXMubGVuZ3RoID4gMSB8fCAobGluZXMubGVuZ3RoID09PSAxICYmICFsaW5lc1swXS5zdGFydHNXaXRoKCd0aXRsZTonKSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGNvbnN0IGNvbnRlbnRXaXRob3V0RnJvbnRtYXR0ZXIgPSBjb250ZW50LnN0YXJ0c1dpdGgoJy0tLScpXHJcbiAgICAgICAgICAgICAgICAgICAgPyBjb250ZW50LnNsaWNlKGNvbnRlbnQuaW5kZXhPZignXFxuLS0tJywgMykgKyA0KS50cmltKClcclxuICAgICAgICAgICAgICAgICAgICA6IGNvbnRlbnQudHJpbSgpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGNvbnRlbnRXaXRob3V0RnJvbnRtYXR0ZXIubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy5sYXN0UHJvY2Vzc2VkRmlsZXMuc2V0KGZpbGUucGF0aCwgbm93KTtcclxuXHJcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sYXN0UHJvY2Vzc2VkRmlsZXMuZGVsZXRlKGZpbGUucGF0aCk7XHJcbiAgICAgICAgICAgIH0sIENPTlNUQU5UUy5ERUJPVU5DRV9NUyArIDEwMCk7XHJcblxyXG4gICAgICAgICAgICBuZXcgVGl0bGVNb2RhbCh0aGlzLmFwcCwgZmlsZSwgdGhpcy5wbHVnaW4sIG1hdGNoZWRDb250ZW50VHlwZUlkLCBmYWxzZSwgdHJ1ZSkub3BlbigpO1xyXG4gICAgICAgIH0pKCk7XHJcbiAgICB9XHJcbn1cclxuIiwgImltcG9ydCB7IEFwcCwgVEZpbGUsIG1vbWVudCwgVEFic3RyYWN0RmlsZSB9IGZyb20gXCJvYnNpZGlhblwiO1xyXG5pbXBvcnQgeyBBc3Ryb0NvbXBvc2VyUGx1Z2luSW50ZXJmYWNlLCBDb250ZW50VHlwZSB9IGZyb20gXCIuLi90eXBlc1wiO1xyXG5cclxuZXhwb3J0IGNsYXNzIEZyb250bWF0dGVyU2VydmljZSB7XHJcbiAgICBwcml2YXRlIGxhc3RQcm9jZXNzZWRGaWxlOiBzdHJpbmcgPSBcIlwiO1xyXG4gICAgcHJpdmF0ZSBsYXN0UHJvY2Vzc2VkVGltZTogbnVtYmVyID0gMDtcclxuICAgIHByaXZhdGUgZGVib3VuY2VUaW1lb3V0OiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuICAgIHByaXZhdGUgZHJhZnRTdGF0dXNNYXA6IE1hcDxzdHJpbmcsIGJvb2xlYW4+ID0gbmV3IE1hcCgpO1xyXG4gICAgcHJpdmF0ZSBjb250ZW50SGFzaENhY2hlOiBNYXA8c3RyaW5nLCBzdHJpbmc+ID0gbmV3IE1hcCgpO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgYXBwOiBBcHAsIHByaXZhdGUgcGx1Z2luOiBBc3Ryb0NvbXBvc2VyUGx1Z2luSW50ZXJmYWNlKSB7XHJcbiAgICAgICAgdGhpcy5yZWdpc3RlckV2ZW50cygpO1xyXG5cclxuICAgICAgICAvLyBBbHNvIHJlLWluaXRpYWxpemUgd2hlbiBsYXlvdXQgaXMgcmVhZHkganVzdCBpbiBjYXNlXHJcbiAgICAgICAgdGhpcy5hcHAud29ya3NwYWNlLm9uTGF5b3V0UmVhZHkoKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmluaXRpYWxpemVEcmFmdFN0YXR1c01hcCgpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBpbml0aWFsaXplRHJhZnRTdGF0dXNNYXAoKSB7XHJcbiAgICAgICAgdGhpcy5kcmFmdFN0YXR1c01hcC5jbGVhcigpO1xyXG4gICAgICAgIGNvbnN0IHNldHRpbmdzID0gdGhpcy5wbHVnaW4uc2V0dGluZ3M7XHJcbiAgICAgICAgY29uc3QgZHJhZnRQcm9wID0gc2V0dGluZ3MuZHJhZnRQcm9wZXJ0eSB8fCBcImRyYWZ0XCI7XHJcbiAgICAgICAgLy8gSW5jbHVkZSBib3RoIC5tZCBhbmQgLm1keCBmaWxlc1xyXG4gICAgICAgIGNvbnN0IGZpbGVzID0gdGhpcy5hcHAudmF1bHQuZ2V0RmlsZXMoKS5maWx0ZXIoZiA9PiBmIGluc3RhbmNlb2YgVEZpbGUgJiYgKGYuZXh0ZW5zaW9uID09PSAnbWQnIHx8IGYuZXh0ZW5zaW9uID09PSAnbWR4JykpIGFzIFRGaWxlW107XHJcblxyXG4gICAgICAgIGZvciAoY29uc3QgZmlsZSBvZiBmaWxlcykge1xyXG4gICAgICAgICAgICBjb25zdCBjYWNoZSA9IHRoaXMuYXBwLm1ldGFkYXRhQ2FjaGUuZ2V0RmlsZUNhY2hlKGZpbGUpO1xyXG4gICAgICAgICAgICBjb25zdCByYXdWYWx1ZSA9IGNhY2hlPy5mcm9udG1hdHRlcj8uW2RyYWZ0UHJvcF07XHJcbiAgICAgICAgICAgIHRoaXMuZHJhZnRTdGF0dXNNYXAuc2V0KGZpbGUucGF0aCwgdGhpcy5jYWxjdWxhdGVJc0RyYWZ0KHJhd1ZhbHVlLCBzZXR0aW5ncykpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGNhbGN1bGF0ZUlzRHJhZnQocmF3VmFsdWU6IGFueSwgc2V0dGluZ3M6IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgICAgIC8vIElmIHVuZGVmaW5lZC9udWxsLCBhc3N1bWUgaXQncyBOT1QgYSBkcmFmdCB1bmxlc3MgbG9naWMgc2F5cyBvdGhlcndpc2VcclxuICAgICAgICBpZiAocmF3VmFsdWUgPT09IHVuZGVmaW5lZCB8fCByYXdWYWx1ZSA9PT0gbnVsbCkgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgICAgICAvLyBDb252ZXJ0IHRvIHN0cmluZyBmb3IgZWFzaWVyIG1hdGNoaW5nIGlmIGl0J3Mgbm90IGEgYm9vbGVhblxyXG4gICAgICAgIGNvbnN0IHZhbCA9IFN0cmluZyhyYXdWYWx1ZSkudG9Mb3dlckNhc2UoKTtcclxuXHJcbiAgICAgICAgaWYgKHNldHRpbmdzLmRyYWZ0TG9naWMgPT09ICdmYWxzZS1pcy1kcmFmdCcpIHtcclxuICAgICAgICAgICAgLy8gXCJGYWxzZSA9IFB1Ymxpc2hlZFwiLCBzbyBpdCdzIGEgZHJhZnQgaWYgaXQgaXMgZmFsc2UsIFwiZmFsc2VcIiwgXCIwXCIsIGV0Yy5cclxuICAgICAgICAgICAgcmV0dXJuIHZhbCA9PT0gJ2ZhbHNlJyB8fCB2YWwgPT09ICcwJyB8fCByYXdWYWx1ZSA9PT0gZmFsc2U7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgLy8gXCJUcnVlID0gRHJhZnRcIiwgc28gaXQncyBhIGRyYWZ0IGlmIGl0IGlzIHRydWUsIFwidHJ1ZVwiLCBcIjFcIiwgZXRjLlxyXG4gICAgICAgICAgICByZXR1cm4gdmFsID09PSAndHJ1ZScgfHwgdmFsID09PSAnMScgfHwgcmF3VmFsdWUgPT09IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgcmVnaXN0ZXJFdmVudHMoKSB7XHJcbiAgICAgICAgLy8gV2F0Y2ggZm9yIG1ldGFkYXRhIGNoYW5nZXMgKHByb3BlcnR5LWJhc2VkIGRyYWZ0IHN5bmMpXHJcbiAgICAgICAgdGhpcy5wbHVnaW4ucmVnaXN0ZXJFdmVudChcclxuICAgICAgICAgICAgdGhpcy5hcHAubWV0YWRhdGFDYWNoZS5vbihcImNoYW5nZWRcIiwgKGZpbGUpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChmaWxlIGluc3RhbmNlb2YgVEZpbGUpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm9uTWV0YWRhdGFDaGFuZ2UoZmlsZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgLy8gV2F0Y2ggZm9yIHJlbmFtZXMgKHVuZGVyc2NvcmUtcHJlZml4IGRyYWZ0IHN5bmMpXHJcbiAgICAgICAgdGhpcy5wbHVnaW4ucmVnaXN0ZXJFdmVudChcclxuICAgICAgICAgICAgdGhpcy5hcHAudmF1bHQub24oXCJyZW5hbWVcIiwgKGZpbGUsIG9sZFBhdGgpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChmaWxlIGluc3RhbmNlb2YgVEZpbGUpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm9uUmVuYW1lKGZpbGUsIG9sZFBhdGgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIC8vIFdhdGNoIGZvciBmaWxlIG9wZW4gdG8gbGF6aWx5IHBvcHVsYXRlIGhhc2ggY2FjaGUgZm9yIHRoZSBhY3RpdmUgZmlsZVxyXG4gICAgICAgIHRoaXMucGx1Z2luLnJlZ2lzdGVyRXZlbnQoXHJcbiAgICAgICAgICAgIHRoaXMuYXBwLndvcmtzcGFjZS5vbihcImZpbGUtb3BlblwiLCAoZmlsZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKGZpbGUgaW5zdGFuY2VvZiBURmlsZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHZvaWQgKGFzeW5jICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbnRlbnQgPSBhd2FpdCB0aGlzLmFwcC52YXVsdC5yZWFkKGZpbGUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250ZW50SGFzaENhY2hlLnNldChmaWxlLnBhdGgsIHRoaXMuZ2V0Q29udGVudEhhc2goY29udGVudCkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGBGYWlsZWQgdG8gbGF6aWx5IGluaXRpYWxpemUgY29udGVudCBoYXNoIGZvciAke2ZpbGUucGF0aH06YCwgZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9KSgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBvblJlbmFtZShmaWxlOiBURmlsZSwgb2xkUGF0aDogc3RyaW5nKSB7XHJcbiAgICAgICAgY29uc3Qgc2V0dGluZ3MgPSB0aGlzLnBsdWdpbi5zZXR0aW5ncztcclxuICAgICAgICBpZiAoIXNldHRpbmdzLnN5bmNEcmFmdERhdGUpIHJldHVybjtcclxuXHJcbiAgICAgICAgY29uc3Qgb2xkTmFtZSA9IG9sZFBhdGguc3BsaXQoXCIvXCIpLnBvcCgpIHx8IFwiXCI7XHJcbiAgICAgICAgY29uc3QgbmV3TmFtZSA9IGZpbGUubmFtZTtcclxuXHJcbiAgICAgICAgLy8gQ2hlY2sgaWYgaXQgd2FzIGFuIHVuZGVyc2NvcmUgZHJhZnQgYW5kIGlzIG5vdyBub3RcclxuICAgICAgICBpZiAob2xkTmFtZS5zdGFydHNXaXRoKFwiX1wiKSAmJiAhbmV3TmFtZS5zdGFydHNXaXRoKFwiX1wiKSkge1xyXG4gICAgICAgICAgICAvLyBOZWVkIHRvIGNoZWNrIGNvbnRlbnQgdHlwZSB0byBzZWUgaWYgdW5kZXJzY29yZSBwcmVmaXggaXMgZW5hYmxlZFxyXG4gICAgICAgICAgICBjb25zdCBjb250ZW50VHlwZSA9IHRoaXMucGx1Z2luLmZpbGVPcHM/LmdldENvbnRlbnRUeXBlQnlQYXRoKGZpbGUucGF0aCk7XHJcbiAgICAgICAgICAgIGlmIChjb250ZW50VHlwZT8uZW5hYmxlVW5kZXJzY29yZVByZWZpeCkge1xyXG4gICAgICAgICAgICAgICAgdm9pZCB0aGlzLnVwZGF0ZURhdGUoZmlsZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBvbk1ldGFkYXRhQ2hhbmdlKGZpbGU6IFRGaWxlKSB7XHJcbiAgICAgICAgY29uc3Qgc2V0dGluZ3MgPSB0aGlzLnBsdWdpbi5zZXR0aW5ncztcclxuXHJcbiAgICAgICAgLy8gTmVlZCB0byBjaGVjayBjb250ZW50IHR5cGUgdG8gc2VlIGlmIG1vZGlmaWVkIGRhdGUgaXMgZW5hYmxlZCBmb3IgVEhJUyB0eXBlXHJcbiAgICAgICAgY29uc3QgY29udGVudFR5cGUgPSB0aGlzLnBsdWdpbi5maWxlT3BzPy5nZXRDb250ZW50VHlwZUJ5UGF0aChmaWxlLnBhdGgpO1xyXG4gICAgICAgIGNvbnN0IGhhc01vZGlmaWVkRmllbGQgPSAhIWNvbnRlbnRUeXBlPy5tb2RpZmllZERhdGVGaWVsZDtcclxuXHJcbiAgICAgICAgaWYgKCFzZXR0aW5ncy5zeW5jRHJhZnREYXRlICYmICFoYXNNb2RpZmllZEZpZWxkKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIFRyYWNrIGRyYWZ0IHN0YXR1cyBjaGFuZ2VzXHJcbiAgICAgICAgY29uc3QgY2FjaGUgPSB0aGlzLmFwcC5tZXRhZGF0YUNhY2hlLmdldEZpbGVDYWNoZShmaWxlKTtcclxuICAgICAgICBjb25zdCBkcmFmdFByb3AgPSBzZXR0aW5ncy5kcmFmdFByb3BlcnR5IHx8IFwiZHJhZnRcIjtcclxuICAgICAgICBjb25zdCByYXdWYWx1ZSA9IGNhY2hlPy5mcm9udG1hdHRlcj8uW2RyYWZ0UHJvcF07XHJcblxyXG4gICAgICAgIC8vIExvZ2ljOiB0cnVlLWlzLWRyYWZ0IHZzIGZhbHNlLWlzLWRyYWZ0XHJcbiAgICAgICAgY29uc3QgaXNDdXJyZW50bHlEcmFmdCA9IHRoaXMuY2FsY3VsYXRlSXNEcmFmdChyYXdWYWx1ZSwgc2V0dGluZ3MpO1xyXG5cclxuICAgICAgICAvLyBJZiBpdCdzIHRoZSBmaXJzdCB0aW1lIHdlIHNlZSB0aGlzIGZpbGUsIGp1c3QgcmVjb3JkIGl0IGFuZCBza2lwXHJcbiAgICAgICAgaWYgKCF0aGlzLmRyYWZ0U3RhdHVzTWFwLmhhcyhmaWxlLnBhdGgpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZHJhZnRTdGF0dXNNYXAuc2V0KGZpbGUucGF0aCwgaXNDdXJyZW50bHlEcmFmdCk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IHByZXZpb3VzRHJhZnRTdGF0dXMgPSB0aGlzLmRyYWZ0U3RhdHVzTWFwLmdldChmaWxlLnBhdGgpO1xyXG5cclxuICAgICAgICBsZXQgZHJhZnRTdGF0dXNDaGFuZ2VkVG9QdWJsaXNoZWQgPSBmYWxzZTtcclxuICAgICAgICAvLyBUcmFuc2l0aW9uIGZyb20gZHJhZnQgdG8gbm9uLWRyYWZ0XHJcbiAgICAgICAgaWYgKHByZXZpb3VzRHJhZnRTdGF0dXMgPT09IHRydWUgJiYgaXNDdXJyZW50bHlEcmFmdCA9PT0gZmFsc2UpIHtcclxuICAgICAgICAgICAgZHJhZnRTdGF0dXNDaGFuZ2VkVG9QdWJsaXNoZWQgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gVXBkYXRlIHRoZSBtYXAgZm9yIG5leHQgdGltZVxyXG4gICAgICAgIHRoaXMuZHJhZnRTdGF0dXNNYXAuc2V0KGZpbGUucGF0aCwgaXNDdXJyZW50bHlEcmFmdCk7XHJcblxyXG4gICAgICAgIC8vIElmIG5vIHB1YmxpY2F0aW9uIGNoYW5nZSBhbmQgbm8gbW9kaWZpZWQgZmllbGQgdG8gdXBkYXRlLCBza2lwIHByb2Nlc3NpbmdcclxuICAgICAgICBpZiAoIWRyYWZ0U3RhdHVzQ2hhbmdlZFRvUHVibGlzaGVkICYmICFoYXNNb2RpZmllZEZpZWxkKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIFByZXZlbnQgaW5maW5pdGUgbG9vcHMgYW5kIHJlZHVuZGFudCBwcm9jZXNzaW5nXHJcbiAgICAgICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcclxuICAgICAgICBpZiAodGhpcy5sYXN0UHJvY2Vzc2VkRmlsZSA9PT0gZmlsZS5wYXRoICYmIG5vdyAtIHRoaXMubGFzdFByb2Nlc3NlZFRpbWUgPCAyMDAwKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIFVzZSBhIGRlYm91bmNlIHRvIHdhaXQgZm9yIHdyaXRpbmcgdG8gZmluaXNoXHJcbiAgICAgICAgaWYgKHRoaXMuZGVib3VuY2VUaW1lb3V0KSB7XHJcbiAgICAgICAgICAgIHdpbmRvdy5jbGVhclRpbWVvdXQodGhpcy5kZWJvdW5jZVRpbWVvdXQpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5kZWJvdW5jZVRpbWVvdXQgPSB3aW5kb3cuc2V0VGltZW91dChhc3luYyAoKSA9PiB7XHJcbiAgICAgICAgICAgIC8vIENoZWNrIGlmIGNvbnRlbnQgKGV4Y2x1ZGluZyBmcm9udG1hdHRlcikgaGFzIGFjdHVhbGx5IGNoYW5nZWRcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGNvbnRlbnQgPSBhd2FpdCB0aGlzLmFwcC52YXVsdC5yZWFkKGZpbGUpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgY3VycmVudEhhc2ggPSB0aGlzLmdldENvbnRlbnRIYXNoKGNvbnRlbnQpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcHJldmlvdXNIYXNoID0gdGhpcy5jb250ZW50SGFzaENhY2hlLmdldChmaWxlLnBhdGgpO1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIFVwZGF0ZSBjYWNoZSBpbW1lZGlhdGVseSB0byBwcmV2ZW50IHJlLXByb2Nlc3NpbmcgZXZlbiBpZiB3ZSBza2lwXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbnRlbnRIYXNoQ2FjaGUuc2V0KGZpbGUucGF0aCwgY3VycmVudEhhc2gpO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChwcmV2aW91c0hhc2ggPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIEZpcnN0IHRpbWUgd2UncmUgc2VlaW5nIHRoZSBjb250ZW50IG9mIGFuIGV4aXN0aW5nIGZpbGUgKGxhenkgaW5pdCB2aWEgZXZlbnQpXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gSWYgd2UgbWlzc2VkIHRoZSBmaWxlLW9wZW4gKGUuZy4gaXQgd2FzIGFscmVhZHkgb3BlbiBvbiBzdGFydCksIFxyXG4gICAgICAgICAgICAgICAgICAgIC8vIHdlJ2xsIHRyZWF0IHRoaXMgZmlyc3QgY2hhbmdlIGFzIHRoZSBiYXNlbGluZSB1bmxlc3MgaXQncyBhIHB1YmxpY2F0aW9uIGNoYW5nZS5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoIWRyYWZ0U3RhdHVzQ2hhbmdlZFRvUHVibGlzaGVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHByZXZpb3VzSGFzaCA9PT0gY3VycmVudEhhc2gpIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBPbmx5IHN1Yi1wdWJsaWNhdGlvbiBjaGFuZ2VzIChsaWtlIG1ldGFkYXRhKSBoYXBwZW5lZCwgc2tpcCBtb2RpZmllZCBkYXRlIHVwZGF0ZVxyXG4gICAgICAgICAgICAgICAgICAgIGlmICghZHJhZnRTdGF0dXNDaGFuZ2VkVG9QdWJsaXNoZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIC8vIElmIGhhc2hlcyBkaWZmZXIsIG9yIGl0J3MgYSBwdWJsaWNhdGlvbiBjaGFuZ2UsIHdlIHByb2NlZWQgdG8gcHJvY2Vzc0ZpbGVcclxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihgRmFpbGVkIHRvIGNoZWNrIGNvbnRlbnQgaGFzaCBmb3IgJHtmaWxlLnBhdGh9OmAsIGUpO1xyXG4gICAgICAgICAgICAgICAgLy8gRmFsbGJhY2sgdG8gcHJvY2Vzc2luZyBpZiByZWFkIGZhaWxzLCBvciByZXR1cm4/IFxyXG4gICAgICAgICAgICAgICAgLy8gQmV0dGVyIHRvIHJldHVybiB0byBiZSBzYWZlIGFnYWluc3QgYWNjaWRlbnRhbCB1cGRhdGVzXHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHZvaWQgdGhpcy5wcm9jZXNzRmlsZShmaWxlLCBkcmFmdFN0YXR1c0NoYW5nZWRUb1B1Ymxpc2hlZCwgY29udGVudFR5cGUpO1xyXG4gICAgICAgIH0sIDUwMCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBnZXRDb250ZW50SGFzaChjb250ZW50OiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgICAgIC8vIDEuIFN0cmlwIGZyb250bWF0dGVyXHJcbiAgICAgICAgbGV0IGJvZHkgPSBjb250ZW50O1xyXG4gICAgICAgIGlmIChjb250ZW50LnN0YXJ0c1dpdGgoJy0tLScpKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGVuZCA9IGNvbnRlbnQuaW5kZXhPZignXFxuLS0tJywgMyk7XHJcbiAgICAgICAgICAgIGlmIChlbmQgIT09IC0xKSB7XHJcbiAgICAgICAgICAgICAgICBib2R5ID0gY29udGVudC5zbGljZShlbmQgKyA0KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gMi4gTm9ybWFsaXplIHdoaXRlc3BhY2U6IGNvbGxhcHNlIGFsbCB3aGl0ZXNwYWNlIGludG8gc2luZ2xlIHNwYWNlcyBhbmQgdHJpbVxyXG4gICAgICAgIGNvbnN0IG5vcm1hbGl6ZWQgPSBib2R5LnJlcGxhY2UoL1xccysvZywgJyAnKS50cmltKCk7XHJcblxyXG4gICAgICAgIC8vIDMuIFNpbXBsZSBoYXNoaW5nIChjb25jYXRlbmF0aW5nIGxlbmd0aCBhbmQgZmlyc3QvbGFzdCBiaXRzIGlzIHVzdWFsbHkgZW5vdWdoIGZvciBsb2NhbCBjaGFuZ2UgZGV0ZWN0aW9uLCBcclxuICAgICAgICAvLyBidXQgbGV0J3MgZG8gYSBzbGlnaHRseSBiZXR0ZXIgb25lIGlmIHdlIHdhbnQgdG8gYmUgcm9idXN0LCBvciBqdXN0IHVzZSB0aGUgbm9ybWFsaXplZCBzdHJpbmcgaWYgbWVtb3J5IGFsbG93cylcclxuICAgICAgICAvLyBHaXZlbiBPYnNpZGlhbiB2YXVsdHMgY2FuIGJlIGxhcmdlLCBhIHNtYWxsIGhhc2ggaXMgc2FmZXIuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc2ltcGxlSGFzaChub3JtYWxpemVkKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHNpbXBsZUhhc2goc3RyOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgICAgIGxldCBoYXNoID0gMDtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHN0ci5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBjb25zdCBjaGFyID0gc3RyLmNoYXJDb2RlQXQoaSk7XHJcbiAgICAgICAgICAgIGhhc2ggPSAoKGhhc2ggPDwgNSkgLSBoYXNoKSArIGNoYXI7XHJcbiAgICAgICAgICAgIGhhc2ggfD0gMDsgLy8gQ29udmVydCB0byAzMmJpdCBpbnRlZ2VyXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBoYXNoLnRvU3RyaW5nKCkgKyBcIl9cIiArIHN0ci5sZW5ndGg7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBhc3luYyB1cGRhdGVEYXRlKGZpbGU6IFRGaWxlKSB7XHJcbiAgICAgICAgY29uc3Qgc2V0dGluZ3MgPSB0aGlzLnBsdWdpbi5zZXR0aW5ncztcclxuICAgICAgICBjb25zdCBkYXRlRmllbGQgPSBzZXR0aW5ncy5wdWJsaXNoRGF0ZUZpZWxkIHx8IFwiZGF0ZVwiO1xyXG5cclxuICAgICAgICBhd2FpdCB0aGlzLmFwcC5maWxlTWFuYWdlci5wcm9jZXNzRnJvbnRNYXR0ZXIoZmlsZSwgKGZyb250bWF0dGVyKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IHRvZGF5ID0gbW9tZW50KCkuZm9ybWF0KHNldHRpbmdzLmRhdGVGb3JtYXQpO1xyXG4gICAgICAgICAgICBpZiAoZnJvbnRtYXR0ZXJbZGF0ZUZpZWxkXSAhPT0gdG9kYXkpIHtcclxuICAgICAgICAgICAgICAgIGZyb250bWF0dGVyW2RhdGVGaWVsZF0gPSB0b2RheTtcclxuICAgICAgICAgICAgICAgIHRoaXMubGFzdFByb2Nlc3NlZEZpbGUgPSBmaWxlLnBhdGg7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxhc3RQcm9jZXNzZWRUaW1lID0gRGF0ZS5ub3coKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgYXN5bmMgcHJvY2Vzc0ZpbGUoZmlsZTogVEZpbGUsIGRyYWZ0U3RhdHVzQ2hhbmdlZFRvUHVibGlzaGVkOiBib29sZWFuLCBjb250ZW50VHlwZTogQ29udGVudFR5cGUgfCBudWxsIHwgdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgY29uc3Qgc2V0dGluZ3MgPSB0aGlzLnBsdWdpbi5zZXR0aW5ncztcclxuICAgICAgICBjb25zdCBwdWJsaXNoRGF0ZUZpZWxkID0gc2V0dGluZ3MucHVibGlzaERhdGVGaWVsZCB8fCBcImRhdGVcIjtcclxuXHJcbiAgICAgICAgYXdhaXQgdGhpcy5hcHAuZmlsZU1hbmFnZXIucHJvY2Vzc0Zyb250TWF0dGVyKGZpbGUsIChmcm9udG1hdHRlcikgPT4ge1xyXG4gICAgICAgICAgICBsZXQgY2hhbmdlZCA9IGZhbHNlO1xyXG5cclxuICAgICAgICAgICAgLy8gSGFuZGxlIERyYWZ0IFN5bmMgKHRyaWdnZXJlZCBvbmx5IG9uIHRoZSBzcGVjaWZpYyB0cmFuc2l0aW9uKVxyXG4gICAgICAgICAgICBpZiAoc2V0dGluZ3Muc3luY0RyYWZ0RGF0ZSAmJiBkcmFmdFN0YXR1c0NoYW5nZWRUb1B1Ymxpc2hlZCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgdG9kYXkgPSBtb21lbnQoKS5mb3JtYXQoc2V0dGluZ3MuZGF0ZUZvcm1hdCk7XHJcbiAgICAgICAgICAgICAgICBpZiAoZnJvbnRtYXR0ZXJbcHVibGlzaERhdGVGaWVsZF0gIT09IHRvZGF5KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZnJvbnRtYXR0ZXJbcHVibGlzaERhdGVGaWVsZF0gPSB0b2RheTtcclxuICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy8gSGFuZGxlIE1vZGlmaWVkIERhdGUgU3luY1xyXG4gICAgICAgICAgICBjb25zdCBtb2RpZmllZEZpZWxkID0gY29udGVudFR5cGU/Lm1vZGlmaWVkRGF0ZUZpZWxkO1xyXG4gICAgICAgICAgICBpZiAobW9kaWZpZWRGaWVsZCAmJiBmcm9udG1hdHRlclttb2RpZmllZEZpZWxkXSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBub3cgPSBtb21lbnQoKS5mb3JtYXQoc2V0dGluZ3MuZGF0ZUZvcm1hdCk7XHJcbiAgICAgICAgICAgICAgICBpZiAoZnJvbnRtYXR0ZXJbbW9kaWZpZWRGaWVsZF0gIT09IG5vdykge1xyXG4gICAgICAgICAgICAgICAgICAgIGZyb250bWF0dGVyW21vZGlmaWVkRmllbGRdID0gbm93O1xyXG4gICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoY2hhbmdlZCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sYXN0UHJvY2Vzc2VkRmlsZSA9IGZpbGUucGF0aDtcclxuICAgICAgICAgICAgICAgIHRoaXMubGFzdFByb2Nlc3NlZFRpbWUgPSBEYXRlLm5vdygpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbn1cclxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFBQUEsb0JBT087OztBQ3NGQSxJQUFNLG1CQUFtQixDQUFDLFFBQVEsV0FBVyxZQUFZO0FBRXpELElBQU0sWUFBWTtBQUFBLEVBQ3hCLGFBQWE7QUFBQSxFQUNiLHNCQUFzQjtBQUFBLEVBQ3RCLHdCQUF3QjtBQUFBLEVBQ3hCLDRCQUE0QjtBQUM3Qjs7O0FDL0ZPLElBQU0sbUJBQTBDO0FBQUEsRUFDdEQsaUJBQ0M7QUFBQSxFQUNELHNCQUFzQjtBQUFBLEVBQ3RCLFlBQVk7QUFBQSxFQUNaLHVCQUF1QjtBQUFBLEVBQ3ZCLHVCQUF1QjtBQUFBLEVBQ3ZCLHlCQUF5QjtBQUFBLEVBQ3pCLDJCQUEyQjtBQUFBLEVBQzNCLHlCQUF5QjtBQUFBLEVBQ3pCLHlCQUF5QjtBQUFBLEVBQ3pCLDRCQUE0QjtBQUFBLEVBQzVCLDBCQUEwQjtBQUFBLEVBQzFCLDZCQUE2QjtBQUFBLEVBQzdCLGdCQUFnQjtBQUFBLEVBQ2hCLHdCQUF3QjtBQUFBLEVBQ3hCLGNBQWMsQ0FBQztBQUFBLEVBQ2Ysb0JBQW9CO0FBQUEsRUFDcEIsdUJBQXVCO0FBQUEsSUFDdEIsU0FBUztBQUFBLElBQ1QsV0FBVztBQUFBLElBQ1gsUUFBUTtBQUFBLEVBQ1Q7QUFBQSxFQUNBLHdCQUF3QjtBQUFBLEVBQ3hCLDhCQUE4QjtBQUFBLEVBQzlCLGVBQWU7QUFBQSxFQUNmLGVBQWU7QUFBQSxFQUNmLFlBQVk7QUFBQSxFQUNaLGtCQUFrQjtBQUNuQjs7O0FDbENBLElBQUFDLG1CQUFzRzs7O0FDQXRHLHNCQUE0Qzs7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QixXQUFLLGlCQUFpQixPQUFPO0FBQzdCLFdBQUssbUJBQW1CO0FBQUEsSUFDekI7QUFDQSxTQUFLLG9CQUFvQjtBQUFBLEVBQzFCO0FBQUEsRUFFUSxpQ0FBaUMsYUFBMEI7QUE5ZHBFO0FBK2RFLFVBQU0seUJBQXlCLENBQUMsS0FBSyxTQUFTLDRCQUE0QixDQUFDLEtBQUssU0FBUztBQUN6RixVQUFNLHVCQUF1QixDQUFDLEtBQUssU0FBUywwQkFBMEIsQ0FBQyxLQUFLLFNBQVM7QUFFckYsVUFBTSxZQUFZLFlBQVksaUJBQWlCLFlBQVk7QUFDM0QsZUFBVyxRQUFRLE1BQU0sS0FBSyxTQUFTLEdBQUc7QUFDekMsWUFBTSxNQUFNLEtBQUssY0FBYyxLQUFLO0FBQ3BDLFVBQUksS0FBSztBQUNSLFlBQUksV0FBVyxJQUFJLGFBQWEsYUFBYSxLQUFLLElBQUksYUFBYSxjQUFjLEtBQ2hGLElBQUksYUFBYSxXQUFXLE1BQzNCLElBQUksVUFBVSxTQUFTLHdCQUF3QixJQUFJLG9CQUFvQixVQUN2RSxJQUFJLFVBQVUsU0FBUyxlQUFlLElBQUksV0FBVyxVQUNyRCxJQUFJLFVBQVUsU0FBUyxlQUFlLElBQUksV0FBVztBQUV2RCxZQUFJLFNBQVUsWUFBVyxTQUFTLFFBQVEsWUFBWSxFQUFFO0FBRXhELFlBQUksMEJBQTBCLGFBQWEsbUJBQW1CO0FBQzdELGVBQUksVUFBSyxnQkFBTCxtQkFBa0IsY0FBYyxTQUFTLFlBQWEsTUFBSyxPQUFPO0FBQUEsUUFDdkU7QUFDQSxZQUFJLHlCQUF5QixhQUFhLFlBQVksYUFBYSxXQUFXO0FBQzdFLGVBQUksVUFBSyxnQkFBTCxtQkFBa0IsY0FBYyxTQUFTLFVBQVcsTUFBSyxPQUFPO0FBQUEsUUFDckU7QUFBQSxNQUNEO0FBQUEsSUFDRDtBQUFBLEVBQ0Q7QUFDRDsiLAogICJuYW1lcyI6IFsiaW1wb3J0X29ic2lkaWFuIiwgImltcG9ydF9vYnNpZGlhbiIsICJuZXdGaWxlIiwgImltcG9ydF9vYnNpZGlhbiIsICJpbXBvcnRfb2JzaWRpYW4iLCAiaW1wb3J0X29ic2lkaWFuIiwgImNvbnRlbnRUeXBlIiwgIl9hIiwgImhhc01hdGNoaW5nQ29udGVudFR5cGUiLCAic2V0dGluZ3MiLCAicGx1Z2luSW50ZXJmYWNlIiwgImZpbGUiLCAidHlwZSIsICJpbXBvcnRfb2JzaWRpYW4iLCAiaW1wb3J0X29ic2lkaWFuIiwgImltcG9ydF9vYnNpZGlhbiIsICJpbXBvcnRfb2JzaWRpYW4iLCAiaW1wb3J0X29ic2lkaWFuIiwgIl9hIiwgInRvZ2dsZSIsICJpbXBvcnRfb2JzaWRpYW4iLCAiaW1wb3J0X29ic2lkaWFuIiwgImltcG9ydF9vYnNpZGlhbiIsICJpbXBvcnRfb2JzaWRpYW4iLCAiX2EiLCAiX2IiXQp9Cg== diff --git a/src/content/.obsidian/plugins/astro-composer/manifest.json b/src/content/.obsidian/plugins/astro-composer/manifest.json new file mode 100644 index 0000000..af46cdf --- /dev/null +++ b/src/content/.obsidian/plugins/astro-composer/manifest.json @@ -0,0 +1 @@ +{"id":"astro-composer","name":"Astro Composer","version":"0.11.4","minAppVersion":"0.15.0","description":"Turn your notes into posts and pages for your Astro blog with automated content management features.","author":"David V. Kimball","authorUrl":"https://davidvkimball.com","fundingUrl":"https://patreon.com/davidvkimball","isDesktopOnly":false} \ No newline at end of file diff --git a/src/content/.obsidian/plugins/astro-composer/styles.css b/src/content/.obsidian/plugins/astro-composer/styles.css new file mode 100644 index 0000000..e87af03 --- /dev/null +++ b/src/content/.obsidian/plugins/astro-composer/styles.css @@ -0,0 +1,380 @@ +.astro-composer-title-input { + width: 100%; + margin-bottom: 16px; + padding: 8px; +} + +.astro-composer-button-container { + display: flex; + gap: 8px; + justify-content: flex-end; + margin-top: 16px; +} + +/* Ensure all buttons in the button container use default cursor */ +.astro-composer-button-container button { + cursor: default !important; +} + +.astro-composer-button-container button:hover { + cursor: default !important; +} + +.astro-composer-cancel-button, +.astro-composer-create-button { + padding: 6px 12px; + border-radius: 4px; + cursor: default !important; +} + +.astro-composer-cancel-button:hover, +.astro-composer-create-button:hover { + cursor: default !important; +} + +.astro-composer-create-button.mod-cta { + background-color: var(--interactive-accent); + color: var(--text-on-accent); + cursor: default !important; +} + +.astro-composer-create-button.mod-cta:hover { + background-color: var(--interactive-accent-hover); + cursor: default !important; +} + +.astro-composer-template-textarea { + height: 300px; /* Adjusted for 5-10 lines of properties */ + width: 100%; + padding: 8px; + resize: vertical; /* Allow vertical resizing */ + margin-bottom: 16px; +} + +.astro-composer-modal { + padding: 20px; + max-width: 500px; + margin: 0 auto; +} + +.astro-composer-modal h2 { + margin-top: 0; +} + +/* Custom Content Types Styling */ +.custom-content-types-container { + margin-top: 0; +} + +.custom-content-type-item { + border: 1px solid var(--background-modifier-border); + border-radius: 6px; + padding: 16px; + margin-bottom: 16px; + background-color: var(--background-secondary); +} + +.custom-content-type-header { + display: flex; + justify-content: space-between; + align-items: center; +} + +.custom-content-type-header .setting-item { + margin-bottom: 0; +} + +.custom-content-type-header .setting-item-name { + font-weight: 600; + color: var(--text-normal); +} + +.custom-content-type-item .setting-item { + margin-bottom: 12px; +} + +.custom-content-type-item .setting-item:last-child { + margin-bottom: 0; +} + +/* Add spacing between settings in custom content types since we removed dividers */ +.custom-content-type-settings > div { + margin-bottom: 16px; +} + +.custom-content-type-settings > div:last-child { + margin-bottom: 0; +} + +.custom-content-type-settings { + transition: all 0.2s ease-in-out; + padding-top: 12px; +} + +.custom-content-type-settings[style*="none"] { + opacity: 0; + transform: translateY(-10px); +} + +/* Mobile-specific improvements for Astro Composer modal */ +@media (max-width: 768px) { + /* Force mobile positioning for all modals containing our content */ + .modal:has(.astro-composer-title-input) { + position: fixed !important; + top: 10% !important; + left: 50% !important; + transform: translateX(-50%) !important; + max-height: 50vh !important; + overflow-y: auto !important; + width: 90vw !important; + max-width: 500px !important; + } + + /* Only target our specific modal content, not all modals */ + .modal .astro-composer-title-input { + font-size: 16px; /* Prevents zoom on iOS */ + padding: 12px; + border: 1px solid var(--background-modifier-border); + border-radius: 4px; + } + + /* Ensure our modal content is properly sized on mobile */ + .modal .astro-composer-button-container { + flex-direction: column; + gap: 12px; + } + + .modal .astro-composer-cancel-button, + .modal .astro-composer-create-button { + width: 100%; + padding: 12px; + font-size: 16px; + cursor: default !important; + } + + .modal .astro-composer-cancel-button:hover, + .modal .astro-composer-create-button:hover { + cursor: default !important; + } +} + +/* Fallback for browsers that don't support :has() */ +.astro-composer-mobile-modal { + position: fixed !important; + top: 10% !important; + left: 50% !important; + transform: translateX(-50%) !important; + max-height: 50vh !important; + overflow-y: auto !important; + width: 90vw !important; + max-width: 500px !important; +} + +/* Settings UI utility classes */ +.astro-composer-setting-container-visible { + display: block; +} + +.astro-composer-setting-container-hidden { + display: none; +} + +.astro-composer-custom-type-header { + display: flex; + justify-content: space-between; + align-items: center; + gap: 8px; +} + +.astro-composer-header-name { + flex: 1; + min-width: 0; +} + +/* Collapse button */ +.astro-composer-collapse-button { + background: transparent !important; + border: none !important; + padding: 4px; + margin-right: 4px; + cursor: default; + color: var(--text-muted); + display: flex; + align-items: center; + justify-content: center; + border-radius: 4px; + transition: background-color 0.2s ease, color 0.2s ease; + box-shadow: none !important; +} + +.astro-composer-collapse-button:hover { + background-color: var(--background-modifier-hover); + color: var(--text-normal); +} + +.astro-composer-collapse-button:active { + background-color: var(--background-modifier-active); +} + +.astro-composer-collapse-button svg { + transition: transform 0.2s ease; +} + +.astro-composer-collapse-button.is-collapsed svg { + transform: rotate(-90deg); +} + +/* Reorder buttons container */ +.astro-composer-reorder-buttons { + display: flex; + flex-direction: row; + gap: 4px; + margin-right: 8px; + align-items: center; +} + +/* Reorder buttons - minimal icon-only style */ +.astro-composer-reorder-button { + background: transparent !important; + border: none !important; + padding: 4px; + cursor: default; + color: var(--text-muted); + display: flex; + align-items: center; + justify-content: center; + border-radius: 4px; + transition: background-color 0.2s ease, color 0.2s ease; + line-height: 1; + opacity: 0.6; + box-shadow: none !important; +} + +.astro-composer-reorder-button:hover:not(:disabled) { + background-color: var(--background-modifier-hover); + color: var(--text-normal); + opacity: 1; +} + +.astro-composer-reorder-button:active:not(:disabled) { + background-color: var(--background-modifier-active); +} + +.astro-composer-reorder-button:disabled { + opacity: 0.2; + cursor: default; +} + +.astro-composer-reorder-button svg { + width: 16px; + height: 16px; +} + +.astro-composer-remove-setting { + border-top: none; +} + +.astro-composer-add-button { + border-top: none; +} + +/* Floating button container - no settings background, right-aligned */ +.astro-composer-add-button-container { + display: flex; + justify-content: flex-end; + margin-top: 16px; + margin-bottom: 0; + padding: 0; + background: transparent; + border: none; +} + +.astro-composer-add-button-container button { + margin: 0; +} + +/* Settings tab - hidden setting elements */ +/* Only hide the setting item info elements, not nested ones inside content types */ +.astro-composer-setting-hidden-elements > .setting-item-info > .setting-item-name, +.astro-composer-setting-hidden-elements > .setting-item-info > .setting-item-description, +.astro-composer-setting-hidden-elements > .setting-item-control { + display: none; +} + +.astro-composer-setting-hidden-elements { + border-top: none; + padding-top: 0; + padding-bottom: 0; +} + +.astro-composer-setting-container-full-width { + display: block; + width: 100%; +} + +.astro-composer-custom-types-container-visible { + display: block !important; + width: 100% !important; + visibility: visible !important; +} + +/* Ensure custom content types container is always visible even when parent has hidden elements */ +.astro-composer-setting-hidden-elements .custom-content-types-container { + display: block !important; + visibility: visible !important; +} + +/* Ensure content type items inside the container are visible */ +.custom-content-types-container .custom-content-type-item { + display: block !important; + visibility: visible !important; +} + +/* Conflict warning styles */ +.astro-composer-conflict-warning { + color: var(--text-warning); + font-size: 0.9em; + margin-top: 0.5em; +} + +.astro-composer-conflict-warning.hidden { + display: none; +} + +/* Help button replacement */ +/* No special display needed - inherits from parent flex container */ + +/* Ribbon context menu hiding - these will be applied via classes */ +.astro-composer-hide-terminal-icon .menu-item:has(svg[data-lucide="terminal-square"]), +.astro-composer-hide-terminal-icon .menu-item:has(.lucide-terminal-square), +.astro-composer-hide-terminal-icon .menu-item .menu-item-icon:has(svg[data-lucide="terminal-square"]), +.astro-composer-hide-terminal-icon .menu-item .menu-item-icon:has(.lucide-terminal-square) { + display: none !important; +} + +.astro-composer-hide-config-icon .menu-item:has(svg[data-lucide="wrench"]), +.astro-composer-hide-config-icon .menu-item:has(svg[data-lucide="rocket"]), +.astro-composer-hide-config-icon .menu-item:has(.lucide-wrench), +.astro-composer-hide-config-icon .menu-item:has(.lucide-rocket), +.astro-composer-hide-config-icon .menu-item .menu-item-icon:has(svg[data-lucide="wrench"]), +.astro-composer-hide-config-icon .menu-item .menu-item-icon:has(svg[data-lucide="rocket"]), +.astro-composer-hide-config-icon .menu-item .menu-item-icon:has(.lucide-wrench), +.astro-composer-hide-config-icon .menu-item .menu-item-icon:has(.lucide-rocket) { + display: none !important; +} + +/* Help button hiding */ +.astro-composer-hide-help-button .workspace-drawer-vault-actions .clickable-icon:has(svg.help) { + display: none !important; +} + +/* Group settings compatibility styling for older Obsidian builds (< 1.11.0) */ +/* Scoped to only this plugin's settings container to avoid affecting other plugins */ +.astro-composer-settings-compat .setting-group-heading h3 { + margin: 0 0 0.75rem; + padding-bottom: 0.5rem; + padding-top: 0.5rem; + font-size: 1rem; + font-weight: 600; + border-bottom: none !important; +} diff --git a/src/content/.obsidian/plugins/bases-cms/data.json b/src/content/.obsidian/plugins/bases-cms/data.json new file mode 100644 index 0000000..8aaba0c --- /dev/null +++ b/src/content/.obsidian/plugins/bases-cms/data.json @@ -0,0 +1,28 @@ +{ + "confirmBulkOperations": true, + "deleteParentFolder": true, + "deleteParentFolderFilename": "index", + "deleteUniqueAttachments": true, + "confirmDeletions": true, + "useHomeIcon": true, + "enableQuickEdit": true, + "quickEditCommand": "astro-composer:rename-content", + "quickEditCommandName": "Astro Composer: Rename current content", + "quickEditIcon": "lucide-pencil-line", + "quickEditOpenFile": false, + "showToolbarSelectAll": true, + "showToolbarClear": true, + "showToolbarDraft": true, + "showToolbarPublish": true, + "showToolbarTags": true, + "showToolbarSet": true, + "showToolbarRemove": true, + "showToolbarDelete": true, + "forceStaticGifImages": false, + "embeddedViewRefreshDebounceMs": 250, + "virtualScrollThreshold": 100, + "virtualScrollBuffer": 20, + "migrationBasesCmsToCmsDone": true, + "showPropertiesInfoModal": true, + "thumbnailCacheSize": "balanced" +} \ No newline at end of file diff --git a/src/content/.obsidian/plugins/bases-cms/main.js b/src/content/.obsidian/plugins/bases-cms/main.js new file mode 100644 index 0000000..af82f0c --- /dev/null +++ b/src/content/.obsidian/plugins/bases-cms/main.js @@ -0,0 +1,6587 @@ +/* +THIS IS A GENERATED/BUNDLED FILE BY ESBUILD +if you want to view the source, please visit the github repository of this plugin +*/ + +"use strict"; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __esm = (fn, res) => function __init() { + return fn && (res = (0, fn[__getOwnPropNames(fn)[0]])(fn = 0)), res; +}; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/utils/mdx-frontmatter.ts +function isMdxFile(file) { + return file.extension === "mdx"; +} +function parseMdxFrontmatter(content) { + const frontmatterRegex = /^---\n([\s\S]*?)\n---\n/; + const match = content.match(frontmatterRegex); + if (!match) { + return { + frontmatter: {}, + body: content + }; + } + const frontmatterText = match[1]; + const bodyContent = content.slice(match[0].length); + try { + const parsed = (0, import_obsidian5.parseYaml)(frontmatterText); + const frontmatter = parsed && typeof parsed === "object" ? parsed : {}; + return { + frontmatter, + body: bodyContent + }; + } catch (e) { + console.error("Error parsing MDX properties:", e); + return { + frontmatter: {}, + body: bodyContent + }; + } +} +async function readMdxFrontmatter(app, file) { + if (!isMdxFile(file)) { + return null; + } + try { + const content = await app.vault.read(file); + const parsed = parseMdxFrontmatter(content); + return parsed ? parsed.frontmatter : null; + } catch (e) { + console.error(`Error reading MDX properties from ${file.path}:`, e); + return null; + } +} +async function processMdxFrontMatter(app, file, callback) { + if (!isMdxFile(file)) { + throw new Error(`File ${file.path} is not an MDX file`); + } + try { + const content = await app.vault.read(file); + const parsed = parseMdxFrontmatter(content); + if (!parsed) { + throw new Error("Failed to parse existing frontmatter"); + } + const frontmatter = { ...parsed.frontmatter }; + callback(frontmatter); + const newFrontmatterText = (0, import_obsidian5.stringifyYaml)(frontmatter).trim(); + const newContent = `--- +${newFrontmatterText} +--- +${parsed.body}`; + await app.vault.modify(file, newContent); + } catch (e) { + console.error(`Error processing MDX properties for ${file.path}:`, e); + throw e; + } +} +var import_obsidian5; +var init_mdx_frontmatter = __esm({ + "src/utils/mdx-frontmatter.ts"() { + "use strict"; + import_obsidian5 = require("obsidian"); + } +}); + +// src/utils/frontmatter-helper.ts +async function getFileFrontmatter(app, file) { + if (isMdxFile(file)) { + return await readMdxFrontmatter(app, file); + } else { + const metadata = app.metadataCache.getFileCache(file); + return (metadata == null ? void 0 : metadata.frontmatter) || null; + } +} +async function processFileFrontMatter(app, file, callback) { + if (isMdxFile(file)) { + await processMdxFrontMatter(app, file, callback); + } else { + await app.fileManager.processFrontMatter(file, callback); + } +} +var init_frontmatter_helper = __esm({ + "src/utils/frontmatter-helper.ts"() { + "use strict"; + init_mdx_frontmatter(); + } +}); + +// src/shared/settings-schema.ts +var settings_schema_exports = {}; +__export(settings_schema_exports, { + getCMSViewOptions: () => getCMSViewOptions, + readCMSSettings: () => readCMSSettings +}); +function readCMSSettings(config, pluginSettings) { + var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o, _p, _q, _r, _s, _t, _u; + const getConfig = (key) => { + var _a2; + return (_a2 = config == null ? void 0 : config.get) == null ? void 0 : _a2.call(config, key); + }; + return { + titleProperty: getConfig("titleProperty") || "note.title", + descriptionProperty: getConfig("descriptionProperty") || "", + imageProperty: getConfig("imageProperty") || "", + showTitle: true, + // Always show title, defaulting to file name if no property set + showDate: (_a = getConfig("showDate")) != null ? _a : false, + dateProperty: getConfig("dateProperty") || "", + dateIncludeTime: (_b = getConfig("dateIncludeTime")) != null ? _b : false, + showTextPreview: (_c = getConfig("showTextPreview")) != null ? _c : true, + fallbackToContent: (_d = getConfig("fallbackToContent")) != null ? _d : true, + truncatePreviewProperty: (_e = getConfig("truncatePreviewProperty")) != null ? _e : false, + fallbackToEmbeds: (() => { + const value = getConfig("fallbackToEmbeds"); + if (value === "always" || value === "if-empty" || value === "never") { + return value; + } + return value === false ? "never" : "if-empty"; + })(), + propertyDisplay1: getConfig("propertyDisplay1") || "", + propertyDisplay2: getConfig("propertyDisplay2") || "", + propertyDisplay3: getConfig("propertyDisplay3") || "", + propertyDisplay4: getConfig("propertyDisplay4") || "", + propertyDisplay5: getConfig("propertyDisplay5") || "", + propertyDisplay6: getConfig("propertyDisplay6") || "", + propertyDisplay7: getConfig("propertyDisplay7") || "", + propertyDisplay8: getConfig("propertyDisplay8") || "", + propertyDisplay9: getConfig("propertyDisplay9") || "", + propertyDisplay10: getConfig("propertyDisplay10") || "", + propertyDisplay11: getConfig("propertyDisplay11") || "", + propertyDisplay12: getConfig("propertyDisplay12") || "", + propertyDisplay13: getConfig("propertyDisplay13") || "", + propertyDisplay14: getConfig("propertyDisplay14") || "", + propertyLayout12SideBySide: (_f = getConfig("propertyLayout12SideBySide")) != null ? _f : false, + propertyLayout34SideBySide: (_g = getConfig("propertyLayout34SideBySide")) != null ? _g : false, + propertyLayout56SideBySide: (_h = getConfig("propertyLayout56SideBySide")) != null ? _h : false, + propertyLayout78SideBySide: (_i = getConfig("propertyLayout78SideBySide")) != null ? _i : false, + propertyLayout910SideBySide: (_j = getConfig("propertyLayout910SideBySide")) != null ? _j : false, + propertyLayout1112SideBySide: (_k = getConfig("propertyLayout1112SideBySide")) != null ? _k : false, + propertyLayout1314SideBySide: (_l = getConfig("propertyLayout1314SideBySide")) != null ? _l : false, + propertyGroup1Position: getConfig("propertyGroup1Position") || "bottom", + propertyGroup2Position: getConfig("propertyGroup2Position") || "bottom", + propertyGroup3Position: getConfig("propertyGroup3Position") || "bottom", + propertyGroup4Position: getConfig("propertyGroup4Position") || "bottom", + propertyGroup5Position: getConfig("propertyGroup5Position") || "bottom", + propertyGroup6Position: getConfig("propertyGroup6Position") || "bottom", + propertyGroup7Position: getConfig("propertyGroup7Position") || "bottom", + imageFormat: getConfig("imageFormat") || "thumbnail", + imagePosition: getConfig("imagePosition") || "right", + propertyLabels: getConfig("propertyLabels") || "hide", + showDraftStatus: (_m = getConfig("showDraftStatus")) != null ? _m : false, + draftStatusProperty: getConfig("draftStatusProperty") || "", + draftStatusReverse: (_n = getConfig("draftStatusReverse")) != null ? _n : false, + draftStatusUseFilenamePrefix: (_o = getConfig("draftStatusUseFilenamePrefix")) != null ? _o : false, + showTags: (_p = getConfig("showTags")) != null ? _p : false, + tagsProperty: getConfig("tagsProperty") || "", + maxTagsToShow: (_q = getConfig("maxTagsToShow")) != null ? _q : 3, + customizeNewButton: (_r = getConfig("customizeNewButton")) != null ? _r : false, + newNoteLocation: getConfig("newNoteLocation") || "", + hideQuickEditIcon: (_s = getConfig("hideQuickEditIcon")) != null ? _s : false, + cardSize: (_t = getConfig("cardSize")) != null ? _t : 250, + imageAspectRatio: (_u = getConfig("imageAspectRatio")) != null ? _u : 0.55 + }; +} +function getCMSViewOptions() { + const options = [ + // Card size (standalone) + { + type: "slider", + displayName: "Card size", + key: "cardSize", + min: 50, + max: 1e3, + step: 10, + default: 250 + }, + // Title group + { + type: "group", + displayName: "Title", + items: [ + { + type: "property", + displayName: "Title property", + key: "titleProperty", + placeholder: "Select property", + default: "" + } + ] + }, + // Text preview group + { + type: "group", + displayName: "Text preview", + items: [ + { + type: "toggle", + displayName: "Show text preview", + key: "showTextPreview", + default: true + }, + { + type: "property", + displayName: "Text preview property", + key: "descriptionProperty", + placeholder: "Select property", + default: "" + }, + { + type: "toggle", + displayName: "Use note content if text preview property unavailable", + key: "fallbackToContent", + default: true + }, + { + type: "toggle", + displayName: "Truncate preview property", + key: "truncatePreviewProperty", + default: false + } + ] + }, + // Image group + { + type: "group", + displayName: "Image", + items: [ + { + type: "dropdown", + displayName: "Image format", + key: "imageFormat", + options: { + "none": "No image", + "thumbnail": "Thumbnail", + "cover": "Cover" + }, + default: "thumbnail" + }, + { + type: "property", + displayName: "Image property", + key: "imageProperty", + placeholder: "Select property", + default: "" + }, + { + type: "dropdown", + displayName: "Show image embeds", + key: "fallbackToEmbeds", + options: { + "always": "Always", + "if-empty": "If image property missing or empty", + "never": "Never" + }, + default: "if-empty" + }, + { + type: "slider", + displayName: "Image aspect ratio", + key: "imageAspectRatio", + min: 0.1, + max: 2, + step: 0.05, + default: 0.55, + showWhen: { + key: "imageFormat", + value: "cover" + } + } + ] + }, + // Date group + { + type: "group", + displayName: "Date", + items: [ + { + type: "toggle", + displayName: "Show date", + key: "showDate", + default: false + }, + { + type: "property", + displayName: "Date property", + key: "dateProperty", + placeholder: "Select property", + default: "" + }, + { + type: "toggle", + displayName: "Include time", + description: "When enabled, displays both date and time using your system locale settings", + key: "dateIncludeTime", + default: false + } + ] + }, + // Draft status group + { + type: "group", + displayName: "Draft status", + items: [ + { + type: "toggle", + displayName: "Show draft status", + key: "showDraftStatus", + default: false + }, + { + type: "property", + displayName: "Draft status property", + key: "draftStatusProperty", + placeholder: "Select property", + default: "" + }, + { + type: "toggle", + displayName: "Reverse logic", + key: "draftStatusReverse", + default: false + }, + { + type: "toggle", + displayName: "Filename underscore prefix as draft indicator", + key: "draftStatusUseFilenamePrefix", + default: false + } + ] + }, + // Tags group + { + type: "group", + displayName: "Tags", + items: [ + { + type: "toggle", + displayName: "Show tags", + key: "showTags", + default: false + }, + { + type: "property", + displayName: "Tags property", + key: "tagsProperty", + placeholder: "Select property", + default: "" + }, + { + type: "slider", + displayName: "Maximum tags to show", + key: "maxTagsToShow", + min: 1, + max: 50, + step: 1, + default: 3, + showWhen: { + key: "showTags", + value: true + } + } + ] + }, + // Properties group + { + type: "group", + displayName: "Properties", + items: [ + { + type: "dropdown", + displayName: "Show property labels", + key: "propertyLabels", + options: { + "hide": "Hide", + "inline": "Inline", + "above": "On top" + }, + default: "hide" + } + ] + }, + // Property group 1 + { + type: "group", + displayName: "Property group 1", + items: [ + { + type: "property", + displayName: "First property", + key: "propertyDisplay1", + placeholder: "Select property", + default: "" + }, + { + type: "property", + displayName: "Second property", + key: "propertyDisplay2", + placeholder: "Select property", + default: "" + }, + { + type: "toggle", + displayName: "Show side-by-side", + key: "propertyLayout12SideBySide", + default: false + }, + { + type: "dropdown", + displayName: "Position", + key: "propertyGroup1Position", + options: { + "top": "Top", + "bottom": "Bottom" + }, + default: "bottom" + } + ] + }, + // Property group 2 + { + type: "group", + displayName: "Property group 2", + items: [ + { + type: "property", + displayName: "Third property", + key: "propertyDisplay3", + placeholder: "Select property", + default: "" + }, + { + type: "property", + displayName: "Fourth property", + key: "propertyDisplay4", + placeholder: "Select property", + default: "" + }, + { + type: "toggle", + displayName: "Show side-by-side", + key: "propertyLayout34SideBySide", + default: false + }, + { + type: "dropdown", + displayName: "Position", + key: "propertyGroup2Position", + options: { + "top": "Top", + "bottom": "Bottom" + }, + default: "bottom" + } + ] + }, + // Property group 3 + { + type: "group", + displayName: "Property group 3", + items: [ + { + type: "property", + displayName: "First property", + key: "propertyDisplay5", + placeholder: "Select property", + default: "" + }, + { + type: "property", + displayName: "Second property", + key: "propertyDisplay6", + placeholder: "Select property", + default: "" + }, + { + type: "toggle", + displayName: "Show side-by-side", + key: "propertyLayout56SideBySide", + default: false + }, + { + type: "dropdown", + displayName: "Position", + key: "propertyGroup3Position", + options: { + "top": "Top", + "bottom": "Bottom" + }, + default: "bottom" + } + ] + }, + // Property group 4 + { + type: "group", + displayName: "Property group 4", + items: [ + { + type: "property", + displayName: "First property", + key: "propertyDisplay7", + placeholder: "Select property", + default: "" + }, + { + type: "property", + displayName: "Second property", + key: "propertyDisplay8", + placeholder: "Select property", + default: "" + }, + { + type: "toggle", + displayName: "Show side-by-side", + key: "propertyLayout78SideBySide", + default: false + }, + { + type: "dropdown", + displayName: "Position", + key: "propertyGroup4Position", + options: { + "top": "Top", + "bottom": "Bottom" + }, + default: "bottom" + } + ] + }, + // Property group 5 + { + type: "group", + displayName: "Property group 5", + items: [ + { + type: "property", + displayName: "First property", + key: "propertyDisplay9", + placeholder: "Select property", + default: "" + }, + { + type: "property", + displayName: "Second property", + key: "propertyDisplay10", + placeholder: "Select property", + default: "" + }, + { + type: "toggle", + displayName: "Show side-by-side", + key: "propertyLayout910SideBySide", + default: false + }, + { + type: "dropdown", + displayName: "Position", + key: "propertyGroup5Position", + options: { + "top": "Top", + "bottom": "Bottom" + }, + default: "bottom" + } + ] + }, + // Property group 6 + { + type: "group", + displayName: "Property group 6", + items: [ + { + type: "property", + displayName: "First property", + key: "propertyDisplay11", + placeholder: "Select property", + default: "" + }, + { + type: "property", + displayName: "Second property", + key: "propertyDisplay12", + placeholder: "Select property", + default: "" + }, + { + type: "toggle", + displayName: "Show side-by-side", + key: "propertyLayout1112SideBySide", + default: false + }, + { + type: "dropdown", + displayName: "Position", + key: "propertyGroup6Position", + options: { + "top": "Top", + "bottom": "Bottom" + }, + default: "bottom" + } + ] + }, + // Property group 7 + { + type: "group", + displayName: "Property group 7", + items: [ + { + type: "property", + displayName: "First property", + key: "propertyDisplay13", + placeholder: "Select property", + default: "" + }, + { + type: "property", + displayName: "Second property", + key: "propertyDisplay14", + placeholder: "Select property", + default: "" + }, + { + type: "toggle", + displayName: "Show side-by-side", + key: "propertyLayout1314SideBySide", + default: false + }, + { + type: "dropdown", + displayName: "Position", + key: "propertyGroup7Position", + options: { + "top": "Top", + "bottom": "Bottom" + }, + default: "bottom" + } + ] + }, + // Behavior group + { + type: "group", + displayName: "Behavior", + items: [ + { + type: "toggle", + displayName: "Open new notes directly", + description: "Skip the Bases modal and create notes directly (like the file explorer). When disabled, uses normal Bases behavior with the property popup.", + key: "customizeNewButton", + default: false + }, + { + type: "text", + displayName: "Location for new notes", + description: 'Folder path where new notes will be created. Use / for vault root, or specify a folder path. Works independently of "Open new notes directly".', + key: "newNoteLocation", + placeholder: "Simply use / for vault folder", + default: "" + }, + { + type: "toggle", + displayName: "Hide quick edit icon", + key: "hideQuickEditIcon", + default: false + } + ] + } + ]; + return options; +} +var init_settings_schema = __esm({ + "src/shared/settings-schema.ts"() { + "use strict"; + } +}); + +// src/utils/attachment-detection.ts +async function getAttachmentsInNote(app, file) { + var _a; + const attachments = []; + const content = app.vault.getAbstractFileByPath(file.path); + if (content instanceof import_obsidian17.TFile) { + if (file.extension === "md") { + const metadata = app.metadataCache.getFileCache(content); + const embeds = (metadata == null ? void 0 : metadata.embeds) || []; + for (const embed of embeds) { + const embedFile = app.metadataCache.getFirstLinkpathDest(embed.link, file.path); + if (embedFile instanceof import_obsidian17.TFile) { + attachments.push(embedFile); + } + } + } + const frontmatter = await getFileFrontmatter(app, file); + if (frontmatter) { + const imagePropertyNames = ["image", "imageOG", "cover", "thumbnail"]; + const validImageExtensions = ["avif", "bmp", "gif", "jpeg", "jpg", "png", "svg", "webp"]; + for (const propName of imagePropertyNames) { + const propValue = frontmatter[propName]; + if (!propValue) continue; + const imagePaths = Array.isArray(propValue) ? propValue : [propValue]; + for (const imagePath of imagePaths) { + if (typeof imagePath !== "string") continue; + const cleanPath = imagePath.replace(/^!?\[\[([^\]]+)\]\]$/, "$1").trim(); + if (!cleanPath) continue; + if (cleanPath.startsWith("http://") || cleanPath.startsWith("https://")) { + continue; + } + let imageFile = app.metadataCache.getFirstLinkpathDest(cleanPath, file.path); + if (!imageFile && cleanPath.startsWith("./")) { + const relativePath = cleanPath.substring(2); + const fullPath = ((_a = file.parent) == null ? void 0 : _a.path) ? `${file.parent.path}/${relativePath}` : relativePath; + const resolvedFile = app.vault.getAbstractFileByPath(fullPath); + if (resolvedFile instanceof import_obsidian17.TFile) { + imageFile = resolvedFile; + } + } + if (!imageFile) { + const absoluteFile = app.vault.getAbstractFileByPath(cleanPath); + if (absoluteFile instanceof import_obsidian17.TFile) { + imageFile = absoluteFile; + } + } + if (imageFile && validImageExtensions.includes(imageFile.extension)) { + attachments.push(imageFile); + } + } + } + } + } + return attachments; +} +async function getAttachmentsInFolder(app, folder) { + const attachments = []; + for (const child of folder.children) { + if (child instanceof import_obsidian17.TFile && (child.extension === "md" || child.extension === "mdx")) { + attachments.push(...await getAttachmentsInNote(app, child)); + } else if (child instanceof import_obsidian17.TFolder) { + attachments.push(...await getAttachmentsInFolder(app, child)); + } + } + return attachments; +} +async function isAttachmentUsedInOtherNotes(app, attachment, excludedNote, excludedFolder) { + const allNotes = app.vault.getMarkdownFiles().filter( + (file) => file.path !== excludedNote.path + ); + const attachmentPath = attachment.path; + const attachmentName = attachment.name; + const attachmentBasename = attachment.basename; + for (const note of allNotes) { + if (excludedFolder && note.path.startsWith(excludedFolder.path + "/")) { + continue; + } + const content = await app.vault.read(note); + if (content.includes(attachmentPath) || content.includes(attachmentName) || content.includes(attachmentBasename) || content.includes(`![[${attachmentName}]]`) || content.includes(`[[${attachmentName}]]`) || content.includes(`(${attachmentName})`) || content.includes(`(${attachmentPath})`)) { + return true; + } + } + return false; +} +async function findUniqueAttachments(app, deletedNote, deletedFolder) { + const attachments = []; + attachments.push(...await getAttachmentsInNote(app, deletedNote)); + if (deletedFolder) { + attachments.push(...await getAttachmentsInFolder(app, deletedFolder)); + } + const uniqueAttachments = Array.from(new Set(attachments.map((a) => a.path))).map((path) => app.vault.getAbstractFileByPath(path)).filter((file) => file instanceof import_obsidian17.TFile); + const result = []; + for (const attachment of uniqueAttachments) { + const isUsedElsewhere = await isAttachmentUsedInOtherNotes( + app, + attachment, + deletedNote, + deletedFolder + ); + if (!isUsedElsewhere) { + result.push(attachment); + } + } + return result; +} +var import_obsidian17; +var init_attachment_detection = __esm({ + "src/utils/attachment-detection.ts"() { + "use strict"; + import_obsidian17 = require("obsidian"); + init_frontmatter_helper(); + } +}); + +// src/utils/smart-deletion.ts +var smart_deletion_exports = {}; +__export(smart_deletion_exports, { + executeSmartDeletion: () => executeSmartDeletion, + isFolderBasedContent: () => isFolderBasedContent, + prepareDeletionPreview: () => prepareDeletionPreview, + shouldDeleteParentFolder: () => shouldDeleteParentFolder +}); +function isFolderBasedContent(file, config) { + const configuredFilename = config.deleteParentFolderFilename || "index"; + return file.basename === configuredFilename && file.parent !== null; +} +function shouldDeleteParentFolder(file, config) { + return config.deleteParentFolder && isFolderBasedContent(file, config); +} +async function prepareDeletionPreview(app, files, config) { + const filesToDelete = []; + const foldersToDelete = []; + const attachmentsToDelete = []; + for (const filePath of files) { + const file = app.vault.getAbstractFileByPath(filePath); + if (!(file instanceof import_obsidian18.TFile)) continue; + if (shouldDeleteParentFolder(file, config)) { + const parentFolder = file.parent; + if (parentFolder && !foldersToDelete.includes(parentFolder)) { + foldersToDelete.push(parentFolder); + const folderFiles = parentFolder.children.filter( + (child) => child instanceof import_obsidian18.TFile + ); + filesToDelete.push(...folderFiles); + } + } else { + filesToDelete.push(file); + } + if (config.deleteUniqueAttachments) { + const parentFolder = shouldDeleteParentFolder(file, config) ? file.parent || void 0 : void 0; + const uniqueAttachments2 = await findUniqueAttachments( + app, + file, + parentFolder + ); + attachmentsToDelete.push(...uniqueAttachments2); + } + } + const uniqueFiles = Array.from(new Set(filesToDelete.map((f) => f.path))).map((path) => app.vault.getAbstractFileByPath(path)).filter((file) => file instanceof import_obsidian18.TFile); + const uniqueAttachments = Array.from(new Set(attachmentsToDelete.map((a) => a.path))).map((path) => app.vault.getAbstractFileByPath(path)).filter((file) => file instanceof import_obsidian18.TFile); + return { + filesToDelete: uniqueFiles, + foldersToDelete: Array.from(new Set(foldersToDelete)), + attachmentsToDelete: uniqueAttachments + }; +} +async function executeSmartDeletion(app, preview) { + let deletedCount = 0; + let errorCount = 0; + for (const file of preview.filesToDelete) { + try { + await app.fileManager.trashFile(file); + deletedCount++; + } catch (error) { + console.error(`Error deleting file ${file.path}:`, error); + errorCount++; + } + } + for (const attachment of preview.attachmentsToDelete) { + try { + await app.fileManager.trashFile(attachment); + deletedCount++; + } catch (error) { + console.error(`Error deleting attachment ${attachment.path}:`, error); + errorCount++; + } + } + for (const folder of preview.foldersToDelete) { + try { + await app.fileManager.trashFile(folder); + deletedCount++; + } catch (error) { + console.error(`Error deleting folder ${folder.path}:`, error); + errorCount++; + } + } + if (errorCount > 0) { + new import_obsidian18.Notice(`Deleted ${deletedCount} items, ${errorCount} errors occurred`); + } else { + new import_obsidian18.Notice(`Successfully deleted ${deletedCount} item${deletedCount !== 1 ? "s" : ""}`); + } +} +var import_obsidian18; +var init_smart_deletion = __esm({ + "src/utils/smart-deletion.ts"() { + "use strict"; + import_obsidian18 = require("obsidian"); + init_attachment_detection(); + } +}); + +// src/components/deletion-preview.ts +var deletion_preview_exports = {}; +__export(deletion_preview_exports, { + DeletionPreviewModal: () => DeletionPreviewModal +}); +var import_obsidian19, DeletionPreviewModal; +var init_deletion_preview = __esm({ + "src/components/deletion-preview.ts"() { + "use strict"; + import_obsidian19 = require("obsidian"); + init_smart_deletion(); + DeletionPreviewModal = class extends import_obsidian19.Modal { + constructor(app, preview, onConfirm) { + super(app); + this.preview = preview; + this.onConfirm = onConfirm; + } + onOpen() { + const { contentEl } = this; + contentEl.empty(); + new import_obsidian19.Setting(contentEl).setName("Confirm deletion").setHeading(); + contentEl.createEl("p", { + text: "The following items will be deleted:", + cls: "bases-cms-deletion-warning" + }); + if (this.preview.filesToDelete.length > 0) { + contentEl.createEl("h3", { text: `Files (${this.preview.filesToDelete.length})` }); + const filesList = contentEl.createEl("ul", { cls: "bases-cms-deletion-list" }); + for (const file of this.preview.filesToDelete.slice(0, 20)) { + const li = filesList.createEl("li"); + li.setText(file.path); + } + if (this.preview.filesToDelete.length > 20) { + filesList.createEl("li", { + text: `... and ${this.preview.filesToDelete.length - 20} more files` + }); + } + } + if (this.preview.foldersToDelete.length > 0) { + contentEl.createEl("h3", { text: `Folders (${this.preview.foldersToDelete.length})` }); + const foldersList = contentEl.createEl("ul", { cls: "bases-cms-deletion-list" }); + for (const folder of this.preview.foldersToDelete) { + const li = foldersList.createEl("li"); + li.setText(folder.path); + } + } + if (this.preview.attachmentsToDelete.length > 0) { + contentEl.createEl("h3", { text: `Attachments (${this.preview.attachmentsToDelete.length})` }); + const attachmentsList = contentEl.createEl("ul", { cls: "bases-cms-deletion-list" }); + for (const attachment of this.preview.attachmentsToDelete.slice(0, 20)) { + const li = attachmentsList.createEl("li"); + li.setText(attachment.path); + } + if (this.preview.attachmentsToDelete.length > 20) { + attachmentsList.createEl("li", { + text: `... and ${this.preview.attachmentsToDelete.length - 20} more attachments` + }); + } + } + contentEl.createEl("p", { + text: "This action cannot be undone.", + cls: "bases-cms-deletion-warning" + }); + const buttonContainer = contentEl.createDiv(); + buttonContainer.addClass("bases-cms-modal-button-container"); + const cancelBtn = buttonContainer.createEl("button"); + cancelBtn.setText("Cancel"); + cancelBtn.addEventListener("click", () => this.close()); + const deleteBtn = buttonContainer.createEl("button"); + deleteBtn.setText("Delete"); + deleteBtn.addClass("mod-cta"); + deleteBtn.addClass("destructive"); + deleteBtn.addEventListener("click", () => { + void (async () => { + await executeSmartDeletion(this.app, this.preview); + this.onConfirm(); + this.close(); + })(); + }); + } + onClose() { + const { contentEl } = this; + contentEl.empty(); + } + }; + } +}); + +// src/main.ts +var main_exports = {}; +__export(main_exports, { + default: () => BasesCMSPlugin +}); +module.exports = __toCommonJS(main_exports); +var import_obsidian24 = require("obsidian"); + +// src/settings.ts +var import_obsidian4 = require("obsidian"); + +// src/components/command-picker-modal.ts +var import_obsidian = require("obsidian"); +var CommandPickerModal = class extends import_obsidian.FuzzySuggestModal { + constructor(app, onSelect) { + super(app); + this.onSelect = onSelect; + } + getItems() { + const commandRegistry = this.app.commands; + const commandMap = /* @__PURE__ */ new Map(); + if (commandRegistry && typeof commandRegistry.listCommands === "function") { + try { + const commands = commandRegistry.listCommands(); + for (const command of commands) { + if (command && command.id && command.name && !commandMap.has(command.id)) { + commandMap.set(command.id, { + id: command.id, + name: command.name + }); + } + } + } catch (e) { + console.warn("[Bases CMS] Error getting commands via listCommands():", e); + } + } + try { + const registry = commandRegistry == null ? void 0 : commandRegistry.commands; + if (registry && typeof registry === "object") { + const allCommands = Object.values(registry); + for (const command of allCommands) { + if (command && command.id && command.name && !commandMap.has(command.id)) { + commandMap.set(command.id, { + id: command.id, + name: command.name + }); + } + } + } + } catch (e) { + console.warn("[Bases CMS] Error getting commands via registry:", e); + } + try { + const internalRegistry = commandRegistry == null ? void 0 : commandRegistry.commandRegistry; + if (internalRegistry && typeof internalRegistry === "object") { + const allCommands = Object.values(internalRegistry); + for (const command of allCommands) { + if (command && command.id && command.name && !commandMap.has(command.id)) { + commandMap.set(command.id, { + id: command.id, + name: command.name + }); + } + } + } + } catch (e) { + console.warn("[Bases CMS] Error getting commands via internal registry:", e); + } + const commandOptions = Array.from(commandMap.values()); + commandOptions.sort((a, b) => a.name.localeCompare(b.name)); + return commandOptions; + } + getItemText(item) { + return item.name; + } + onChooseItem(item, evt) { + this.onSelect(item.id); + } + // Override to show command name only + renderSuggestion(match, el) { + const item = match.item; + el.createDiv({ cls: "suggestion-title", text: item.name }); + } +}; + +// src/components/icon-picker-modal.ts +var import_obsidian2 = require("obsidian"); +var getIconList = () => { + if (import_obsidian2.requireApiVersion && (0, import_obsidian2.requireApiVersion)("1.7.3") && import_obsidian2.getIconIds) { + try { + return (0, import_obsidian2.getIconIds)(); + } catch (e) { + console.warn("[Bases CMS] Error getting icon IDs from Obsidian:", e); + } + } + return [ + "settings-2", + "settings", + "help-circle", + "info", + "star", + "heart", + "bookmark", + "home", + "search", + "bell", + "mail", + "user", + "users", + "folder", + "file", + "file-text", + "image", + "video", + "music", + "calendar", + "clock", + "edit", + "pencil", + "trash", + "copy", + "cut", + "paste", + "download", + "upload", + "save", + "share", + "link", + "external-link", + "lock", + "unlock", + "eye", + "eye-off", + "key", + "shield", + "check", + "x", + "plus", + "minus", + "arrow-left", + "arrow-right", + "arrow-up", + "arrow-down", + "chevron-left", + "chevron-right", + "chevron-up", + "chevron-down", + "menu", + "more-horizontal", + "more-vertical", + "grid", + "list", + "layout", + "columns", + "rows", + "maximize", + "minimize", + "zoom-in", + "zoom-out", + "refresh-cw", + "play", + "pause", + "stop", + "sun", + "moon", + "cloud", + "zap", + "wand-2", + "wand", + "wand-sparkles", + "palette", + "brush", + "sliders", + "power", + "wifi", + "bluetooth", + "monitor", + "laptop", + "smartphone", + "camera", + "mic", + "headphones", + "code", + "terminal", + "terminal-square", + "github", + "gitlab", + "git-branch", + "git-commit", + "database", + "server", + "cloud-download", + "cloud-upload", + "tag", + "tags", + "flag", + "pin", + "map-pin", + "compass", + "globe", + "rocket", + "car", + "bike", + "robot", + "apple", + "windows", + "linux", + "chrome", + "firefox", + "safari", + "credit-card", + "wallet", + "coins", + "book", + "book-open", + "award", + "trophy", + "badge", + "wrench", + "tool", + "package", + "box", + "archive", + "send", + "reply", + "forward", + "mail-open", + "tag-plus", + "tag-minus", + "flag-off", + "pin-off", + "map-pin-off", + "navigation", + "map", + "earth", + "plane", + "ship", + "anchor", + "helicopter", + "drone", + "android", + "keyhole", + "keys", + "fingerprint", + "scan", + "qr-code", + "barcode", + "receipt", + "piggy-bank", + "banknote", + "pencil-line", + "edit-2", + "edit-3" + ]; +}; +var LUCIDE_ICONS = getIconList().map((id) => ({ + id, + name: id.replace(/^lucide-/, "").replace(/-/g, " ").replace(/(^\w{1})|(\s+\w{1})/g, (letter) => letter.toUpperCase()) +})).sort((a, b) => a.name.localeCompare(b.name)); +var IconPickerModal = class extends import_obsidian2.FuzzySuggestModal { + constructor(app, onSelect) { + super(app); + this.onSelect = onSelect; + } + getItems() { + return LUCIDE_ICONS; + } + getItemText(item) { + return item.name; + } + onChooseItem(item, evt) { + this.onSelect(item.id); + } + // Override to show icon preview + renderSuggestion(match, el) { + const item = match.item; + el.addClass("mod-complex"); + const content = el.createDiv({ cls: "suggestion-content" }); + content.createDiv({ cls: "suggestion-title", text: item.name }); + const aux = el.createDiv({ cls: "suggestion-aux" }); + (0, import_obsidian2.setIcon)(aux.createSpan({ cls: "suggestion-flair" }), item.id); + } +}; + +// src/utils/settings-compat.ts +var import_obsidian3 = require("obsidian"); +function createSettingsGroup(containerEl, heading, manifestId) { + if ((0, import_obsidian3.requireApiVersion)("1.11.0")) { + const obsidianModule = require("obsidian"); + const SettingGroup = obsidianModule.SettingGroup; + if (SettingGroup) { + const group = new SettingGroup(containerEl).setHeading(heading); + return { + addSetting(cb) { + group.addSetting(cb); + } + }; + } + } + if (manifestId) { + containerEl.addClass(`${manifestId}-settings-compat`); + } + const headingEl = containerEl.createDiv("setting-group-heading"); + headingEl.createEl("h3", { text: heading }); + return { + addSetting(cb) { + const setting = new import_obsidian3.Setting(containerEl); + cb(setting); + } + }; +} + +// src/settings.ts +var BasesCMSSettingTab = class extends import_obsidian4.PluginSettingTab { + constructor(app, plugin) { + super(app, plugin); + this.icon = "lucide-blocks"; + this.plugin = plugin; + } + /** + * Refresh toolbars in all active CMS views when settings change + */ + refreshActiveToolbars() { + const pluginWithMethod = this.plugin; + if (pluginWithMethod && typeof pluginWithMethod.refreshAllToolbars === "function") { + pluginWithMethod.refreshAllToolbars(); + } + } + display() { + const { containerEl } = this; + containerEl.empty(); + new import_obsidian4.Setting(containerEl).setName("Confirm bulk operations").setDesc("Show confirmation dialogs before performing bulk operations.").addToggle((toggle) => toggle.setValue(this.plugin.settings.confirmBulkOperations).onChange((value) => { + void (async () => { + this.plugin.settings.confirmBulkOperations = value; + await this.plugin.saveData(this.plugin.settings); + })(); + })); + const toolbarButtonsGroup = createSettingsGroup(containerEl, "Toolbar buttons", "bases-cms"); + toolbarButtonsGroup.addSetting((setting) => { + setting.setName("Show select all button").setDesc("Display the select all button in the CMS toolbar.").addToggle((toggle) => { + toggle.setValue(this.plugin.settings.showToolbarSelectAll); + toggle.onChange(async (value) => { + this.plugin.settings.showToolbarSelectAll = value; + await this.plugin.saveData(this.plugin.settings); + this.refreshActiveToolbars(); + }); + }); + }); + toolbarButtonsGroup.addSetting((setting) => { + setting.setName("Show clear button").setDesc("Display the clear selection button in the CMS toolbar.").addToggle((toggle) => { + toggle.setValue(this.plugin.settings.showToolbarClear); + toggle.onChange(async (value) => { + this.plugin.settings.showToolbarClear = value; + await this.plugin.saveData(this.plugin.settings); + this.refreshActiveToolbars(); + }); + }); + }); + toolbarButtonsGroup.addSetting((setting) => { + setting.setName("Show publish button").setDesc("Display the publish button in the CMS toolbar.").addToggle((toggle) => { + toggle.setValue(this.plugin.settings.showToolbarPublish); + toggle.onChange(async (value) => { + this.plugin.settings.showToolbarPublish = value; + await this.plugin.saveData(this.plugin.settings); + this.refreshActiveToolbars(); + }); + }); + }); + toolbarButtonsGroup.addSetting((setting) => { + setting.setName("Show draft button").setDesc("Display the draft button in the CMS toolbar.").addToggle((toggle) => { + toggle.setValue(this.plugin.settings.showToolbarDraft); + toggle.onChange(async (value) => { + this.plugin.settings.showToolbarDraft = value; + await this.plugin.saveData(this.plugin.settings); + this.refreshActiveToolbars(); + }); + }); + }); + toolbarButtonsGroup.addSetting((setting) => { + setting.setName("Show tags button").setDesc("Display the tags button in the CMS toolbar.").addToggle((toggle) => { + toggle.setValue(this.plugin.settings.showToolbarTags); + toggle.onChange(async (value) => { + this.plugin.settings.showToolbarTags = value; + await this.plugin.saveData(this.plugin.settings); + this.refreshActiveToolbars(); + }); + }); + }); + toolbarButtonsGroup.addSetting((setting) => { + setting.setName("Show set button").setDesc("Display the set property button in the CMS toolbar.").addToggle((toggle) => { + toggle.setValue(this.plugin.settings.showToolbarSet); + toggle.onChange(async (value) => { + this.plugin.settings.showToolbarSet = value; + await this.plugin.saveData(this.plugin.settings); + this.refreshActiveToolbars(); + }); + }); + }); + toolbarButtonsGroup.addSetting((setting) => { + setting.setName("Show remove button").setDesc("Display the remove property button in the CMS toolbar.").addToggle((toggle) => { + toggle.setValue(this.plugin.settings.showToolbarRemove); + toggle.onChange(async (value) => { + this.plugin.settings.showToolbarRemove = value; + await this.plugin.saveData(this.plugin.settings); + this.refreshActiveToolbars(); + }); + }); + }); + toolbarButtonsGroup.addSetting((setting) => { + setting.setName("Show delete button").setDesc("Display the delete button in the CMS toolbar.").addToggle((toggle) => { + toggle.setValue(this.plugin.settings.showToolbarDelete); + toggle.onChange(async (value) => { + this.plugin.settings.showToolbarDelete = value; + await this.plugin.saveData(this.plugin.settings); + this.refreshActiveToolbars(); + }); + }); + }); + const deletionsGroup = createSettingsGroup(containerEl, "Deletions", "bases-cms"); + deletionsGroup.addSetting((setting) => { + setting.setName("Delete parent folder for specific file name").setDesc("When enabled, deleting a note will delete its parent folder and all its contents if the note file name matches the specified name.").addToggle((toggle) => { + toggle.setValue(this.plugin.settings.deleteParentFolder); + toggle.onChange(async (value) => { + this.plugin.settings.deleteParentFolder = value; + await this.plugin.saveData(this.plugin.settings); + }); + }); + }); + deletionsGroup.addSetting((setting) => { + setting.setName("Folder deletion file name").setDesc("File name that triggers parent folder deletion.").addText((text) => { + text.setPlaceholder("index"); + text.setValue(this.plugin.settings.deleteParentFolderFilename); + text.onChange(async (value) => { + this.plugin.settings.deleteParentFolderFilename = value; + await this.plugin.saveData(this.plugin.settings); + }); + }).setDisabled(!this.plugin.settings.deleteParentFolder); + }); + deletionsGroup.addSetting((setting) => { + setting.setName("Delete associated unique attachments").setDesc("When deleting a note, automatically delete attachments that are only used by that note. Attachments used by other notes will be preserved.").addToggle((toggle) => { + toggle.setValue(this.plugin.settings.deleteUniqueAttachments); + toggle.onChange(async (value) => { + this.plugin.settings.deleteUniqueAttachments = value; + await this.plugin.saveData(this.plugin.settings); + }); + }); + }); + deletionsGroup.addSetting((setting) => { + setting.setName("Confirm deletions").setDesc("Show confirmation dialog before deleting files.").addToggle((toggle) => { + toggle.setValue(this.plugin.settings.confirmDeletions); + toggle.onChange(async (value) => { + this.plugin.settings.confirmDeletions = value; + await this.plugin.saveData(this.plugin.settings); + }); + }); + }); + const appearanceGroup = createSettingsGroup(containerEl, "Appearance", "bases-cms"); + appearanceGroup.addSetting((setting) => { + setting.setName("Use home icon for CMS view").setDesc("Use the home icon instead of blocks icon for the CMS view in the Bases view selector. Restart Obsidian for this change to take effect.").addToggle((toggle) => { + toggle.setValue(this.plugin.settings.useHomeIcon); + toggle.onChange(async (value) => { + this.plugin.settings.useHomeIcon = value; + await this.plugin.saveData(this.plugin.settings); + }); + }); + }); + appearanceGroup.addSetting((setting) => { + setting.setName("Force static image for animated GIFs").setDesc("When enabled, animated GIFs will display only the first frame when used as card covers or thumbnails.").addToggle((toggle) => { + toggle.setValue(this.plugin.settings.forceStaticGifImages); + toggle.onChange(async (value) => { + this.plugin.settings.forceStaticGifImages = value; + await this.plugin.saveData(this.plugin.settings); + const pluginWithMethod = this.plugin; + if (pluginWithMethod.activeViews) { + pluginWithMethod.activeViews.forEach((view) => { + if (view.onDataUpdated) { + view.onDataUpdated(); + } + }); + } + }); + }); + }); + const performanceGroup = createSettingsGroup(containerEl, "Performance", "bases-cms"); + performanceGroup.addSetting((setting) => { + setting.setName("Embedded view refresh debounce (ms)").setDesc("Delay in milliseconds before refreshing embedded views when switching files. Higher values reduce CPU usage but may make views feel less responsive. Range: 50-500ms.").addSlider((slider) => { + slider.setLimits(50, 500, 25); + slider.setValue(this.plugin.settings.embeddedViewRefreshDebounceMs); + slider.setDynamicTooltip(); + slider.onChange(async (value) => { + this.plugin.settings.embeddedViewRefreshDebounceMs = value; + await this.plugin.saveData(this.plugin.settings); + }); + }); + }); + performanceGroup.addSetting((setting) => { + setting.setName("Virtual scrolling threshold").setDesc("Number of cards above which virtual scrolling is enabled. Virtual scrolling only renders cards in the viewport, improving performance for large collections. Set to 0 to always enable, or a high value to disable.").addSlider((slider) => { + slider.setLimits(0, 500, 25); + slider.setValue(this.plugin.settings.virtualScrollThreshold); + slider.setDynamicTooltip(); + slider.onChange(async (value) => { + this.plugin.settings.virtualScrollThreshold = value; + await this.plugin.saveData(this.plugin.settings); + }); + }); + }); + performanceGroup.addSetting((setting) => { + setting.setName("Virtual scroll buffer").setDesc("Number of cards to render above and below the visible viewport when virtual scrolling is active. Higher values reduce visual glitches when scrolling fast but use more memory.").addSlider((slider) => { + slider.setLimits(5, 50, 5); + slider.setValue(this.plugin.settings.virtualScrollBuffer); + slider.setDynamicTooltip(); + slider.onChange(async (value) => { + this.plugin.settings.virtualScrollBuffer = value; + await this.plugin.saveData(this.plugin.settings); + }); + }); + }); + const quickEditGroup = createSettingsGroup(containerEl, "Quick edit", "bases-cms"); + let quickEditCommandSetting; + let quickEditIconSetting; + let quickEditOpenFileSetting; + quickEditGroup.addSetting((setting) => { + setting.setName("Enable quick edit").setDesc("Show an icon on card titles that launches a command when clicked.").addToggle((toggle) => toggle.setValue(this.plugin.settings.enableQuickEdit).onChange((value) => { + void (async () => { + this.plugin.settings.enableQuickEdit = value; + await this.plugin.saveData(this.plugin.settings); + const shouldHide = !value; + const commandEl = quickEditCommandSetting == null ? void 0 : quickEditCommandSetting.settingEl; + const iconEl = quickEditIconSetting == null ? void 0 : quickEditIconSetting.settingEl; + const openFileEl = quickEditOpenFileSetting == null ? void 0 : quickEditOpenFileSetting.settingEl; + if (commandEl) { + commandEl.toggleClass("bases-cms-setting-hidden", shouldHide); + } + if (iconEl) { + iconEl.toggleClass("bases-cms-setting-hidden", shouldHide); + } + if (openFileEl) { + openFileEl.toggleClass("bases-cms-setting-hidden", shouldHide); + } + })(); + })); + }); + quickEditGroup.addSetting((setting) => { + quickEditCommandSetting = setting; + setting.setName("Quick edit command").setDesc("The command to execute when clicking the quick edit icon on a card title.").addButton((button) => { + var _a; + const currentCommandName = this.plugin.settings.quickEditCommandName || (this.plugin.settings.quickEditCommand ? "Select command..." : "No command selected"); + button.setButtonText(currentCommandName).onClick(() => { + const modal = new CommandPickerModal(this.app, (commandId) => { + void (async () => { + const commandRegistry = this.app.commands; + let commandName = ""; + if (commandRegistry) { + if (typeof commandRegistry.listCommands === "function") { + const commands = commandRegistry.listCommands(); + const command = commands.find((cmd) => cmd.id === commandId); + if (command) { + commandName = command.name; + } + } + if (!commandName) { + const registry = commandRegistry.commands; + if (registry && registry[commandId]) { + commandName = registry[commandId].name || ""; + } + } + } + this.plugin.settings.quickEditCommand = commandId; + this.plugin.settings.quickEditCommandName = commandName; + await this.plugin.saveData(this.plugin.settings); + this.display(); + })(); + }); + modal.open(); + }); + if (this.plugin.settings.quickEditCommand) { + const clearButton = (_a = button.buttonEl.parentElement) == null ? void 0 : _a.createEl("button", { + text: "Clear", + attr: { style: "margin-left: 8px;" } + }); + clearButton == null ? void 0 : clearButton.addEventListener("click", () => { + void (async () => { + this.plugin.settings.quickEditCommand = ""; + this.plugin.settings.quickEditCommandName = ""; + await this.plugin.saveData(this.plugin.settings); + this.display(); + })(); + }); + } + }); + setting.settingEl.toggleClass("bases-cms-setting-hidden", !this.plugin.settings.enableQuickEdit); + }); + quickEditGroup.addSetting((setting) => { + quickEditIconSetting = setting; + setting.setName("Quick edit icon").setDesc("Select the icon to display for the quick edit button on card titles.").addButton((button) => { + const iconName = this.getIconName(this.plugin.settings.quickEditIcon || "pencil-line"); + button.setButtonText(iconName || "Select icon...").onClick(() => { + const modal = new IconPickerModal(this.app, (iconId) => { + void (async () => { + this.plugin.settings.quickEditIcon = iconId; + await this.plugin.saveData(this.plugin.settings); + this.display(); + })(); + }); + modal.open(); + }); + }); + setting.settingEl.toggleClass("bases-cms-setting-hidden", !this.plugin.settings.enableQuickEdit); + }); + quickEditGroup.addSetting((setting) => { + quickEditOpenFileSetting = setting; + setting.setName("Attempt to open file and execute quick edit command").setDesc("For commands that don't have special handling, attempt to open the file and execute the command. Some commands may not work properly this way.").addToggle((toggle) => toggle.setValue(this.plugin.settings.quickEditOpenFile).onChange((value) => { + void (async () => { + this.plugin.settings.quickEditOpenFile = value; + await this.plugin.saveData(this.plugin.settings); + })(); + })); + setting.settingEl.toggleClass("bases-cms-setting-hidden", !this.plugin.settings.enableQuickEdit); + }); + } + getIconName(iconId) { + if (!iconId) return ""; + return iconId.replace(/^lucide-/, "").split("-").map((word) => word.charAt(0).toUpperCase() + word.slice(1)).join(" "); + } +}; + +// src/views/cms-view.ts +var import_obsidian23 = require("obsidian"); + +// src/utils/css-props.ts +function setCssProps(element, props) { + for (const [key, value] of Object.entries(props)) { + if (key.startsWith("--")) { + element.style.setProperty(key, String(value)); + } else { + const cssKey = key.replace(/([A-Z])/g, "-$1").toLowerCase(); + element.style.setProperty(cssKey, String(value)); + } + } +} + +// src/shared/data-transform.ts +var import_obsidian7 = require("obsidian"); + +// src/utils/property.ts +var import_obsidian6 = require("obsidian"); +init_frontmatter_helper(); +async function getFirstBasesPropertyValue(entry, propertyString, app) { + if (!propertyString || !propertyString.trim()) return null; + const properties = propertyString.split(",").map((p) => p.trim()).filter((p) => p); + for (const prop of properties) { + const value = entry.getValue(prop); + const valueObj = value; + const propertyExists = valueObj && ("date" in valueObj && valueObj.date instanceof Date || "data" in valueObj && valueObj.data != null); + if (propertyExists) { + return value; + } + if (!propertyExists && app) { + const file = app.vault.getAbstractFileByPath(entry.file.path); + if (file instanceof import_obsidian6.TFile && file.extension === "mdx") { + const frontmatter = await getFileFrontmatter(app, file); + if (frontmatter) { + const cleanProp = prop.startsWith("note.") ? prop.substring(5) : prop; + const frontmatterValue = frontmatter[cleanProp]; + if (frontmatterValue != null) { + return { data: frontmatterValue }; + } + } + } + } + } + return null; +} +async function getAllBasesImagePropertyValues(entry, propertyString, app) { + if (!propertyString || !propertyString.trim()) return []; + const prop = propertyString.split(",")[0].trim(); + if (!prop) return []; + const value = entry.getValue(prop); + let data = null; + if (value && "data" in value) { + data = value.data; + } else if (app) { + const file = app.vault.getAbstractFileByPath(entry.file.path); + if (file instanceof import_obsidian6.TFile && file.extension === "mdx") { + const frontmatter = await getFileFrontmatter(app, file); + if (frontmatter) { + const cleanProp = prop.startsWith("note.") ? prop.substring(5) : prop; + data = frontmatter[cleanProp]; + } + } + } + if (data == null) return []; + const images = []; + if (Array.isArray(data)) { + for (const item of data) { + if (typeof item === "string" || typeof item === "number") { + const str = String(item); + if (str && str.trim()) { + images.push(str); + } + } + } + } else if (data !== "") { + if (typeof data === "string" || typeof data === "number") { + const str = String(data); + if (str.trim()) { + images.push(str); + } + } + } + return images; +} +function getPropertyLabel(propertyName, app, basesConfig, basesController) { + if (!propertyName || propertyName === "") return ""; + if (basesConfig) { + const configWithDisplayName = basesConfig; + if (typeof configWithDisplayName.getDisplayName === "function") { + try { + const displayName = configWithDisplayName.getDisplayName(propertyName); + if (displayName && typeof displayName === "string" && displayName.trim() !== "") { + return displayName; + } + } catch (e) { + } + } + } + return propertyName; +} + +// src/utils/style-settings.ts +function hasBodyClass(className) { + return document.body.classList.contains(className); +} +function getListSeparator() { + let value = getComputedStyle(document.body).getPropertyValue( + "--bases-cms-list-separator" + ); + if (value.startsWith('"') && value.endsWith('"') || value.startsWith("'") && value.endsWith("'")) { + value = value.slice(1, -1); + } + return value || ", "; +} +function getEmptyValueMarker() { + let value = getComputedStyle(document.body).getPropertyValue( + "--bases-cms-empty-value-marker" + ); + if (value.startsWith('"') && value.endsWith('"') || value.startsWith("'") && value.endsWith("'")) { + value = value.slice(1, -1); + } + return value || "\u2014"; +} +function shouldHideMissingProperties() { + return hasBodyClass("bases-cms-hide-missing-properties"); +} +function shouldHideEmptyProperties() { + const hasClass = hasBodyClass("bases-cms-hide-empty-properties"); + if (hasClass) return true; + return false; +} +function getTagStyle() { + if (hasBodyClass("bases-cms-tag-style-minimal")) return "minimal"; + if (hasBodyClass("bases-cms-tag-style-theme")) return "theme"; + return "plain"; +} +function showTagHashPrefix() { + return hasBodyClass("bases-cms-show-tag-hash"); +} + +// src/shared/data-transform.ts +init_frontmatter_helper(); +function removeDuplication(str) { + if (str.length === 0) return str; + for (let len = 1; len <= Math.floor(str.length / 2); len++) { + const prefix = str.substring(0, len); + const repeatCount = Math.floor(str.length / len); + if (repeatCount < 2) continue; + let isCompleteDuplication = true; + for (let i = 1; i < repeatCount; i++) { + const segment = str.substring(i * len, (i + 1) * len); + if (segment !== prefix) { + isCompleteDuplication = false; + break; + } + } + const remainder = str.length % len; + if (remainder > 0) { + const lastSegment = str.substring(repeatCount * len); + if (lastSegment !== prefix.substring(0, remainder)) { + isCompleteDuplication = false; + } + } + if (isCompleteDuplication) { + return prefix; + } + } + return str; +} +async function basesEntryToCardData(entry, settings, sortMethod, isShuffled, snippet, imageUrl, hasImageAvailable, app, mdxFrontmatterCache) { + var _a; + const fileName = entry.file.basename || entry.file.name; + let titleValue = null; + if (app) { + const file = app.vault.getAbstractFileByPath(entry.file.path); + if (file instanceof import_obsidian7.TFile && file.extension === "mdx" && mdxFrontmatterCache) { + const frontmatter = mdxFrontmatterCache[entry.file.path]; + if (frontmatter) { + const cleanProp = settings.titleProperty.startsWith("note.") ? settings.titleProperty.substring(5) : settings.titleProperty; + const frontmatterValue = frontmatter[cleanProp]; + if (frontmatterValue != null) { + titleValue = { data: frontmatterValue }; + } + } + } + } + if (!titleValue) { + titleValue = await getFirstBasesPropertyValue(entry, settings.titleProperty, app); + } + const titleData = titleValue == null ? void 0 : titleValue.data; + let title; + if (titleData != null && titleData !== "") { + if (Array.isArray(titleData)) { + const items = titleData.map((item) => { + if (item && typeof item === "object" && "data" in item) { + return String(item.data); + } + return String(item); + }).filter((s) => s.trim().length > 0); + title = items.length > 0 ? items.join(", ") : fileName; + } else if (typeof titleData === "string" || typeof titleData === "number") { + title = String(titleData); + } else { + title = fileName; + } + } else { + title = fileName; + } + const path = entry.file.path; + const folderPath = path.split("/").slice(0, -1).join("/"); + let yamlTagsValue = entry.getValue("note.tags"); + let yamlTags = []; + if (!yamlTagsValue && app) { + const file = app.vault.getAbstractFileByPath(entry.file.path); + if (file instanceof import_obsidian7.TFile && file.extension === "mdx") { + let frontmatter = (_a = mdxFrontmatterCache == null ? void 0 : mdxFrontmatterCache[entry.file.path]) != null ? _a : null; + if (frontmatter === void 0) { + frontmatter = await getFileFrontmatter(app, file); + } + if (frontmatter == null ? void 0 : frontmatter.tags) { + const tagData = frontmatter.tags; + const rawTags = Array.isArray(tagData) ? tagData.map((t) => { + if (t && typeof t === "object" && t !== null) { + return JSON.stringify(t); + } + if (typeof t === "string" || typeof t === "number") { + return String(t); + } + return t ? JSON.stringify(t) : ""; + }) : (() => { + if (tagData && typeof tagData === "object" && tagData !== null) { + return [JSON.stringify(tagData)]; + } + if (typeof tagData === "string" || typeof tagData === "number") { + return [String(tagData)]; + } + return tagData ? [JSON.stringify(tagData)] : [""]; + })(); + yamlTags = rawTags.map((tag) => tag.replace(/^#/, "")); + } + } + } + if (yamlTagsValue && yamlTagsValue.data != null) { + const tagData = yamlTagsValue.data; + const rawTags = Array.isArray(tagData) ? tagData.map((t) => { + if (t && typeof t === "object" && "data" in t) { + return String(t.data); + } + return typeof t === "string" || typeof t === "number" ? String(t) : ""; + }).filter((t) => t) : typeof tagData === "string" || typeof tagData === "number" ? [String(tagData)] : []; + yamlTags = rawTags.map((tag) => tag.replace(/^#/, "")); + } + let allTagsValue = entry.getValue("file.tags"); + let tags = []; + if (allTagsValue && allTagsValue.data != null) { + const tagData = allTagsValue.data; + const rawTags = Array.isArray(tagData) ? tagData.map((t) => { + if (t && typeof t === "object" && t !== null && "data" in t) { + const itemData = t.data; + if (itemData && typeof itemData === "object" && itemData !== null) { + return JSON.stringify(itemData); + } + return String(itemData); + } + if (t && typeof t === "object" && t !== null) { + return JSON.stringify(t); + } + return typeof t === "string" || typeof t === "number" ? String(t) : ""; + }).filter((t) => typeof t === "string" && t.length > 0) : (() => { + if (tagData && typeof tagData === "object" && tagData !== null) { + return [JSON.stringify(tagData)]; + } + return typeof tagData === "string" || typeof tagData === "number" ? [String(tagData)] : []; + })(); + tags = rawTags.map((tag) => tag.replace(/^#/, "")); + } else if (!allTagsValue && app) { + const file = app.vault.getAbstractFileByPath(entry.file.path); + if (file instanceof import_obsidian7.TFile && file.extension === "mdx") { + tags = [...yamlTags]; + } + } + const ctime = entry.file.stat.ctime; + const mtime = entry.file.stat.mtime; + let displayTags = []; + if (settings.showTags && settings.tagsProperty) { + const tagsValue = await getFirstBasesPropertyValue(entry, settings.tagsProperty, app); + if (tagsValue && tagsValue.data != null) { + const tagData = tagsValue.data; + if (Array.isArray(tagData)) { + displayTags = tagData.map((t) => { + if (t && typeof t === "object" && "data" in t) { + return String(t.data); + } + return typeof t === "string" || typeof t === "number" ? String(t) : ""; + }).filter((t) => typeof t === "string" && t.length > 0); + } else if (typeof tagData === "string" || typeof tagData === "number") { + displayTags = [String(tagData)]; + } + } + } + const cardData = { + path, + name: fileName, + title, + tags, + yamlTags, + ctime, + mtime, + folderPath, + snippet, + imageUrl, + hasImageAvailable: hasImageAvailable || false, + displayTags: displayTags.length > 0 ? displayTags : void 0 + }; + const props = [ + settings.propertyDisplay1, + settings.propertyDisplay2, + settings.propertyDisplay3, + settings.propertyDisplay4, + settings.propertyDisplay5, + settings.propertyDisplay6, + settings.propertyDisplay7, + settings.propertyDisplay8, + settings.propertyDisplay9, + settings.propertyDisplay10, + settings.propertyDisplay11, + settings.propertyDisplay12, + settings.propertyDisplay13, + settings.propertyDisplay14 + ]; + const seen = /* @__PURE__ */ new Set(); + const effectiveProps = props.map((prop) => { + if (!prop || prop === "") return ""; + if (seen.has(prop)) return ""; + seen.add(prop); + return prop; + }); + cardData.propertyName1 = effectiveProps[0] || void 0; + cardData.propertyName2 = effectiveProps[1] || void 0; + cardData.propertyName3 = effectiveProps[2] || void 0; + cardData.propertyName4 = effectiveProps[3] || void 0; + cardData.propertyName5 = effectiveProps[4] || void 0; + cardData.propertyName6 = effectiveProps[5] || void 0; + cardData.propertyName7 = effectiveProps[6] || void 0; + cardData.propertyName8 = effectiveProps[7] || void 0; + cardData.propertyName9 = effectiveProps[8] || void 0; + cardData.propertyName10 = effectiveProps[9] || void 0; + cardData.propertyName11 = effectiveProps[10] || void 0; + cardData.propertyName12 = effectiveProps[11] || void 0; + cardData.propertyName13 = effectiveProps[12] || void 0; + cardData.propertyName14 = effectiveProps[13] || void 0; + cardData.property1 = effectiveProps[0] ? await resolveBasesPropertyAsync(effectiveProps[0], entry, cardData, settings, app, mdxFrontmatterCache) : null; + cardData.property2 = effectiveProps[1] ? await resolveBasesPropertyAsync(effectiveProps[1], entry, cardData, settings, app, mdxFrontmatterCache) : null; + cardData.property3 = effectiveProps[2] ? await resolveBasesPropertyAsync(effectiveProps[2], entry, cardData, settings, app, mdxFrontmatterCache) : null; + cardData.property4 = effectiveProps[3] ? await resolveBasesPropertyAsync(effectiveProps[3], entry, cardData, settings, app, mdxFrontmatterCache) : null; + cardData.property5 = effectiveProps[4] ? await resolveBasesPropertyAsync(effectiveProps[4], entry, cardData, settings, app, mdxFrontmatterCache) : null; + cardData.property6 = effectiveProps[5] ? await resolveBasesPropertyAsync(effectiveProps[5], entry, cardData, settings, app, mdxFrontmatterCache) : null; + cardData.property7 = effectiveProps[6] ? await resolveBasesPropertyAsync(effectiveProps[6], entry, cardData, settings, app, mdxFrontmatterCache) : null; + cardData.property8 = effectiveProps[7] ? await resolveBasesPropertyAsync(effectiveProps[7], entry, cardData, settings, app, mdxFrontmatterCache) : null; + cardData.property9 = effectiveProps[8] ? await resolveBasesPropertyAsync(effectiveProps[8], entry, cardData, settings, app, mdxFrontmatterCache) : null; + cardData.property10 = effectiveProps[9] ? await resolveBasesPropertyAsync(effectiveProps[9], entry, cardData, settings, app, mdxFrontmatterCache) : null; + cardData.property11 = effectiveProps[10] ? await resolveBasesPropertyAsync(effectiveProps[10], entry, cardData, settings, app, mdxFrontmatterCache) : null; + cardData.property12 = effectiveProps[11] ? await resolveBasesPropertyAsync(effectiveProps[11], entry, cardData, settings, app, mdxFrontmatterCache) : null; + cardData.property13 = effectiveProps[12] ? await resolveBasesPropertyAsync(effectiveProps[12], entry, cardData, settings, app, mdxFrontmatterCache) : null; + cardData.property14 = effectiveProps[13] ? await resolveBasesPropertyAsync(effectiveProps[13], entry, cardData, settings, app, mdxFrontmatterCache) : null; + return cardData; +} +async function transformBasesEntries(entries, settings, sortMethod, isShuffled, snippets, images, hasImageAvailable, app, mdxFrontmatterCache) { + return Promise.all(entries.map((entry) => basesEntryToCardData( + entry, + settings, + sortMethod, + isShuffled, + snippets[entry.file.path], + images[entry.file.path], + hasImageAvailable[entry.file.path], + app, + mdxFrontmatterCache + ))); +} +async function resolveBasesPropertyAsync(propertyName, entry, cardData, settings, app, mdxFrontmatterCache) { + if (!propertyName || propertyName === "") { + return null; + } + if (propertyName === "file.path" || propertyName === "file path") { + return cardData.folderPath || null; + } + if (propertyName === "tags" || propertyName === "note.tags") { + return cardData.yamlTags.length > 0 ? "tags" : null; + } + if (propertyName === "file.tags" || propertyName === "file tags") { + return cardData.tags.length > 0 ? "tags" : null; + } + if (propertyName === "file.ctime" || propertyName === "created time") { + return new Date(cardData.ctime).toLocaleDateString(); + } + if (propertyName === "file.mtime" || propertyName === "modified time") { + return new Date(cardData.mtime).toLocaleDateString(); + } + let value = null; + if (app) { + const file = app.vault.getAbstractFileByPath(entry.file.path); + if (file instanceof import_obsidian7.TFile && file.extension === "mdx" && mdxFrontmatterCache) { + const frontmatter = mdxFrontmatterCache[entry.file.path]; + if (frontmatter) { + const cleanProp = propertyName.startsWith("note.") ? propertyName.substring(5) : propertyName; + const frontmatterValue = frontmatter[cleanProp]; + if (frontmatterValue != null) { + value = { data: frontmatterValue }; + } + } + } + } + if (!value) { + value = await getFirstBasesPropertyValue(entry, propertyName, app); + } + if (!value) return null; + const valueObj = value; + if (!valueObj) return null; + if ("date" in valueObj && valueObj.date instanceof Date) { + return valueObj.date.toLocaleDateString(); + } + const data = valueObj.data; + if (data == null) { + return null; + } + if (data === "") { + return ""; + } + if (typeof data === "string") { + const trimmed = data.trim(); + if (trimmed.length === 0) { + return ""; + } + return removeDuplication(trimmed); + } + if (Array.isArray(data)) { + if (data.length === 0) { + return ""; + } + const uniqueItems = /* @__PURE__ */ new Set(); + const result = []; + for (const item of data) { + let str; + if (item && typeof item === "object" && "data" in item) { + const itemData = item.data; + if (itemData && typeof itemData === "object" && !Array.isArray(itemData) && "data" in itemData) { + str = String(itemData.data); + } else { + str = String(itemData); + } + } else if (item && typeof item === "object" && item !== null) { + str = String(item); + } else { + str = String(item); + } + const trimmed = str.trim(); + if (trimmed && trimmed !== "") { + const deduplicated = removeDuplication(trimmed); + if (deduplicated && deduplicated !== "" && !uniqueItems.has(deduplicated)) { + uniqueItems.add(deduplicated); + result.push(deduplicated); + } + } + } + if (result.length > 0) { + return result.join(getListSeparator()); + } + return null; + } + if (typeof data === "string") { + let str = data.trim(); + if (str.length === 0) { + return null; + } + return removeDuplication(str); + } + if (typeof data === "number" || typeof data === "boolean") { + return String(data); + } + return null; +} + +// src/views/cms-view.ts +init_settings_schema(); + +// src/utils/image.ts +var import_obsidian8 = require("obsidian"); +function isExternalUrl(url) { + return /^https?:\/\//i.test(url); +} +function hasValidImageExtension(path) { + return /\.(avif|bmp|gif|jpe?g|png|svg|webp)$/i.test(path); +} +function validateImageUrl(url) { + return new Promise((resolve) => { + const img = new Image(); + img.onload = () => resolve(true); + img.onerror = () => resolve(false); + setTimeout(() => resolve(false), 5e3); + img.src = url; + }); +} +function stripWikilinkSyntax(path) { + const wikilinkMatch = path.match(/^!?\[\[([^\]|]+)(?:\|[^\]]*)?\]\]$/); + return wikilinkMatch ? wikilinkMatch[1].trim() : path; +} +async function processImagePaths(imagePaths) { + const internalPaths = []; + const externalUrlCandidates = []; + for (const imgPath of imagePaths) { + const cleanPath = stripWikilinkSyntax(imgPath); + if (cleanPath.length === 0) continue; + if (isExternalUrl(cleanPath)) { + externalUrlCandidates.push(cleanPath); + } else { + if (hasValidImageExtension(cleanPath)) { + internalPaths.push(cleanPath); + } + } + } + const validationPromises = externalUrlCandidates.map( + (url) => validateImageUrl(url).then((isValid) => isValid ? url : null) + ); + const validatedUrls = await Promise.all(validationPromises); + const externalUrls = validatedUrls.filter((url) => url !== null); + return { internalPaths, externalUrls }; +} +function resolveInternalImagePaths(internalPaths, sourcePath, app) { + const validImageExtensions = ["avif", "bmp", "gif", "jpeg", "jpg", "png", "svg", "webp"]; + const resourcePaths = []; + for (const propPath of internalPaths) { + let imageFile = app.metadataCache.getFirstLinkpathDest(propPath, sourcePath); + if (!imageFile && propPath.startsWith("./")) { + const sourceFile = app.vault.getAbstractFileByPath(sourcePath); + if (sourceFile && sourceFile.parent) { + const relativePath = propPath.substring(2); + const fullPath = sourceFile.parent.path ? `${sourceFile.parent.path}/${relativePath}` : relativePath; + const resolvedFile = app.vault.getAbstractFileByPath(fullPath); + if (resolvedFile instanceof import_obsidian8.TFile) { + imageFile = resolvedFile; + } + } + } + if (!imageFile) { + const absoluteFile = app.vault.getAbstractFileByPath(propPath); + if (absoluteFile instanceof import_obsidian8.TFile) { + imageFile = absoluteFile; + } + } + if (imageFile && validImageExtensions.includes(imageFile.extension)) { + const resourcePath = app.vault.getResourcePath(imageFile); + resourcePaths.push(resourcePath); + } + } + return resourcePaths; +} +async function extractEmbedImages(file, app) { + const validImageExtensions = ["avif", "bmp", "gif", "jpeg", "jpg", "png", "svg", "webp"]; + const metadata = app.metadataCache.getFileCache(file); + const bodyResourcePaths = []; + const bodyExternalUrlCandidates = /* @__PURE__ */ new Set(); + if (metadata == null ? void 0 : metadata.embeds) { + for (const embed of metadata.embeds) { + const embedLink = embed.link; + if (isExternalUrl(embedLink)) { + if (hasValidImageExtension(embedLink) || !embedLink.includes(".")) { + bodyExternalUrlCandidates.add(embedLink); + } + } else { + const targetFile = app.metadataCache.getFirstLinkpathDest(embedLink, file.path); + if (targetFile && validImageExtensions.includes(targetFile.extension)) { + const resourcePath = app.vault.getResourcePath(targetFile); + bodyResourcePaths.push(resourcePath); + } + } + } + } + if (file.extension === "md" || file.extension === "mdx") { + try { + const content = await app.vault.cachedRead(file); + const markdownImageRegex = /!\[([^\]]*)\]\((https?:\/\/[^\s)]+)/gi; + let match; + while ((match = markdownImageRegex.exec(content)) !== null) { + const url = match[2].trim(); + const cleanUrl = url.replace(/["')\s]+$/, ""); + if (isExternalUrl(cleanUrl) && (hasValidImageExtension(cleanUrl) || !cleanUrl.includes("."))) { + bodyExternalUrlCandidates.add(cleanUrl); + } + } + const htmlImgRegex = /]+src\s*=\s*["']?(https?:\/\/[^\s"'<>]+)/gi; + while ((match = htmlImgRegex.exec(content)) !== null) { + const url = match[1].trim(); + const cleanUrl = url.replace(/["'\s>]+$/, ""); + if (isExternalUrl(cleanUrl) && (hasValidImageExtension(cleanUrl) || !cleanUrl.includes("."))) { + bodyExternalUrlCandidates.add(cleanUrl); + } + } + } catch (error) { + console.warn(`Failed to read file content for image extraction: ${file.path}`, error); + } + } + const externalUrlArray = Array.from(bodyExternalUrlCandidates); + const validationPromises = externalUrlArray.map( + (url) => validateImageUrl(url).then((isValid) => isValid ? url : null) + ); + const validatedUrls = await Promise.all(validationPromises); + const bodyExternalUrls = validatedUrls.filter((url) => url !== null); + return [...bodyResourcePaths, ...bodyExternalUrls]; +} +function isGifUrl(url) { + return /\.gif(\?|#|$)/i.test(url) || /\.gif$/i.test(url); +} +async function convertGifToStatic(url, forceStatic) { + if (!forceStatic || !isGifUrl(url)) { + return url; + } + return new Promise((resolve) => { + const img = new Image(); + img.crossOrigin = "anonymous"; + img.onload = () => { + try { + const canvas = document.createElement("canvas"); + canvas.width = img.width; + canvas.height = img.height; + const ctx = canvas.getContext("2d"); + if (ctx) { + ctx.drawImage(img, 0, 0); + const dataUrl = canvas.toDataURL("image/png"); + resolve(dataUrl); + } else { + resolve(url); + } + } catch (error) { + console.warn("Failed to convert GIF to static image:", error); + resolve(url); + } + }; + img.onerror = () => { + resolve(url); + }; + setTimeout(() => { + resolve(url); + }, 5e3); + img.src = url; + }); +} + +// src/utils/preview.ts +var markdownPatterns = [ + /`([^`]+)`/g, + /\*\*\*((?:(?!\*\*\*).)+)\*\*\*/g, + /___((?:(?!___).)+)___/g, + /\*\*((?:(?!\*\*).)+)\*\*/g, + /__((?:(?!__).)+)__/g, + /\*((?:(?!\*).)+)\*/g, + /_((?:(?!_).)+)_/g, + /~~((?:(?!~~).)+)~~/g, + /==((?:(?!==).)+)==/g, + /\[([^\]]+)\]\([^)]+\)/g, + /!\[\[[^\]]+\]\]/g, + /\[\[[^\]|]+\|[^\]]+\]\]/g, + /\[\[[^\]]+\]\]/g, + /#[a-zA-Z0-9_\-/]+/g, + /^[-*+]\s*\[[ xX]\]\s+/gm, + /^(\d+\.\s*)\[[ xX]\]\s+/gm, + /^(\d+\)\s*)\[[ xX]\]\s+/gm, + /^[-*+]\s+/gm, + /^#{1,6}\s+.+$/gm, + /^\s*(?:[-_*])\s*(?:[-_*])\s*(?:[-_*])[\s\-_*]*$/gm, + /^\s*\|.*\|.*$/gm, + /\^\[[^\]]*?]/g, + /\[\^[^\]]+]/g, + /^\s*\[\^[^\]]+]:.*$/gm, + /<([a-z][a-z0-9]*)\b[^>]*>(.*?)<\/\1>/gi, + /<[^>]+>/g +]; +function protectEscapedChars(text) { + const map = /* @__PURE__ */ new Map(); + let counter = 0; + const result = text.replace(/\\(.)/g, (match, char) => { + const placeholder = `\xA7\xA7ESCAPED${counter}\xA7\xA7`; + map.set(placeholder, char); + counter++; + return placeholder; + }); + return { text: result, map }; +} +function restoreEscapedChars(text, map) { + let result = text; + map.forEach((char, placeholder) => { + result = result.split(placeholder).join(char); + }); + return result; +} +function removeCodeBlocks(text) { + let result = text; + let changed = true; + while (changed) { + changed = false; + const openMatch = result.match(/^([`~]{3,})/m); + if (!openMatch) break; + const fenceChar = openMatch[1][0]; + const fenceLength = openMatch[1].length; + const openIndex = openMatch.index; + const escapedChar = fenceChar.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"); + const closePattern = new RegExp(`^${escapedChar}{${fenceLength}}\\s*$`, "m"); + const afterOpen = result.substring(openIndex + openMatch[1].length); + const closeMatch = afterOpen.match(closePattern); + if (closeMatch) { + const closeIndex = openIndex + openMatch[1].length + closeMatch.index; + const blockEnd = closeIndex + closeMatch[0].length; + result = result.substring(0, openIndex) + result.substring(blockEnd); + changed = true; + } else { + const lineEnd = result.indexOf("\n", openIndex); + if (lineEnd === -1) { + result = result.substring(0, openIndex); + } else { + result = result.substring(0, openIndex) + result.substring(lineEnd + 1); + } + changed = true; + } + } + return result; +} +function stripMarkdownSyntax(text) { + if (!text || text.trim().length === 0) return ""; + text = text.replace(/^>\s*\[![\w-]+\][+-]?.*$/gm, ""); + text = text.replace(/^>\s?/gm, ""); + const { text: protectedText, map: escapedCharsMap } = protectEscapedChars(text); + let result = removeCodeBlocks(protectedText); + markdownPatterns.forEach((pattern) => { + result = result.replace(pattern, (match, ...groups) => { + if (match.match(/<[a-z][a-z0-9]*\b[^>]*>.*?<\//i)) { + return groups[1] || ""; + } + if (groups.length > 0 && groups[0] !== void 0) { + for (let i = 0; i < groups.length - 2; i++) { + if (typeof groups[i] === "string") { + return groups[i]; + } + } + } + return ""; + }); + }); + result = restoreEscapedChars(result, escapedCharsMap); + return result; +} +function sanitizeForPreview(content, omitFirstLine = false, filename, titleValue) { + const cleaned = content.replace(/^---[\s\S]*?---/, "").trim(); + let stripped = stripMarkdownSyntax(cleaned); + const firstLineEnd = stripped.indexOf("\n"); + const firstLine = (firstLineEnd !== -1 ? stripped.substring(0, firstLineEnd) : stripped).trim(); + if (omitFirstLine || filename && firstLine === filename || titleValue && firstLine === titleValue) { + stripped = firstLineEnd !== -1 ? stripped.substring(firstLineEnd + 1).trim() : ""; + } + const normalized = stripped.replace(/\^[a-zA-Z0-9-]+/g, "").split(/\s+/).filter((word) => word).join(" ").trim().replace(/\.{2,}/g, (match) => match.replace(/\./g, "\u2024")); + const wasTruncated = normalized.length > 500; + let preview = normalized.substring(0, 500); + if (wasTruncated) { + preview += "\u2026"; + } + return preview; +} +async function loadFilePreview(file, app, propertyValue, settings, fileName, titleValue) { + let result = null; + if (propertyValue != null) { + if (Array.isArray(propertyValue)) { + const items = propertyValue.map((item) => { + if (item && typeof item === "object" && "data" in item) { + return String(item.data); + } + return String(item); + }).filter((s) => s.trim().length > 0); + result = items.length > 0 ? items.join(", ") : null; + } else if (typeof propertyValue === "string" || typeof propertyValue === "number") { + const str = String(propertyValue).trim(); + result = str.length > 0 ? str : null; + } + } + if (result) { + if (settings.truncatePreviewProperty) { + const wasTruncated = result.length > 500; + result = result.substring(0, 500); + if (wasTruncated) { + result += "\u2026"; + } + } + return result; + } + if (settings.fallbackToContent) { + const content = await app.vault.cachedRead(file); + return sanitizeForPreview( + content, + settings.omitFirstLine, + fileName, + titleValue + ); + } + return ""; +} + +// src/shared/content-loader.ts +async function loadImageForEntry(path, file, app, imagePropertyValues, fallbackToEmbeds, imageCache, hasImageCache) { + const hasPropertyValues = imagePropertyValues && Array.isArray(imagePropertyValues) && imagePropertyValues.length > 0; + const shouldFallback = fallbackToEmbeds === true || fallbackToEmbeds === "always" || fallbackToEmbeds === "if-empty" && !hasPropertyValues; + if (!shouldFallback && path in imageCache) { + delete imageCache[path]; + delete hasImageCache[path]; + } + if (path in imageCache && !hasPropertyValues && shouldFallback) { + return; + } + try { + const { internalPaths, externalUrls } = await processImagePaths(imagePropertyValues); + let validImages = [ + ...resolveInternalImagePaths(internalPaths, path, app), + ...externalUrls + // External URLs already validated by processImagePaths + ]; + if (validImages.length === 0 && !hasPropertyValues && shouldFallback) { + validImages = await extractEmbedImages(file, app); + } + if (validImages.length > 0) { + imageCache[path] = validImages.length > 1 ? validImages : validImages[0]; + hasImageCache[path] = true; + } else if (hasPropertyValues) { + delete imageCache[path]; + hasImageCache[path] = true; + } else if (!shouldFallback) { + delete imageCache[path]; + delete hasImageCache[path]; + } + } catch (error) { + console.error(`Failed to load image for ${path}:`, error); + } +} +async function loadImagesForEntries(entries, fallbackToEmbeds, app, imageCache, hasImageCache) { + const entriesToProcess = entries.filter((entry) => { + const hasPropertyValues = entry.imagePropertyValues && Array.isArray(entry.imagePropertyValues) && entry.imagePropertyValues.length > 0; + return !(entry.path in imageCache) || hasPropertyValues; + }); + const BATCH_SIZE = 50; + for (let i = 0; i < entriesToProcess.length; i += BATCH_SIZE) { + const batch = entriesToProcess.slice(i, i + BATCH_SIZE); + await Promise.all( + batch.map(async (entry) => { + await loadImageForEntry( + entry.path, + entry.file, + app, + entry.imagePropertyValues, + fallbackToEmbeds, + imageCache, + hasImageCache + ); + }) + ); + } +} +async function loadSnippetsForEntries(entries, fallbackToContent, omitFirstLine, app, snippetCache, truncatePreviewProperty) { + await Promise.all( + entries.map(async (entry) => { + if (entry.path in snippetCache) { + return; + } + try { + if (entry.file.extension === "md" || entry.file.extension === "mdx") { + snippetCache[entry.path] = await loadFilePreview( + entry.file, + app, + entry.descriptionData, + { + fallbackToContent, + omitFirstLine, + truncatePreviewProperty + }, + entry.fileName, + entry.titleString + ); + } else { + snippetCache[entry.path] = ""; + } + } catch (error) { + console.error(`Failed to load snippet for ${entry.path}:`, error); + snippetCache[entry.path] = ""; + } + }) + ); +} + +// src/views/shared-renderer.ts +var import_obsidian12 = require("obsidian"); + +// src/utils/draft-status-badge.ts +var import_obsidian9 = require("obsidian"); +init_frontmatter_helper(); +async function calculateDraftStatusAsync(entry, settings, app, mdxFrontmatterCache) { + var _a; + let booleanValue = null; + let isDraft = false; + if (settings.draftStatusUseFilenamePrefix && entry.file && entry.file.name) { + const fileName = entry.file.name; + const startsWithUnderscore = fileName.startsWith("_"); + booleanValue = startsWithUnderscore; + isDraft = settings.draftStatusReverse ? !booleanValue : booleanValue; + } else if (settings.draftStatusProperty) { + const draftValue = entry.getValue(settings.draftStatusProperty); + if (draftValue && "data" in draftValue && typeof draftValue.data === "boolean") { + booleanValue = draftValue.data; + isDraft = settings.draftStatusReverse ? !booleanValue : booleanValue; + } else { + const file = app.vault.getAbstractFileByPath(entry.file.path); + if (file instanceof import_obsidian9.TFile && file.extension === "mdx") { + let frontmatter = null; + if (mdxFrontmatterCache) { + frontmatter = (_a = mdxFrontmatterCache[entry.file.path]) != null ? _a : null; + } + if (frontmatter === void 0) { + frontmatter = await getFileFrontmatter(app, file); + } + if (frontmatter) { + const cleanProp = settings.draftStatusProperty.startsWith("note.") ? settings.draftStatusProperty.substring(5) : settings.draftStatusProperty; + const frontmatterValue = frontmatter[cleanProp]; + if (typeof frontmatterValue === "boolean") { + booleanValue = frontmatterValue; + isDraft = settings.draftStatusReverse ? !booleanValue : booleanValue; + } + } + } + } + } + return { booleanValue, isDraft }; +} +function calculateDraftStatus(entry, settings) { + let booleanValue = null; + let isDraft = false; + if (settings.draftStatusUseFilenamePrefix && entry.file && entry.file.name) { + const fileName = entry.file.name; + const startsWithUnderscore = fileName.startsWith("_"); + booleanValue = startsWithUnderscore; + isDraft = settings.draftStatusReverse ? !booleanValue : booleanValue; + } else if (settings.draftStatusProperty) { + const draftValue = entry.getValue(settings.draftStatusProperty); + if (draftValue && "data" in draftValue && typeof draftValue.data === "boolean") { + booleanValue = draftValue.data; + isDraft = settings.draftStatusReverse ? !booleanValue : booleanValue; + } + } + return { booleanValue, isDraft }; +} +function renderDraftStatusBadge(container, entry, cardPath, settings, onPropertyToggle, app, mdxFrontmatterCache) { + if (!settings.showDraftStatus) { + return; + } + const { booleanValue: syncValue, isDraft: syncIsDraft } = calculateDraftStatus(entry, settings); + if (syncValue !== null) { + renderBadge(container, syncValue, syncIsDraft, onPropertyToggle, cardPath); + } else if (app) { + const file = app.vault.getAbstractFileByPath(entry.file.path); + if (file instanceof import_obsidian9.TFile && file.extension === "mdx" && mdxFrontmatterCache) { + const frontmatter = mdxFrontmatterCache[entry.file.path]; + if (frontmatter && settings.draftStatusProperty) { + const cleanProp = settings.draftStatusProperty.startsWith("note.") ? settings.draftStatusProperty.substring(5) : settings.draftStatusProperty; + const frontmatterValue = frontmatter[cleanProp]; + if (typeof frontmatterValue === "boolean") { + const booleanValue = frontmatterValue; + const isDraft = settings.draftStatusReverse ? !booleanValue : booleanValue; + renderBadge(container, booleanValue, isDraft, onPropertyToggle, cardPath); + return; + } + } + } + void (async () => { + const { booleanValue, isDraft } = await calculateDraftStatusAsync(entry, settings, app, mdxFrontmatterCache); + if (booleanValue !== null && container.isConnected) { + renderBadge(container, booleanValue, isDraft, onPropertyToggle, cardPath); + } + })(); + } +} +function renderBadge(container, booleanValue, isDraft, onPropertyToggle, cardPath) { + if (container.querySelector(".card-status-badge")) { + return; + } + const statusBadge = container.createDiv("card-status-badge"); + if (isDraft) { + statusBadge.addClass("status-draft"); + statusBadge.appendText("Draft"); + } else { + statusBadge.addClass("status-published"); + statusBadge.appendText("Published"); + } + if (onPropertyToggle) { + statusBadge.addClass("bases-cms-cursor-pointer"); + statusBadge.addEventListener("click", (e) => { + e.stopPropagation(); + const newValue = !booleanValue; + void onPropertyToggle(cardPath, "draft", newValue); + }); + } +} + +// src/utils/quick-edit-icon.ts +var import_obsidian10 = require("obsidian"); +function showRenameDialog(app, file) { + const modal = new import_obsidian10.Modal(app); + modal.titleEl.setText("Rename file"); + const inputContainer = modal.contentEl.createDiv(); + setCssProps(inputContainer, { + width: "100%" + }); + const input = new import_obsidian10.TextComponent(inputContainer); + input.setValue(file.basename); + setCssProps(input.inputEl, { + width: "100%", + boxSizing: "border-box" + }); + input.inputEl.focus(); + input.inputEl.select(); + const buttonContainer = modal.contentEl.createDiv({ cls: "modal-button-container" }); + const cancelButton = buttonContainer.createEl("button", { text: "Cancel" }); + cancelButton.addEventListener("click", () => modal.close()); + const renameButton = buttonContainer.createEl("button", { + text: "Rename", + cls: "mod-cta" + }); + const handleRename = async () => { + const newName = input.getValue().trim(); + if (!newName || newName === file.basename) { + modal.close(); + return; + } + const pathParts = file.path.split("/"); + pathParts[pathParts.length - 1] = newName + (file.extension ? `.${file.extension}` : ""); + const newPath = pathParts.join("/"); + try { + await app.fileManager.renameFile(file, newPath); + modal.close(); + } catch (error) { + console.error("[Bases CMS] Error renaming file:", error); + modal.close(); + } + }; + renameButton.addEventListener("click", () => { + void handleRename(); + }); + input.inputEl.addEventListener("keydown", (e) => { + if (e.key === "Enter") { + e.preventDefault(); + void handleRename(); + } else if (e.key === "Escape") { + e.preventDefault(); + modal.close(); + } + }); + modal.open(); +} +function isObsidianRenameCommand(commandId) { + const lowerId = commandId.toLowerCase(); + return commandId === "file-explorer:rename-file" || commandId === "rename-file" || commandId === "file:rename-file" || lowerId.includes("rename") && lowerId.includes("file") && !lowerId.includes(":"); +} +function isProblematicCommand(commandId, commandName) { + const lowerId = commandId.toLowerCase(); + const lowerName = commandName.toLowerCase(); + const problematicPatterns = [ + "add tag", + "add-tag", + "insert-template", + "insert-template", + "editor:", + "markdown:" + ]; + return problematicPatterns.some( + (pattern) => lowerId.includes(pattern) || lowerName.includes(pattern) + ); +} +function setupQuickEditIcon(app, plugin, titleEl, cardEl, cardPath, settings) { + if (!plugin.settings.enableQuickEdit || !plugin.settings.quickEditCommand || plugin.settings.quickEditCommand === "" || settings.hideQuickEditIcon) { + return; + } + const quickEditIcon = titleEl.createSpan("bases-cms-quick-edit-icon"); + quickEditIcon.addClass("bases-cms-cursor-default"); + (0, import_obsidian10.setIcon)(quickEditIcon, plugin.settings.quickEditIcon || "pencil-line"); + titleEl.addEventListener("click", (e) => { + if (quickEditIcon.contains(e.target)) { + e.stopPropagation(); + e.stopImmediatePropagation(); + } + }, true); + cardEl.addEventListener("click", (e) => { + void (async () => { + var _a, _b, _c, _d; + const target = e.target; + if (!quickEditIcon.contains(target) && !target.closest(".bases-cms-quick-edit-icon")) { + return; + } + e.stopPropagation(); + e.stopImmediatePropagation(); + e.preventDefault(); + const file = app.vault.getAbstractFileByPath(cardPath); + if (file instanceof import_obsidian10.TFile) { + const commandId = plugin.settings.quickEditCommand; + const commandRegistry = app.commands; + const command = (_a = commandRegistry == null ? void 0 : commandRegistry.commands) == null ? void 0 : _a[commandId]; + const commandName = (command == null ? void 0 : command.name) || ""; + const lowerCommandName = commandName.toLowerCase(); + if (isObsidianRenameCommand(commandId) || lowerCommandName.includes("rename") && lowerCommandName.includes("file")) { + showRenameDialog(app, file); + return; + } + if (isProblematicCommand(commandId, commandName)) { + if (plugin.settings.quickEditOpenFile) { + } else { + new import_obsidian10.Notice(`The "${commandName}" command requires the file to be open in an editor. Enable "Attempt to open file and execute quick edit command" in settings to try anyway.`, 5e3); + return; + } + } + let helperCalled = false; + try { + let pluginId = null; + let baseCommandId = commandId; + if (commandId.includes(":")) { + const parts = commandId.split(":"); + pluginId = parts[0]; + baseCommandId = parts.slice(1).join(":"); + } else { + const appWithCommands = app; + const commandRegistry2 = appWithCommands.commands; + const command2 = (_b = commandRegistry2 == null ? void 0 : commandRegistry2.commands) == null ? void 0 : _b[commandId]; + if (command2) { + const sourcePlugin = command2.plugin || command2.sourcePlugin; + if (sourcePlugin) { + pluginId = ((_c = sourcePlugin.manifest) == null ? void 0 : _c.id) || sourcePlugin.pluginId || null; + } + } + } + if (pluginId) { + const plugins = app.plugins; + const sourcePlugin = (_d = plugins == null ? void 0 : plugins.plugins) == null ? void 0 : _d[pluginId]; + if (sourcePlugin) { + const methodName = baseCommandId.split("-").map( + (part, index) => index === 0 ? part : part.charAt(0).toUpperCase() + part.slice(1) + ).join("") + "ByPath"; + if (sourcePlugin && typeof sourcePlugin[methodName] === "function") { + await sourcePlugin[methodName](cardPath); + helperCalled = true; + return; + } + } + } + } catch (e2) { + } + if (!helperCalled) { + if (!plugin.settings.quickEditOpenFile) { + new import_obsidian10.Notice(`This command doesn't have special handling. Enable "Attempt to open file and execute quick edit command" in settings to try executing it.`, 5e3); + return; + } + const leaf = app.workspace.getLeaf(false); + await leaf.openFile(file); + app.workspace.setActiveLeaf(leaf, { focus: true }); + let attempts = 0; + const maxAttempts = 30; + const executeCommand = () => { + const finalActiveFile = app.workspace.getActiveFile(); + if (finalActiveFile === file) { + void (async () => { + var _a2, _b2; + try { + await ((_b2 = (_a2 = app.commands) == null ? void 0 : _a2.executeCommandById) == null ? void 0 : _b2.call(_a2, plugin.settings.quickEditCommand)); + } catch (e2) { + } + })(); + } + }; + const checkEditorReady = () => { + const view = leaf.view; + const viewWithEditor = view; + const activeFile = app.workspace.getActiveFile(); + if (view && "editor" in view && viewWithEditor.editor && activeFile === file) { + requestAnimationFrame(() => { + requestAnimationFrame(() => { + setTimeout(() => { + executeCommand(); + }, 200); + }); + }); + } else if (attempts < maxAttempts) { + attempts++; + setTimeout(checkEditorReady, 50); + } + }; + checkEditorReady(); + } + } + })(); + }, true); + quickEditIcon.addEventListener("mousedown", (e) => { + e.stopPropagation(); + e.stopImmediatePropagation(); + e.preventDefault(); + }, true); +} + +// src/utils/property-renderer.ts +var import_obsidian11 = require("obsidian"); +var PropertyRenderer = class { + constructor(app, getBasesConfig, getBasesController) { + this.app = app; + this.getBasesConfig = getBasesConfig; + this.getBasesController = getBasesController; + } + /** + * Renders property fields for a card + * @param position - 'top' to render only top-positioned groups, 'bottom' to render only bottom-positioned groups, undefined to render all + */ + renderProperties(cardEl, card, entry, settings, onPropertyToggle, position) { + const props = [ + settings.propertyDisplay1, + settings.propertyDisplay2, + settings.propertyDisplay3, + settings.propertyDisplay4, + settings.propertyDisplay5, + settings.propertyDisplay6, + settings.propertyDisplay7, + settings.propertyDisplay8, + settings.propertyDisplay9, + settings.propertyDisplay10, + settings.propertyDisplay11, + settings.propertyDisplay12, + settings.propertyDisplay13, + settings.propertyDisplay14 + ]; + const seen = /* @__PURE__ */ new Set(); + const effectiveProps = props.map((prop) => { + if (!prop || prop === "") return ""; + if (seen.has(prop)) return ""; + seen.add(prop); + return prop; + }); + const values = effectiveProps.map((prop, index) => { + if (!prop) return null; + const cardProperty = `property${index + 1}`; + const cardValue = card[cardProperty]; + if (cardValue !== void 0 && cardValue !== null) { + return cardValue; + } + try { + const value = entry.getValue(prop); + if (!value) return null; + if ("date" in value && value.date instanceof Date) { + return value.date.toLocaleDateString(); + } + if ("data" in value && value.data != null) { + const data = value.data; + if (Array.isArray(data)) { + return data.map((item) => { + if (item && typeof item === "object" && item !== null && !Array.isArray(item)) { + return JSON.stringify(item); + } + return String(item); + }).join(", "); + } + if (data && typeof data === "object" && data !== null && !Array.isArray(data)) { + return JSON.stringify(data); + } + if (typeof data === "string" || typeof data === "number" || typeof data === "boolean") { + return String(data); + } + return data ? JSON.stringify(data) : ""; + } + } catch (e) { + } + return null; + }); + const propertyGroups = [ + { + props: [effectiveProps[0], effectiveProps[1]], + values: [values[0], values[1]], + sideBySide: settings.propertyLayout12SideBySide, + position: settings.propertyGroup1Position + }, + { + props: [effectiveProps[2], effectiveProps[3]], + values: [values[2], values[3]], + sideBySide: settings.propertyLayout34SideBySide, + position: settings.propertyGroup2Position + }, + { + props: [effectiveProps[4], effectiveProps[5]], + values: [values[4], values[5]], + sideBySide: settings.propertyLayout56SideBySide, + position: settings.propertyGroup3Position + }, + { + props: [effectiveProps[6], effectiveProps[7]], + values: [values[6], values[7]], + sideBySide: settings.propertyLayout78SideBySide, + position: settings.propertyGroup4Position + }, + { + props: [effectiveProps[8], effectiveProps[9]], + values: [values[8], values[9]], + sideBySide: settings.propertyLayout910SideBySide, + position: settings.propertyGroup5Position + }, + { + props: [effectiveProps[10], effectiveProps[11]], + values: [values[10], values[11]], + sideBySide: settings.propertyLayout1112SideBySide, + position: settings.propertyGroup6Position + }, + { + props: [effectiveProps[12], effectiveProps[13]], + values: [values[12], values[13]], + sideBySide: settings.propertyLayout1314SideBySide, + position: settings.propertyGroup7Position + } + ]; + const topGroups = []; + const bottomGroups = []; + propertyGroups.forEach((group, index) => { + const hasContent = group.props[0] !== "" || group.props[1] !== ""; + if (hasContent) { + if (group.position === "top") { + topGroups.push(group); + } else { + bottomGroups.push(group); + } + } + }); + const shouldHideProperty = (propName, propValue) => { + var _a, _b, _c; + if (!propName || propName === "") return true; + const isEmptyValue = propValue === null || propValue === "" || typeof propValue === "string" && propValue.trim() === ""; + let propertyExists = false; + try { + const filePath = (_a = entry == null ? void 0 : entry.file) == null ? void 0 : _a.path; + if (filePath && ((_b = this.app) == null ? void 0 : _b.vault) && ((_c = this.app) == null ? void 0 : _c.metadataCache)) { + const file = this.app.vault.getAbstractFileByPath(filePath); + if (file instanceof import_obsidian11.TFile) { + if (file.extension === "mdx") { + propertyExists = !isEmptyValue; + } else { + const metadata = this.app.metadataCache.getFileCache(file); + if (metadata && metadata.frontmatter) { + const propertyNames = propName.split(",").map((p) => p.trim()).filter((p) => p); + for (const prop of propertyNames) { + const propKey = prop.replace(/^(note|formula|file)\./, ""); + if (propKey in metadata.frontmatter) { + propertyExists = true; + break; + } + } + } + } + } + } + } catch (e) { + } + if (shouldHideMissingProperties() && !propertyExists) { + return true; + } + if (shouldHideEmptyProperties() && propertyExists && isEmptyValue) { + return true; + } + if (shouldHideEmptyProperties() && isEmptyValue) { + return true; + } + return false; + }; + if ((position === "top" || position === void 0) && topGroups.length > 0) { + const topMetaEl = cardEl.createDiv("card-properties properties-top"); + topGroups.forEach((group, groupIndex) => { + const prop1ShouldRender = group.props[0] && !shouldHideProperty(group.props[0], group.values[0]); + const prop2ShouldRender = group.props[1] && !shouldHideProperty(group.props[1], group.values[1]); + if (!prop1ShouldRender && !prop2ShouldRender) { + return; + } + const rowEl = topMetaEl.createDiv(`property-row property-row-group-${groupIndex + 1}`); + if (group.sideBySide) { + rowEl.addClass("property-row-side-by-side"); + } + const field1El = rowEl.createDiv("property-field property-field-1"); + if (prop1ShouldRender) { + this.renderPropertyContent(field1El, group.props[0], group.values[0], card, entry, settings, onPropertyToggle); + } + const field2El = rowEl.createDiv("property-field property-field-2"); + if (prop2ShouldRender) { + this.renderPropertyContent(field2El, group.props[1], group.values[1], card, entry, settings, onPropertyToggle); + } + }); + } + if ((position === "bottom" || position === void 0) && bottomGroups.length > 0) { + const bottomMetaEl = cardEl.createDiv("card-properties properties-bottom"); + bottomGroups.forEach((group, groupIndex) => { + const prop1ShouldRender = group.props[0] && !shouldHideProperty(group.props[0], group.values[0]); + const prop2ShouldRender = group.props[1] && !shouldHideProperty(group.props[1], group.values[1]); + if (!prop1ShouldRender && !prop2ShouldRender) { + return; + } + const rowEl = bottomMetaEl.createDiv(`property-row property-row-group-${groupIndex + 1}`); + if (group.sideBySide) { + rowEl.addClass("property-row-side-by-side"); + } + const field1El = rowEl.createDiv("property-field property-field-1"); + if (prop1ShouldRender) { + this.renderPropertyContent(field1El, group.props[0], group.values[0], card, entry, settings, onPropertyToggle); + } + const field2El = rowEl.createDiv("property-field property-field-2"); + if (prop2ShouldRender) { + this.renderPropertyContent(field2El, group.props[1], group.values[1], card, entry, settings, onPropertyToggle); + } + }); + } + } + /** + * Renders individual property content + */ + renderPropertyContent(container, propertyName, resolvedValue, card, entry, settings, onPropertyToggle) { + if (propertyName === "") return; + if (resolvedValue === null && shouldHideMissingProperties()) { + return; + } + if (resolvedValue === "" && shouldHideEmptyProperties()) { + return; + } + if (!resolvedValue && settings.propertyLabels === "hide") { + return; + } + if (settings.propertyLabels === "hide") { + if ((propertyName === "tags" || propertyName === "note.tags") && card.yamlTags.length === 0) { + return; + } + if ((propertyName === "file.tags" || propertyName === "file tags") && card.tags.length === 0) { + return; + } + } + const basesConfig = this.getBasesConfig ? this.getBasesConfig() : void 0; + const basesController = this.getBasesController ? this.getBasesController() : void 0; + const propertyLabel = getPropertyLabel(propertyName, this.app, basesConfig, basesController); + const isCustomLabel = propertyLabel.toLowerCase() !== propertyName.toLowerCase(); + if (settings.propertyLabels === "above") { + const labelEl = container.createDiv("property-label"); + if (isCustomLabel) { + labelEl.addClass("property-label-custom"); + } + labelEl.textContent = propertyLabel; + } + const metaContent = container.createDiv("property-content"); + if (settings.propertyLabels === "inline") { + metaContent.addClass("property-content-inline"); + } + if (settings.propertyLabels === "inline") { + const labelSpan = metaContent.createSpan("property-label-inline"); + labelSpan.textContent = propertyLabel + ": "; + } + if (!resolvedValue) { + const emptyMarker = metaContent.createSpan("property-empty-marker"); + emptyMarker.textContent = getEmptyValueMarker(); + return; + } + const isKnownTimestampProperty = propertyName === "file.mtime" || propertyName === "file.ctime" || propertyName === "modified time" || propertyName === "created time"; + if (isKnownTimestampProperty) { + const timestampWrapper = metaContent.createSpan(); + timestampWrapper.appendText(resolvedValue); + } else if ((propertyName === "tags" || propertyName === "note.tags") && card.yamlTags.length > 0) { + const tagsWrapper = metaContent.createDiv("tags-wrapper"); + const tagStyle = getTagStyle(); + if (tagStyle !== "plain") { + tagsWrapper.addClass(`tag-style-${tagStyle}`); + } + card.yamlTags.forEach((tag) => { + const tagEl = tagsWrapper.createEl("a", { + cls: "tag", + text: showTagHashPrefix() ? `#${tag}` : tag, + href: "#" + }); + tagEl.addEventListener("click", (e) => { + var _a, _b, _c; + e.preventDefault(); + const searchPlugin = (_b = (_a = this.app.internalPlugins) == null ? void 0 : _a.plugins) == null ? void 0 : _b["global-search"]; + if ((_c = searchPlugin == null ? void 0 : searchPlugin.instance) == null ? void 0 : _c.openGlobalSearch) { + searchPlugin.instance.openGlobalSearch("tag:" + tag); + } + }); + }); + } else if ((propertyName === "file.tags" || propertyName === "file tags") && card.tags.length > 0) { + const tagsWrapper = metaContent.createDiv("tags-wrapper"); + const tagStyle = getTagStyle(); + if (tagStyle !== "plain") { + tagsWrapper.addClass(`tag-style-${tagStyle}`); + } + card.tags.forEach((tag) => { + const tagEl = tagsWrapper.createEl("a", { + cls: "tag", + text: showTagHashPrefix() ? `#${tag}` : tag, + href: "#" + }); + tagEl.addEventListener("click", (e) => { + var _a, _b, _c; + e.preventDefault(); + const searchPlugin = (_b = (_a = this.app.internalPlugins) == null ? void 0 : _a.plugins) == null ? void 0 : _b["global-search"]; + if ((_c = searchPlugin == null ? void 0 : searchPlugin.instance) == null ? void 0 : _c.openGlobalSearch) { + searchPlugin.instance.openGlobalSearch("tag:" + tag); + } + }); + }); + } else { + if (!this.app || !this.app.metadataCache) { + const textWrapper = metaContent.createDiv("text-wrapper"); + this.renderPropertyValueWithLinks(textWrapper, resolvedValue, card.path, propertyName); + return; + } + let propInfo = void 0; + try { + const metadataCache = this.app.metadataCache; + const getAllPropertyInfos = metadataCache.getAllPropertyInfos; + if (typeof getAllPropertyInfos === "function") { + const propertyInfos = getAllPropertyInfos(); + propInfo = propertyInfos[propertyName.toLowerCase()]; + } + } catch (e) { + } + let entryValue = null; + try { + if (entry && typeof entry.getValue === "function") { + entryValue = entry.getValue(propertyName); + } + } catch (e) { + } + const isCheckbox = (propInfo == null ? void 0 : propInfo.widget) === "checkbox" || entryValue && "data" in entryValue && typeof entryValue.data === "boolean"; + if (isCheckbox && onPropertyToggle) { + const checkbox = metaContent.createEl("input", { type: "checkbox" }); + checkbox.checked = entryValue && "data" in entryValue ? Boolean(entryValue.data) : false; + metaContent.createSpan({ text: propertyLabel }); + checkbox.addEventListener("change", (e) => { + e.stopPropagation(); + const checked = checkbox.checked; + void (async () => { + try { + const cleanProperty = propertyName.startsWith("note.") ? propertyName.substring(5) : propertyName; + await onPropertyToggle(card.path, cleanProperty, checked); + } catch (e2) { + checkbox.checked = !checked; + } + })(); + }); + checkbox.addEventListener("click", (e) => { + e.stopPropagation(); + }); + } else { + const textWrapper = metaContent.createDiv("text-wrapper"); + this.renderPropertyValueWithLinks(textWrapper, resolvedValue, card.path, propertyName); + } + } + if (!metaContent.textContent || metaContent.textContent.trim().length === 0) { + metaContent.remove(); + } + } + /** + * Renders property value with clickable links + * Detects wikilinks [[...]], markdown links [...](...), and URLs + * For image properties, also makes file paths clickable (like Obsidian does) + */ + renderPropertyValueWithLinks(container, value, sourcePath, propertyName) { + if (!value) { + container.appendText(getEmptyValueMarker()); + return; + } + const trimmedValue = value.trim(); + if ((trimmedValue.startsWith("http://") || trimmedValue.startsWith("https://")) && !trimmedValue.includes(" ")) { + const linkEl = container.createEl("a", { + cls: "external-link", + href: trimmedValue + }); + linkEl.textContent = trimmedValue; + linkEl.setAttr("target", "_blank"); + linkEl.setAttr("rel", "noopener"); + linkEl.addEventListener("click", (e) => { + e.stopPropagation(); + }); + return; + } + const isImageProperty = propertyName && (propertyName.toLowerCase().includes("image") || propertyName.toLowerCase() === "cover" || propertyName.toLowerCase() === "thumbnail"); + if (isImageProperty && !trimmedValue.includes(" ") && !trimmedValue.startsWith("http://") && !trimmedValue.startsWith("https://") && (trimmedValue.includes("/") || trimmedValue.includes("\\") || trimmedValue.match(/\.(png|jpg|jpeg|gif|svg|webp|mp4|mov|avi)$/i))) { + const linkEl = container.createEl("a", { + cls: "internal-link", + href: trimmedValue + }); + linkEl.textContent = trimmedValue; + linkEl.addEventListener("click", (e) => { + e.stopPropagation(); + e.preventDefault(); + const newLeaf = e.metaKey || e.ctrlKey; + void this.app.workspace.openLinkText(trimmedValue, sourcePath, newLeaf); + }); + return; + } + const wikilinkRegex = /\[\[([^\]]+)\]\]/g; + const markdownLinkRegex = /\[([^\]]+)\]\(([^)]+)\)/g; + const matches = []; + for (const m of value.matchAll(wikilinkRegex)) { + if (m.index !== void 0) { + matches.push({ index: m.index, type: "wikilink", match: m }); + } + } + for (const m of value.matchAll(markdownLinkRegex)) { + if (m.index !== void 0) { + matches.push({ index: m.index, type: "markdown", match: m }); + } + } + matches.sort((a, b) => a.index - b.index); + let lastIndex = 0; + for (const { index, type, match } of matches) { + if (index > lastIndex) { + container.appendText(value.substring(lastIndex, index)); + } + if (type === "wikilink") { + const linkContent = match[1]; + const parts = linkContent.split("|"); + const linkPath = parts[0].trim(); + const displayText = parts.length > 1 ? parts[1].trim() : linkPath; + const linkEl = container.createEl("a", { + cls: "internal-link", + href: linkPath + }); + linkEl.textContent = displayText; + linkEl.addEventListener("click", (e) => { + e.stopPropagation(); + e.preventDefault(); + const newLeaf = e.metaKey || e.ctrlKey; + void this.app.workspace.openLinkText(linkPath, sourcePath, newLeaf); + }); + } else if (type === "markdown") { + const linkText = match[1]; + const linkUrl = match[2]; + if (linkUrl.startsWith("http://") || linkUrl.startsWith("https://")) { + const linkEl = container.createEl("a", { + cls: "external-link", + href: linkUrl + }); + linkEl.textContent = linkText; + linkEl.setAttr("target", "_blank"); + linkEl.setAttr("rel", "noopener"); + linkEl.addEventListener("click", (e) => { + e.stopPropagation(); + }); + } else { + const linkEl = container.createEl("a", { + cls: "internal-link", + href: linkUrl + }); + linkEl.textContent = linkText; + linkEl.addEventListener("click", (e) => { + e.stopPropagation(); + e.preventDefault(); + const newLeaf = e.metaKey || e.ctrlKey; + void this.app.workspace.openLinkText(linkUrl, sourcePath, newLeaf); + }); + } + } + lastIndex = index + match[0].length; + } + if (lastIndex < value.length) { + container.appendText(value.substring(lastIndex)); + } else if (matches.length === 0) { + container.appendText(value); + } + } +}; + +// src/views/shared-renderer.ts +init_frontmatter_helper(); +var SharedCardRenderer = class { + constructor(app, plugin, propertyObservers, updateLayoutRef, basesConfig, basesController) { + this.app = app; + this.plugin = plugin; + this.propertyObservers = propertyObservers; + this.updateLayoutRef = updateLayoutRef; + this.basesConfig = basesConfig; + this.basesController = basesController; + this.propertyRenderer = new PropertyRenderer( + this.app, + () => this.basesConfig, + // Pass a getter function so it always gets the latest config + () => this.basesController + // Pass a getter function so it always gets the latest controller + ); + } + /** + * Set MDX frontmatter cache for synchronous access during rendering + */ + setMdxFrontmatterCache(cache) { + this.mdxFrontmatterCache = cache; + } + /** + * Renders a complete card with CMS features + */ + renderCard(container, card, entry, settings, hoverParent, isSelected, onSelect, onPropertyToggle, toolbarActions) { + const cardEl = container.createDiv("card bases-cms-card"); + setCssProps(cardEl, { + display: "block", + position: "relative" + }); + if (settings.imageFormat === "cover") { + cardEl.classList.add("image-format-cover"); + } else if (settings.imageFormat === "thumbnail") { + cardEl.classList.add("image-format-thumbnail"); + cardEl.classList.add(`thumbnail-${settings.imagePosition}`); + } + cardEl.setAttribute("data-path", card.path); + cardEl.setAttribute("data-href", card.path); + cardEl.addClass("bases-cms-cursor-pointer"); + const checkboxEl = cardEl.createDiv("bases-cms-select-checkbox"); + const checkbox = checkboxEl.createEl("input", { type: "checkbox", cls: "selection-checkbox" }); + checkbox.checked = isSelected; + checkboxEl.addEventListener("click", (e) => { + e.stopPropagation(); + e.stopImmediatePropagation(); + if (e.target !== checkbox) { + checkbox.checked = !checkbox.checked; + } + onSelect(card.path, checkbox.checked, e.shiftKey); + }); + if (settings.showDraftStatus) { + renderDraftStatusBadge(cardEl, entry, card.path, settings, onPropertyToggle, this.app, this.mdxFrontmatterCache); + } + cardEl.addEventListener("click", (e) => { + const target = e.target; + const quickEditIcon = target.closest(".bases-cms-quick-edit-icon"); + if (quickEditIcon) { + e.stopPropagation(); + e.stopImmediatePropagation(); + e.preventDefault(); + return; + } + if (checkboxEl.contains(target) || target.tagName === "INPUT" || target.closest("input") || target.closest(".bases-cms-property") || target.closest(".card-status-badge")) { + return; + } + if (e.shiftKey) { + e.preventDefault(); + e.stopPropagation(); + e.stopImmediatePropagation(); + const newSelectedState = !checkbox.checked; + onSelect(card.path, newSelectedState, true); + return; + } + const newLeaf = e.metaKey || e.ctrlKey; + void this.app.workspace.openLinkText(card.path, "", newLeaf); + }); + cardEl.addEventListener("contextmenu", (e) => { + const target = e.target; + if (checkboxEl.contains(target) || target.tagName === "INPUT" || target.closest("input") || target.closest(".bases-cms-property") || target.closest(".card-status-badge") || target.closest(".bases-cms-quick-edit-icon")) { + return; + } + const file = this.app.vault.getAbstractFileByPath(card.path); + if (file && file instanceof import_obsidian12.TFile) { + e.stopPropagation(); + const menu = new import_obsidian12.Menu(); + const currentlySelected = checkbox.checked; + if (currentlySelected) { + menu.addItem((item) => { + item.setTitle("Unselect"); + item.setIcon("square"); + item.onClick(() => { + onSelect(card.path, false, false); + }); + }); + } else { + menu.addItem((item) => { + item.setTitle("Select"); + item.setIcon("copy-check"); + item.onClick(() => { + onSelect(card.path, true, false); + }); + }); + } + menu.addSeparator(); + this.app.workspace.trigger("file-menu", menu, file, "bases"); + menu.addSeparator(); + menu.addItem((item) => { + item.setTitle("Delete"); + item.setIcon("trash-2"); + item.onClick(async () => { + if (toolbarActions) { + await toolbarActions.handleDelete(); + } + }); + }); + menu.showAtMouseEvent(e); + setTimeout(() => { + const menuEl = document.querySelector(".menu"); + if (!menuEl) return; + const menuItems = Array.from(menuEl.querySelectorAll(".menu-item")); + const deleteItem = menuItems.find((item) => { + var _a; + const title = (_a = item.textContent) == null ? void 0 : _a.trim(); + return title === "Delete"; + }); + if (deleteItem) { + deleteItem.addClass("is-danger"); + const icon = deleteItem.querySelector("svg"); + if (icon) { + setCssProps(icon, { + color: "var(--text-error)", + stroke: "var(--text-error)" + }); + } + const title = deleteItem.querySelector(".menu-item-title"); + if (title) { + setCssProps(title, { + color: "var(--text-error)" + }); + } + } + }, 0); + } + }); + const titleEl = cardEl.createDiv("card-title"); + titleEl.appendText(card.title); + setupQuickEditIcon(this.app, this.plugin, titleEl, cardEl, card.path, settings); + if (settings.showDate && settings.dateProperty) { + let dateValue = entry.getValue(settings.dateProperty); + const hasValidDate = dateValue && ("date" in dateValue && dateValue.date instanceof Date || "data" in dateValue && dateValue.data != null); + if (!hasValidDate) { + const file = this.app.vault.getAbstractFileByPath(entry.file.path); + if (file instanceof import_obsidian12.TFile && file.extension === "mdx") { + void (async () => { + const frontmatter = await getFileFrontmatter(this.app, file); + if (frontmatter) { + const cleanProp = settings.dateProperty.startsWith("note.") ? settings.dateProperty.substring(5) : settings.dateProperty; + const frontmatterValue = frontmatter[cleanProp]; + if (frontmatterValue != null) { + let date = null; + if (frontmatterValue instanceof Date) { + date = frontmatterValue; + } else if (frontmatterValue && typeof frontmatterValue === "object" && "getTime" in frontmatterValue) { + const dateLike = frontmatterValue; + try { + const timestamp = dateLike.getTime(); + if (typeof timestamp === "number" && !isNaN(timestamp)) { + date = new Date(timestamp); + } + } catch (e) { + } + } + if (!date && typeof frontmatterValue === "string") { + const dateStr = frontmatterValue.trim(); + const isoDateStr = dateStr.includes("T") ? dateStr : `${dateStr}T00:00:00`; + const parsedDate = new Date(isoDateStr); + if (!isNaN(parsedDate.getTime())) { + date = parsedDate; + } else { + const fallbackDate = new Date(dateStr); + if (!isNaN(fallbackDate.getTime())) { + date = fallbackDate; + } + } + } + if (!date && typeof frontmatterValue === "number") { + const parsedDate = new Date(frontmatterValue); + if (!isNaN(parsedDate.getTime())) { + date = parsedDate; + } + } + if (date) { + requestAnimationFrame(() => { + if (cardEl.isConnected) { + let dateString; + if (settings.dateIncludeTime) { + const datePart = date.toLocaleDateString(); + const timePart = date.toLocaleTimeString(void 0, { + hour: "numeric", + minute: "2-digit", + hour12: true + }); + dateString = `${datePart}, ${timePart}`; + } else { + dateString = date.toLocaleDateString(); + } + let dateEl = cardEl.querySelector(".card-date"); + if (!dateEl) { + const titleEl2 = cardEl.querySelector(".card-title"); + if (titleEl2 && titleEl2.parentElement) { + dateEl = titleEl2.parentElement.createDiv("card-date"); + titleEl2.parentElement.insertBefore(dateEl, titleEl2.nextSibling); + } else { + dateEl = cardEl.createDiv("card-date"); + } + } + dateEl.setText(dateString); + } + }); + } + } + } + })(); + } + } + if (hasValidDate && dateValue) { + const dateObj = dateValue; + let date = null; + if (dateObj && "date" in dateObj && dateObj.date instanceof Date) { + date = dateObj.date; + } else if (dateObj && "data" in dateObj && dateObj.data) { + const data = dateObj.data; + if (data instanceof Date) { + date = data; + } else if (typeof data === "string" || typeof data === "number") { + const parsedDate = new Date(data); + if (!isNaN(parsedDate.getTime())) { + date = parsedDate; + } + } + } + if (date) { + let dateString; + if (settings.dateIncludeTime) { + const datePart = date.toLocaleDateString(); + const timePart = date.toLocaleTimeString(void 0, { + hour: "numeric", + minute: "2-digit", + hour12: true + }); + dateString = `${datePart}, ${timePart}`; + } else { + dateString = date.toLocaleDateString(); + } + const dateEl = cardEl.createDiv("card-date"); + dateEl.appendText(dateString); + } + } + } + this.propertyRenderer.renderProperties(cardEl, card, entry, settings, onPropertyToggle, "top"); + if (settings.showTextPreview || settings.showTags && card.displayTags && card.displayTags.length > 0 || settings.imageFormat === "thumbnail" || settings.imageFormat === "cover" || settings.imageFormat !== "none" && (card.imageUrl || card.hasImageAvailable)) { + const contentContainer = cardEl.createDiv("card-content"); + if (settings.imageFormat === "thumbnail" && card.imageUrl) { + const rawUrls = Array.isArray(card.imageUrl) ? card.imageUrl : [card.imageUrl]; + const imageUrls = rawUrls.filter((url) => url && typeof url === "string" && url.trim().length > 0); + if (imageUrls.length > 0) { + const imageEl = contentContainer.createDiv("card-thumbnail"); + const imageEmbedContainer = imageEl.createDiv("image-embed"); + const originalUrl = imageUrls[0]; + void (async () => { + const finalUrl = await convertGifToStatic(originalUrl, this.plugin.settings.forceStaticGifImages); + imageEmbedContainer.style.backgroundImage = `url("${finalUrl}")`; + })(); + imageEmbedContainer.style.backgroundImage = `url("${originalUrl}")`; + setCssProps(imageEmbedContainer, { + backgroundSize: "cover", + backgroundPosition: "center center", + backgroundRepeat: "no-repeat" + }); + } + } + if (settings.imageFormat === "thumbnail") { + const textWrapper = contentContainer.createDiv("card-text-wrapper"); + if (settings.showTextPreview) { + const textPreviewEl = textWrapper.createDiv("card-text-preview"); + if (card.snippet) { + textPreviewEl.setText(card.snippet); + } + cardEl.__textPreviewEl = textPreviewEl; + cardEl.__cardPath = card.path; + } + if (settings.showTags && card.displayTags && card.displayTags.length > 0) { + const tagsContainer = textWrapper.createDiv("card-tags"); + const tagStyle = getTagStyle(); + if (tagStyle !== "plain") { + tagsContainer.addClass(`tag-style-${tagStyle}`); + } + const maxTags = settings.maxTagsToShow; + const tagsToShow = card.displayTags.slice(0, maxTags); + const remainingCount = card.displayTags.length - maxTags; + tagsToShow.forEach((tag) => { + const tagEl = tagsContainer.createSpan("card-tag"); + tagEl.appendText(showTagHashPrefix() ? `#${tag}` : tag); + }); + if (remainingCount > 0) { + const moreEl = tagsContainer.createSpan("card-tag-more"); + moreEl.appendText(`+${remainingCount} more`); + } + } + } else { + if (settings.showTextPreview) { + const textPreviewEl = contentContainer.createDiv("card-text-preview"); + if (card.snippet) { + textPreviewEl.setText(card.snippet); + } + cardEl.__textPreviewEl = textPreviewEl; + cardEl.__cardPath = card.path; + } + if (settings.showTags && card.displayTags && card.displayTags.length > 0) { + const tagsContainer = contentContainer.createDiv("card-tags"); + const tagStyle = getTagStyle(); + if (tagStyle !== "plain") { + tagsContainer.addClass(`tag-style-${tagStyle}`); + } + const maxTags = settings.maxTagsToShow; + const tagsToShow = card.displayTags.slice(0, maxTags); + const remainingCount = card.displayTags.length - maxTags; + tagsToShow.forEach((tag) => { + const tagEl = tagsContainer.createSpan("card-tag"); + tagEl.appendText(showTagHashPrefix() ? `#${tag}` : tag); + }); + if (remainingCount > 0) { + const moreEl = tagsContainer.createSpan("card-tag-more"); + moreEl.appendText(`+${remainingCount} more`); + } + } + } + if (settings.imageFormat === "cover") { + if (card.imageUrl) { + const rawUrls = Array.isArray(card.imageUrl) ? card.imageUrl : [card.imageUrl]; + const imageUrls = rawUrls.filter((url) => url && typeof url === "string" && url.trim().length > 0); + if (imageUrls.length > 0) { + const imageEl = contentContainer.createDiv("card-cover"); + const imageEmbedContainer = imageEl.createDiv("image-embed"); + const originalUrl = imageUrls[0]; + void (async () => { + const finalUrl = await convertGifToStatic(originalUrl, this.plugin.settings.forceStaticGifImages); + imageEmbedContainer.style.backgroundImage = `url("${finalUrl}")`; + })(); + imageEmbedContainer.style.backgroundImage = `url("${originalUrl}")`; + setCssProps(imageEmbedContainer, { + backgroundSize: "cover", + backgroundPosition: "center center", + backgroundRepeat: "no-repeat" + }); + this.propertyRenderer.renderProperties(cardEl, card, entry, settings, onPropertyToggle, "bottom"); + return; + } + } + if (card.hasImageAvailable && !card.imageUrl) { + const placeholderEl = contentContainer.createDiv("card-cover-placeholder"); + } else if (!card.imageUrl) { + const placeholderEl = contentContainer.createDiv("card-cover-placeholder"); + } + } + } + this.propertyRenderer.renderProperties(cardEl, card, entry, settings, onPropertyToggle, "bottom"); + return; + } +}; + +// src/components/bulk-toolbar.ts +var import_obsidian21 = require("obsidian"); + +// src/utils/bulk-operations.ts +var import_obsidian13 = require("obsidian"); + +// src/utils/frontmatter.ts +init_frontmatter_helper(); +async function addProperties(app, file, props, overwrite) { + await processFileFrontMatter(app, file, (frontmatter) => { + for (const [key, value] of props) { + if (key === "tags" && !Object.prototype.hasOwnProperty.call(frontmatter, "tags") && !Array.isArray(value.data)) { + frontmatter[key] = [value.data]; + continue; + } + if (!frontmatter[key] || overwrite) { + frontmatter[key] = value.data; + continue; + } + const type1 = value.type; + const existingValue = frontmatter[key]; + const type2 = Array.isArray(existingValue) ? "list" : typeof existingValue === "number" ? "number" : typeof existingValue === "boolean" ? "checkbox" : "text"; + if (canBeAppended(type1, type2)) { + if (frontmatter[key] === value.data) continue; + if (!value.data) continue; + const arr = mergeIntoArrays(frontmatter[key], value.data); + frontmatter[key] = arr; + continue; + } else { + frontmatter[key] = value.data; + continue; + } + } + }); +} +async function removeProperties(app, file, props) { + await processFileFrontMatter(app, file, (frontmatter) => { + for (const prop of props) { + frontmatter[prop] = void 0; + } + }); +} +function canBeAppended(str1, str2) { + const arr = ["number", "date", "datetime", "checkbox"]; + if (arr.includes(str1) || arr.includes(str2)) return false; + return true; +} +function mergeIntoArrays(...args) { + const arrays = args.map((arg) => Array.isArray(arg) ? arg : [arg]); + const flattened = arrays.flat(); + const unique = [...new Set(flattened)]; + return unique; +} + +// src/utils/bulk-operations.ts +init_frontmatter_helper(); +var BulkOperations = class { + constructor(app) { + this.app = app; + } + /** + * Set draft status for multiple files + * Respects filename prefix mode and reverse logic settings + */ + async setDraft(files, draft, settings) { + await this.batchProcessFiles(files, async (file) => { + if (settings) { + if (settings.draftStatusUseFilenamePrefix) { + const fileName = file.basename; + const startsWithUnderscore = fileName.startsWith("_"); + const currentPath = file.path; + const pathParts = currentPath.split("/"); + let targetValue = draft; + if (settings.draftStatusReverse) { + targetValue = !draft; + } + if (targetValue === true) { + if (!startsWithUnderscore) { + const newName = `_${fileName}${file.extension ? `.${file.extension}` : ""}`; + pathParts[pathParts.length - 1] = newName; + const newPath = pathParts.join("/"); + await this.app.fileManager.renameFile(file, newPath); + } + } else { + if (startsWithUnderscore) { + const newName = fileName.substring(1) + (file.extension ? `.${file.extension}` : ""); + pathParts[pathParts.length - 1] = newName; + const newPath = pathParts.join("/"); + await this.app.fileManager.renameFile(file, newPath); + } + } + } else { + const cleanConfigProperty = settings.draftStatusProperty && settings.draftStatusProperty.trim() ? settings.draftStatusProperty.startsWith("note.") ? settings.draftStatusProperty.substring(5) : settings.draftStatusProperty : "draft"; + let targetValue = draft; + if (settings.draftStatusReverse) { + targetValue = !draft; + } + await processFileFrontMatter(this.app, file, (frontmatter) => { + frontmatter[cleanConfigProperty] = targetValue; + }); + } + } else { + await processFileFrontMatter(this.app, file, (frontmatter) => { + frontmatter.draft = draft; + }); + } + }); + new import_obsidian13.Notice(`Set ${files.length} file${files.length !== 1 ? "s" : ""} to ${draft ? "draft" : "published"}`); + } + /** + * Add tags to multiple files + */ + async addTags(files, tags) { + const props = /* @__PURE__ */ new Map(); + props.set("tags", { + type: "tags", + data: tags, + overwrite: false, + delimiter: "," + }); + await this.batchProcessFiles(files, async (file) => { + await addProperties(this.app, file, props, false); + }); + new import_obsidian13.Notice(`Added tags to ${files.length} file${files.length !== 1 ? "s" : ""}`); + } + /** + * Remove tags from multiple files + */ + async removeTags(files, tagsToRemove) { + await this.batchProcessFiles(files, async (file) => { + const frontmatter = await getFileFrontmatter(this.app, file); + if (frontmatter == null ? void 0 : frontmatter.tags) { + const fmTags = frontmatter.tags; + const currentTags = Array.isArray(fmTags) ? fmTags : [fmTags]; + const updatedTags = currentTags.filter( + (tag) => !tagsToRemove.includes(tag) + ); + await processFileFrontMatter(this.app, file, (fm) => { + if (updatedTags.length > 0) { + fm.tags = updatedTags; + } else { + fm.tags = void 0; + } + }); + } + }); + new import_obsidian13.Notice(`Removed tags from ${files.length} file${files.length !== 1 ? "s" : ""}`); + } + /** + * Set a property value for multiple files + */ + async setProperty(files, property, value, propertyType = "text") { + const cleanProperty = property.startsWith("note.") ? property.substring(5) : property; + const props = /* @__PURE__ */ new Map(); + props.set(cleanProperty, { + type: propertyType, + data: value, + overwrite: true, + delimiter: "," + }); + await this.batchProcessFiles(files, async (file) => { + await addProperties(this.app, file, props, true); + }); + new import_obsidian13.Notice(`Set ${cleanProperty} on ${files.length} file${files.length !== 1 ? "s" : ""}`); + } + /** + * Remove a property from multiple files + */ + async removeProperty(files, property) { + const cleanProperty = property.startsWith("note.") ? property.substring(5) : property; + await this.batchProcessFiles(files, async (file) => { + await removeProperties(this.app, file, [cleanProperty]); + }); + new import_obsidian13.Notice(`Removed ${cleanProperty} from ${files.length} file${files.length !== 1 ? "s" : ""}`); + } + /** + * Batch process files with progress indication + */ + async batchProcessFiles(files, processor) { + let processed = 0; + const total = files.length; + for (const filePath of files) { + const file = this.app.vault.getAbstractFileByPath(filePath); + if (file instanceof import_obsidian13.TFile) { + try { + await processor(file); + processed++; + } catch (error) { + console.error(`Error processing ${filePath}:`, error); + } + } + } + if (processed < total) { + new import_obsidian13.Notice(`Processed ${processed} of ${total} files`); + } + } +}; + +// src/components/manage-tags-modal.ts +var import_obsidian14 = require("obsidian"); +init_frontmatter_helper(); +var ManageTagsModal = class extends import_obsidian14.Modal { + constructor(app, files) { + super(app); + this.tagsToAdd = ""; + this.tagsToRemove = /* @__PURE__ */ new Set(); + this.files = files; + this.bulkOps = new BulkOperations(app); + } + onOpen() { + const { contentEl } = this; + contentEl.empty(); + new import_obsidian14.Setting(contentEl).setName("Manage tags").setHeading(); + contentEl.createEl("p", { text: `Managing tags for ${this.files.length} file${this.files.length !== 1 ? "s" : ""}` }); + new import_obsidian14.Setting(contentEl).setName("Add tags").setDesc("Enter tags to add (comma-separated).").addText((text) => { + text.setPlaceholder("tag1, tag2, tag3").onChange((value) => { + this.tagsToAdd = value; + }); + }); + contentEl.createEl("h3", { text: "Remove tags" }); + const removeContainer = contentEl.createDiv(); + const allTags = /* @__PURE__ */ new Set(); + for (const filePath of this.files) { + const file = this.app.vault.getAbstractFileByPath(filePath); + if (file instanceof import_obsidian14.TFile) { + if (file.extension === "mdx") { + void (async () => { + const frontmatter = await getFileFrontmatter(this.app, file); + if (frontmatter == null ? void 0 : frontmatter.tags) { + const tags = Array.isArray(frontmatter.tags) ? frontmatter.tags : [frontmatter.tags]; + tags.forEach((tag) => { + if (!allTags.has(tag)) { + allTags.add(tag); + if (this.contentEl && this.contentEl.isConnected && removeContainer.isConnected) { + this.addTagCheckbox(removeContainer, tag); + } + } + }); + } + })(); + } else { + const metadata = this.app.metadataCache.getFileCache(file); + const frontmatter = metadata == null ? void 0 : metadata.frontmatter; + if (frontmatter == null ? void 0 : frontmatter.tags) { + const tags = Array.isArray(frontmatter.tags) ? frontmatter.tags : [frontmatter.tags]; + tags.forEach((tag) => allTags.add(tag)); + } + } + } + } + for (const tag of Array.from(allTags).sort()) { + new import_obsidian14.Setting(removeContainer).setName(tag).addToggle((toggle) => { + toggle.setValue(this.tagsToRemove.has(tag)).onChange((value) => { + if (value) { + this.tagsToRemove.add(tag); + } else { + this.tagsToRemove.delete(tag); + } + }); + }); + } + const buttonContainer = contentEl.createDiv(); + buttonContainer.addClass("bases-cms-modal-button-container"); + const cancelBtn = buttonContainer.createEl("button"); + cancelBtn.setText("Cancel"); + cancelBtn.addEventListener("click", () => this.close()); + const applyBtn = buttonContainer.createEl("button"); + applyBtn.setText("Apply"); + applyBtn.addClass("mod-cta"); + applyBtn.addEventListener("click", () => { + void (async () => { + await this.applyChanges(); + this.close(); + })(); + }); + } + addTagCheckbox(container, tag) { + new import_obsidian14.Setting(container).setName(tag).addToggle((toggle) => { + toggle.setValue(this.tagsToRemove.has(tag)).onChange((value) => { + if (value) { + this.tagsToRemove.add(tag); + } else { + this.tagsToRemove.delete(tag); + } + }); + }); + } + async applyChanges() { + if (this.tagsToAdd.trim()) { + const tagsToAdd = this.tagsToAdd.split(",").map((t) => t.trim()).filter((t) => t.length > 0); + if (tagsToAdd.length > 0) { + await this.bulkOps.addTags(this.files, tagsToAdd); + } + } + if (this.tagsToRemove.size > 0) { + await this.bulkOps.removeTags(this.files, Array.from(this.tagsToRemove)); + } + } + onClose() { + const { contentEl } = this; + contentEl.empty(); + } +}; + +// src/components/set-property-modal.ts +var import_obsidian15 = require("obsidian"); +var SetPropertyModal = class extends import_obsidian15.Modal { + constructor(app, files) { + super(app); + this.propertyName = ""; + this.propertyValue = ""; + this.propertyType = "text"; + this.files = files; + this.bulkOps = new BulkOperations(app); + } + onOpen() { + const { contentEl } = this; + contentEl.empty(); + new import_obsidian15.Setting(contentEl).setName("Set property").setHeading(); + contentEl.createEl("p", { text: `Setting property on ${this.files.length} file${this.files.length !== 1 ? "s" : ""}` }); + new import_obsidian15.Setting(contentEl).setName("Property name").setDesc("Enter the property name to set.").addText((text) => { + text.setPlaceholder("Enter name").onChange((value) => { + this.propertyName = value; + }); + }); + new import_obsidian15.Setting(contentEl).setName("Property type").setDesc("Select the property type.").addDropdown((dropdown) => { + dropdown.addOption("text", "Text").addOption("number", "Number").addOption("checkbox", "Checkbox").addOption("date", "Date").setValue(this.propertyType).onChange((value) => { + this.propertyType = value; + }); + }); + new import_obsidian15.Setting(contentEl).setName("Property value").setDesc("Enter the property value.").addText((text) => { + text.setPlaceholder("Enter value").onChange((value) => { + this.propertyValue = value; + }); + }); + const buttonContainer = contentEl.createDiv(); + buttonContainer.addClass("bases-cms-modal-button-container"); + const cancelBtn = buttonContainer.createEl("button"); + cancelBtn.setText("Cancel"); + cancelBtn.addEventListener("click", () => this.close()); + const applyBtn = buttonContainer.createEl("button"); + applyBtn.setText("Apply"); + applyBtn.addClass("mod-cta"); + applyBtn.addEventListener("click", () => { + void (async () => { + if (this.propertyName && this.propertyValue) { + await this.applyChanges(); + this.close(); + } + })(); + }); + } + async applyChanges() { + let value = this.propertyValue; + if (this.propertyType === "number") { + value = Number(this.propertyValue); + } else if (this.propertyType === "checkbox") { + value = this.propertyValue.toLowerCase() === "true" || this.propertyValue === "1"; + } else if (this.propertyType === "date") { + value = this.propertyValue; + } + await this.bulkOps.setProperty(this.files, this.propertyName, value, this.propertyType); + } + onClose() { + const { contentEl } = this; + contentEl.empty(); + } +}; + +// src/components/remove-property-modal.ts +var import_obsidian16 = require("obsidian"); +init_frontmatter_helper(); +var RemovePropertyModal = class extends import_obsidian16.Modal { + constructor(app, files) { + super(app); + this.propertiesToRemove = /* @__PURE__ */ new Set(); + this.files = files; + this.bulkOps = new BulkOperations(app); + } + onOpen() { + const { contentEl } = this; + contentEl.empty(); + new import_obsidian16.Setting(contentEl).setName("Remove property").setHeading(); + contentEl.createEl("p", { text: `Removing properties from ${this.files.length} file${this.files.length !== 1 ? "s" : ""}` }); + const propertiesContainer = contentEl.createDiv(); + const allProperties = /* @__PURE__ */ new Set(); + for (const filePath of this.files) { + const file = this.app.vault.getAbstractFileByPath(filePath); + if (file instanceof import_obsidian16.TFile && file.extension !== "mdx") { + const metadata = this.app.metadataCache.getFileCache(file); + const frontmatter = metadata == null ? void 0 : metadata.frontmatter; + if (frontmatter) { + for (const key in frontmatter) { + if (key !== "tags" && key !== "title") { + allProperties.add(key); + } + } + } + } + } + for (const prop of Array.from(allProperties).sort()) { + this.addPropertyCheckbox(propertiesContainer, prop); + } + void (async () => { + for (const filePath of this.files) { + const file = this.app.vault.getAbstractFileByPath(filePath); + if (file instanceof import_obsidian16.TFile && file.extension === "mdx") { + const frontmatter = await getFileFrontmatter(this.app, file); + if (frontmatter) { + for (const key in frontmatter) { + if (key !== "tags" && key !== "title") { + if (!allProperties.has(key)) { + allProperties.add(key); + if (this.contentEl && this.contentEl.isConnected && propertiesContainer.isConnected) { + this.addPropertyCheckbox(propertiesContainer, key); + } + } + } + } + } + } + } + })(); + if (allProperties.size === 0) { + contentEl.createEl("p", { text: "No properties found in selected files." }); + } + const buttonContainer = contentEl.createDiv(); + buttonContainer.addClass("bases-cms-modal-button-container"); + const cancelBtn = buttonContainer.createEl("button"); + cancelBtn.setText("Cancel"); + cancelBtn.addEventListener("click", () => this.close()); + const applyBtn = buttonContainer.createEl("button"); + applyBtn.setText("Apply"); + applyBtn.addClass("mod-cta"); + applyBtn.addEventListener("click", () => { + void (async () => { + if (this.propertiesToRemove.size > 0) { + await this.applyChanges(); + this.close(); + } + })(); + }); + } + addPropertyCheckbox(container, prop) { + new import_obsidian16.Setting(container).setName(prop).addToggle((toggle) => { + toggle.setValue(this.propertiesToRemove.has(prop)).onChange((value) => { + if (value) { + this.propertiesToRemove.add(prop); + } else { + this.propertiesToRemove.delete(prop); + } + }); + }); + } + async applyChanges() { + for (const prop of this.propertiesToRemove) { + await this.bulkOps.removeProperty(this.files, prop); + } + } + onClose() { + const { contentEl } = this; + contentEl.empty(); + } +}; + +// src/utils/toolbar-actions.ts +init_deletion_preview(); + +// src/components/bulk-operation-confirm.ts +var import_obsidian20 = require("obsidian"); +var BulkOperationConfirmModal = class extends import_obsidian20.Modal { + constructor(app, files, operation, onConfirm) { + super(app); + this.files = files; + this.operation = operation; + this.onConfirm = onConfirm; + } + onOpen() { + const { contentEl } = this; + contentEl.empty(); + const operationName = this.operation === "draft" ? "mark as draft" : "mark as published"; + const headingText = operationName.charAt(0).toUpperCase() + operationName.slice(1); + new import_obsidian20.Setting(contentEl).setName(`Confirm ${headingText}`).setHeading(); + contentEl.createEl("p", { + text: `Are you sure you want to ${operationName} ${this.files.length} file${this.files.length !== 1 ? "s" : ""}?` + }); + if (this.files.length > 0) { + const filesList = contentEl.createEl("ul", { cls: "bases-cms-deletion-list" }); + for (const filePath of this.files.slice(0, 20)) { + const li = filesList.createEl("li"); + li.setText(filePath); + } + if (this.files.length > 20) { + filesList.createEl("li", { + text: `... and ${this.files.length - 20} more file${this.files.length - 20 !== 1 ? "s" : ""}` + }); + } + } + const buttonContainer = contentEl.createDiv(); + buttonContainer.addClass("bases-cms-modal-button-container"); + const cancelBtn = buttonContainer.createEl("button"); + cancelBtn.setText("Cancel"); + cancelBtn.addEventListener("click", () => this.close()); + const confirmBtn = buttonContainer.createEl("button"); + confirmBtn.setText("Confirm"); + confirmBtn.addClass("mod-cta"); + confirmBtn.addEventListener("click", () => { + this.onConfirm(); + this.close(); + }); + } + onClose() { + const { contentEl } = this; + contentEl.empty(); + } +}; + +// src/utils/toolbar-actions.ts +init_smart_deletion(); +var ToolbarActions = class { + constructor(app, plugin, getSelectedFiles, clearSelection, refreshView, showToolbar) { + this.app = app; + this.plugin = plugin; + this.getSelectedFiles = getSelectedFiles; + this.clearSelection = clearSelection; + this.refreshView = refreshView; + this.showToolbar = showToolbar; + this.bulkOps = new BulkOperations(app); + } + async handleSetDraft(settings) { + const files = this.getSelectedFiles(); + if (files.length === 0) return; + if (this.plugin.settings.confirmBulkOperations) { + const modal = new BulkOperationConfirmModal( + this.app, + files, + "draft", + () => { + void (async () => { + await this.bulkOps.setDraft(files, true, settings); + this.refreshView(); + })(); + } + ); + modal.open(); + } else { + await this.bulkOps.setDraft(files, true, settings); + this.refreshView(); + } + } + async handlePublish(settings) { + const files = this.getSelectedFiles(); + if (files.length === 0) return; + if (this.plugin.settings.confirmBulkOperations) { + const modal = new BulkOperationConfirmModal( + this.app, + files, + "publish", + () => { + void (async () => { + await this.bulkOps.setDraft(files, false, settings); + this.refreshView(); + })(); + } + ); + modal.open(); + } else { + await this.bulkOps.setDraft(files, false, settings); + this.refreshView(); + } + } + handleManageTags() { + const files = this.getSelectedFiles(); + if (files.length === 0) return; + const modal = new ManageTagsModal(this.app, files); + modal.onClose = () => { + this.showToolbar(); + this.refreshView(); + }; + modal.open(); + } + handleSetProperty() { + const files = this.getSelectedFiles(); + if (files.length === 0) return; + const modal = new SetPropertyModal(this.app, files); + modal.onClose = () => { + this.showToolbar(); + this.refreshView(); + }; + modal.open(); + } + handleRemoveProperty() { + const files = this.getSelectedFiles(); + if (files.length === 0) return; + const modal = new RemovePropertyModal(this.app, files); + modal.onClose = () => { + this.showToolbar(); + this.refreshView(); + }; + modal.open(); + } + async handleDelete() { + const files = this.getSelectedFiles(); + if (files.length === 0) return; + if (this.plugin.settings.confirmDeletions) { + const preview = await prepareDeletionPreview( + this.app, + files, + this.plugin.settings + ); + const modal = new DeletionPreviewModal( + this.app, + preview, + () => { + this.clearSelection(); + this.refreshView(); + } + ); + modal.open(); + } else { + const preview = await prepareDeletionPreview( + this.app, + files, + this.plugin.settings + ); + await executeSmartDeletion(this.app, preview); + this.clearSelection(); + this.refreshView(); + } + } +}; + +// src/components/bulk-toolbar.ts +var BulkToolbar = class { + constructor(app, plugin, container, getSelectedFiles, clearSelection, refreshView, selectAllCallback, settings) { + this.app = app; + this.plugin = plugin; + this.container = container; + this.getSelectedFiles = getSelectedFiles; + this.clearSelection = clearSelection; + this.refreshView = refreshView; + this.toolbarEl = null; + this.countEl = null; + this.resizeObserver = null; + this.timeoutIds = []; + this.selectAllCallback = selectAllCallback; + this.settings = settings; + this.actions = new ToolbarActions( + this.app, + this.plugin, + this.getSelectedFiles, + this.clearSelection, + this.refreshView, + () => this.show() + ); + this.createToolbar(); + } + /** + * Update settings (called when view settings change) + */ + updateSettings(settings) { + this.settings = settings; + } + /** + * Get toolbar actions (for use in context menus) + */ + getActions() { + return this.actions; + } + createToolbar() { + this.toolbarEl = document.createElement("div"); + this.toolbarEl.className = "bases-toolbar bases-cms-bulk-toolbar bases-cms-bulk-toolbar-hidden"; + this.toolbarEl.__bulkToolbarInstance = this; + this.createToolbarContent(); + this.positionToolbar(); + const timeoutId = window.setTimeout(() => this.positionToolbar(), 100); + this.timeoutIds.push(timeoutId); + } + positionToolbar() { + var _a, _b; + if (!this.toolbarEl) return; + const safeInsertBefore = (parent2, newNode, refNode) => { + if (!parent2 || !newNode) return false; + if (newNode.parentElement === parent2 && (refNode === null ? !newNode.nextSibling : newNode.nextSibling === refNode)) { + return true; + } + try { + if (refNode && !parent2.contains(refNode)) { + parent2.appendChild(newNode); + } else { + parent2.insertBefore(newNode, refNode); + } + return true; + } catch (e) { + console.warn("[Bases CMS] Failed to insert toolbar:", e); + return false; + } + }; + const basesHeader = ((_a = this.container.closest(".view-content")) == null ? void 0 : _a.querySelector(".bases-header")) || ((_b = this.container.parentElement) == null ? void 0 : _b.querySelector(".bases-header")); + if (basesHeader instanceof HTMLElement && basesHeader.parentElement) { + if (safeInsertBefore(basesHeader.parentElement, this.toolbarEl, basesHeader.nextSibling)) return; + } + const parent = this.container.parentElement; + if (parent) { + safeInsertBefore(parent, this.toolbarEl, this.container); + } + } + createToolbarContent() { + if (!this.toolbarEl) return; + const leftContainer = this.toolbarEl.createDiv("bases-cms-bulk-toolbar-left"); + const createBasesButton = (iconName, text, onClick, container, isDestructive = false) => { + const toolbarItem = container.createDiv("bases-toolbar-item"); + const button = toolbarItem.createDiv("text-icon-button"); + if (isDestructive) { + button.addClass("destructive"); + } + button.setAttribute("tabindex", "0"); + const iconEl = button.createSpan("text-button-icon"); + (0, import_obsidian21.setIcon)(iconEl, iconName); + const textEl = button.createSpan("text-button-label"); + textEl.setText(text); + button.addEventListener("click", onClick); + return button; + }; + if (this.plugin.settings.showToolbarSelectAll) { + createBasesButton("copy-check", "Select all", () => this.handleSelectAll(), leftContainer); + } + if (this.plugin.settings.showToolbarClear) { + createBasesButton("square-x", "Clear", () => this.clearSelection(), leftContainer); + } + const countItem = leftContainer.createDiv("bases-toolbar-item bases-cms-selected-count"); + this.countEl = countItem.createSpan("text-button-label"); + this.countEl.setText("0 selected"); + const rightContainer = this.toolbarEl.createDiv("bases-cms-bulk-toolbar-right"); + if (this.plugin.settings.showToolbarPublish) { + createBasesButton("book-check", "Publish", () => { + void this.actions.handlePublish(this.settings); + }, rightContainer); + } + if (this.plugin.settings.showToolbarDraft) { + createBasesButton("book-dashed", "Draft", () => { + void this.actions.handleSetDraft(this.settings); + }, rightContainer); + } + if (this.plugin.settings.showToolbarTags) { + createBasesButton("tags", "Tags", () => this.actions.handleManageTags(), rightContainer); + } + if (this.plugin.settings.showToolbarSet) { + createBasesButton("list-check", "Set", () => this.actions.handleSetProperty(), rightContainer); + } + if (this.plugin.settings.showToolbarRemove) { + createBasesButton("list-x", "Remove", () => this.actions.handleRemoveProperty(), rightContainer); + } + if (this.plugin.settings.showToolbarDelete) { + createBasesButton("trash-2", "Delete", () => { + void this.actions.handleDelete(); + }, rightContainer, true); + } + this.setupResponsiveBehavior(); + } + setupResponsiveBehavior() { + if (!this.toolbarEl) return; + const timeoutId1 = window.setTimeout(() => { + this.updateCollapsedState(); + }, 100); + this.timeoutIds.push(timeoutId1); + if (this.toolbarEl) { + this.resizeObserver = new ResizeObserver(() => { + this.updateCollapsedState(); + }); + this.resizeObserver.observe(this.toolbarEl); + } + const container = this.container; + if (container) { + const containerObserver = new ResizeObserver(() => { + const timeoutId = window.setTimeout(() => { + this.updateCollapsedState(); + }, 10); + this.timeoutIds.push(timeoutId); + }); + containerObserver.observe(container); + this.containerObserver = containerObserver; + } + } + updateCollapsedState() { + if (!this.toolbarEl) return; + const visibleButtons = this.toolbarEl.querySelectorAll(".text-icon-button"); + const buttonCount = visibleButtons.length; + const baseWidth = 140; + const perButtonWidth = 75; + const dynamicThreshold = baseWidth + buttonCount * perButtonWidth; + const toolbarWidth = this.toolbarEl.offsetWidth; + if (toolbarWidth === 0) { + const containerWidth = this.container.offsetWidth; + if (containerWidth > 0 && containerWidth < dynamicThreshold) { + this.toolbarEl.addClass("collapsed"); + } + return; + } + const isCollapsed = toolbarWidth < dynamicThreshold; + if (isCollapsed) { + this.toolbarEl.addClass("collapsed"); + } else { + this.toolbarEl.removeClass("collapsed"); + } + } + updateCount(count) { + if (this.countEl) { + this.countEl.setText(`${count} selected`); + } + this.updateCollapsedState(); + } + handleSelectAll() { + if (this.selectAllCallback) { + this.selectAllCallback(); + } + } + show() { + if (!this.toolbarEl) { + console.warn("[Bases CMS] Toolbar element not found, recreating..."); + this.createToolbar(); + } + if (this.toolbarEl) { + this.positionToolbar(); + if (!this.toolbarEl.parentElement) { + console.warn("[Bases CMS] Toolbar not in DOM, repositioning..."); + this.positionToolbar(); + } + this.toolbarEl.removeClass("bases-cms-bulk-toolbar-hidden"); + this.toolbarEl.addClass("bases-cms-bulk-toolbar-visible"); + void this.toolbarEl.offsetHeight; + const timeoutId = window.setTimeout(() => { + if (this.toolbarEl) { + this.toolbarEl.removeClass("bases-cms-bulk-toolbar-animating-out"); + this.toolbarEl.addClass("bases-cms-bulk-toolbar-animating-in"); + } + }, 10); + this.timeoutIds.push(timeoutId); + } else { + console.error("[Bases CMS] Failed to show toolbar - element is null"); + } + } + hide() { + if (this.toolbarEl) { + this.toolbarEl.removeClass("bases-cms-bulk-toolbar-animating-in"); + this.toolbarEl.addClass("bases-cms-bulk-toolbar-animating-out"); + const timeoutId = window.setTimeout(() => { + if (this.toolbarEl) { + this.toolbarEl.removeClass("bases-cms-bulk-toolbar-visible"); + this.toolbarEl.addClass("bases-cms-bulk-toolbar-hidden"); + } + }, 200); + this.timeoutIds.push(timeoutId); + } + } + /** + * Recreate the toolbar with updated settings + * Preserves visibility state and count + */ + recreate() { + const wasVisible = this.toolbarEl && !this.toolbarEl.hasClass("bases-cms-bulk-toolbar-hidden"); + let currentCount = 0; + if (this.countEl && this.countEl.textContent) { + const match = this.countEl.textContent.match(/\d+/); + if (match) { + currentCount = parseInt(match[0], 10); + } + } + this.destroy(); + this.createToolbar(); + if (wasVisible && this.toolbarEl && currentCount > 0) { + this.updateCount(currentCount); + this.show(); + } + } + destroy() { + this.timeoutIds.forEach((id) => window.clearTimeout(id)); + this.timeoutIds = []; + if (this.resizeObserver) { + this.resizeObserver.disconnect(); + this.resizeObserver = null; + } + const containerObserver = this.containerObserver; + if (containerObserver) { + containerObserver.disconnect(); + this.containerObserver = void 0; + } + if (this.toolbarEl) { + this.toolbarEl.remove(); + this.toolbarEl = null; + } + } +}; + +// src/utils/new-note-interceptor.ts +init_settings_schema(); +function setupNewNoteInterceptor(app, containerEl, config, pluginSettings, registerCleanup) { + const interceptNewButton = (e) => { + const target = e.target; + const buttonEl = target.closest('.bases-toolbar-new-item-menu, .bases-toolbar-new-item-menu .text-icon-button, [data-action="new-item"], button[aria-label*="new"], button[aria-label*="New"], .bases-toolbar button'); + if (!buttonEl) { + return; + } + if (target.closest(".bases-cms-bulk-toolbar, .bases-cms-container .card")) { + return; + } + const activeLeaf = app.workspace.activeLeaf; + const activeView = activeLeaf == null ? void 0 : activeLeaf.view; + const activeViewContainer = activeView == null ? void 0 : activeView.containerEl; + const isCMSView = (activeView == null ? void 0 : activeView.type) === "bases-cms" || (activeViewContainer == null ? void 0 : activeViewContainer.querySelector(".bases-cms-container")) !== null; + if (!isCMSView) { + return; + } + const isOurView = activeViewContainer && (activeViewContainer === containerEl || activeViewContainer.contains(containerEl) || containerEl.contains(activeViewContainer)); + if (!isOurView) { + return; + } + const containerWithView = containerEl; + const viewInstance = containerWithView.__cmsView; + const viewConfig = (viewInstance == null ? void 0 : viewInstance.config) || containerWithView.__cmsConfig || config; + const settings = readCMSSettings(viewConfig, pluginSettings); + const hasCustomLocation = settings.newNoteLocation && settings.newNoteLocation.trim() !== ""; + if (settings.customizeNewButton || hasCustomLocation) { + e.preventDefault(); + e.stopPropagation(); + e.stopImmediatePropagation(); + void (async () => { + var _a; + const locationInput = ((_a = settings.newNoteLocation) == null ? void 0 : _a.trim()) || ""; + if (locationInput === "" && !settings.customizeNewButton) { + const vaultConfig = app.vault.config; + const newFileLocation = (vaultConfig == null ? void 0 : vaultConfig.newFileLocation) || "folder"; + const newFileFolderPath = (vaultConfig == null ? void 0 : vaultConfig.newFileFolderPath) || ""; + let filePath = "Untitled.md"; + if (newFileLocation === "folder" && newFileFolderPath) { + filePath = `${newFileFolderPath}/Untitled.md`; + } else if (newFileLocation === "current") { + const activeFile = app.workspace.getActiveFile(); + if (activeFile && activeFile.parent) { + filePath = `${activeFile.parent.path}/Untitled.md`; + } + } else if (newFileLocation === "root") { + filePath = "Untitled.md"; + } + const file = await app.vault.create(filePath, ""); + if (settings.customizeNewButton) { + await app.workspace.openLinkText(file.path, "", false); + } + return; + } + if (locationInput === "/" || locationInput.replace(/\//g, "") === "") { + const newFile = await app.vault.create("Untitled.md", ""); + if (settings.customizeNewButton) { + await app.workspace.openLinkText(newFile.path, "", false); + } + return; + } + const folderPath = locationInput.replace(/^\/+|\/+$/g, ""); + let folder = app.vault.getAbstractFileByPath(folderPath); + if (!folder || !("children" in folder)) { + await app.vault.createFolder(folderPath); + folder = app.vault.getAbstractFileByPath(folderPath); + } + if (folder && "children" in folder) { + const newFile = await app.vault.create(`${folderPath}/Untitled.md`, ""); + if (settings.customizeNewButton) { + await app.workspace.openLinkText(newFile.path, "", false); + } + } + })().catch((error) => { + console.error("[CMS] Error creating new note:", error); + }); + } + }; + document.addEventListener("click", interceptNewButton, true); + const observer = new MutationObserver(() => { + const buttons2 = document.querySelectorAll('.bases-toolbar-new-item-menu, .bases-toolbar-new-item-menu .text-icon-button, [data-action="new-item"]'); + buttons2.forEach((buttonEl) => { + const buttonWithFlag = buttonEl; + if (!buttonWithFlag.__cmsIntercepted) { + buttonWithFlag.__cmsIntercepted = true; + buttonEl.addEventListener("click", interceptNewButton, true); + } + }); + }); + observer.observe(document.body, { childList: true, subtree: true }); + const buttons = document.querySelectorAll('.bases-toolbar-new-item-menu, .bases-toolbar-new-item-menu .text-icon-button, [data-action="new-item"]'); + buttons.forEach((buttonEl) => { + const buttonWithFlag = buttonEl; + if (!buttonWithFlag.__cmsIntercepted) { + buttonWithFlag.__cmsIntercepted = true; + buttonEl.addEventListener("click", interceptNewButton, true); + } + }); + registerCleanup(() => { + document.removeEventListener("click", interceptNewButton, true); + observer.disconnect(); + }); +} + +// src/utils/property-toggle-handler.ts +var import_obsidian22 = require("obsidian"); +init_settings_schema(); +init_frontmatter_helper(); +var PropertyToggleHandler = class { + constructor(app, config, pluginSettings, onRefresh) { + this.app = app; + this.config = config; + this.pluginSettings = pluginSettings; + this.onRefresh = onRefresh; + } + async handlePropertyToggle(path, property, value) { + try { + const file = this.app.vault.getAbstractFileByPath(path); + if (!(file instanceof import_obsidian22.TFile)) return; + const cleanProperty = property.startsWith("note.") ? property.substring(5) : property; + const settings = readCMSSettings( + this.config, + this.pluginSettings + ); + const isDraftProperty = settings.showDraftStatus && cleanProperty === "draft"; + let shouldRefresh = false; + if (isDraftProperty) { + if (settings.draftStatusUseFilenamePrefix) { + const fileName = file.basename; + const startsWithUnderscore = fileName.startsWith("_"); + const currentPath = file.path; + const pathParts = currentPath.split("/"); + if (value === true) { + if (!startsWithUnderscore) { + const newName = `_${fileName}${file.extension ? `.${file.extension}` : ""}`; + pathParts[pathParts.length - 1] = newName; + const newPath = pathParts.join("/"); + await this.app.fileManager.renameFile(file, newPath); + shouldRefresh = true; + } + } else { + if (startsWithUnderscore) { + const newName = fileName.substring(1) + (file.extension ? `.${file.extension}` : ""); + pathParts[pathParts.length - 1] = newName; + const newPath = pathParts.join("/"); + await this.app.fileManager.renameFile(file, newPath); + shouldRefresh = true; + } + } + } else { + const cleanConfigProperty = settings.draftStatusProperty && settings.draftStatusProperty.trim() ? settings.draftStatusProperty.startsWith("note.") ? settings.draftStatusProperty.substring(5) : settings.draftStatusProperty : "draft"; + await processFileFrontMatter(this.app, file, (frontmatter) => { + frontmatter[cleanConfigProperty] = value; + }); + shouldRefresh = true; + } + } else { + await processFileFrontMatter(this.app, file, (frontmatter) => { + frontmatter[cleanProperty] = value; + }); + shouldRefresh = true; + } + if (shouldRefresh) { + requestAnimationFrame(() => { + window.setTimeout(() => { + try { + this.onRefresh(); + } catch (error) { + console.error("Error refreshing view after property toggle:", error); + } + }, 100); + }); + } + } catch (error) { + console.error("Error toggling property:", error); + } + } +}; + +// src/utils/scroll-layout-manager.ts +init_settings_schema(); +var ScrollLayoutManager = class { + constructor(containerEl, app, config, pluginSettings, onLoadMore, registerCleanup) { + this.containerEl = containerEl; + this.app = app; + this.pluginSettings = pluginSettings; + this.onLoadMore = onLoadMore; + this.registerCleanup = registerCleanup; + this.scrollListener = null; + this.scrollThrottleTimeout = null; + this.resizeObserver = null; + this.windowResizeHandler = null; + this.isLoading = false; + this.displayedCount = 50; + this.totalEntries = 0; + this.configPollInterval = null; + this.lastCardSize = null; + this.lastImageAspectRatio = null; + // Virtual scrolling state + this.virtualScrollEnabled = false; + this.estimatedCardHeight = 300; + // Default estimate, updated on render + this.cardsPerRow = 3; + // Default, updated based on container width + this.lastScrollTop = 0; + this.virtualScrollCallback = null; + var _a; + this.config = config; + const isMobile = (_a = this.app.isMobile) != null ? _a : false; + this.displayedCount = isMobile ? 25 : 50; + } + /** + * Update the config reference (useful when config becomes available after construction) + */ + updateConfig(config) { + this.config = config; + } + setDisplayedCount(count) { + this.displayedCount = count; + } + /** + * Reset displayed count and scroll position + */ + resetScroll() { + var _a; + const isMobile = (_a = this.app.isMobile) != null ? _a : false; + this.displayedCount = isMobile ? 25 : 50; + this.containerEl.scrollTop = 0; + } + getDisplayedCount() { + return this.displayedCount; + } + setIsLoading(loading) { + this.isLoading = loading; + } + setupInfiniteScroll(totalEntries) { + this.totalEntries = totalEntries; + if (this.scrollListener) { + this.containerEl.removeEventListener("scroll", this.scrollListener); + this.scrollListener = null; + } + if (this.displayedCount >= totalEntries) { + return; + } + this.scrollListener = () => { + var _a; + if (this.scrollThrottleTimeout !== null) { + return; + } + if (this.isLoading) { + return; + } + const scrollTop = this.containerEl.scrollTop; + const scrollHeight = this.containerEl.scrollHeight; + const clientHeight = this.containerEl.clientHeight; + const distanceFromBottom = scrollHeight - (scrollTop + clientHeight); + const isMobile = (_a = this.app.isMobile) != null ? _a : false; + const viewportMultiplier = isMobile ? 1 : 2; + const threshold = clientHeight * viewportMultiplier; + if (distanceFromBottom < threshold && this.displayedCount < totalEntries) { + this.isLoading = true; + const batchSize = 50; + this.displayedCount = Math.min(this.displayedCount + batchSize, totalEntries); + this.onLoadMore(); + } + this.scrollThrottleTimeout = window.setTimeout(() => { + this.scrollThrottleTimeout = null; + }, 100); + }; + this.containerEl.addEventListener("scroll", this.scrollListener); + this.registerCleanup(() => { + if (this.scrollListener) { + this.containerEl.removeEventListener("scroll", this.scrollListener); + } + if (this.scrollThrottleTimeout !== null) { + window.clearTimeout(this.scrollThrottleTimeout); + } + }); + } + setupResizeObserver() { + if (this.resizeObserver) { + return; + } + const updateGrid = () => { + if (!this.config || typeof this.config.get !== "function") { + return; + } + const currentSettings = readCMSSettings( + this.config, + this.pluginSettings + ); + const cardMinWidth = currentSettings.cardSize; + const imageAspectRatio = currentSettings.imageAspectRatio; + this.containerEl.style.setProperty("--card-min-width", `${cardMinWidth}px`); + this.containerEl.style.setProperty("--bases-cms-image-aspect-ratio", String(imageAspectRatio)); + this.lastCardSize = cardMinWidth; + this.lastImageAspectRatio = imageAspectRatio; + }; + this.resizeObserver = new ResizeObserver(updateGrid); + this.resizeObserver.observe(this.containerEl); + updateGrid(); + this.configPollInterval = window.setInterval(() => { + if (!this.config || typeof this.config.get !== "function") { + return; + } + const currentSettings = readCMSSettings( + this.config, + this.pluginSettings + ); + const currentCardSize = currentSettings.cardSize; + const currentImageAspectRatio = currentSettings.imageAspectRatio; + if (this.lastCardSize !== currentCardSize || this.lastImageAspectRatio !== currentImageAspectRatio) { + this.containerEl.style.setProperty("--card-min-width", `${currentCardSize}px`); + this.containerEl.style.setProperty("--bases-cms-image-aspect-ratio", String(currentImageAspectRatio)); + this.lastCardSize = currentCardSize; + this.lastImageAspectRatio = currentImageAspectRatio; + } + }, 100); + this.registerCleanup(() => { + if (this.configPollInterval !== null) { + window.clearInterval(this.configPollInterval); + this.configPollInterval = null; + } + }); + } + updateGridLayout(settings) { + this.containerEl.style.setProperty("--card-min-width", `${settings.cardSize}px`); + this.containerEl.style.setProperty("--bases-cms-image-aspect-ratio", String(settings.imageAspectRatio)); + this.lastCardSize = settings.cardSize; + this.lastImageAspectRatio = settings.imageAspectRatio; + } + cleanup() { + if (this.resizeObserver) { + this.resizeObserver.disconnect(); + this.resizeObserver = null; + } + if (this.windowResizeHandler) { + window.removeEventListener("resize", this.windowResizeHandler); + this.windowResizeHandler = null; + } + if (this.scrollListener) { + this.containerEl.removeEventListener("scroll", this.scrollListener); + this.scrollListener = null; + } + if (this.scrollThrottleTimeout !== null) { + window.clearTimeout(this.scrollThrottleTimeout); + this.scrollThrottleTimeout = null; + } + if (this.configPollInterval !== null) { + window.clearInterval(this.configPollInterval); + this.configPollInterval = null; + } + this.virtualScrollCallback = null; + } + /** + * Check if virtual scrolling should be enabled based on total entries and settings + */ + shouldEnableVirtualScroll(totalEntries) { + const threshold = this.pluginSettings.virtualScrollThreshold; + return totalEntries > threshold; + } + /** + * Get whether virtual scrolling is currently enabled + */ + isVirtualScrollEnabled() { + return this.virtualScrollEnabled; + } + /** + * Update estimated card height based on actual rendered cards + */ + updateCardMetrics(cardHeight, cardsPerRow) { + if (cardHeight > 0) { + this.estimatedCardHeight = cardHeight; + } + if (cardsPerRow > 0) { + this.cardsPerRow = cardsPerRow; + } + } + /** + * Calculate cards per row based on container width and card min width + */ + calculateCardsPerRow() { + const containerWidth = this.containerEl.clientWidth; + const cardMinWidth = this.lastCardSize || 280; + const gap = 16; + return Math.max(1, Math.floor((containerWidth + gap) / (cardMinWidth + gap))); + } + /** + * Calculate which cards should be visible in the viewport + */ + calculateVisibleRange(totalEntries) { + const scrollTop = this.containerEl.scrollTop; + const viewportHeight = this.containerEl.clientHeight; + const buffer = this.pluginSettings.virtualScrollBuffer; + this.cardsPerRow = this.calculateCardsPerRow(); + const rowHeight = this.estimatedCardHeight + 16; + const totalRows = Math.ceil(totalEntries / this.cardsPerRow); + const firstVisibleRow = Math.max(0, Math.floor(scrollTop / rowHeight) - buffer); + const lastVisibleRow = Math.min( + totalRows - 1, + Math.ceil((scrollTop + viewportHeight) / rowHeight) + buffer + ); + const startIndex = firstVisibleRow * this.cardsPerRow; + const endIndex = Math.min(totalEntries - 1, (lastVisibleRow + 1) * this.cardsPerRow - 1); + const topPadding = firstVisibleRow * rowHeight; + const bottomPadding = Math.max(0, (totalRows - lastVisibleRow - 1) * rowHeight); + return { + startIndex, + endIndex, + topPadding, + bottomPadding + }; + } + /** + * Setup virtual scrolling for large card sets + */ + setupVirtualScroll(totalEntries, onRangeChange) { + this.totalEntries = totalEntries; + this.virtualScrollCallback = onRangeChange; + if (!this.shouldEnableVirtualScroll(totalEntries)) { + this.virtualScrollEnabled = false; + return null; + } + this.virtualScrollEnabled = true; + if (this.scrollListener) { + this.containerEl.removeEventListener("scroll", this.scrollListener); + this.scrollListener = null; + } + this.scrollListener = () => { + if (this.scrollThrottleTimeout !== null) { + return; + } + const currentScrollTop = this.containerEl.scrollTop; + if (Math.abs(currentScrollTop - this.lastScrollTop) < 50) { + return; + } + this.lastScrollTop = currentScrollTop; + const range = this.calculateVisibleRange(this.totalEntries); + if (this.virtualScrollCallback) { + this.virtualScrollCallback(range); + } + this.scrollThrottleTimeout = window.setTimeout(() => { + this.scrollThrottleTimeout = null; + }, 16); + }; + this.containerEl.addEventListener("scroll", this.scrollListener, { passive: true }); + this.registerCleanup(() => { + if (this.scrollListener) { + this.containerEl.removeEventListener("scroll", this.scrollListener); + this.scrollListener = null; + } + }); + return this.calculateVisibleRange(totalEntries); + } + /** + * Get total scroll height for virtual scrolling + */ + getVirtualScrollHeight(totalEntries) { + const totalRows = Math.ceil(totalEntries / this.cardsPerRow); + const rowHeight = this.estimatedCardHeight + 16; + return totalRows * rowHeight; + } +}; + +// src/utils/view-switch-listener.ts +var ViewSwitchListener = class { + constructor(containerEl, plugin, config, controller, data, selectedFiles, onSelectionCleared, registerCleanup) { + this.containerEl = containerEl; + this.plugin = plugin; + this.config = config; + this.controller = controller; + this.data = data; + this.selectedFiles = selectedFiles; + this.onSelectionCleared = onSelectionCleared; + this.registerCleanup = registerCleanup; + this.mutationObserver = null; + this.backupInterval = null; + this.currentBaseIdentifier = null; + } + setup(handleSelectionChange) { + const startObserving = () => { + }; + const stopObserving = () => { + if (this.mutationObserver) { + this.mutationObserver.disconnect(); + this.mutationObserver = null; + } + }; + const getBaseIdentifier = () => { + var _a, _b, _c, _d; + try { + if ((_a = this.config) == null ? void 0 : _a.getName) { + return this.config.getName(); + } + if ((_b = this.config) == null ? void 0 : _b.name) { + return String(this.config.name); + } + if (this.controller) { + if ((_c = this.controller) == null ? void 0 : _c.getBaseName) { + return this.controller.getBaseName(); + } + if ((_d = this.controller) == null ? void 0 : _d.baseName) { + return String(this.controller.baseName); + } + } + if (this.data) { + if (this.data.baseName) { + return String(this.data.baseName); + } + } + } catch (e) { + } + return null; + }; + const backupCheck = () => { + if (this.selectedFiles.size === 0) { + if (this.backupInterval !== null) { + window.clearInterval(this.backupInterval); + this.backupInterval = null; + } + return; + } + const currentBaseId = getBaseIdentifier(); + if (this.currentBaseIdentifier !== null && currentBaseId !== null && this.currentBaseIdentifier !== currentBaseId) { + this.selectedFiles.clear(); + this.onSelectionCleared(); + stopObserving(); + if (this.backupInterval !== null) { + window.clearInterval(this.backupInterval); + this.backupInterval = null; + } + return; + } + const allCards = this.containerEl.querySelectorAll(".card[data-path]"); + if (allCards.length === 0) { + this.selectedFiles.clear(); + this.onSelectionCleared(); + } + }; + const originalHandleSelectionChange = handleSelectionChange.bind(this); + const wrappedHandleSelectionChange = (path, selected) => { + originalHandleSelectionChange(path, selected); + if (this.selectedFiles.size > 0) { + if (this.currentBaseIdentifier === null) { + this.currentBaseIdentifier = getBaseIdentifier(); + } + startObserving(); + if (this.backupInterval === null) { + this.backupInterval = this.plugin.registerInterval(window.setInterval(backupCheck, 500)); + } + } else { + this.currentBaseIdentifier = null; + stopObserving(); + if (this.backupInterval !== null) { + window.clearInterval(this.backupInterval); + this.backupInterval = null; + } + } + }; + this.registerCleanup(() => { + stopObserving(); + if (this.backupInterval !== null) { + window.clearInterval(this.backupInterval); + this.backupInterval = null; + } + }); + return wrappedHandleSelectionChange; + } + cleanup() { + if (this.mutationObserver) { + this.mutationObserver.disconnect(); + this.mutationObserver = null; + } + if (this.backupInterval !== null) { + window.clearInterval(this.backupInterval); + this.backupInterval = null; + } + } +}; + +// src/views/cms-view.ts +init_frontmatter_helper(); + +// src/utils/embedded-view-detector.ts +function isEmbeddedView(containerEl) { + if (!containerEl) { + return false; + } + const embedParent = containerEl.closest(".markdown-embed, .internal-embed, .markdown-embed-content, .markdown-source-view, .markdown-reading-view"); + return embedParent !== null; +} + +// src/views/cms-view.ts +var CMS_VIEW_TYPE = "cms"; +var BasesCMSView = class extends import_obsidian23.BasesView { + constructor(controller, parentContainerEl, plugin) { + super(controller); + this.type = CMS_VIEW_TYPE; + this.selectedFiles = /* @__PURE__ */ new Set(); + this.snippets = {}; + this.images = {}; + this.hasImageAvailable = {}; + this.mdxFrontmatterCache = {}; + this.updateLayoutRef = { current: null }; + this.propertyObservers = []; + this.bulkToolbar = null; + this.isRefreshingWithSelection = false; + this.propertyToggleHandler = null; + this.viewSwitchListener = null; + this.settingsPollInterval = null; + this.lastSettings = null; + this.lastUpdateId = 0; + this.lastBaseId = null; + this.hasAutoSwitched = false; + this.lastClickedPath = null; + this.lastVisiblePaths = []; + this.basesController = controller; + this.containerEl = parentContainerEl.createDiv("bases-cms-wrapper"); + this.containerEl.style.height = "100%"; + this.containerEl.style.width = "100%"; + this.plugin = plugin; + const baseId = this.getBaseIdentifier(); + if (baseId) { + const savedSelection = this.plugin.selections.get(baseId); + if (savedSelection && savedSelection !== this.selectedFiles) { + savedSelection.forEach((item) => this.selectedFiles.add(item)); + this.plugin.selections.set(baseId, this.selectedFiles); + } else if (!savedSelection) { + this.plugin.selections.set(baseId, this.selectedFiles); + } + } + this.isEmbedded = isEmbeddedView(parentContainerEl); + this.cardRenderer = new SharedCardRenderer( + this.app, + this.plugin, + this.propertyObservers, + this.updateLayoutRef, + void 0, + // Config not available in constructor + controller + ); + this.containerEl.addClass("bases-cms"); + this.containerEl.addClass("bases-cms-container"); + try { + this.propertyToggleHandler = new PropertyToggleHandler( + this.app, + this.config, + this.plugin.settings, + () => this.onDataUpdated() + ); + } catch (e) { + this.propertyToggleHandler = null; + } + try { + const configToUse = this.config && typeof this.config.get === "function" ? this.config : { get: () => void 0 }; + this.scrollLayoutManager = new ScrollLayoutManager( + this.containerEl, + this.app, + configToUse, + this.plugin.settings, + () => this.onDataUpdated(), + (cleanup) => this.register(cleanup) + ); + } catch (e) { + const dummyConfig = { get: () => void 0 }; + this.scrollLayoutManager = new ScrollLayoutManager( + this.containerEl, + this.app, + dummyConfig, + this.plugin.settings, + () => this.onDataUpdated(), + (cleanup) => this.register(cleanup) + ); + } + try { + this.viewSwitchListener = new ViewSwitchListener( + this.containerEl, + this.plugin, + this.config, + this.controller, + this.data, + this.selectedFiles, + () => this.updateSelectionUI(), + (cleanup) => this.register(cleanup) + ); + } catch (e) { + this.viewSwitchListener = null; + } + if (this.viewSwitchListener) { + const originalHandleSelectionChange = this.handleSelectionChange.bind(this); + this.handleSelectionChange = this.viewSwitchListener.setup(originalHandleSelectionChange); + } + } + /** + * Sort entries by property using consistent logic for both MD and MDX files + */ + async sortEntriesByProperty(entries, propertyName, direction) { + if (!propertyName || propertyName === "") { + return entries; + } + if (propertyName === "file.ctime" || propertyName === "file.mtime") { + const isCtime = propertyName === "file.ctime"; + return [...entries].sort((a, b) => { + const aTime = isCtime ? a.file.stat.ctime : a.file.stat.mtime; + const bTime = isCtime ? b.file.stat.ctime : b.file.stat.mtime; + const comparison = aTime - bTime; + return direction === "desc" ? -comparison : comparison; + }); + } + const entriesWithValues = await Promise.all( + entries.map(async (entry) => { + const value = await getFirstBasesPropertyValue(entry, propertyName, this.app); + return { entry, value }; + }) + ); + return entriesWithValues.sort((a, b) => { + const aVal = a.value; + const bVal = b.value; + if (aVal == null && bVal == null) return 0; + if (aVal == null) return 1; + if (bVal == null) return -1; + const aDate = this.parseDateValue(aVal); + const bDate = this.parseDateValue(bVal); + if (aDate && bDate) { + const comparison2 = aDate.getTime() - bDate.getTime(); + return direction === "desc" ? -comparison2 : comparison2; + } + if (aDate && !bDate) { + return direction === "desc" ? -1 : 1; + } + if (!aDate && bDate) { + return direction === "desc" ? 1 : -1; + } + const aStr = this.valueToString(aVal); + const bStr = this.valueToString(bVal); + const comparison = aStr.localeCompare(bStr); + return direction === "desc" ? -comparison : comparison; + }).map((item) => item.entry); + } + /** + * Parse a date value using the same logic as the shared renderer + */ + parseDateValue(value) { + if (!value) return null; + if (typeof value === "object" && "date" in value && value.date instanceof Date) { + return value.date; + } + let data = value; + if (typeof value === "object" && "data" in value) { + data = value.data; + } + if (!data) return null; + if (data instanceof Date) { + return data; + } + if (data && typeof data === "object" && "getTime" in data) { + const dateLike = data; + try { + const timestamp = dateLike.getTime(); + if (typeof timestamp === "number" && !isNaN(timestamp)) { + return new Date(timestamp); + } + } catch (e) { + } + } + if (typeof data === "string") { + const dateStr = data.trim(); + const isoDateStr = dateStr.includes("T") ? dateStr : `${dateStr}T00:00:00`; + const parsedDate = new Date(isoDateStr); + if (!isNaN(parsedDate.getTime())) { + return parsedDate; + } else { + const fallbackDate = new Date(dateStr); + if (!isNaN(fallbackDate.getTime())) { + return fallbackDate; + } + } + } + if (typeof data === "number") { + const parsedDate = new Date(data); + if (!isNaN(parsedDate.getTime())) { + return parsedDate; + } + } + return null; + } + /** + * Convert a value to string for comparison + */ + valueToString(value) { + if (!value) return ""; + let data = value; + if (typeof value === "object" && "data" in value) { + data = value.data; + } + if (typeof data === "string") { + return data; + } else if (typeof data === "number" || typeof data === "boolean") { + return String(data); + } else { + return ""; + } + } + /** + * Continue processing data after sorting is complete + */ + async continueDataProcessing(processedGroups, settings, totalEntriesCount, savedScrollTop, updateId) { + var _a; + const isStillValid = () => updateId === this.lastUpdateId; + const allFlatEntries = []; + for (const processedGroup of processedGroups) { + allFlatEntries.push(...processedGroup.entries); + } + const useVirtualScroll = this.scrollLayoutManager.shouldEnableVirtualScroll(totalEntriesCount); + let visibleEntries; + let startIndex = 0; + let virtualRange = null; + if (useVirtualScroll) { + virtualRange = this.scrollLayoutManager.calculateVisibleRange(totalEntriesCount); + startIndex = virtualRange.startIndex; + visibleEntries = allFlatEntries.slice(virtualRange.startIndex, virtualRange.endIndex + 1); + } else { + const remainingCount = this.scrollLayoutManager.getDisplayedCount(); + visibleEntries = allFlatEntries.slice(0, remainingCount); + } + await this.loadContentForEntries(visibleEntries, settings); + if (!isStillValid()) return; + if (this.config && !this.containerEl.__cmsInterceptorSetup) { + try { + this.containerEl.__cmsInterceptorSetup = true; + const containerWithConfig = this.containerEl; + containerWithConfig.__cmsConfig = this.config; + containerWithConfig.__cmsView = this; + setupNewNoteInterceptor( + this.app, + this.containerEl, + this.config, + this.plugin.settings, + (cleanup) => this.register(cleanup) + ); + } catch (e) { + this.containerEl.__cmsInterceptorSetup = true; + } + } + if (!isStillValid()) return; + this.cardRenderer.basesConfig = this.config; + if (this.cardRenderer && typeof this.cardRenderer.setMdxFrontmatterCache === "function") { + this.cardRenderer.setMdxFrontmatterCache(this.mdxFrontmatterCache); + } + this.containerEl.empty(); + this.mdxFrontmatterCache = {}; + this.propertyObservers.forEach((obs) => obs.disconnect()); + this.propertyObservers = []; + const feedEl = this.containerEl.createDiv("bases-cms-grid"); + if (useVirtualScroll && virtualRange && virtualRange.topPadding > 0) { + const topSpacer = feedEl.createDiv("bases-cms-virtual-spacer"); + topSpacer.style.height = `${virtualRange.topPadding}px`; + setCssProps(topSpacer, { gridColumn: "1 / -1" }); + } + let totalCardsRendered = 0; + const cards = await transformBasesEntries( + visibleEntries, + settings, + "", + // sortMethod not used in transformBasesEntries + false, + this.snippets, + this.images, + this.hasImageAvailable, + this.app, + this.mdxFrontmatterCache + ); + if (!isStillValid()) return; + if (!useVirtualScroll && processedGroups.some((g) => g.group.hasKey())) { + let displayedSoFar = 0; + let cardIndex = 0; + for (const processedGroup of processedGroups) { + if (displayedSoFar >= this.scrollLayoutManager.getDisplayedCount()) break; + const entriesToDisplay = Math.min(processedGroup.entries.length, this.scrollLayoutManager.getDisplayedCount() - displayedSoFar); + if (entriesToDisplay === 0) continue; + const groupEl = feedEl.createDiv("bases-cms-group"); + if (processedGroup.group.hasKey()) { + const headerEl = groupEl.createDiv("bases-cms-group-heading"); + const valueEl = headerEl.createDiv("bases-cms-group-value"); + const keyValue = ((_a = processedGroup.group.key) == null ? void 0 : _a.toString()) || ""; + valueEl.setText(keyValue); + } + for (let i = 0; i < entriesToDisplay && cardIndex < cards.length; i++) { + const card = cards[cardIndex]; + const entry = visibleEntries[cardIndex]; + try { + this.renderCard(groupEl, card, entry, displayedSoFar + i, settings); + totalCardsRendered++; + } catch (e) { + } + cardIndex++; + } + displayedSoFar += entriesToDisplay; + } + } else { + for (let i = 0; i < cards.length; i++) { + const card = cards[i]; + const entry = visibleEntries[i]; + try { + this.renderCard(feedEl, card, entry, startIndex + i, settings); + totalCardsRendered++; + } catch (e) { + } + } + } + if (useVirtualScroll && virtualRange && virtualRange.bottomPadding > 0) { + const bottomSpacer = feedEl.createDiv("bases-cms-virtual-spacer"); + bottomSpacer.style.height = `${virtualRange.bottomPadding}px`; + setCssProps(bottomSpacer, { gridColumn: "1 / -1" }); + } + if (!isStillValid()) return; + if (totalCardsRendered === 0 && totalEntriesCount > 0) { + throw new Error("No cards were rendered despite having entries. Check card rendering logic."); + } + if (totalCardsRendered > 0) { + const firstCard = feedEl.querySelector(".bases-cms-card"); + if (firstCard) { + requestAnimationFrame(() => { + const cardHeight = firstCard.offsetHeight; + const containerWidth = this.containerEl.clientWidth; + const cardMinWidth = settings.cardSize || 280; + const gap = 16; + const cardsPerRow = Math.max(1, Math.floor((containerWidth + gap) / (cardMinWidth + gap))); + this.scrollLayoutManager.updateCardMetrics(cardHeight, cardsPerRow); + }); + } + } + if (savedScrollTop > 0) { + this.containerEl.scrollTop = savedScrollTop; + } + if (useVirtualScroll) { + const cachedAllEntries = allFlatEntries; + const cachedSettings = settings; + const cachedUpdateId = updateId; + this.scrollLayoutManager.setupVirtualScroll(totalEntriesCount, (range) => { + if (cachedUpdateId === this.lastUpdateId) { + void this.renderVirtualRange(cachedAllEntries, cachedSettings, range, feedEl); + } + }); + } else { + this.scrollLayoutManager.setupInfiniteScroll(totalEntriesCount); + } + this.scrollLayoutManager.setupResizeObserver(); + this.setupSettingsPolling(settings); + this.updateSelectionUI(); + this.scrollLayoutManager.setIsLoading(false); + } + /** + * Render cards for a specific virtual scroll range + */ + async renderVirtualRange(allEntries, settings, range, feedEl) { + const visibleEntries = allEntries.slice(range.startIndex, range.endIndex + 1); + await this.loadContentForEntries(visibleEntries, settings); + feedEl.empty(); + if (range.topPadding > 0) { + const topSpacer = feedEl.createDiv("bases-cms-virtual-spacer"); + topSpacer.style.height = `${range.topPadding}px`; + setCssProps(topSpacer, { gridColumn: "1 / -1" }); + } + const cards = await transformBasesEntries( + visibleEntries, + settings, + "", + false, + this.snippets, + this.images, + this.hasImageAvailable, + this.app, + this.mdxFrontmatterCache + ); + for (let i = 0; i < cards.length; i++) { + const card = cards[i]; + const entry = visibleEntries[i]; + try { + this.renderCard(feedEl, card, entry, range.startIndex + i, settings); + } catch (e) { + } + } + if (range.bottomPadding > 0) { + const bottomSpacer = feedEl.createDiv("bases-cms-virtual-spacer"); + bottomSpacer.style.height = `${range.bottomPadding}px`; + setCssProps(bottomSpacer, { gridColumn: "1 / -1" }); + } + this.updateSelectionUI(); + } + onDataUpdated() { + const updateId = ++this.lastUpdateId; + void (async () => { + try { + const isStillValid = () => updateId === this.lastUpdateId; + if (!this.data) { + let loadingEl = this.containerEl.querySelector(".bases-cms-loading"); + if (!loadingEl && this.containerEl.children.length === 0) { + loadingEl = this.containerEl.createDiv("bases-cms-loading"); + loadingEl.setText("Loading..."); + setCssProps(loadingEl, { + padding: "20px", + textAlign: "center" + }); + } + setTimeout(() => { + if (isStillValid() && this.data) { + this.onDataUpdated(); + } + }, 100); + return; + } + if (!isStillValid()) return; + const data = this.data; + const topLevelDefaultView = data == null ? void 0 : data.defaultView; + const config = this.config; + const currentViewName = typeof config.getName === "function" ? config.getName() : config.name; + if (topLevelDefaultView && currentViewName !== topLevelDefaultView) { + if (!this.hasAutoSwitched) { + this.hasAutoSwitched = true; + const controller = this.basesController; + console.debug("Bases CMS: Default view sync triggered", { + target: topLevelDefaultView, + current: currentViewName + }); + if (typeof controller.selectView === "function") { + controller.selectView(topLevelDefaultView); + return; + } else if (typeof controller.setView === "function") { + controller.setView(topLevelDefaultView); + return; + } else if (typeof controller.switchView === "function") { + controller.switchView(topLevelDefaultView); + return; + } + } + } + const currentBaseId = this.getBaseIdentifier(); + if (this.lastBaseId !== currentBaseId) { + this.lastBaseId = currentBaseId; + if (currentBaseId) { + const savedSelection = this.plugin.selections.get(currentBaseId); + if (savedSelection && savedSelection !== this.selectedFiles) { + this.selectedFiles.clear(); + savedSelection.forEach((item) => this.selectedFiles.add(item)); + this.plugin.selections.set(currentBaseId, this.selectedFiles); + } else if (!savedSelection) { + this.plugin.selections.set(currentBaseId, this.selectedFiles); + } + } + this.scrollLayoutManager.resetScroll(); + this.snippets = {}; + this.images = {}; + this.hasImageAvailable = {}; + this.mdxFrontmatterCache = {}; + } + if (!this.data.groupedData || !this.data.data) { + setTimeout(() => { + if (isStillValid() && this.data && this.data.groupedData && this.data.data) { + this.onDataUpdated(); + } + }, 100); + return; + } + if (!isStillValid()) return; + const groupedData = this.data.groupedData; + const allEntries = this.data.data; + const settings = readCMSSettings( + this.config, + this.plugin.settings + ); + if (!isStillValid()) return; + const allFlatEntries = Array.isArray(this.data.data) ? this.data.data : []; + this.lastVisiblePaths = allFlatEntries.map((e) => { + var _a; + return (_a = e.file) == null ? void 0 : _a.path; + }).filter(Boolean); + if (this.config && typeof this.config.get === "function") { + try { + this.scrollLayoutManager.updateConfig(this.config); + } catch (e) { + } + } + this.scrollLayoutManager.updateGridLayout(settings); + const savedScrollTop = this.containerEl.scrollTop; + const sortConfigs = this.config.getSort(); + let processedGroups = groupedData.map((group) => ({ + group, + entries: [...group.entries] + })); + if (sortConfigs && sortConfigs.length > 0) { + const firstSort = sortConfigs[0]; + const property = firstSort.property; + const direction = firstSort.direction.toLowerCase(); + if (property && !property.includes("ctime") && !property.includes("mtime")) { + void (async () => { + try { + const allEntries2 = []; + for (const processedGroup of processedGroups) { + allEntries2.push(...processedGroup.entries); + } + const sortedEntries = await this.sortEntriesByProperty(allEntries2, property, direction); + const sortedProcessedGroups = [{ + group: { + hasKey: () => false, + key: null, + entries: sortedEntries + }, + entries: sortedEntries + }]; + await this.continueDataProcessing(sortedProcessedGroups, settings, allEntries2.length, savedScrollTop, updateId); + } catch (error) { + console.error("Bases CMS: Error during custom sorting:", error); + await this.continueDataProcessing(processedGroups, settings, allEntries.length, savedScrollTop, updateId); + } + })(); + return; + } + } + await this.continueDataProcessing(processedGroups, settings, allEntries.length, savedScrollTop, updateId); + } catch (error) { + try { + this.scrollLayoutManager.setIsLoading(false); + } catch (e) { + } + if (this.containerEl && this.containerEl.isConnected) { + this.containerEl.empty(); + const errorEl = this.containerEl.createDiv("bases-cms-error"); + errorEl.setText("Error loading view. Check console for details."); + setCssProps(errorEl, { + padding: "20px", + textAlign: "center", + color: "var(--text-error)", + margin: "20px" + }); + } + console.error("Bases CMS: Error in onDataUpdated:", error); + } + })(); + } + /** + * Get a unique identifier for the current base configuration + */ + getBaseIdentifier() { + try { + const controller = this.basesController; + if (controller) { + if (typeof controller.getBaseName === "function") return controller.getBaseName(); + if (controller.baseName) return controller.baseName; + } + if (this.config && typeof this.config.getName === "function") { + return this.config.getName(); + } + if (this.config && this.config.name) { + return String(this.config.name); + } + if (this.data && this.data.baseName) { + return String(this.data.baseName); + } + } catch (e) { + } + return null; + } + /** + * Setup polling to detect settings changes and refresh view + */ + setupSettingsPolling(initialSettings) { + if (this.settingsPollInterval !== null) { + return; + } + this.lastSettings = { + descriptionProperty: initialSettings.descriptionProperty, + showTextPreview: initialSettings.showTextPreview, + fallbackToContent: initialSettings.fallbackToContent, + truncatePreviewProperty: initialSettings.truncatePreviewProperty, + imageProperty: initialSettings.imageProperty, + imageFormat: initialSettings.imageFormat, + fallbackToEmbeds: initialSettings.fallbackToEmbeds, + propertyDisplay1: initialSettings.propertyDisplay1, + propertyDisplay2: initialSettings.propertyDisplay2, + propertyDisplay3: initialSettings.propertyDisplay3, + propertyDisplay4: initialSettings.propertyDisplay4, + propertyDisplay5: initialSettings.propertyDisplay5, + propertyDisplay6: initialSettings.propertyDisplay6, + propertyDisplay7: initialSettings.propertyDisplay7, + propertyDisplay8: initialSettings.propertyDisplay8, + propertyDisplay9: initialSettings.propertyDisplay9, + propertyDisplay10: initialSettings.propertyDisplay10, + propertyDisplay11: initialSettings.propertyDisplay11, + propertyDisplay12: initialSettings.propertyDisplay12, + propertyDisplay13: initialSettings.propertyDisplay13, + propertyDisplay14: initialSettings.propertyDisplay14 + }; + this.settingsPollInterval = window.setInterval(() => { + if (!this.config || typeof this.config.get !== "function") { + return; + } + const currentSettings = readCMSSettings( + this.config, + this.plugin.settings + ); + if (!this.lastSettings) { + return; + } + const settingsChanged = this.lastSettings.descriptionProperty !== currentSettings.descriptionProperty || this.lastSettings.showTextPreview !== currentSettings.showTextPreview || this.lastSettings.fallbackToContent !== currentSettings.fallbackToContent || this.lastSettings.truncatePreviewProperty !== currentSettings.truncatePreviewProperty || this.lastSettings.imageProperty !== currentSettings.imageProperty || this.lastSettings.imageFormat !== currentSettings.imageFormat || this.lastSettings.fallbackToEmbeds !== currentSettings.fallbackToEmbeds || this.lastSettings.propertyDisplay1 !== currentSettings.propertyDisplay1 || this.lastSettings.propertyDisplay2 !== currentSettings.propertyDisplay2 || this.lastSettings.propertyDisplay3 !== currentSettings.propertyDisplay3 || this.lastSettings.propertyDisplay4 !== currentSettings.propertyDisplay4 || this.lastSettings.propertyDisplay5 !== currentSettings.propertyDisplay5 || this.lastSettings.propertyDisplay6 !== currentSettings.propertyDisplay6 || this.lastSettings.propertyDisplay7 !== currentSettings.propertyDisplay7 || this.lastSettings.propertyDisplay8 !== currentSettings.propertyDisplay8 || this.lastSettings.propertyDisplay9 !== currentSettings.propertyDisplay9 || this.lastSettings.propertyDisplay10 !== currentSettings.propertyDisplay10 || this.lastSettings.propertyDisplay11 !== currentSettings.propertyDisplay11 || this.lastSettings.propertyDisplay12 !== currentSettings.propertyDisplay12 || this.lastSettings.propertyDisplay13 !== currentSettings.propertyDisplay13 || this.lastSettings.propertyDisplay14 !== currentSettings.propertyDisplay14; + if (settingsChanged) { + if (this.lastSettings.descriptionProperty !== currentSettings.descriptionProperty || this.lastSettings.showTextPreview !== currentSettings.showTextPreview || this.lastSettings.fallbackToContent !== currentSettings.fallbackToContent || this.lastSettings.truncatePreviewProperty !== currentSettings.truncatePreviewProperty) { + this.snippets = {}; + } + if (this.lastSettings.imageProperty !== currentSettings.imageProperty || this.lastSettings.imageFormat !== currentSettings.imageFormat || this.lastSettings.fallbackToEmbeds !== currentSettings.fallbackToEmbeds) { + this.images = {}; + this.hasImageAvailable = {}; + } + this.lastSettings = { + descriptionProperty: currentSettings.descriptionProperty, + showTextPreview: currentSettings.showTextPreview, + fallbackToContent: currentSettings.fallbackToContent, + truncatePreviewProperty: currentSettings.truncatePreviewProperty, + imageProperty: currentSettings.imageProperty, + imageFormat: currentSettings.imageFormat, + fallbackToEmbeds: currentSettings.fallbackToEmbeds, + propertyDisplay1: currentSettings.propertyDisplay1, + propertyDisplay2: currentSettings.propertyDisplay2, + propertyDisplay3: currentSettings.propertyDisplay3, + propertyDisplay4: currentSettings.propertyDisplay4, + propertyDisplay5: currentSettings.propertyDisplay5, + propertyDisplay6: currentSettings.propertyDisplay6, + propertyDisplay7: currentSettings.propertyDisplay7, + propertyDisplay8: currentSettings.propertyDisplay8, + propertyDisplay9: currentSettings.propertyDisplay9, + propertyDisplay10: currentSettings.propertyDisplay10, + propertyDisplay11: currentSettings.propertyDisplay11, + propertyDisplay12: currentSettings.propertyDisplay12, + propertyDisplay13: currentSettings.propertyDisplay13, + propertyDisplay14: currentSettings.propertyDisplay14 + }; + this.onDataUpdated(); + } + }, 100); + this.register(() => { + if (this.settingsPollInterval !== null) { + window.clearInterval(this.settingsPollInterval); + this.settingsPollInterval = null; + } + }); + } + /** + * Preload MDX frontmatter for all visible entries to prevent flashing + * This ensures all MDX data is available synchronously during card transformation + */ + async preloadMdxFrontmatter(entries) { + const mdxEntries = entries.filter((entry) => { + const file = this.app.vault.getAbstractFileByPath(entry.file.path); + return file instanceof import_obsidian23.TFile && file.extension === "mdx" && !(entry.file.path in this.mdxFrontmatterCache); + }); + if (mdxEntries.length === 0) { + return; + } + await Promise.all( + mdxEntries.map(async (entry) => { + const file = this.app.vault.getAbstractFileByPath(entry.file.path); + if (file instanceof import_obsidian23.TFile) { + try { + const frontmatter = await getFileFrontmatter(this.app, file); + this.mdxFrontmatterCache[entry.file.path] = frontmatter; + } catch (error) { + console.error(`Bases CMS: Error preloading properties for ${entry.file.path}:`, error); + this.mdxFrontmatterCache[entry.file.path] = null; + } + } + }) + ); + } + async loadContentForEntries(entries, settings) { + if (settings.showTextPreview) { + const snippetEntriesPromises = entries.filter((entry) => !(entry.file.path in this.snippets)).map(async (entry) => { + const file = this.app.vault.getAbstractFileByPath(entry.file.path); + if (!(file instanceof import_obsidian23.TFile)) return null; + const descValue = await getFirstBasesPropertyValue(entry, settings.descriptionProperty, this.app); + return { + path: entry.file.path, + file, + descriptionData: descValue == null ? void 0 : descValue.data + }; + }); + const snippetEntries = (await Promise.all(snippetEntriesPromises)).filter((e) => e !== null); + if (snippetEntries.length > 0) { + await loadSnippetsForEntries( + snippetEntries, + settings.fallbackToContent, + false, + this.app, + this.snippets, + settings.truncatePreviewProperty + ); + } + } + if (settings.imageFormat !== "none") { + const imageEntriesPromises = entries.filter((entry) => !(entry.file.path in this.images)).map(async (entry) => { + const file = this.app.vault.getAbstractFileByPath(entry.file.path); + if (!(file instanceof import_obsidian23.TFile)) return null; + const imagePropertyValues = await getAllBasesImagePropertyValues(entry, settings.imageProperty, this.app); + return { + path: entry.file.path, + file, + imagePropertyValues + }; + }); + const imageEntries = (await Promise.all(imageEntriesPromises)).filter((e) => e !== null); + if (imageEntries.length > 0) { + await loadImagesForEntries( + imageEntries, + settings.fallbackToEmbeds, + this.app, + this.images, + this.hasImageAvailable + ); + } + } + } + /** + * Direct delete handler for context menu - deletes a single file without selection + */ + getDirectDeleteHandler(filePath) { + return async () => { + const { prepareDeletionPreview: prepareDeletionPreview2, executeSmartDeletion: executeSmartDeletion2 } = await Promise.resolve().then(() => (init_smart_deletion(), smart_deletion_exports)); + const { DeletionPreviewModal: DeletionPreviewModal2 } = await Promise.resolve().then(() => (init_deletion_preview(), deletion_preview_exports)); + if (this.plugin.settings.confirmDeletions) { + const preview = await prepareDeletionPreview2( + this.app, + [filePath], + this.plugin.settings + ); + const modal = new DeletionPreviewModal2( + this.app, + preview, + () => { + this.onDataUpdated(); + } + ); + modal.open(); + } else { + const preview = await prepareDeletionPreview2( + this.app, + [filePath], + this.plugin.settings + ); + await executeSmartDeletion2(this.app, preview); + this.onDataUpdated(); + } + }; + } + renderCard(container, card, entry, index, settings) { + const isSelected = this.selectedFiles.has(card.path); + return this.cardRenderer.renderCard( + container, + card, + entry, + settings, + this, + isSelected, + (path, selected, shiftKey) => { + this.handleSelectionChange(path, selected, shiftKey); + }, + (path, property, value) => { + void this.handlePropertyToggle(path, property, value); + }, + { handleDelete: this.getDirectDeleteHandler(card.path) } + ); + } + /** + * Update card image when it becomes available + * Called asynchronously after images load + */ + updateCardImage(path, imageUrl) { + var _a; + const cardEl = this.containerEl.querySelector(`.card[data-path="${path}"]`); + if (!cardEl) return; + const url = Array.isArray(imageUrl) ? imageUrl[0] : imageUrl; + if (!url) return; + let imageEmbedContainer = cardEl.querySelector(".image-embed"); + if (!imageEmbedContainer) { + const placeholder = cardEl.querySelector(".card-cover-placeholder, .card-thumbnail-placeholder"); + const isThumbnail = cardEl.classList.contains("image-format-thumbnail"); + const isCover = cardEl.classList.contains("image-format-cover"); + if (placeholder) { + const existingBadge = placeholder.querySelector(".card-status-badge"); + const imageClassName = placeholder.classList.contains("card-cover-placeholder") ? "card-cover" : "card-thumbnail"; + const imageEl = (_a = placeholder.parentElement) == null ? void 0 : _a.createDiv(imageClassName); + if (imageEl) { + imageEmbedContainer = imageEl.createDiv("image-embed"); + if (existingBadge) { + imageEl.appendChild(existingBadge); + } + placeholder.remove(); + } + } else if (isThumbnail) { + const contentContainer = cardEl.querySelector(".card-content"); + if (contentContainer) { + const textWrapper = contentContainer.querySelector(".card-text-wrapper"); + const imageEl = textWrapper ? contentContainer.insertBefore(contentContainer.createDiv("card-thumbnail"), textWrapper) : contentContainer.createDiv("card-thumbnail"); + imageEmbedContainer = imageEl.createDiv("image-embed"); + } + } else if (isCover) { + const contentContainer = cardEl.querySelector(".card-content"); + if (contentContainer) { + const imageEl = contentContainer.createDiv("card-cover"); + imageEmbedContainer = imageEl.createDiv("image-embed"); + } + } + } + if (imageEmbedContainer) { + void (async () => { + const finalUrl = await convertGifToStatic(url, this.plugin.settings.forceStaticGifImages); + imageEmbedContainer.style.backgroundImage = `url("${finalUrl}")`; + })(); + imageEmbedContainer.style.backgroundImage = `url("${url}")`; + setCssProps(imageEmbedContainer, { + backgroundSize: "cover", + backgroundPosition: "center center", + backgroundRepeat: "no-repeat" + }); + } + } + getSortMethod() { + const sortConfigs = this.config.getSort(); + if (sortConfigs && sortConfigs.length > 0) { + const firstSort = sortConfigs[0]; + const property = firstSort.property; + const direction = firstSort.direction.toLowerCase(); + if (property.includes("ctime")) { + return `ctime-${direction}`; + } + if (property.includes("mtime")) { + return `mtime-${direction}`; + } + } + return "mtime-desc"; + } + handleSelectionChange(path, selected, shiftKey) { + if (shiftKey && this.lastClickedPath && this.lastClickedPath !== path) { + const start = this.lastVisiblePaths.indexOf(this.lastClickedPath); + const end = this.lastVisiblePaths.indexOf(path); + if (start !== -1 && end !== -1) { + const min = Math.min(start, end); + const max = Math.max(start, end); + const pathsToToggle = this.lastVisiblePaths.slice(min, max + 1); + pathsToToggle.forEach((p) => { + if (selected) { + this.selectedFiles.add(p); + } else { + this.selectedFiles.delete(p); + } + }); + } + } else { + if (selected) { + this.selectedFiles.add(path); + } else { + this.selectedFiles.delete(path); + } + } + this.lastClickedPath = path; + this.updateSelectionUI(); + if (this.selectedFiles.size === 0) { + if (this.bulkToolbar) { + this.bulkToolbar.hide(); + const toolbarEl = this.containerEl.querySelector(".bases-cms-bulk-toolbar"); + if (toolbarEl instanceof HTMLElement) { + toolbarEl.removeClass("bases-cms-bulk-toolbar-visible"); + toolbarEl.addClass("bases-cms-bulk-toolbar-hidden"); + } + } + } + } + async handlePropertyToggle(path, property, value) { + if (this.propertyToggleHandler) { + await this.propertyToggleHandler.handlePropertyToggle(path, property, value); + } + } + selectAll() { + this.lastVisiblePaths.forEach((path) => { + this.selectedFiles.add(path); + }); + this.updateSelectionUI(); + } + deselectAll() { + const cards = this.containerEl.querySelectorAll(".bases-cms-card.selected"); + cards.forEach((cardEl) => { + cardEl.removeClass("selected"); + const checkbox = cardEl.querySelector('input[type="checkbox"].selection-checkbox'); + if (checkbox) { + checkbox.checked = false; + } + }); + this.selectedFiles.clear(); + this.lastClickedPath = null; + this.updateSelectionUI(); + } + /** + * Update checkbox and class for a specific card in the DOM + */ + updateCardCheckboxState(path, selected) { + const cardEl = this.containerEl.querySelector(`.bases-cms-card[data-path="${path}"]`); + if (cardEl instanceof HTMLElement) { + if (selected) { + cardEl.addClass("selected"); + } else { + cardEl.removeClass("selected"); + } + const checkbox = cardEl.querySelector('input[type="checkbox"].selection-checkbox'); + if (checkbox) { + checkbox.checked = selected; + } + } + } + /** + * Refresh the toolbar when settings change + * Called from settings tab when toolbar button visibility settings are updated + */ + refreshToolbar() { + if (this.bulkToolbar) { + const currentCount = this.selectedFiles.size; + this.bulkToolbar.recreate(); + if (currentCount > 0) { + this.bulkToolbar.updateCount(currentCount); + } + } + } + updateSelectionUI() { + const cards = this.containerEl.querySelectorAll(".card"); + cards.forEach((cardEl) => { + const path = cardEl.getAttribute("data-path"); + const checkbox = cardEl.querySelector('input[type="checkbox"].selection-checkbox'); + if (path) { + const isSelected = this.selectedFiles.has(path); + if (isSelected) { + cardEl.addClass("selected"); + } else { + cardEl.removeClass("selected"); + } + if (checkbox) { + checkbox.checked = isSelected; + } + } + }); + if (this.selectedFiles.size > 0) { + const orphanedToolbars = document.querySelectorAll(".bases-cms-bulk-toolbar"); + orphanedToolbars.forEach((toolbar) => { + const toolbarInstance = toolbar.__bulkToolbarInstance; + if (!toolbarInstance || toolbarInstance !== this.bulkToolbar) { + toolbar.remove(); + } + }); + if (!this.bulkToolbar) { + const settings = readCMSSettings( + this.config, + this.plugin.settings + ); + this.bulkToolbar = new BulkToolbar( + this.app, + this.plugin, + this.containerEl, + () => Array.from(this.selectedFiles), + () => { + this.selectedFiles.clear(); + this.updateSelectionUI(); + }, + () => { + const selectedPaths = Array.from(this.selectedFiles); + this.isRefreshingWithSelection = true; + if (this.bulkToolbar && selectedPaths.length > 0) { + this.bulkToolbar.show(); + } + this.onDataUpdated(); + window.setTimeout(() => { + selectedPaths.forEach((path) => { + if (this.app.vault.getAbstractFileByPath(path)) { + this.selectedFiles.add(path); + } + }); + this.isRefreshingWithSelection = false; + this.updateSelectionUI(); + if (this.selectedFiles.size > 0 && this.bulkToolbar) { + this.bulkToolbar.show(); + this.bulkToolbar.updateCount(this.selectedFiles.size); + } + window.setTimeout(() => { + if (this.selectedFiles.size > 0 && this.bulkToolbar) { + this.bulkToolbar.show(); + this.bulkToolbar.updateCount(this.selectedFiles.size); + } + }, 100); + }, 250); + }, + () => { + this.selectAll(); + }, + settings + ); + } else { + const settings = readCMSSettings( + this.config, + this.plugin.settings + ); + this.bulkToolbar.updateSettings(settings); + } + this.bulkToolbar.updateCount(this.selectedFiles.size); + this.bulkToolbar.show(); + } else { + if (this.bulkToolbar && !this.isRefreshingWithSelection) { + this.bulkToolbar.hide(); + const toolbarEl = this.containerEl.querySelector(".bases-cms-bulk-toolbar"); + if (toolbarEl instanceof HTMLElement) { + toolbarEl.removeClass("bases-cms-bulk-toolbar-visible"); + toolbarEl.addClass("bases-cms-bulk-toolbar-hidden"); + } + } + } + } + async onClose() { + this.scrollLayoutManager.cleanup(); + if (this.viewSwitchListener) { + this.viewSwitchListener.cleanup(); + } + if (this.settingsPollInterval !== null) { + window.clearInterval(this.settingsPollInterval); + this.settingsPollInterval = null; + } + this.propertyObservers.forEach((obs) => obs.disconnect()); + this.propertyObservers = []; + if (this.bulkToolbar) { + this.bulkToolbar.destroy(); + } + const orphanedToolbars = document.querySelectorAll(".bases-cms-bulk-toolbar"); + orphanedToolbars.forEach((toolbar) => toolbar.remove()); + const pluginWithMethod = this.plugin; + if (pluginWithMethod && typeof pluginWithMethod.removeView === "function") { + pluginWithMethod.removeView(this); + } + } + /** + * Override new note creation to use custom location if configured + */ + async onNew() { + var _a; + const settings = readCMSSettings( + this.config, + this.plugin.settings + ); + if (settings.customizeNewButton) { + try { + const locationInput = ((_a = settings.newNoteLocation) == null ? void 0 : _a.trim()) || ""; + if (locationInput === "") { + const vaultConfig = this.app.vault.config; + const newFileLocation = (vaultConfig == null ? void 0 : vaultConfig.newFileLocation) || "folder"; + const newFileFolderPath = (vaultConfig == null ? void 0 : vaultConfig.newFileFolderPath) || ""; + let filePath = "Untitled.md"; + if (newFileLocation === "folder" && newFileFolderPath) { + filePath = `${newFileFolderPath}/Untitled.md`; + } else if (newFileLocation === "current") { + const activeFile = this.app.workspace.getActiveFile(); + if (activeFile && activeFile.parent) { + filePath = `${activeFile.parent.path}/Untitled.md`; + } + } else if (newFileLocation === "root") { + filePath = "Untitled.md"; + } + const file = await this.app.vault.create(filePath, ""); + await this.app.workspace.openLinkText(file.path, "", false); + return true; + } + if (locationInput === "/" || locationInput.replace(/\//g, "") === "") { + const newFile = await this.app.vault.create("Untitled.md", ""); + await this.app.workspace.openLinkText(newFile.path, "", false); + return true; + } + const folderPath = locationInput.replace(/^\/+|\/+$/g, ""); + let folder = this.app.vault.getAbstractFileByPath(folderPath); + if (!folder || !("children" in folder)) { + await this.app.vault.createFolder(folderPath); + folder = this.app.vault.getAbstractFileByPath(folderPath); + } + if (folder && "children" in folder) { + const newFile = await this.app.vault.create(`${folderPath}/Untitled.md`, ""); + await this.app.workspace.openLinkText(newFile.path, "", false); + return true; + } + } catch (e) { + } + } + return false; + } +}; + +// src/types.ts +var DEFAULT_SETTINGS = { + confirmBulkOperations: true, + deleteParentFolder: false, + deleteParentFolderFilename: "index", + deleteUniqueAttachments: false, + confirmDeletions: true, + useHomeIcon: false, + enableQuickEdit: false, + quickEditCommand: "", + quickEditCommandName: "", + quickEditIcon: "pencil-line", + quickEditOpenFile: false, + showToolbarSelectAll: true, + showToolbarClear: true, + showToolbarDraft: true, + showToolbarPublish: true, + showToolbarTags: true, + showToolbarSet: true, + showToolbarRemove: true, + showToolbarDelete: true, + forceStaticGifImages: false, + embeddedViewRefreshDebounceMs: 250, + virtualScrollThreshold: 100, + // Enable virtual scrolling for >100 cards + virtualScrollBuffer: 20, + // Render 20 cards above/below viewport + migrationBasesCmsToCmsDone: false +}; + +// src/utils/view-registration.ts +function registerBasesCMSView(plugin, retries = 5) { + try { + const basesPlugin = plugin; + if (typeof basesPlugin.registerBasesView === "function") { + const viewOptionsFn = getCMSViewOptions2(); + const viewConfig = { + name: "CMS", + icon: plugin.settings.useHomeIcon ? "lucide-home" : "lucide-blocks", + factory: (controller, containerEl) => { + const view = new BasesCMSView(controller, containerEl, plugin); + const pluginWithViews = plugin; + if (pluginWithViews.activeViews) { + pluginWithViews.activeViews.add(view); + } + if (view.isEmbedded) { + let retryCount = 0; + const maxRetries = 8; + const baseDelay = 250; + const tryRefresh = () => { + try { + const containerEl2 = view.containerEl; + if (!containerEl2 || !containerEl2.isConnected) { + return; + } + const viewData = view.data; + const hasData = viewData && Array.isArray(viewData.data) && viewData.data.length > 0 && viewData.groupedData; + if (typeof view.onDataUpdated === "function") { + view.onDataUpdated(); + } + if (!hasData && retryCount < maxRetries) { + retryCount++; + const delay = baseDelay + retryCount * 100; + window.setTimeout(tryRefresh, delay); + } + } catch (error) { + console.warn("Bases CMS: Error refreshing newly created embedded view:", error); + } + }; + window.setTimeout(tryRefresh, baseDelay); + } + return view; + }, + options: () => viewOptionsFn(CMS_VIEW_TYPE) + }; + basesPlugin.registerBasesView(CMS_VIEW_TYPE, viewConfig); + } else if (retries > 0) { + const pluginWithTimeout = plugin; + const registrationTimeout = pluginWithTimeout.registrationTimeout; + if (registrationTimeout !== null && registrationTimeout !== void 0) { + window.clearTimeout(registrationTimeout); + } + pluginWithTimeout.registrationTimeout = window.setTimeout(() => { + pluginWithTimeout.registrationTimeout = null; + registerBasesCMSView(plugin, retries - 1); + }, 200); + } else { + console.warn("Bases CMS: registerBasesView not available. Is Bases plugin installed?"); + } + } catch (error) { + console.error("Bases CMS: Error registering view:", error); + } +} +function getCMSViewOptions2() { + const { getCMSViewOptions: getCMSViewOptions3 } = (init_settings_schema(), __toCommonJS(settings_schema_exports)); + return getCMSViewOptions3; +} + +// src/utils/migration.ts +async function migrateBasesCmsToCms(app) { + const files = app.vault.getFiles(); + let migratedCount = 0; + console.log(`Bases CMS: Starting safe vault scan for 'bases-cms' types...`); + for (const file of files) { + const ext = file.extension.toLowerCase(); + if (ext === "md" || ext === "base" || ext === "mdx") { + try { + const content = await app.vault.read(file); + if (content.toLowerCase().includes("bases-cms")) { + const newContent = content.replace(/(type[ \t]*:[ \t]*["']?)bases-cms\b/gi, "$1cms"); + if (newContent !== content) { + await app.vault.modify(file, newContent); + migratedCount++; + console.log(`Bases CMS: Migrated ${file.path}`); + } + } + } catch (error) { + console.error(`Bases CMS: Error reading ${file.path}:`, error); + } + } + } + console.log(`Bases CMS Migration: Updated ${migratedCount} files.`); + return migratedCount; +} + +// src/main.ts +var import_obsidian25 = require("obsidian"); +var BasesCMSPlugin = class extends import_obsidian24.Plugin { + constructor() { + super(...arguments); + this.activeViews = /* @__PURE__ */ new Set(); + this.registrationTimeout = null; + this.refreshEmbeddedViewsTimeout = null; + this.selections = /* @__PURE__ */ new Map(); + } + async onload() { + await this.loadSettings(); + this.app.workspace.onLayoutReady(async () => { + if (!this.settings.migrationBasesCmsToCmsDone) { + const migratedCount = await migrateBasesCmsToCms(this.app); + this.settings.migrationBasesCmsToCmsDone = true; + await this.saveSettings(); + if (migratedCount > 0) { + new import_obsidian25.Notice(`Bases CMS: Successfully migrated ${migratedCount} files to new 'cms' view type.`); + } + } + }); + this.addCommand({ + id: "run-bases-cms-migration", + name: "Run Vault Migration (Convert bases-cms to cms)", + callback: async () => { + const migratedCount = await migrateBasesCmsToCms(this.app); + new import_obsidian25.Notice(`Bases CMS: Migration complete. ${migratedCount} files updated.`); + } + }); + this.addSettingTab(new BasesCMSSettingTab(this.app, this)); + registerBasesCMSView(this); + this.addCommand({ + id: "select-all", + name: "Select all visible cards", + checkCallback: (checking) => { + const activeView = this.getActiveCMSView(); + if (activeView) { + if (!checking) { + activeView.selectAll(); + } + return true; + } + return false; + } + }); + this.addCommand({ + id: "deselect-all", + name: "Deselect all cards", + checkCallback: (checking) => { + const activeView = this.getActiveCMSView(); + if (activeView) { + if (!checking) { + activeView.deselectAll(); + } + return true; + } + return false; + } + }); + this.registerEvent( + this.app.workspace.on("active-leaf-change", () => { + this.refreshEmbeddedViews(); + }) + ); + this.registerEvent( + this.app.workspace.on("file-open", () => { + this.refreshEmbeddedViews(); + }) + ); + } + onunload() { + if (this.registrationTimeout !== null) { + window.clearTimeout(this.registrationTimeout); + this.registrationTimeout = null; + } + if (this.refreshEmbeddedViewsTimeout !== null) { + window.clearTimeout(this.refreshEmbeddedViewsTimeout); + this.refreshEmbeddedViewsTimeout = null; + } + this.activeViews.clear(); + } + async loadSettings() { + const data = await this.loadData(); + this.settings = Object.assign({}, DEFAULT_SETTINGS, data); + } + /** + * Robustly find the active CMS view + */ + getActiveCMSView() { + try { + const obsidianActiveView = this.app.workspace.getActiveViewOfType(BasesCMSView); + if (obsidianActiveView && obsidianActiveView instanceof BasesCMSView) { + return obsidianActiveView; + } + } catch (e) { + } + const activeLeaf = this.app.workspace.activeLeaf; + if (!activeLeaf) return null; + for (const view of this.activeViews) { + try { + if (view.type !== CMS_VIEW_TYPE) continue; + const containerEl = view.containerEl; + if (containerEl && containerEl.isConnected) { + if (activeLeaf.view.containerEl.contains(containerEl)) { + return view; + } + } + } catch (e) { + } + } + return null; + } + async saveSettings() { + await this.saveData(this.settings); + } + /** + * Clean up stale view references that are no longer in the DOM + * Returns the number of views removed + */ + cleanupStaleViews() { + const viewsToRemove = []; + this.activeViews.forEach((view) => { + const containerEl = view.containerEl; + if (!containerEl || !containerEl.parentElement) { + viewsToRemove.push(view); + } + }); + viewsToRemove.forEach((view) => this.activeViews.delete(view)); + return viewsToRemove.length; + } + /** + * Refresh toolbars in all active CMS views + */ + refreshAllToolbars() { + this.cleanupStaleViews(); + this.activeViews.forEach((view) => { + if (view && typeof view.refreshToolbar === "function") { + view.refreshToolbar(); + } + }); + } + /** + * Remove a view from tracking when it's closed + */ + removeView(view) { + this.activeViews.delete(view); + } + /** + * Refresh all embedded CMS views when the active file changes + * This ensures embedded views update their filters when using this.file properties + * Debounced to avoid excessive refreshes when switching files quickly + */ + refreshEmbeddedViews() { + if (this.refreshEmbeddedViewsTimeout !== null) { + window.clearTimeout(this.refreshEmbeddedViewsTimeout); + } + this.refreshEmbeddedViewsTimeout = window.setTimeout(() => { + this.refreshEmbeddedViewsTimeout = null; + this.cleanupStaleViews(); + let refreshedCount = 0; + this.activeViews.forEach((view) => { + if (view.isEmbedded) { + try { + const containerEl = view.containerEl; + if (containerEl && containerEl.isConnected) { + if (typeof view.onDataUpdated === "function") { + view.onDataUpdated(); + refreshedCount++; + } + } + } catch (error) { + console.warn("Bases CMS: Error refreshing embedded view:", error); + } + } + }); + if (refreshedCount > 0) { + console.debug(`Bases CMS: Refreshed ${refreshedCount} embedded view(s) after active file change`); + } + }, this.settings.embeddedViewRefreshDebounceMs); + } +}; +//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsic3JjL3V0aWxzL21keC1mcm9udG1hdHRlci50cyIsICJzcmMvdXRpbHMvZnJvbnRtYXR0ZXItaGVscGVyLnRzIiwgInNyYy9zaGFyZWQvc2V0dGluZ3Mtc2NoZW1hLnRzIiwgInNyYy91dGlscy9hdHRhY2htZW50LWRldGVjdGlvbi50cyIsICJzcmMvdXRpbHMvc21hcnQtZGVsZXRpb24udHMiLCAic3JjL2NvbXBvbmVudHMvZGVsZXRpb24tcHJldmlldy50cyIsICJzcmMvbWFpbi50cyIsICJzcmMvc2V0dGluZ3MudHMiLCAic3JjL2NvbXBvbmVudHMvY29tbWFuZC1waWNrZXItbW9kYWwudHMiLCAic3JjL2NvbXBvbmVudHMvaWNvbi1waWNrZXItbW9kYWwudHMiLCAic3JjL3V0aWxzL3NldHRpbmdzLWNvbXBhdC50cyIsICJzcmMvdmlld3MvY21zLXZpZXcudHMiLCAic3JjL3V0aWxzL2Nzcy1wcm9wcy50cyIsICJzcmMvc2hhcmVkL2RhdGEtdHJhbnNmb3JtLnRzIiwgInNyYy91dGlscy9wcm9wZXJ0eS50cyIsICJzcmMvdXRpbHMvc3R5bGUtc2V0dGluZ3MudHMiLCAic3JjL3V0aWxzL2ltYWdlLnRzIiwgInNyYy91dGlscy9wcmV2aWV3LnRzIiwgInNyYy9zaGFyZWQvY29udGVudC1sb2FkZXIudHMiLCAic3JjL3ZpZXdzL3NoYXJlZC1yZW5kZXJlci50cyIsICJzcmMvdXRpbHMvZHJhZnQtc3RhdHVzLWJhZGdlLnRzIiwgInNyYy91dGlscy9xdWljay1lZGl0LWljb24udHMiLCAic3JjL3V0aWxzL3Byb3BlcnR5LXJlbmRlcmVyLnRzIiwgInNyYy9jb21wb25lbnRzL2J1bGstdG9vbGJhci50cyIsICJzcmMvdXRpbHMvYnVsay1vcGVyYXRpb25zLnRzIiwgInNyYy91dGlscy9mcm9udG1hdHRlci50cyIsICJzcmMvY29tcG9uZW50cy9tYW5hZ2UtdGFncy1tb2RhbC50cyIsICJzcmMvY29tcG9uZW50cy9zZXQtcHJvcGVydHktbW9kYWwudHMiLCAic3JjL2NvbXBvbmVudHMvcmVtb3ZlLXByb3BlcnR5LW1vZGFsLnRzIiwgInNyYy91dGlscy90b29sYmFyLWFjdGlvbnMudHMiLCAic3JjL2NvbXBvbmVudHMvYnVsay1vcGVyYXRpb24tY29uZmlybS50cyIsICJzcmMvdXRpbHMvbmV3LW5vdGUtaW50ZXJjZXB0b3IudHMiLCAic3JjL3V0aWxzL3Byb3BlcnR5LXRvZ2dsZS1oYW5kbGVyLnRzIiwgInNyYy91dGlscy9zY3JvbGwtbGF5b3V0LW1hbmFnZXIudHMiLCAic3JjL3V0aWxzL3ZpZXctc3dpdGNoLWxpc3RlbmVyLnRzIiwgInNyYy91dGlscy9lbWJlZGRlZC12aWV3LWRldGVjdG9yLnRzIiwgInNyYy90eXBlcy50cyIsICJzcmMvdXRpbHMvdmlldy1yZWdpc3RyYXRpb24udHMiLCAic3JjL3V0aWxzL21pZ3JhdGlvbi50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXHJcbiAqIE1EWCBGcm9udG1hdHRlciBVdGlsaXRpZXNcclxuICogTWFudWFsIGZyb250bWF0dGVyIHBhcnNpbmcgYW5kIG1vZGlmaWNhdGlvbiBmb3IgTURYIGZpbGVzXHJcbiAqIE9ic2lkaWFuJ3MgbWV0YWRhdGFDYWNoZSBhbmQgcHJvY2Vzc0Zyb250TWF0dGVyIG9ubHkgd29yayBmb3IgLm1kIGZpbGVzXHJcbiAqL1xyXG5cclxuaW1wb3J0IHsgQXBwLCBURmlsZSwgcGFyc2VZYW1sLCBzdHJpbmdpZnlZYW1sIH0gZnJvbSAnb2JzaWRpYW4nO1xyXG5cclxuLyoqXHJcbiAqIENoZWNrIGlmIGEgZmlsZSBpcyBhbiBNRFggZmlsZVxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGlzTWR4RmlsZShmaWxlOiBURmlsZSk6IGJvb2xlYW4ge1xyXG5cdHJldHVybiBmaWxlLmV4dGVuc2lvbiA9PT0gJ21keCc7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBQYXJzZSBmcm9udG1hdHRlciBmcm9tIHJhdyBmaWxlIGNvbnRlbnRcclxuICogUmV0dXJucyB0aGUgZnJvbnRtYXR0ZXIgb2JqZWN0IGFuZCB0aGUgYm9keSBjb250ZW50IHNlcGFyYXRlbHlcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBwYXJzZU1keEZyb250bWF0dGVyKFxyXG5cdGNvbnRlbnQ6IHN0cmluZ1xyXG4pOiB7IGZyb250bWF0dGVyOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjsgYm9keTogc3RyaW5nIH0gfCBudWxsIHtcclxuXHRjb25zdCBmcm9udG1hdHRlclJlZ2V4ID0gL14tLS1cXG4oW1xcc1xcU10qPylcXG4tLS1cXG4vO1xyXG5cdGNvbnN0IG1hdGNoID0gY29udGVudC5tYXRjaChmcm9udG1hdHRlclJlZ2V4KTtcclxuXHJcblx0aWYgKCFtYXRjaCkge1xyXG5cdFx0Ly8gTm8gZnJvbnRtYXR0ZXIgZm91bmRcclxuXHRcdHJldHVybiB7XHJcblx0XHRcdGZyb250bWF0dGVyOiB7fSxcclxuXHRcdFx0Ym9keTogY29udGVudCxcclxuXHRcdH07XHJcblx0fVxyXG5cclxuXHRjb25zdCBmcm9udG1hdHRlclRleHQgPSBtYXRjaFsxXTtcclxuXHRjb25zdCBib2R5Q29udGVudCA9IGNvbnRlbnQuc2xpY2UobWF0Y2hbMF0ubGVuZ3RoKTtcclxuXHJcblx0dHJ5IHtcclxuXHRcdGNvbnN0IHBhcnNlZCA9IHBhcnNlWWFtbChmcm9udG1hdHRlclRleHQpIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgbnVsbCB8IHVuZGVmaW5lZDtcclxuXHRcdGNvbnN0IGZyb250bWF0dGVyID0gcGFyc2VkICYmIHR5cGVvZiBwYXJzZWQgPT09ICdvYmplY3QnID8gcGFyc2VkIDoge307XHJcblx0XHRyZXR1cm4ge1xyXG5cdFx0XHRmcm9udG1hdHRlcixcclxuXHRcdFx0Ym9keTogYm9keUNvbnRlbnQsXHJcblx0XHR9O1xyXG5cdH0gY2F0Y2ggKGUpIHtcclxuXHRcdGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHBhcnNpbmcgTURYIHByb3BlcnRpZXM6JywgZSk7XHJcblx0XHQvLyBSZXR1cm4gZW1wdHkgZnJvbnRtYXR0ZXIgYnV0IHByZXNlcnZlIGJvZHlcclxuXHRcdHJldHVybiB7XHJcblx0XHRcdGZyb250bWF0dGVyOiB7fSxcclxuXHRcdFx0Ym9keTogYm9keUNvbnRlbnQsXHJcblx0XHR9O1xyXG5cdH1cclxufVxyXG5cclxuLyoqXHJcbiAqIFJlYWQgYW5kIHBhcnNlIGZyb250bWF0dGVyIGZyb20gYW4gTURYIGZpbGVcclxuICovXHJcbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZWFkTWR4RnJvbnRtYXR0ZXIoXHJcblx0YXBwOiBBcHAsXHJcblx0ZmlsZTogVEZpbGVcclxuKTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IG51bGw+IHtcclxuXHRpZiAoIWlzTWR4RmlsZShmaWxlKSkge1xyXG5cdFx0cmV0dXJuIG51bGw7XHJcblx0fVxyXG5cclxuXHR0cnkge1xyXG5cdFx0Y29uc3QgY29udGVudCA9IGF3YWl0IGFwcC52YXVsdC5yZWFkKGZpbGUpO1xyXG5cdFx0Y29uc3QgcGFyc2VkID0gcGFyc2VNZHhGcm9udG1hdHRlcihjb250ZW50KTtcclxuXHRcdHJldHVybiBwYXJzZWQgPyBwYXJzZWQuZnJvbnRtYXR0ZXIgOiBudWxsO1xyXG5cdH0gY2F0Y2ggKGUpIHtcclxuXHRcdGNvbnNvbGUuZXJyb3IoYEVycm9yIHJlYWRpbmcgTURYIHByb3BlcnRpZXMgZnJvbSAke2ZpbGUucGF0aH06YCwgZSk7XHJcblx0XHRyZXR1cm4gbnVsbDtcclxuXHR9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBXcml0ZSB1cGRhdGVkIGZyb250bWF0dGVyIHRvIGFuIE1EWCBmaWxlXHJcbiAqL1xyXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gd3JpdGVNZHhGcm9udG1hdHRlcihcclxuXHRhcHA6IEFwcCxcclxuXHRmaWxlOiBURmlsZSxcclxuXHRmcm9udG1hdHRlcjogUmVjb3JkPHN0cmluZywgdW5rbm93bj5cclxuKTogUHJvbWlzZTx2b2lkPiB7XHJcblx0aWYgKCFpc01keEZpbGUoZmlsZSkpIHtcclxuXHRcdHRocm93IG5ldyBFcnJvcihgRmlsZSAke2ZpbGUucGF0aH0gaXMgbm90IGFuIE1EWCBmaWxlYCk7XHJcblx0fVxyXG5cclxuXHR0cnkge1xyXG5cdFx0Y29uc3QgY29udGVudCA9IGF3YWl0IGFwcC52YXVsdC5yZWFkKGZpbGUpO1xyXG5cdFx0Y29uc3QgcGFyc2VkID0gcGFyc2VNZHhGcm9udG1hdHRlcihjb250ZW50KTtcclxuXHJcblx0XHRpZiAoIXBhcnNlZCkge1xyXG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoJ0ZhaWxlZCB0byBwYXJzZSBleGlzdGluZyBmcm9udG1hdHRlcicpO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8vIFN0cmluZ2lmeSB0aGUgdXBkYXRlZCBmcm9udG1hdHRlclxyXG5cdFx0Y29uc3QgbmV3RnJvbnRtYXR0ZXJUZXh0ID0gc3RyaW5naWZ5WWFtbChmcm9udG1hdHRlcikudHJpbSgpO1xyXG5cclxuXHRcdC8vIFJlY29uc3RydWN0IGZpbGUgY29udGVudFxyXG5cdFx0Y29uc3QgbmV3Q29udGVudCA9IGAtLS1cXG4ke25ld0Zyb250bWF0dGVyVGV4dH1cXG4tLS1cXG4ke3BhcnNlZC5ib2R5fWA7XHJcblxyXG5cdFx0Ly8gV3JpdGUgYmFjayB0byBmaWxlXHJcblx0XHRhd2FpdCBhcHAudmF1bHQubW9kaWZ5KGZpbGUsIG5ld0NvbnRlbnQpO1xyXG5cdH0gY2F0Y2ggKGUpIHtcclxuXHRcdGNvbnNvbGUuZXJyb3IoYEVycm9yIHdyaXRpbmcgTURYIHByb3BlcnRpZXMgdG8gJHtmaWxlLnBhdGh9OmAsIGUpO1xyXG5cdFx0dGhyb3cgZTtcclxuXHR9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBQcm9jZXNzIGZyb250bWF0dGVyIGZvciBhbiBNRFggZmlsZSAoc2ltaWxhciBBUEkgdG8gcHJvY2Vzc0Zyb250TWF0dGVyKVxyXG4gKiBUaGUgY2FsbGJhY2sgcmVjZWl2ZXMgdGhlIGZyb250bWF0dGVyIG9iamVjdCBhbmQgY2FuIG1vZGlmeSBpdFxyXG4gKi9cclxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHByb2Nlc3NNZHhGcm9udE1hdHRlcihcclxuXHRhcHA6IEFwcCxcclxuXHRmaWxlOiBURmlsZSxcclxuXHRjYWxsYmFjazogKGZyb250bWF0dGVyOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikgPT4gdm9pZFxyXG4pOiBQcm9taXNlPHZvaWQ+IHtcclxuXHRpZiAoIWlzTWR4RmlsZShmaWxlKSkge1xyXG5cdFx0dGhyb3cgbmV3IEVycm9yKGBGaWxlICR7ZmlsZS5wYXRofSBpcyBub3QgYW4gTURYIGZpbGVgKTtcclxuXHR9XHJcblxyXG5cdHRyeSB7XHJcblx0XHRjb25zdCBjb250ZW50ID0gYXdhaXQgYXBwLnZhdWx0LnJlYWQoZmlsZSk7XHJcblx0XHRjb25zdCBwYXJzZWQgPSBwYXJzZU1keEZyb250bWF0dGVyKGNvbnRlbnQpO1xyXG5cclxuXHRcdGlmICghcGFyc2VkKSB7XHJcblx0XHRcdHRocm93IG5ldyBFcnJvcignRmFpbGVkIHRvIHBhcnNlIGV4aXN0aW5nIGZyb250bWF0dGVyJyk7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gQ3JlYXRlIGEgY29weSBvZiB0aGUgZnJvbnRtYXR0ZXIgZm9yIHRoZSBjYWxsYmFjayB0byBtb2RpZnlcclxuXHRcdGNvbnN0IGZyb250bWF0dGVyID0geyAuLi5wYXJzZWQuZnJvbnRtYXR0ZXIgfTtcclxuXHJcblx0XHQvLyBDYWxsIHRoZSBjYWxsYmFjayB0byBtb2RpZnkgZnJvbnRtYXR0ZXJcclxuXHRcdGNhbGxiYWNrKGZyb250bWF0dGVyKTtcclxuXHJcblx0XHQvLyBTdHJpbmdpZnkgdGhlIHVwZGF0ZWQgZnJvbnRtYXR0ZXJcclxuXHRcdGNvbnN0IG5ld0Zyb250bWF0dGVyVGV4dCA9IHN0cmluZ2lmeVlhbWwoZnJvbnRtYXR0ZXIpLnRyaW0oKTtcclxuXHJcblx0XHQvLyBSZWNvbnN0cnVjdCBmaWxlIGNvbnRlbnRcclxuXHRcdGNvbnN0IG5ld0NvbnRlbnQgPSBgLS0tXFxuJHtuZXdGcm9udG1hdHRlclRleHR9XFxuLS0tXFxuJHtwYXJzZWQuYm9keX1gO1xyXG5cclxuXHRcdC8vIFdyaXRlIGJhY2sgdG8gZmlsZVxyXG5cdFx0YXdhaXQgYXBwLnZhdWx0Lm1vZGlmeShmaWxlLCBuZXdDb250ZW50KTtcclxuXHR9IGNhdGNoIChlKSB7XHJcblx0XHRjb25zb2xlLmVycm9yKGBFcnJvciBwcm9jZXNzaW5nIE1EWCBwcm9wZXJ0aWVzIGZvciAke2ZpbGUucGF0aH06YCwgZSk7XHJcblx0XHR0aHJvdyBlO1xyXG5cdH1cclxufVxyXG4iLCAiLyoqXHJcbiAqIFVuaWZpZWQgRnJvbnRtYXR0ZXIgSGVscGVyXHJcbiAqIFByb3ZpZGVzIGEgdW5pZmllZCBpbnRlcmZhY2UgZm9yIHJlYWRpbmcgYW5kIG1vZGlmeWluZyBmcm9udG1hdHRlclxyXG4gKiBXb3JrcyBmb3IgYm90aCAubWQgZmlsZXMgKHVzaW5nIE9ic2lkaWFuJ3MgY2FjaGUpIGFuZCAubWR4IGZpbGVzIChtYW51YWwgcGFyc2luZylcclxuICovXHJcblxyXG5pbXBvcnQgeyBBcHAsIFRGaWxlIH0gZnJvbSAnb2JzaWRpYW4nO1xyXG5pbXBvcnQge1xyXG5cdGlzTWR4RmlsZSxcclxuXHRyZWFkTWR4RnJvbnRtYXR0ZXIsXHJcblx0cHJvY2Vzc01keEZyb250TWF0dGVyLFxyXG59IGZyb20gJy4vbWR4LWZyb250bWF0dGVyJztcclxuXHJcbi8qKlxyXG4gKiBHZXQgZnJvbnRtYXR0ZXIgZnJvbSBhIGZpbGUgKHdvcmtzIGZvciBib3RoIC5tZCBhbmQgLm1keClcclxuICogRm9yIC5tZCBmaWxlcywgdXNlcyBPYnNpZGlhbidzIG1ldGFkYXRhIGNhY2hlIChmYXN0KVxyXG4gKiBGb3IgLm1keCBmaWxlcywgdXNlcyBtYW51YWwgcGFyc2luZ1xyXG4gKi9cclxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldEZpbGVGcm9udG1hdHRlcihcclxuXHRhcHA6IEFwcCxcclxuXHRmaWxlOiBURmlsZVxyXG4pOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgbnVsbD4ge1xyXG5cdGlmIChpc01keEZpbGUoZmlsZSkpIHtcclxuXHRcdC8vIE1EWCBmaWxlczogdXNlIG1hbnVhbCBwYXJzaW5nXHJcblx0XHRyZXR1cm4gYXdhaXQgcmVhZE1keEZyb250bWF0dGVyKGFwcCwgZmlsZSk7XHJcblx0fSBlbHNlIHtcclxuXHRcdC8vIC5tZCBmaWxlczogdXNlIE9ic2lkaWFuJ3MgbWV0YWRhdGEgY2FjaGVcclxuXHRcdGNvbnN0IG1ldGFkYXRhID0gYXBwLm1ldGFkYXRhQ2FjaGUuZ2V0RmlsZUNhY2hlKGZpbGUpO1xyXG5cdFx0cmV0dXJuIG1ldGFkYXRhPy5mcm9udG1hdHRlciB8fCBudWxsO1xyXG5cdH1cclxufVxyXG5cclxuLyoqXHJcbiAqIFByb2Nlc3MgZnJvbnRtYXR0ZXIgZm9yIGEgZmlsZSAod29ya3MgZm9yIGJvdGggLm1kIGFuZCAubWR4KVxyXG4gKiBTaW1pbGFyIEFQSSB0byBhcHAuZmlsZU1hbmFnZXIucHJvY2Vzc0Zyb250TWF0dGVyIGJ1dCB3b3JrcyBmb3IgTURYIGZpbGVzIHRvb1xyXG4gKi9cclxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHByb2Nlc3NGaWxlRnJvbnRNYXR0ZXIoXHJcblx0YXBwOiBBcHAsXHJcblx0ZmlsZTogVEZpbGUsXHJcblx0Y2FsbGJhY2s6IChmcm9udG1hdHRlcjogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pID0+IHZvaWRcclxuKTogUHJvbWlzZTx2b2lkPiB7XHJcblx0aWYgKGlzTWR4RmlsZShmaWxlKSkge1xyXG5cdFx0Ly8gTURYIGZpbGVzOiB1c2UgbWFudWFsIHByb2Nlc3NpbmdcclxuXHRcdGF3YWl0IHByb2Nlc3NNZHhGcm9udE1hdHRlcihhcHAsIGZpbGUsIGNhbGxiYWNrKTtcclxuXHR9IGVsc2Uge1xyXG5cdFx0Ly8gLm1kIGZpbGVzOiB1c2UgT2JzaWRpYW4ncyBidWlsdC1pbiBtZXRob2RcclxuXHRcdGF3YWl0IGFwcC5maWxlTWFuYWdlci5wcm9jZXNzRnJvbnRNYXR0ZXIoZmlsZSwgY2FsbGJhY2spO1xyXG5cdH1cclxufVxyXG5cclxuLyoqXHJcbiAqIENoZWNrIGlmIGEgZmlsZSBpcyBhbiBNRFggZmlsZVxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGlzTWR4RmlsZUhlbHBlcihmaWxlOiBURmlsZSk6IGJvb2xlYW4ge1xyXG5cdHJldHVybiBpc01keEZpbGUoZmlsZSk7XHJcbn1cclxuIiwgIi8qKlxuICogU2V0dGluZ3Mgc2NoZW1hIGZvciBDTVMgdmlld3NcbiAqL1xuXG5pbXBvcnQgdHlwZSB7IEJhc2VzQ01TU2V0dGluZ3MgfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgdHlwZSB7IENNU1NldHRpbmdzIH0gZnJvbSAnLi9kYXRhLXRyYW5zZm9ybSc7XG5cbi8vIEJhc2VzIGNvbmZpZyBvYmplY3QgaW50ZXJmYWNlXG5pbnRlcmZhY2UgQmFzZXNDb25maWcge1xuXHRnZXQoa2V5OiBzdHJpbmcpOiB1bmtub3duO1xufVxuXG4vKipcbiAqIFJlYWQgQ01TIHNldHRpbmdzIGZyb20gQmFzZXMgY29uZmlnIHdpdGggcGx1Z2luIGRlZmF1bHRzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZWFkQ01TU2V0dGluZ3MoXG5cdGNvbmZpZzogQmFzZXNDb25maWcgfCB1bmRlZmluZWQsXG5cdHBsdWdpblNldHRpbmdzOiBCYXNlc0NNU1NldHRpbmdzXG4pOiBDTVNTZXR0aW5ncyB7XG5cdC8vIEhlbHBlciB0byBzYWZlbHkgZ2V0IGNvbmZpZyB2YWx1ZXNcblx0Y29uc3QgZ2V0Q29uZmlnID0gKGtleTogc3RyaW5nKTogdW5rbm93biA9PiB7XG5cdFx0cmV0dXJuIGNvbmZpZz8uZ2V0Py4oa2V5KTtcblx0fTtcblxuXHRyZXR1cm4ge1xuXHRcdHRpdGxlUHJvcGVydHk6IChnZXRDb25maWcoJ3RpdGxlUHJvcGVydHknKSBhcyBzdHJpbmcpIHx8ICdub3RlLnRpdGxlJyxcblx0XHRkZXNjcmlwdGlvblByb3BlcnR5OiAoZ2V0Q29uZmlnKCdkZXNjcmlwdGlvblByb3BlcnR5JykgYXMgc3RyaW5nKSB8fCAnJyxcblx0XHRpbWFnZVByb3BlcnR5OiAoZ2V0Q29uZmlnKCdpbWFnZVByb3BlcnR5JykgYXMgc3RyaW5nKSB8fCAnJyxcblx0XHRzaG93VGl0bGU6IHRydWUsIC8vIEFsd2F5cyBzaG93IHRpdGxlLCBkZWZhdWx0aW5nIHRvIGZpbGUgbmFtZSBpZiBubyBwcm9wZXJ0eSBzZXRcblx0XHRzaG93RGF0ZTogKGdldENvbmZpZygnc2hvd0RhdGUnKSBhcyBib29sZWFuKSA/PyBmYWxzZSxcblx0XHRkYXRlUHJvcGVydHk6IChnZXRDb25maWcoJ2RhdGVQcm9wZXJ0eScpIGFzIHN0cmluZykgfHwgJycsXG5cdFx0ZGF0ZUluY2x1ZGVUaW1lOiAoZ2V0Q29uZmlnKCdkYXRlSW5jbHVkZVRpbWUnKSBhcyBib29sZWFuKSA/PyBmYWxzZSxcblx0XHRzaG93VGV4dFByZXZpZXc6IChnZXRDb25maWcoJ3Nob3dUZXh0UHJldmlldycpIGFzIGJvb2xlYW4pID8/IHRydWUsXG5cdFx0ZmFsbGJhY2tUb0NvbnRlbnQ6IChnZXRDb25maWcoJ2ZhbGxiYWNrVG9Db250ZW50JykgYXMgYm9vbGVhbikgPz8gdHJ1ZSxcblx0XHR0cnVuY2F0ZVByZXZpZXdQcm9wZXJ0eTogKGdldENvbmZpZygndHJ1bmNhdGVQcmV2aWV3UHJvcGVydHknKSBhcyBib29sZWFuKSA/PyBmYWxzZSxcblx0XHRmYWxsYmFja1RvRW1iZWRzOiAoKCkgPT4ge1xuXHRcdFx0Y29uc3QgdmFsdWUgPSBnZXRDb25maWcoJ2ZhbGxiYWNrVG9FbWJlZHMnKTtcblx0XHRcdGlmICh2YWx1ZSA9PT0gJ2Fsd2F5cycgfHwgdmFsdWUgPT09ICdpZi1lbXB0eScgfHwgdmFsdWUgPT09ICduZXZlcicpIHtcblx0XHRcdFx0cmV0dXJuIHZhbHVlO1xuXHRcdFx0fVxuXHRcdFx0Ly8gTGVnYWN5IGJvb2xlYW4gc3VwcG9ydCAtIGRlZmF1bHQgdG8gJ2lmLWVtcHR5JyBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eVxuXHRcdFx0cmV0dXJuICh2YWx1ZSA9PT0gZmFsc2UpID8gJ25ldmVyJyA6ICdpZi1lbXB0eSc7XG5cdFx0fSkoKSxcblx0XHRwcm9wZXJ0eURpc3BsYXkxOiAoZ2V0Q29uZmlnKCdwcm9wZXJ0eURpc3BsYXkxJykgYXMgc3RyaW5nKSB8fCAnJyxcblx0XHRwcm9wZXJ0eURpc3BsYXkyOiAoZ2V0Q29uZmlnKCdwcm9wZXJ0eURpc3BsYXkyJykgYXMgc3RyaW5nKSB8fCAnJyxcblx0XHRwcm9wZXJ0eURpc3BsYXkzOiAoZ2V0Q29uZmlnKCdwcm9wZXJ0eURpc3BsYXkzJykgYXMgc3RyaW5nKSB8fCAnJyxcblx0XHRwcm9wZXJ0eURpc3BsYXk0OiAoZ2V0Q29uZmlnKCdwcm9wZXJ0eURpc3BsYXk0JykgYXMgc3RyaW5nKSB8fCAnJyxcblx0XHRwcm9wZXJ0eURpc3BsYXk1OiAoZ2V0Q29uZmlnKCdwcm9wZXJ0eURpc3BsYXk1JykgYXMgc3RyaW5nKSB8fCAnJyxcblx0XHRwcm9wZXJ0eURpc3BsYXk2OiAoZ2V0Q29uZmlnKCdwcm9wZXJ0eURpc3BsYXk2JykgYXMgc3RyaW5nKSB8fCAnJyxcblx0XHRwcm9wZXJ0eURpc3BsYXk3OiAoZ2V0Q29uZmlnKCdwcm9wZXJ0eURpc3BsYXk3JykgYXMgc3RyaW5nKSB8fCAnJyxcblx0XHRwcm9wZXJ0eURpc3BsYXk4OiAoZ2V0Q29uZmlnKCdwcm9wZXJ0eURpc3BsYXk4JykgYXMgc3RyaW5nKSB8fCAnJyxcblx0XHRwcm9wZXJ0eURpc3BsYXk5OiAoZ2V0Q29uZmlnKCdwcm9wZXJ0eURpc3BsYXk5JykgYXMgc3RyaW5nKSB8fCAnJyxcblx0XHRwcm9wZXJ0eURpc3BsYXkxMDogKGdldENvbmZpZygncHJvcGVydHlEaXNwbGF5MTAnKSBhcyBzdHJpbmcpIHx8ICcnLFxuXHRcdHByb3BlcnR5RGlzcGxheTExOiAoZ2V0Q29uZmlnKCdwcm9wZXJ0eURpc3BsYXkxMScpIGFzIHN0cmluZykgfHwgJycsXG5cdFx0cHJvcGVydHlEaXNwbGF5MTI6IChnZXRDb25maWcoJ3Byb3BlcnR5RGlzcGxheTEyJykgYXMgc3RyaW5nKSB8fCAnJyxcblx0XHRwcm9wZXJ0eURpc3BsYXkxMzogKGdldENvbmZpZygncHJvcGVydHlEaXNwbGF5MTMnKSBhcyBzdHJpbmcpIHx8ICcnLFxuXHRcdHByb3BlcnR5RGlzcGxheTE0OiAoZ2V0Q29uZmlnKCdwcm9wZXJ0eURpc3BsYXkxNCcpIGFzIHN0cmluZykgfHwgJycsXG5cdFx0cHJvcGVydHlMYXlvdXQxMlNpZGVCeVNpZGU6IChnZXRDb25maWcoJ3Byb3BlcnR5TGF5b3V0MTJTaWRlQnlTaWRlJykgYXMgYm9vbGVhbikgPz8gZmFsc2UsXG5cdFx0cHJvcGVydHlMYXlvdXQzNFNpZGVCeVNpZGU6IChnZXRDb25maWcoJ3Byb3BlcnR5TGF5b3V0MzRTaWRlQnlTaWRlJykgYXMgYm9vbGVhbikgPz8gZmFsc2UsXG5cdFx0cHJvcGVydHlMYXlvdXQ1NlNpZGVCeVNpZGU6IChnZXRDb25maWcoJ3Byb3BlcnR5TGF5b3V0NTZTaWRlQnlTaWRlJykgYXMgYm9vbGVhbikgPz8gZmFsc2UsXG5cdFx0cHJvcGVydHlMYXlvdXQ3OFNpZGVCeVNpZGU6IChnZXRDb25maWcoJ3Byb3BlcnR5TGF5b3V0NzhTaWRlQnlTaWRlJykgYXMgYm9vbGVhbikgPz8gZmFsc2UsXG5cdFx0cHJvcGVydHlMYXlvdXQ5MTBTaWRlQnlTaWRlOiAoZ2V0Q29uZmlnKCdwcm9wZXJ0eUxheW91dDkxMFNpZGVCeVNpZGUnKSBhcyBib29sZWFuKSA/PyBmYWxzZSxcblx0XHRwcm9wZXJ0eUxheW91dDExMTJTaWRlQnlTaWRlOiAoZ2V0Q29uZmlnKCdwcm9wZXJ0eUxheW91dDExMTJTaWRlQnlTaWRlJykgYXMgYm9vbGVhbikgPz8gZmFsc2UsXG5cdFx0cHJvcGVydHlMYXlvdXQxMzE0U2lkZUJ5U2lkZTogKGdldENvbmZpZygncHJvcGVydHlMYXlvdXQxMzE0U2lkZUJ5U2lkZScpIGFzIGJvb2xlYW4pID8/IGZhbHNlLFxuXHRcdHByb3BlcnR5R3JvdXAxUG9zaXRpb246IChnZXRDb25maWcoJ3Byb3BlcnR5R3JvdXAxUG9zaXRpb24nKSBhcyAndG9wJyB8ICdib3R0b20nKSB8fCAnYm90dG9tJyxcblx0XHRwcm9wZXJ0eUdyb3VwMlBvc2l0aW9uOiAoZ2V0Q29uZmlnKCdwcm9wZXJ0eUdyb3VwMlBvc2l0aW9uJykgYXMgJ3RvcCcgfCAnYm90dG9tJykgfHwgJ2JvdHRvbScsXG5cdFx0cHJvcGVydHlHcm91cDNQb3NpdGlvbjogKGdldENvbmZpZygncHJvcGVydHlHcm91cDNQb3NpdGlvbicpIGFzICd0b3AnIHwgJ2JvdHRvbScpIHx8ICdib3R0b20nLFxuXHRcdHByb3BlcnR5R3JvdXA0UG9zaXRpb246IChnZXRDb25maWcoJ3Byb3BlcnR5R3JvdXA0UG9zaXRpb24nKSBhcyAndG9wJyB8ICdib3R0b20nKSB8fCAnYm90dG9tJyxcblx0XHRwcm9wZXJ0eUdyb3VwNVBvc2l0aW9uOiAoZ2V0Q29uZmlnKCdwcm9wZXJ0eUdyb3VwNVBvc2l0aW9uJykgYXMgJ3RvcCcgfCAnYm90dG9tJykgfHwgJ2JvdHRvbScsXG5cdFx0cHJvcGVydHlHcm91cDZQb3NpdGlvbjogKGdldENvbmZpZygncHJvcGVydHlHcm91cDZQb3NpdGlvbicpIGFzICd0b3AnIHwgJ2JvdHRvbScpIHx8ICdib3R0b20nLFxuXHRcdHByb3BlcnR5R3JvdXA3UG9zaXRpb246IChnZXRDb25maWcoJ3Byb3BlcnR5R3JvdXA3UG9zaXRpb24nKSBhcyAndG9wJyB8ICdib3R0b20nKSB8fCAnYm90dG9tJyxcblx0XHRpbWFnZUZvcm1hdDogKGdldENvbmZpZygnaW1hZ2VGb3JtYXQnKSBhcyAnbm9uZScgfCAndGh1bWJuYWlsJyB8ICdjb3ZlcicpIHx8ICd0aHVtYm5haWwnLFxuXHRcdGltYWdlUG9zaXRpb246IChnZXRDb25maWcoJ2ltYWdlUG9zaXRpb24nKSBhcyAnbGVmdCcgfCAncmlnaHQnIHwgJ3RvcCcgfCAnYm90dG9tJykgfHwgJ3JpZ2h0Jyxcblx0XHRwcm9wZXJ0eUxhYmVsczogKGdldENvbmZpZygncHJvcGVydHlMYWJlbHMnKSBhcyAnaGlkZScgfCAnaW5saW5lJyB8ICdhYm92ZScpIHx8ICdoaWRlJyxcblx0XHRzaG93RHJhZnRTdGF0dXM6IChnZXRDb25maWcoJ3Nob3dEcmFmdFN0YXR1cycpIGFzIGJvb2xlYW4pID8/IGZhbHNlLFxuXHRcdGRyYWZ0U3RhdHVzUHJvcGVydHk6IChnZXRDb25maWcoJ2RyYWZ0U3RhdHVzUHJvcGVydHknKSBhcyBzdHJpbmcpIHx8ICcnLFxuXHRcdGRyYWZ0U3RhdHVzUmV2ZXJzZTogKGdldENvbmZpZygnZHJhZnRTdGF0dXNSZXZlcnNlJykgYXMgYm9vbGVhbikgPz8gZmFsc2UsXG5cdFx0ZHJhZnRTdGF0dXNVc2VGaWxlbmFtZVByZWZpeDogKGdldENvbmZpZygnZHJhZnRTdGF0dXNVc2VGaWxlbmFtZVByZWZpeCcpIGFzIGJvb2xlYW4pID8/IGZhbHNlLFxuXHRcdHNob3dUYWdzOiAoZ2V0Q29uZmlnKCdzaG93VGFncycpIGFzIGJvb2xlYW4pID8/IGZhbHNlLFxuXHRcdHRhZ3NQcm9wZXJ0eTogKGdldENvbmZpZygndGFnc1Byb3BlcnR5JykgYXMgc3RyaW5nKSB8fCAnJyxcblx0XHRtYXhUYWdzVG9TaG93OiAoZ2V0Q29uZmlnKCdtYXhUYWdzVG9TaG93JykgYXMgbnVtYmVyKSA/PyAzLFxuXHRcdGN1c3RvbWl6ZU5ld0J1dHRvbjogKGdldENvbmZpZygnY3VzdG9taXplTmV3QnV0dG9uJykgYXMgYm9vbGVhbikgPz8gZmFsc2UsXG5cdFx0bmV3Tm90ZUxvY2F0aW9uOiAoZ2V0Q29uZmlnKCduZXdOb3RlTG9jYXRpb24nKSBhcyBzdHJpbmcpIHx8ICcnLFxuXHRcdGhpZGVRdWlja0VkaXRJY29uOiAoZ2V0Q29uZmlnKCdoaWRlUXVpY2tFZGl0SWNvbicpIGFzIGJvb2xlYW4pID8/IGZhbHNlLFxuXHRcdGNhcmRTaXplOiAoZ2V0Q29uZmlnKCdjYXJkU2l6ZScpIGFzIG51bWJlcikgPz8gMjUwLFxuXHRcdGltYWdlQXNwZWN0UmF0aW86IChnZXRDb25maWcoJ2ltYWdlQXNwZWN0UmF0aW8nKSBhcyBudW1iZXIpID8/IDAuNTUsXG5cdH07XG59XG5cbi8qKlxuICogQ01TIHZpZXcgb3B0aW9ucyBmb3IgQmFzZXMgY29uZmlndXJhdGlvblxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q01TVmlld09wdGlvbnMoKTogdW5rbm93bltdIHtcblx0Y29uc3Qgb3B0aW9ucyA9IFtcblx0XHQvLyBDYXJkIHNpemUgKHN0YW5kYWxvbmUpXG5cdFx0e1xuXHRcdFx0dHlwZTogJ3NsaWRlcicsXG5cdFx0XHRkaXNwbGF5TmFtZTogJ0NhcmQgc2l6ZScsXG5cdFx0XHRrZXk6ICdjYXJkU2l6ZScsXG5cdFx0XHRtaW46IDUwLFxuXHRcdFx0bWF4OiAxMDAwLFxuXHRcdFx0c3RlcDogMTAsXG5cdFx0XHRkZWZhdWx0OiAyNTBcblx0XHR9LFxuXHRcdC8vIFRpdGxlIGdyb3VwXG5cdFx0e1xuXHRcdFx0dHlwZTogJ2dyb3VwJyxcblx0XHRcdGRpc3BsYXlOYW1lOiAnVGl0bGUnLFxuXHRcdFx0aXRlbXM6IFtcblx0XHRcdFx0e1xuXHRcdFx0XHRcdHR5cGU6ICdwcm9wZXJ0eScsXG5cdFx0XHRcdFx0ZGlzcGxheU5hbWU6ICdUaXRsZSBwcm9wZXJ0eScsXG5cdFx0XHRcdFx0a2V5OiAndGl0bGVQcm9wZXJ0eScsXG5cdFx0XHRcdFx0cGxhY2Vob2xkZXI6ICdTZWxlY3QgcHJvcGVydHknLFxuXHRcdFx0XHRcdGRlZmF1bHQ6ICcnXG5cdFx0XHRcdH1cblx0XHRcdF1cblx0XHR9LFxuXHRcdC8vIFRleHQgcHJldmlldyBncm91cFxuXHRcdHtcblx0XHRcdHR5cGU6ICdncm91cCcsXG5cdFx0XHRkaXNwbGF5TmFtZTogJ1RleHQgcHJldmlldycsXG5cdFx0XHRpdGVtczogW1xuXHRcdFx0XHR7XG5cdFx0XHRcdFx0dHlwZTogJ3RvZ2dsZScsXG5cdFx0XHRcdFx0ZGlzcGxheU5hbWU6ICdTaG93IHRleHQgcHJldmlldycsXG5cdFx0XHRcdFx0a2V5OiAnc2hvd1RleHRQcmV2aWV3Jyxcblx0XHRcdFx0XHRkZWZhdWx0OiB0cnVlXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHtcblx0XHRcdFx0XHR0eXBlOiAncHJvcGVydHknLFxuXHRcdFx0XHRcdGRpc3BsYXlOYW1lOiAnVGV4dCBwcmV2aWV3IHByb3BlcnR5Jyxcblx0XHRcdFx0XHRrZXk6ICdkZXNjcmlwdGlvblByb3BlcnR5Jyxcblx0XHRcdFx0XHRwbGFjZWhvbGRlcjogJ1NlbGVjdCBwcm9wZXJ0eScsXG5cdFx0XHRcdFx0ZGVmYXVsdDogJydcblx0XHRcdFx0fSxcblx0XHRcdFx0e1xuXHRcdFx0XHRcdHR5cGU6ICd0b2dnbGUnLFxuXHRcdFx0XHRcdGRpc3BsYXlOYW1lOiAnVXNlIG5vdGUgY29udGVudCBpZiB0ZXh0IHByZXZpZXcgcHJvcGVydHkgdW5hdmFpbGFibGUnLFxuXHRcdFx0XHRcdGtleTogJ2ZhbGxiYWNrVG9Db250ZW50Jyxcblx0XHRcdFx0XHRkZWZhdWx0OiB0cnVlXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHtcblx0XHRcdFx0XHR0eXBlOiAndG9nZ2xlJyxcblx0XHRcdFx0XHRkaXNwbGF5TmFtZTogJ1RydW5jYXRlIHByZXZpZXcgcHJvcGVydHknLFxuXHRcdFx0XHRcdGtleTogJ3RydW5jYXRlUHJldmlld1Byb3BlcnR5Jyxcblx0XHRcdFx0XHRkZWZhdWx0OiBmYWxzZVxuXHRcdFx0XHR9XG5cdFx0XHRdXG5cdFx0fSxcblx0XHQvLyBJbWFnZSBncm91cFxuXHRcdHtcblx0XHRcdHR5cGU6ICdncm91cCcsXG5cdFx0XHRkaXNwbGF5TmFtZTogJ0ltYWdlJyxcblx0XHRcdGl0ZW1zOiBbXG5cdFx0XHRcdHtcblx0XHRcdFx0XHR0eXBlOiAnZHJvcGRvd24nLFxuXHRcdFx0XHRcdGRpc3BsYXlOYW1lOiAnSW1hZ2UgZm9ybWF0Jyxcblx0XHRcdFx0XHRrZXk6ICdpbWFnZUZvcm1hdCcsXG5cdFx0XHRcdFx0b3B0aW9uczoge1xuXHRcdFx0XHRcdFx0J25vbmUnOiAnTm8gaW1hZ2UnLFxuXHRcdFx0XHRcdFx0J3RodW1ibmFpbCc6ICdUaHVtYm5haWwnLFxuXHRcdFx0XHRcdFx0J2NvdmVyJzogJ0NvdmVyJ1xuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0ZGVmYXVsdDogJ3RodW1ibmFpbCdcblx0XHRcdFx0fSxcblx0XHRcdFx0e1xuXHRcdFx0XHRcdHR5cGU6ICdwcm9wZXJ0eScsXG5cdFx0XHRcdFx0ZGlzcGxheU5hbWU6ICdJbWFnZSBwcm9wZXJ0eScsXG5cdFx0XHRcdFx0a2V5OiAnaW1hZ2VQcm9wZXJ0eScsXG5cdFx0XHRcdFx0cGxhY2Vob2xkZXI6ICdTZWxlY3QgcHJvcGVydHknLFxuXHRcdFx0XHRcdGRlZmF1bHQ6ICcnXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHtcblx0XHRcdFx0XHR0eXBlOiAnZHJvcGRvd24nLFxuXHRcdFx0XHRcdGRpc3BsYXlOYW1lOiAnU2hvdyBpbWFnZSBlbWJlZHMnLFxuXHRcdFx0XHRcdGtleTogJ2ZhbGxiYWNrVG9FbWJlZHMnLFxuXHRcdFx0XHRcdG9wdGlvbnM6IHtcblx0XHRcdFx0XHRcdCdhbHdheXMnOiAnQWx3YXlzJyxcblx0XHRcdFx0XHRcdCdpZi1lbXB0eSc6ICdJZiBpbWFnZSBwcm9wZXJ0eSBtaXNzaW5nIG9yIGVtcHR5Jyxcblx0XHRcdFx0XHRcdCduZXZlcic6ICdOZXZlcidcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdGRlZmF1bHQ6ICdpZi1lbXB0eSdcblx0XHRcdFx0fSxcblx0XHRcdFx0e1xuXHRcdFx0XHRcdHR5cGU6ICdzbGlkZXInLFxuXHRcdFx0XHRcdGRpc3BsYXlOYW1lOiAnSW1hZ2UgYXNwZWN0IHJhdGlvJyxcblx0XHRcdFx0XHRrZXk6ICdpbWFnZUFzcGVjdFJhdGlvJyxcblx0XHRcdFx0XHRtaW46IDAuMSxcblx0XHRcdFx0XHRtYXg6IDIuMCxcblx0XHRcdFx0XHRzdGVwOiAwLjA1LFxuXHRcdFx0XHRcdGRlZmF1bHQ6IDAuNTUsXG5cdFx0XHRcdFx0c2hvd1doZW46IHtcblx0XHRcdFx0XHRcdGtleTogJ2ltYWdlRm9ybWF0Jyxcblx0XHRcdFx0XHRcdHZhbHVlOiAnY292ZXInXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRdXG5cdFx0fSxcblx0XHQvLyBEYXRlIGdyb3VwXG5cdFx0e1xuXHRcdFx0dHlwZTogJ2dyb3VwJyxcblx0XHRcdGRpc3BsYXlOYW1lOiAnRGF0ZScsXG5cdFx0XHRpdGVtczogW1xuXHRcdFx0XHR7XG5cdFx0XHRcdFx0dHlwZTogJ3RvZ2dsZScsXG5cdFx0XHRcdFx0ZGlzcGxheU5hbWU6ICdTaG93IGRhdGUnLFxuXHRcdFx0XHRcdGtleTogJ3Nob3dEYXRlJyxcblx0XHRcdFx0XHRkZWZhdWx0OiBmYWxzZVxuXHRcdFx0XHR9LFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0dHlwZTogJ3Byb3BlcnR5Jyxcblx0XHRcdFx0XHRkaXNwbGF5TmFtZTogJ0RhdGUgcHJvcGVydHknLFxuXHRcdFx0XHRcdGtleTogJ2RhdGVQcm9wZXJ0eScsXG5cdFx0XHRcdFx0cGxhY2Vob2xkZXI6ICdTZWxlY3QgcHJvcGVydHknLFxuXHRcdFx0XHRcdGRlZmF1bHQ6ICcnXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHtcblx0XHRcdFx0XHR0eXBlOiAndG9nZ2xlJyxcblx0XHRcdFx0XHRkaXNwbGF5TmFtZTogJ0luY2x1ZGUgdGltZScsXG5cdFx0XHRcdFx0ZGVzY3JpcHRpb246ICdXaGVuIGVuYWJsZWQsIGRpc3BsYXlzIGJvdGggZGF0ZSBhbmQgdGltZSB1c2luZyB5b3VyIHN5c3RlbSBsb2NhbGUgc2V0dGluZ3MnLFxuXHRcdFx0XHRcdGtleTogJ2RhdGVJbmNsdWRlVGltZScsXG5cdFx0XHRcdFx0ZGVmYXVsdDogZmFsc2Vcblx0XHRcdFx0fVxuXHRcdFx0XVxuXHRcdH0sXG5cdFx0Ly8gRHJhZnQgc3RhdHVzIGdyb3VwXG5cdFx0e1xuXHRcdFx0dHlwZTogJ2dyb3VwJyxcblx0XHRcdGRpc3BsYXlOYW1lOiAnRHJhZnQgc3RhdHVzJyxcblx0XHRcdGl0ZW1zOiBbXG5cdFx0XHRcdHtcblx0XHRcdFx0XHR0eXBlOiAndG9nZ2xlJyxcblx0XHRcdFx0XHRkaXNwbGF5TmFtZTogJ1Nob3cgZHJhZnQgc3RhdHVzJyxcblx0XHRcdFx0XHRrZXk6ICdzaG93RHJhZnRTdGF0dXMnLFxuXHRcdFx0XHRcdGRlZmF1bHQ6IGZhbHNlXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHtcblx0XHRcdFx0XHR0eXBlOiAncHJvcGVydHknLFxuXHRcdFx0XHRcdGRpc3BsYXlOYW1lOiAnRHJhZnQgc3RhdHVzIHByb3BlcnR5Jyxcblx0XHRcdFx0XHRrZXk6ICdkcmFmdFN0YXR1c1Byb3BlcnR5Jyxcblx0XHRcdFx0XHRwbGFjZWhvbGRlcjogJ1NlbGVjdCBwcm9wZXJ0eScsXG5cdFx0XHRcdFx0ZGVmYXVsdDogJydcblx0XHRcdFx0fSxcblx0XHRcdFx0e1xuXHRcdFx0XHRcdHR5cGU6ICd0b2dnbGUnLFxuXHRcdFx0XHRcdGRpc3BsYXlOYW1lOiAnUmV2ZXJzZSBsb2dpYycsXG5cdFx0XHRcdFx0a2V5OiAnZHJhZnRTdGF0dXNSZXZlcnNlJyxcblx0XHRcdFx0XHRkZWZhdWx0OiBmYWxzZVxuXHRcdFx0XHR9LFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0dHlwZTogJ3RvZ2dsZScsXG5cdFx0XHRcdFx0ZGlzcGxheU5hbWU6ICdGaWxlbmFtZSB1bmRlcnNjb3JlIHByZWZpeCBhcyBkcmFmdCBpbmRpY2F0b3InLFxuXHRcdFx0XHRcdGtleTogJ2RyYWZ0U3RhdHVzVXNlRmlsZW5hbWVQcmVmaXgnLFxuXHRcdFx0XHRcdGRlZmF1bHQ6IGZhbHNlXG5cdFx0XHRcdH1cblx0XHRcdF1cblx0XHR9LFxuXHRcdC8vIFRhZ3MgZ3JvdXBcblx0XHR7XG5cdFx0XHR0eXBlOiAnZ3JvdXAnLFxuXHRcdFx0ZGlzcGxheU5hbWU6ICdUYWdzJyxcblx0XHRcdGl0ZW1zOiBbXG5cdFx0XHRcdHtcblx0XHRcdFx0XHR0eXBlOiAndG9nZ2xlJyxcblx0XHRcdFx0XHRkaXNwbGF5TmFtZTogJ1Nob3cgdGFncycsXG5cdFx0XHRcdFx0a2V5OiAnc2hvd1RhZ3MnLFxuXHRcdFx0XHRcdGRlZmF1bHQ6IGZhbHNlXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHtcblx0XHRcdFx0XHR0eXBlOiAncHJvcGVydHknLFxuXHRcdFx0XHRcdGRpc3BsYXlOYW1lOiAnVGFncyBwcm9wZXJ0eScsXG5cdFx0XHRcdFx0a2V5OiAndGFnc1Byb3BlcnR5Jyxcblx0XHRcdFx0XHRwbGFjZWhvbGRlcjogJ1NlbGVjdCBwcm9wZXJ0eScsXG5cdFx0XHRcdFx0ZGVmYXVsdDogJydcblx0XHRcdFx0fSxcblx0XHRcdFx0e1xuXHRcdFx0XHRcdHR5cGU6ICdzbGlkZXInLFxuXHRcdFx0XHRcdGRpc3BsYXlOYW1lOiAnTWF4aW11bSB0YWdzIHRvIHNob3cnLFxuXHRcdFx0XHRcdGtleTogJ21heFRhZ3NUb1Nob3cnLFxuXHRcdFx0XHRcdG1pbjogMSxcblx0XHRcdFx0XHRtYXg6IDUwLFxuXHRcdFx0XHRcdHN0ZXA6IDEsXG5cdFx0XHRcdFx0ZGVmYXVsdDogMyxcblx0XHRcdFx0XHRzaG93V2hlbjoge1xuXHRcdFx0XHRcdFx0a2V5OiAnc2hvd1RhZ3MnLFxuXHRcdFx0XHRcdFx0dmFsdWU6IHRydWVcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdF1cblx0XHR9LFxuXHRcdC8vIFByb3BlcnRpZXMgZ3JvdXBcblx0XHR7XG5cdFx0XHR0eXBlOiAnZ3JvdXAnLFxuXHRcdFx0ZGlzcGxheU5hbWU6ICdQcm9wZXJ0aWVzJyxcblx0XHRcdGl0ZW1zOiBbXG5cdFx0XHRcdHtcblx0XHRcdFx0XHR0eXBlOiAnZHJvcGRvd24nLFxuXHRcdFx0XHRcdGRpc3BsYXlOYW1lOiAnU2hvdyBwcm9wZXJ0eSBsYWJlbHMnLFxuXHRcdFx0XHRcdGtleTogJ3Byb3BlcnR5TGFiZWxzJyxcblx0XHRcdFx0XHRvcHRpb25zOiB7XG5cdFx0XHRcdFx0XHQnaGlkZSc6ICdIaWRlJyxcblx0XHRcdFx0XHRcdCdpbmxpbmUnOiAnSW5saW5lJyxcblx0XHRcdFx0XHRcdCdhYm92ZSc6ICdPbiB0b3AnXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRkZWZhdWx0OiAnaGlkZSdcblx0XHRcdFx0fVxuXHRcdFx0XVxuXHRcdH0sXG5cdFx0Ly8gUHJvcGVydHkgZ3JvdXAgMVxuXHRcdHtcblx0XHRcdHR5cGU6ICdncm91cCcsXG5cdFx0XHRkaXNwbGF5TmFtZTogJ1Byb3BlcnR5IGdyb3VwIDEnLFxuXHRcdFx0aXRlbXM6IFtcblx0XHRcdFx0e1xuXHRcdFx0XHRcdHR5cGU6ICdwcm9wZXJ0eScsXG5cdFx0XHRcdFx0ZGlzcGxheU5hbWU6ICdGaXJzdCBwcm9wZXJ0eScsXG5cdFx0XHRcdFx0a2V5OiAncHJvcGVydHlEaXNwbGF5MScsXG5cdFx0XHRcdFx0cGxhY2Vob2xkZXI6ICdTZWxlY3QgcHJvcGVydHknLFxuXHRcdFx0XHRcdGRlZmF1bHQ6ICcnXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHtcblx0XHRcdFx0XHR0eXBlOiAncHJvcGVydHknLFxuXHRcdFx0XHRcdGRpc3BsYXlOYW1lOiAnU2Vjb25kIHByb3BlcnR5Jyxcblx0XHRcdFx0XHRrZXk6ICdwcm9wZXJ0eURpc3BsYXkyJyxcblx0XHRcdFx0XHRwbGFjZWhvbGRlcjogJ1NlbGVjdCBwcm9wZXJ0eScsXG5cdFx0XHRcdFx0ZGVmYXVsdDogJydcblx0XHRcdFx0fSxcblx0XHRcdFx0e1xuXHRcdFx0XHRcdHR5cGU6ICd0b2dnbGUnLFxuXHRcdFx0XHRcdGRpc3BsYXlOYW1lOiAnU2hvdyBzaWRlLWJ5LXNpZGUnLFxuXHRcdFx0XHRcdGtleTogJ3Byb3BlcnR5TGF5b3V0MTJTaWRlQnlTaWRlJyxcblx0XHRcdFx0XHRkZWZhdWx0OiBmYWxzZVxuXHRcdFx0XHR9LFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0dHlwZTogJ2Ryb3Bkb3duJyxcblx0XHRcdFx0XHRkaXNwbGF5TmFtZTogJ1Bvc2l0aW9uJyxcblx0XHRcdFx0XHRrZXk6ICdwcm9wZXJ0eUdyb3VwMVBvc2l0aW9uJyxcblx0XHRcdFx0XHRvcHRpb25zOiB7XG5cdFx0XHRcdFx0XHQndG9wJzogJ1RvcCcsXG5cdFx0XHRcdFx0XHQnYm90dG9tJzogJ0JvdHRvbSdcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdGRlZmF1bHQ6ICdib3R0b20nXG5cdFx0XHRcdH1cblx0XHRcdF1cblx0XHR9LFxuXHRcdC8vIFByb3BlcnR5IGdyb3VwIDJcblx0XHR7XG5cdFx0XHR0eXBlOiAnZ3JvdXAnLFxuXHRcdFx0ZGlzcGxheU5hbWU6ICdQcm9wZXJ0eSBncm91cCAyJyxcblx0XHRcdGl0ZW1zOiBbXG5cdFx0XHRcdHtcblx0XHRcdFx0XHR0eXBlOiAncHJvcGVydHknLFxuXHRcdFx0XHRcdGRpc3BsYXlOYW1lOiAnVGhpcmQgcHJvcGVydHknLFxuXHRcdFx0XHRcdGtleTogJ3Byb3BlcnR5RGlzcGxheTMnLFxuXHRcdFx0XHRcdHBsYWNlaG9sZGVyOiAnU2VsZWN0IHByb3BlcnR5Jyxcblx0XHRcdFx0XHRkZWZhdWx0OiAnJ1xuXHRcdFx0XHR9LFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0dHlwZTogJ3Byb3BlcnR5Jyxcblx0XHRcdFx0XHRkaXNwbGF5TmFtZTogJ0ZvdXJ0aCBwcm9wZXJ0eScsXG5cdFx0XHRcdFx0a2V5OiAncHJvcGVydHlEaXNwbGF5NCcsXG5cdFx0XHRcdFx0cGxhY2Vob2xkZXI6ICdTZWxlY3QgcHJvcGVydHknLFxuXHRcdFx0XHRcdGRlZmF1bHQ6ICcnXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHtcblx0XHRcdFx0XHR0eXBlOiAndG9nZ2xlJyxcblx0XHRcdFx0XHRkaXNwbGF5TmFtZTogJ1Nob3cgc2lkZS1ieS1zaWRlJyxcblx0XHRcdFx0XHRrZXk6ICdwcm9wZXJ0eUxheW91dDM0U2lkZUJ5U2lkZScsXG5cdFx0XHRcdFx0ZGVmYXVsdDogZmFsc2Vcblx0XHRcdFx0fSxcblx0XHRcdFx0e1xuXHRcdFx0XHRcdHR5cGU6ICdkcm9wZG93bicsXG5cdFx0XHRcdFx0ZGlzcGxheU5hbWU6ICdQb3NpdGlvbicsXG5cdFx0XHRcdFx0a2V5OiAncHJvcGVydHlHcm91cDJQb3NpdGlvbicsXG5cdFx0XHRcdFx0b3B0aW9uczoge1xuXHRcdFx0XHRcdFx0J3RvcCc6ICdUb3AnLFxuXHRcdFx0XHRcdFx0J2JvdHRvbSc6ICdCb3R0b20nXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRkZWZhdWx0OiAnYm90dG9tJ1xuXHRcdFx0XHR9XG5cdFx0XHRdXG5cdFx0fSxcblx0XHQvLyBQcm9wZXJ0eSBncm91cCAzXG5cdFx0e1xuXHRcdFx0dHlwZTogJ2dyb3VwJyxcblx0XHRcdGRpc3BsYXlOYW1lOiAnUHJvcGVydHkgZ3JvdXAgMycsXG5cdFx0XHRpdGVtczogW1xuXHRcdFx0XHR7XG5cdFx0XHRcdFx0dHlwZTogJ3Byb3BlcnR5Jyxcblx0XHRcdFx0XHRkaXNwbGF5TmFtZTogJ0ZpcnN0IHByb3BlcnR5Jyxcblx0XHRcdFx0XHRrZXk6ICdwcm9wZXJ0eURpc3BsYXk1Jyxcblx0XHRcdFx0XHRwbGFjZWhvbGRlcjogJ1NlbGVjdCBwcm9wZXJ0eScsXG5cdFx0XHRcdFx0ZGVmYXVsdDogJydcblx0XHRcdFx0fSxcblx0XHRcdFx0e1xuXHRcdFx0XHRcdHR5cGU6ICdwcm9wZXJ0eScsXG5cdFx0XHRcdFx0ZGlzcGxheU5hbWU6ICdTZWNvbmQgcHJvcGVydHknLFxuXHRcdFx0XHRcdGtleTogJ3Byb3BlcnR5RGlzcGxheTYnLFxuXHRcdFx0XHRcdHBsYWNlaG9sZGVyOiAnU2VsZWN0IHByb3BlcnR5Jyxcblx0XHRcdFx0XHRkZWZhdWx0OiAnJ1xuXHRcdFx0XHR9LFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0dHlwZTogJ3RvZ2dsZScsXG5cdFx0XHRcdFx0ZGlzcGxheU5hbWU6ICdTaG93IHNpZGUtYnktc2lkZScsXG5cdFx0XHRcdFx0a2V5OiAncHJvcGVydHlMYXlvdXQ1NlNpZGVCeVNpZGUnLFxuXHRcdFx0XHRcdGRlZmF1bHQ6IGZhbHNlXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHtcblx0XHRcdFx0XHR0eXBlOiAnZHJvcGRvd24nLFxuXHRcdFx0XHRcdGRpc3BsYXlOYW1lOiAnUG9zaXRpb24nLFxuXHRcdFx0XHRcdGtleTogJ3Byb3BlcnR5R3JvdXAzUG9zaXRpb24nLFxuXHRcdFx0XHRcdG9wdGlvbnM6IHtcblx0XHRcdFx0XHRcdCd0b3AnOiAnVG9wJyxcblx0XHRcdFx0XHRcdCdib3R0b20nOiAnQm90dG9tJ1xuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0ZGVmYXVsdDogJ2JvdHRvbSdcblx0XHRcdFx0fVxuXHRcdFx0XVxuXHRcdH0sXG5cdFx0Ly8gUHJvcGVydHkgZ3JvdXAgNFxuXHRcdHtcblx0XHRcdHR5cGU6ICdncm91cCcsXG5cdFx0XHRkaXNwbGF5TmFtZTogJ1Byb3BlcnR5IGdyb3VwIDQnLFxuXHRcdFx0aXRlbXM6IFtcblx0XHRcdFx0e1xuXHRcdFx0XHRcdHR5cGU6ICdwcm9wZXJ0eScsXG5cdFx0XHRcdFx0ZGlzcGxheU5hbWU6ICdGaXJzdCBwcm9wZXJ0eScsXG5cdFx0XHRcdFx0a2V5OiAncHJvcGVydHlEaXNwbGF5NycsXG5cdFx0XHRcdFx0cGxhY2Vob2xkZXI6ICdTZWxlY3QgcHJvcGVydHknLFxuXHRcdFx0XHRcdGRlZmF1bHQ6ICcnXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHtcblx0XHRcdFx0XHR0eXBlOiAncHJvcGVydHknLFxuXHRcdFx0XHRcdGRpc3BsYXlOYW1lOiAnU2Vjb25kIHByb3BlcnR5Jyxcblx0XHRcdFx0XHRrZXk6ICdwcm9wZXJ0eURpc3BsYXk4Jyxcblx0XHRcdFx0XHRwbGFjZWhvbGRlcjogJ1NlbGVjdCBwcm9wZXJ0eScsXG5cdFx0XHRcdFx0ZGVmYXVsdDogJydcblx0XHRcdFx0fSxcblx0XHRcdFx0e1xuXHRcdFx0XHRcdHR5cGU6ICd0b2dnbGUnLFxuXHRcdFx0XHRcdGRpc3BsYXlOYW1lOiAnU2hvdyBzaWRlLWJ5LXNpZGUnLFxuXHRcdFx0XHRcdGtleTogJ3Byb3BlcnR5TGF5b3V0NzhTaWRlQnlTaWRlJyxcblx0XHRcdFx0XHRkZWZhdWx0OiBmYWxzZVxuXHRcdFx0XHR9LFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0dHlwZTogJ2Ryb3Bkb3duJyxcblx0XHRcdFx0XHRkaXNwbGF5TmFtZTogJ1Bvc2l0aW9uJyxcblx0XHRcdFx0XHRrZXk6ICdwcm9wZXJ0eUdyb3VwNFBvc2l0aW9uJyxcblx0XHRcdFx0XHRvcHRpb25zOiB7XG5cdFx0XHRcdFx0XHQndG9wJzogJ1RvcCcsXG5cdFx0XHRcdFx0XHQnYm90dG9tJzogJ0JvdHRvbSdcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdGRlZmF1bHQ6ICdib3R0b20nXG5cdFx0XHRcdH1cblx0XHRcdF1cblx0XHR9LFxuXHRcdC8vIFByb3BlcnR5IGdyb3VwIDVcblx0XHR7XG5cdFx0XHR0eXBlOiAnZ3JvdXAnLFxuXHRcdFx0ZGlzcGxheU5hbWU6ICdQcm9wZXJ0eSBncm91cCA1Jyxcblx0XHRcdGl0ZW1zOiBbXG5cdFx0XHRcdHtcblx0XHRcdFx0XHR0eXBlOiAncHJvcGVydHknLFxuXHRcdFx0XHRcdGRpc3BsYXlOYW1lOiAnRmlyc3QgcHJvcGVydHknLFxuXHRcdFx0XHRcdGtleTogJ3Byb3BlcnR5RGlzcGxheTknLFxuXHRcdFx0XHRcdHBsYWNlaG9sZGVyOiAnU2VsZWN0IHByb3BlcnR5Jyxcblx0XHRcdFx0XHRkZWZhdWx0OiAnJ1xuXHRcdFx0XHR9LFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0dHlwZTogJ3Byb3BlcnR5Jyxcblx0XHRcdFx0XHRkaXNwbGF5TmFtZTogJ1NlY29uZCBwcm9wZXJ0eScsXG5cdFx0XHRcdFx0a2V5OiAncHJvcGVydHlEaXNwbGF5MTAnLFxuXHRcdFx0XHRcdHBsYWNlaG9sZGVyOiAnU2VsZWN0IHByb3BlcnR5Jyxcblx0XHRcdFx0XHRkZWZhdWx0OiAnJ1xuXHRcdFx0XHR9LFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0dHlwZTogJ3RvZ2dsZScsXG5cdFx0XHRcdFx0ZGlzcGxheU5hbWU6ICdTaG93IHNpZGUtYnktc2lkZScsXG5cdFx0XHRcdFx0a2V5OiAncHJvcGVydHlMYXlvdXQ5MTBTaWRlQnlTaWRlJyxcblx0XHRcdFx0XHRkZWZhdWx0OiBmYWxzZVxuXHRcdFx0XHR9LFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0dHlwZTogJ2Ryb3Bkb3duJyxcblx0XHRcdFx0XHRkaXNwbGF5TmFtZTogJ1Bvc2l0aW9uJyxcblx0XHRcdFx0XHRrZXk6ICdwcm9wZXJ0eUdyb3VwNVBvc2l0aW9uJyxcblx0XHRcdFx0XHRvcHRpb25zOiB7XG5cdFx0XHRcdFx0XHQndG9wJzogJ1RvcCcsXG5cdFx0XHRcdFx0XHQnYm90dG9tJzogJ0JvdHRvbSdcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdGRlZmF1bHQ6ICdib3R0b20nXG5cdFx0XHRcdH1cblx0XHRcdF1cblx0XHR9LFxuXHRcdC8vIFByb3BlcnR5IGdyb3VwIDZcblx0XHR7XG5cdFx0XHR0eXBlOiAnZ3JvdXAnLFxuXHRcdFx0ZGlzcGxheU5hbWU6ICdQcm9wZXJ0eSBncm91cCA2Jyxcblx0XHRcdGl0ZW1zOiBbXG5cdFx0XHRcdHtcblx0XHRcdFx0XHR0eXBlOiAncHJvcGVydHknLFxuXHRcdFx0XHRcdGRpc3BsYXlOYW1lOiAnRmlyc3QgcHJvcGVydHknLFxuXHRcdFx0XHRcdGtleTogJ3Byb3BlcnR5RGlzcGxheTExJyxcblx0XHRcdFx0XHRwbGFjZWhvbGRlcjogJ1NlbGVjdCBwcm9wZXJ0eScsXG5cdFx0XHRcdFx0ZGVmYXVsdDogJydcblx0XHRcdFx0fSxcblx0XHRcdFx0e1xuXHRcdFx0XHRcdHR5cGU6ICdwcm9wZXJ0eScsXG5cdFx0XHRcdFx0ZGlzcGxheU5hbWU6ICdTZWNvbmQgcHJvcGVydHknLFxuXHRcdFx0XHRcdGtleTogJ3Byb3BlcnR5RGlzcGxheTEyJyxcblx0XHRcdFx0XHRwbGFjZWhvbGRlcjogJ1NlbGVjdCBwcm9wZXJ0eScsXG5cdFx0XHRcdFx0ZGVmYXVsdDogJydcblx0XHRcdFx0fSxcblx0XHRcdFx0e1xuXHRcdFx0XHRcdHR5cGU6ICd0b2dnbGUnLFxuXHRcdFx0XHRcdGRpc3BsYXlOYW1lOiAnU2hvdyBzaWRlLWJ5LXNpZGUnLFxuXHRcdFx0XHRcdGtleTogJ3Byb3BlcnR5TGF5b3V0MTExMlNpZGVCeVNpZGUnLFxuXHRcdFx0XHRcdGRlZmF1bHQ6IGZhbHNlXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHtcblx0XHRcdFx0XHR0eXBlOiAnZHJvcGRvd24nLFxuXHRcdFx0XHRcdGRpc3BsYXlOYW1lOiAnUG9zaXRpb24nLFxuXHRcdFx0XHRcdGtleTogJ3Byb3BlcnR5R3JvdXA2UG9zaXRpb24nLFxuXHRcdFx0XHRcdG9wdGlvbnM6IHtcblx0XHRcdFx0XHRcdCd0b3AnOiAnVG9wJyxcblx0XHRcdFx0XHRcdCdib3R0b20nOiAnQm90dG9tJ1xuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0ZGVmYXVsdDogJ2JvdHRvbSdcblx0XHRcdFx0fVxuXHRcdFx0XVxuXHRcdH0sXG5cdFx0Ly8gUHJvcGVydHkgZ3JvdXAgN1xuXHRcdHtcblx0XHRcdHR5cGU6ICdncm91cCcsXG5cdFx0XHRkaXNwbGF5TmFtZTogJ1Byb3BlcnR5IGdyb3VwIDcnLFxuXHRcdFx0aXRlbXM6IFtcblx0XHRcdFx0e1xuXHRcdFx0XHRcdHR5cGU6ICdwcm9wZXJ0eScsXG5cdFx0XHRcdFx0ZGlzcGxheU5hbWU6ICdGaXJzdCBwcm9wZXJ0eScsXG5cdFx0XHRcdFx0a2V5OiAncHJvcGVydHlEaXNwbGF5MTMnLFxuXHRcdFx0XHRcdHBsYWNlaG9sZGVyOiAnU2VsZWN0IHByb3BlcnR5Jyxcblx0XHRcdFx0XHRkZWZhdWx0OiAnJ1xuXHRcdFx0XHR9LFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0dHlwZTogJ3Byb3BlcnR5Jyxcblx0XHRcdFx0XHRkaXNwbGF5TmFtZTogJ1NlY29uZCBwcm9wZXJ0eScsXG5cdFx0XHRcdFx0a2V5OiAncHJvcGVydHlEaXNwbGF5MTQnLFxuXHRcdFx0XHRcdHBsYWNlaG9sZGVyOiAnU2VsZWN0IHByb3BlcnR5Jyxcblx0XHRcdFx0XHRkZWZhdWx0OiAnJ1xuXHRcdFx0XHR9LFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0dHlwZTogJ3RvZ2dsZScsXG5cdFx0XHRcdFx0ZGlzcGxheU5hbWU6ICdTaG93IHNpZGUtYnktc2lkZScsXG5cdFx0XHRcdFx0a2V5OiAncHJvcGVydHlMYXlvdXQxMzE0U2lkZUJ5U2lkZScsXG5cdFx0XHRcdFx0ZGVmYXVsdDogZmFsc2Vcblx0XHRcdFx0fSxcblx0XHRcdFx0e1xuXHRcdFx0XHRcdHR5cGU6ICdkcm9wZG93bicsXG5cdFx0XHRcdFx0ZGlzcGxheU5hbWU6ICdQb3NpdGlvbicsXG5cdFx0XHRcdFx0a2V5OiAncHJvcGVydHlHcm91cDdQb3NpdGlvbicsXG5cdFx0XHRcdFx0b3B0aW9uczoge1xuXHRcdFx0XHRcdFx0J3RvcCc6ICdUb3AnLFxuXHRcdFx0XHRcdFx0J2JvdHRvbSc6ICdCb3R0b20nXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRkZWZhdWx0OiAnYm90dG9tJ1xuXHRcdFx0XHR9XG5cdFx0XHRdXG5cdFx0fSxcblx0XHQvLyBCZWhhdmlvciBncm91cFxuXHRcdHtcblx0XHRcdHR5cGU6ICdncm91cCcsXG5cdFx0XHRkaXNwbGF5TmFtZTogJ0JlaGF2aW9yJyxcblx0XHRcdGl0ZW1zOiBbXG5cdFx0XHRcdHtcblx0XHRcdFx0XHR0eXBlOiAndG9nZ2xlJyxcblx0XHRcdFx0XHRkaXNwbGF5TmFtZTogJ09wZW4gbmV3IG5vdGVzIGRpcmVjdGx5Jyxcblx0XHRcdFx0XHRkZXNjcmlwdGlvbjogJ1NraXAgdGhlIEJhc2VzIG1vZGFsIGFuZCBjcmVhdGUgbm90ZXMgZGlyZWN0bHkgKGxpa2UgdGhlIGZpbGUgZXhwbG9yZXIpLiBXaGVuIGRpc2FibGVkLCB1c2VzIG5vcm1hbCBCYXNlcyBiZWhhdmlvciB3aXRoIHRoZSBwcm9wZXJ0eSBwb3B1cC4nLFxuXHRcdFx0XHRcdGtleTogJ2N1c3RvbWl6ZU5ld0J1dHRvbicsXG5cdFx0XHRcdFx0ZGVmYXVsdDogZmFsc2Vcblx0XHRcdFx0fSxcblx0XHRcdFx0e1xuXHRcdFx0XHRcdHR5cGU6ICd0ZXh0Jyxcblx0XHRcdFx0XHRkaXNwbGF5TmFtZTogJ0xvY2F0aW9uIGZvciBuZXcgbm90ZXMnLFxuXHRcdFx0XHRcdGRlc2NyaXB0aW9uOiAnRm9sZGVyIHBhdGggd2hlcmUgbmV3IG5vdGVzIHdpbGwgYmUgY3JlYXRlZC4gVXNlIC8gZm9yIHZhdWx0IHJvb3QsIG9yIHNwZWNpZnkgYSBmb2xkZXIgcGF0aC4gV29ya3MgaW5kZXBlbmRlbnRseSBvZiBcIk9wZW4gbmV3IG5vdGVzIGRpcmVjdGx5XCIuJyxcblx0XHRcdFx0XHRrZXk6ICduZXdOb3RlTG9jYXRpb24nLFxuXHRcdFx0XHRcdHBsYWNlaG9sZGVyOiAnU2ltcGx5IHVzZSAvIGZvciB2YXVsdCBmb2xkZXInLFxuXHRcdFx0XHRcdGRlZmF1bHQ6ICcnXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHtcblx0XHRcdFx0XHR0eXBlOiAndG9nZ2xlJyxcblx0XHRcdFx0XHRkaXNwbGF5TmFtZTogJ0hpZGUgcXVpY2sgZWRpdCBpY29uJyxcblx0XHRcdFx0XHRrZXk6ICdoaWRlUXVpY2tFZGl0SWNvbicsXG5cdFx0XHRcdFx0ZGVmYXVsdDogZmFsc2Vcblx0XHRcdFx0fVxuXHRcdFx0XVxuXHRcdH1cblx0XTtcblxuXHRyZXR1cm4gb3B0aW9ucztcbn1cbiIsICIvKipcclxuICogQXR0YWNobWVudCBkZXRlY3Rpb24gdXRpbGl0aWVzXHJcbiAqIERldGVjdHMgdW5pcXVlIGF0dGFjaG1lbnRzIHRoYXQgYXJlIG9ubHkgdXNlZCBieSBzcGVjaWZpYyBmaWxlcy9mb2xkZXJzXHJcbiAqL1xyXG5cclxuaW1wb3J0IHsgQXBwLCBURmlsZSwgVEZvbGRlciB9IGZyb20gJ29ic2lkaWFuJztcclxuaW1wb3J0IHsgZ2V0RmlsZUZyb250bWF0dGVyIH0gZnJvbSAnLi9mcm9udG1hdHRlci1oZWxwZXInO1xyXG5cclxuLyoqXHJcbiAqIEZpbmQgYWxsIGF0dGFjaG1lbnRzIGluIGEgbm90ZVxyXG4gKiBJbmNsdWRlcyBib3RoIGVtYmVkZGVkIGltYWdlcyBpbiBtYXJrZG93biBhbmQgaW1hZ2VzIHJlZmVyZW5jZWQgaW4gZnJvbnRtYXR0ZXIgcHJvcGVydGllc1xyXG4gKi9cclxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldEF0dGFjaG1lbnRzSW5Ob3RlKGFwcDogQXBwLCBmaWxlOiBURmlsZSk6IFByb21pc2U8VEZpbGVbXT4ge1xyXG5cdGNvbnN0IGF0dGFjaG1lbnRzOiBURmlsZVtdID0gW107XHJcblx0Y29uc3QgY29udGVudCA9IGFwcC52YXVsdC5nZXRBYnN0cmFjdEZpbGVCeVBhdGgoZmlsZS5wYXRoKTtcclxuXHRcclxuXHRpZiAoY29udGVudCBpbnN0YW5jZW9mIFRGaWxlKSB7XHJcblx0XHQvLyBHZXQgZW1iZWRkZWQgaW1hZ2VzIGZyb20gbWFya2Rvd24gYm9keSAob25seSB3b3JrcyBmb3IgLm1kIGZpbGVzKVxyXG5cdFx0aWYgKGZpbGUuZXh0ZW5zaW9uID09PSAnbWQnKSB7XHJcblx0XHRcdGNvbnN0IG1ldGFkYXRhID0gYXBwLm1ldGFkYXRhQ2FjaGUuZ2V0RmlsZUNhY2hlKGNvbnRlbnQpO1xyXG5cdFx0XHRjb25zdCBlbWJlZHMgPSBtZXRhZGF0YT8uZW1iZWRzIHx8IFtdO1xyXG5cdFx0XHRmb3IgKGNvbnN0IGVtYmVkIG9mIGVtYmVkcykge1xyXG5cdFx0XHRcdGNvbnN0IGVtYmVkRmlsZSA9IGFwcC5tZXRhZGF0YUNhY2hlLmdldEZpcnN0TGlua3BhdGhEZXN0KGVtYmVkLmxpbmssIGZpbGUucGF0aCk7XHJcblx0XHRcdFx0aWYgKGVtYmVkRmlsZSBpbnN0YW5jZW9mIFRGaWxlKSB7XHJcblx0XHRcdFx0XHRhdHRhY2htZW50cy5wdXNoKGVtYmVkRmlsZSk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHRcclxuXHRcdC8vIEdldCBpbWFnZXMgZnJvbSBmcm9udG1hdHRlciBwcm9wZXJ0aWVzICh3b3JrcyBmb3IgYm90aCAubWQgYW5kIC5tZHgpXHJcblx0XHRjb25zdCBmcm9udG1hdHRlciA9IGF3YWl0IGdldEZpbGVGcm9udG1hdHRlcihhcHAsIGZpbGUpO1xyXG5cdFx0aWYgKGZyb250bWF0dGVyKSB7XHJcblx0XHRcdGNvbnN0IGltYWdlUHJvcGVydHlOYW1lcyA9IFsnaW1hZ2UnLCAnaW1hZ2VPRycsICdjb3ZlcicsICd0aHVtYm5haWwnXTtcclxuXHRcdFx0Y29uc3QgdmFsaWRJbWFnZUV4dGVuc2lvbnMgPSBbJ2F2aWYnLCAnYm1wJywgJ2dpZicsICdqcGVnJywgJ2pwZycsICdwbmcnLCAnc3ZnJywgJ3dlYnAnXTtcclxuXHRcdFx0XHJcblx0XHRcdGZvciAoY29uc3QgcHJvcE5hbWUgb2YgaW1hZ2VQcm9wZXJ0eU5hbWVzKSB7XHJcblx0XHRcdFx0Y29uc3QgcHJvcFZhbHVlID0gZnJvbnRtYXR0ZXJbcHJvcE5hbWVdO1xyXG5cdFx0XHRcdGlmICghcHJvcFZhbHVlKSBjb250aW51ZTtcclxuXHRcdFx0XHRcclxuXHRcdFx0XHQvLyBIYW5kbGUgYXJyYXkgb2YgaW1hZ2UgcGF0aHNcclxuXHRcdFx0XHRjb25zdCBpbWFnZVBhdGhzID0gQXJyYXkuaXNBcnJheShwcm9wVmFsdWUpID8gcHJvcFZhbHVlIDogW3Byb3BWYWx1ZV07XHJcblx0XHRcdFx0XHJcblx0XHRcdFx0Zm9yIChjb25zdCBpbWFnZVBhdGggb2YgaW1hZ2VQYXRocykge1xyXG5cdFx0XHRcdFx0aWYgKHR5cGVvZiBpbWFnZVBhdGggIT09ICdzdHJpbmcnKSBjb250aW51ZTtcclxuXHRcdFx0XHRcdFxyXG5cdFx0XHRcdFx0Ly8gU3RyaXAgd2lraWxpbmsgc3ludGF4IGlmIHByZXNlbnRcclxuXHRcdFx0XHRcdGNvbnN0IGNsZWFuUGF0aCA9IGltYWdlUGF0aC5yZXBsYWNlKC9eIT9cXFtcXFsoW15cXF1dKylcXF1cXF0kLywgJyQxJykudHJpbSgpO1xyXG5cdFx0XHRcdFx0aWYgKCFjbGVhblBhdGgpIGNvbnRpbnVlO1xyXG5cdFx0XHRcdFx0XHJcblx0XHRcdFx0XHQvLyBTa2lwIGV4dGVybmFsIFVSTHNcclxuXHRcdFx0XHRcdGlmIChjbGVhblBhdGguc3RhcnRzV2l0aCgnaHR0cDovLycpIHx8IGNsZWFuUGF0aC5zdGFydHNXaXRoKCdodHRwczovLycpKSB7XHJcblx0XHRcdFx0XHRcdGNvbnRpbnVlO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHJcblx0XHRcdFx0XHQvLyBUcnkgdG8gcmVzb2x2ZSB0aGUgaW1hZ2UgZmlsZVxyXG5cdFx0XHRcdFx0bGV0IGltYWdlRmlsZTogVEZpbGUgfCBudWxsID0gYXBwLm1ldGFkYXRhQ2FjaGUuZ2V0Rmlyc3RMaW5rcGF0aERlc3QoY2xlYW5QYXRoLCBmaWxlLnBhdGgpO1xyXG5cdFx0XHRcdFx0XHJcblx0XHRcdFx0XHQvLyBJZiBub3QgZm91bmQgYW5kIHBhdGggc3RhcnRzIHdpdGggLi8sIHRyeSByZXNvbHZpbmcgcmVsYXRpdmUgdG8gZmlsZSdzIGRpcmVjdG9yeVxyXG5cdFx0XHRcdFx0aWYgKCFpbWFnZUZpbGUgJiYgY2xlYW5QYXRoLnN0YXJ0c1dpdGgoJy4vJykpIHtcclxuXHRcdFx0XHRcdFx0Y29uc3QgcmVsYXRpdmVQYXRoID0gY2xlYW5QYXRoLnN1YnN0cmluZygyKTtcclxuXHRcdFx0XHRcdFx0Y29uc3QgZnVsbFBhdGggPSBmaWxlLnBhcmVudD8ucGF0aCBcclxuXHRcdFx0XHRcdFx0XHQ/IGAke2ZpbGUucGFyZW50LnBhdGh9LyR7cmVsYXRpdmVQYXRofWBcclxuXHRcdFx0XHRcdFx0XHQ6IHJlbGF0aXZlUGF0aDtcclxuXHRcdFx0XHRcdFx0Y29uc3QgcmVzb2x2ZWRGaWxlID0gYXBwLnZhdWx0LmdldEFic3RyYWN0RmlsZUJ5UGF0aChmdWxsUGF0aCk7XHJcblx0XHRcdFx0XHRcdGlmIChyZXNvbHZlZEZpbGUgaW5zdGFuY2VvZiBURmlsZSkge1xyXG5cdFx0XHRcdFx0XHRcdGltYWdlRmlsZSA9IHJlc29sdmVkRmlsZTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHJcblx0XHRcdFx0XHQvLyBJZiBzdGlsbCBub3QgZm91bmQsIHRyeSBhcyBhYnNvbHV0ZSBwYXRoXHJcblx0XHRcdFx0XHRpZiAoIWltYWdlRmlsZSkge1xyXG5cdFx0XHRcdFx0XHRjb25zdCBhYnNvbHV0ZUZpbGUgPSBhcHAudmF1bHQuZ2V0QWJzdHJhY3RGaWxlQnlQYXRoKGNsZWFuUGF0aCk7XHJcblx0XHRcdFx0XHRcdGlmIChhYnNvbHV0ZUZpbGUgaW5zdGFuY2VvZiBURmlsZSkge1xyXG5cdFx0XHRcdFx0XHRcdGltYWdlRmlsZSA9IGFic29sdXRlRmlsZTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHJcblx0XHRcdFx0XHQvLyBPbmx5IGFkZCBpZiBpdCdzIGEgdmFsaWQgaW1hZ2UgZmlsZVxyXG5cdFx0XHRcdFx0aWYgKGltYWdlRmlsZSAmJiB2YWxpZEltYWdlRXh0ZW5zaW9ucy5pbmNsdWRlcyhpbWFnZUZpbGUuZXh0ZW5zaW9uKSkge1xyXG5cdFx0XHRcdFx0XHRhdHRhY2htZW50cy5wdXNoKGltYWdlRmlsZSk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fVxyXG5cdFxyXG5cdHJldHVybiBhdHRhY2htZW50cztcclxufVxyXG5cclxuLyoqXHJcbiAqIEZpbmQgYWxsIGF0dGFjaG1lbnRzIGluIGEgZm9sZGVyXHJcbiAqL1xyXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0QXR0YWNobWVudHNJbkZvbGRlcihhcHA6IEFwcCwgZm9sZGVyOiBURm9sZGVyKTogUHJvbWlzZTxURmlsZVtdPiB7XHJcblx0Y29uc3QgYXR0YWNobWVudHM6IFRGaWxlW10gPSBbXTtcclxuXHRcclxuXHRmb3IgKGNvbnN0IGNoaWxkIG9mIGZvbGRlci5jaGlsZHJlbikge1xyXG5cdFx0aWYgKGNoaWxkIGluc3RhbmNlb2YgVEZpbGUgJiYgKGNoaWxkLmV4dGVuc2lvbiA9PT0gJ21kJyB8fCBjaGlsZC5leHRlbnNpb24gPT09ICdtZHgnKSkge1xyXG5cdFx0XHRhdHRhY2htZW50cy5wdXNoKC4uLmF3YWl0IGdldEF0dGFjaG1lbnRzSW5Ob3RlKGFwcCwgY2hpbGQpKTtcclxuXHRcdH0gZWxzZSBpZiAoY2hpbGQgaW5zdGFuY2VvZiBURm9sZGVyKSB7XHJcblx0XHRcdGF0dGFjaG1lbnRzLnB1c2goLi4uYXdhaXQgZ2V0QXR0YWNobWVudHNJbkZvbGRlcihhcHAsIGNoaWxkKSk7XHJcblx0XHR9XHJcblx0fVxyXG5cdFxyXG5cdHJldHVybiBhdHRhY2htZW50cztcclxufVxyXG5cclxuLyoqXHJcbiAqIENoZWNrIGlmIGFuIGF0dGFjaG1lbnQgaXMgdXNlZCBpbiBvdGhlciBub3Rlc1xyXG4gKi9cclxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGlzQXR0YWNobWVudFVzZWRJbk90aGVyTm90ZXMoXHJcblx0YXBwOiBBcHAsXHJcblx0YXR0YWNobWVudDogVEZpbGUsXHJcblx0ZXhjbHVkZWROb3RlOiBURmlsZSxcclxuXHRleGNsdWRlZEZvbGRlcj86IFRGb2xkZXJcclxuKTogUHJvbWlzZTxib29sZWFuPiB7XHJcblx0Y29uc3QgYWxsTm90ZXMgPSBhcHAudmF1bHQuZ2V0TWFya2Rvd25GaWxlcygpLmZpbHRlcihcclxuXHRcdGZpbGUgPT4gZmlsZS5wYXRoICE9PSBleGNsdWRlZE5vdGUucGF0aFxyXG5cdCk7XHJcblx0XHJcblx0Y29uc3QgYXR0YWNobWVudFBhdGggPSBhdHRhY2htZW50LnBhdGg7XHJcblx0Y29uc3QgYXR0YWNobWVudE5hbWUgPSBhdHRhY2htZW50Lm5hbWU7XHJcblx0Y29uc3QgYXR0YWNobWVudEJhc2VuYW1lID0gYXR0YWNobWVudC5iYXNlbmFtZTtcclxuXHRcclxuXHRmb3IgKGNvbnN0IG5vdGUgb2YgYWxsTm90ZXMpIHtcclxuXHRcdC8vIFNraXAgbm90ZXMgaW4gZXhjbHVkZWQgZm9sZGVyXHJcblx0XHRpZiAoZXhjbHVkZWRGb2xkZXIgJiYgbm90ZS5wYXRoLnN0YXJ0c1dpdGgoZXhjbHVkZWRGb2xkZXIucGF0aCArICcvJykpIHtcclxuXHRcdFx0Y29udGludWU7XHJcblx0XHR9XHJcblx0XHRcclxuXHRcdGNvbnN0IGNvbnRlbnQgPSBhd2FpdCBhcHAudmF1bHQucmVhZChub3RlKTtcclxuXHRcdFxyXG5cdFx0Ly8gQ2hlY2sgZm9yIHZhcmlvdXMgcmVmZXJlbmNlIHBhdHRlcm5zXHJcblx0XHRpZiAoXHJcblx0XHRcdGNvbnRlbnQuaW5jbHVkZXMoYXR0YWNobWVudFBhdGgpIHx8XHJcblx0XHRcdGNvbnRlbnQuaW5jbHVkZXMoYXR0YWNobWVudE5hbWUpIHx8XHJcblx0XHRcdGNvbnRlbnQuaW5jbHVkZXMoYXR0YWNobWVudEJhc2VuYW1lKSB8fFxyXG5cdFx0XHRjb250ZW50LmluY2x1ZGVzKGAhW1ske2F0dGFjaG1lbnROYW1lfV1dYCkgfHxcclxuXHRcdFx0Y29udGVudC5pbmNsdWRlcyhgW1ske2F0dGFjaG1lbnROYW1lfV1dYCkgfHxcclxuXHRcdFx0Y29udGVudC5pbmNsdWRlcyhgKCR7YXR0YWNobWVudE5hbWV9KWApIHx8XHJcblx0XHRcdGNvbnRlbnQuaW5jbHVkZXMoYCgke2F0dGFjaG1lbnRQYXRofSlgKVxyXG5cdFx0KSB7XHJcblx0XHRcdHJldHVybiB0cnVlOyAvLyBBdHRhY2htZW50IGlzIHVzZWQgZWxzZXdoZXJlXHJcblx0XHR9XHJcblx0fVxyXG5cdFxyXG5cdHJldHVybiBmYWxzZTsgLy8gQXR0YWNobWVudCBpcyB1bmlxdWUgdG8gZGVsZXRlZCBub3RlL2ZvbGRlclxyXG59XHJcblxyXG4vKipcclxuICogRmluZCB1bmlxdWUgYXR0YWNobWVudHMgZm9yIGEgbm90ZS9mb2xkZXJcclxuICovXHJcbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBmaW5kVW5pcXVlQXR0YWNobWVudHMoXHJcblx0YXBwOiBBcHAsXHJcblx0ZGVsZXRlZE5vdGU6IFRGaWxlLFxyXG5cdGRlbGV0ZWRGb2xkZXI/OiBURm9sZGVyXHJcbik6IFByb21pc2U8VEZpbGVbXT4ge1xyXG5cdC8vIEdldCBhbGwgYXR0YWNobWVudHMgaW4gZGVsZXRlZCBub3RlL2ZvbGRlclxyXG5cdGNvbnN0IGF0dGFjaG1lbnRzOiBURmlsZVtdID0gW107XHJcblx0XHJcblx0YXR0YWNobWVudHMucHVzaCguLi5hd2FpdCBnZXRBdHRhY2htZW50c0luTm90ZShhcHAsIGRlbGV0ZWROb3RlKSk7XHJcblx0XHJcblx0aWYgKGRlbGV0ZWRGb2xkZXIpIHtcclxuXHRcdGF0dGFjaG1lbnRzLnB1c2goLi4uYXdhaXQgZ2V0QXR0YWNobWVudHNJbkZvbGRlcihhcHAsIGRlbGV0ZWRGb2xkZXIpKTtcclxuXHR9XHJcblx0XHJcblx0Ly8gUmVtb3ZlIGR1cGxpY2F0ZXNcclxuXHRjb25zdCB1bmlxdWVBdHRhY2htZW50cyA9IEFycmF5LmZyb20obmV3IFNldChhdHRhY2htZW50cy5tYXAoYSA9PiBhLnBhdGgpKSlcclxuXHRcdC5tYXAocGF0aCA9PiBhcHAudmF1bHQuZ2V0QWJzdHJhY3RGaWxlQnlQYXRoKHBhdGgpKVxyXG5cdFx0LmZpbHRlcigoZmlsZSk6IGZpbGUgaXMgVEZpbGUgPT4gZmlsZSBpbnN0YW5jZW9mIFRGaWxlKTtcclxuXHRcclxuXHQvLyBDaGVjayBlYWNoIGF0dGFjaG1lbnQgYWdhaW5zdCBhbGwgb3RoZXIgbm90ZXNcclxuXHRjb25zdCByZXN1bHQ6IFRGaWxlW10gPSBbXTtcclxuXHRcclxuXHRmb3IgKGNvbnN0IGF0dGFjaG1lbnQgb2YgdW5pcXVlQXR0YWNobWVudHMpIHtcclxuXHRcdGNvbnN0IGlzVXNlZEVsc2V3aGVyZSA9IGF3YWl0IGlzQXR0YWNobWVudFVzZWRJbk90aGVyTm90ZXMoXHJcblx0XHRcdGFwcCxcclxuXHRcdFx0YXR0YWNobWVudCxcclxuXHRcdFx0ZGVsZXRlZE5vdGUsXHJcblx0XHRcdGRlbGV0ZWRGb2xkZXJcclxuXHRcdCk7XHJcblx0XHRcclxuXHRcdGlmICghaXNVc2VkRWxzZXdoZXJlKSB7XHJcblx0XHRcdHJlc3VsdC5wdXNoKGF0dGFjaG1lbnQpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHRcclxuXHRyZXR1cm4gcmVzdWx0O1xyXG59XHJcblxyXG5cclxuIiwgIi8qKlxyXG4gKiBTbWFydCBkZWxldGlvbiB1dGlsaXRpZXNcclxuICogSGFuZGxlcyBmb2xkZXItYmFzZWQgY29udGVudCBkZWxldGlvbiBhbmQgdW5pcXVlIGF0dGFjaG1lbnQgZGV0ZWN0aW9uXHJcbiAqL1xyXG5cclxuaW1wb3J0IHsgQXBwLCBURmlsZSwgVEZvbGRlciwgTm90aWNlIH0gZnJvbSAnb2JzaWRpYW4nO1xyXG5pbXBvcnQgeyBCYXNlc0NNU1NldHRpbmdzIH0gZnJvbSAnLi4vdHlwZXMnO1xyXG5pbXBvcnQgeyBmaW5kVW5pcXVlQXR0YWNobWVudHMgfSBmcm9tICcuL2F0dGFjaG1lbnQtZGV0ZWN0aW9uJztcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgRGVsZXRpb25QcmV2aWV3IHtcclxuXHRmaWxlc1RvRGVsZXRlOiBURmlsZVtdO1xyXG5cdGZvbGRlcnNUb0RlbGV0ZTogVEZvbGRlcltdO1xyXG5cdGF0dGFjaG1lbnRzVG9EZWxldGU6IFRGaWxlW107XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBDaGVjayBpZiBhIGZpbGUgaXMgZm9sZGVyLWJhc2VkIGNvbnRlbnRcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBpc0ZvbGRlckJhc2VkQ29udGVudChmaWxlOiBURmlsZSwgY29uZmlnOiBCYXNlc0NNU1NldHRpbmdzKTogYm9vbGVhbiB7XHJcblx0Y29uc3QgY29uZmlndXJlZEZpbGVuYW1lID0gY29uZmlnLmRlbGV0ZVBhcmVudEZvbGRlckZpbGVuYW1lIHx8ICdpbmRleCc7XHJcblx0cmV0dXJuIGZpbGUuYmFzZW5hbWUgPT09IGNvbmZpZ3VyZWRGaWxlbmFtZSAmJiBmaWxlLnBhcmVudCAhPT0gbnVsbDtcclxufVxyXG5cclxuLyoqXHJcbiAqIENoZWNrIGlmIHNob3VsZCBkZWxldGUgcGFyZW50IGZvbGRlclxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIHNob3VsZERlbGV0ZVBhcmVudEZvbGRlcihmaWxlOiBURmlsZSwgY29uZmlnOiBCYXNlc0NNU1NldHRpbmdzKTogYm9vbGVhbiB7XHJcblx0cmV0dXJuIGNvbmZpZy5kZWxldGVQYXJlbnRGb2xkZXIgJiYgaXNGb2xkZXJCYXNlZENvbnRlbnQoZmlsZSwgY29uZmlnKTtcclxufVxyXG5cclxuLyoqXHJcbiAqIFByZXBhcmUgZGVsZXRpb24gcHJldmlld1xyXG4gKi9cclxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHByZXBhcmVEZWxldGlvblByZXZpZXcoXHJcblx0YXBwOiBBcHAsXHJcblx0ZmlsZXM6IHN0cmluZ1tdLFxyXG5cdGNvbmZpZzogQmFzZXNDTVNTZXR0aW5nc1xyXG4pOiBQcm9taXNlPERlbGV0aW9uUHJldmlldz4ge1xyXG5cdGNvbnN0IGZpbGVzVG9EZWxldGU6IFRGaWxlW10gPSBbXTtcclxuXHRjb25zdCBmb2xkZXJzVG9EZWxldGU6IFRGb2xkZXJbXSA9IFtdO1xyXG5cdGNvbnN0IGF0dGFjaG1lbnRzVG9EZWxldGU6IFRGaWxlW10gPSBbXTtcclxuXHRcclxuXHRmb3IgKGNvbnN0IGZpbGVQYXRoIG9mIGZpbGVzKSB7XHJcblx0XHRjb25zdCBmaWxlID0gYXBwLnZhdWx0LmdldEFic3RyYWN0RmlsZUJ5UGF0aChmaWxlUGF0aCk7XHJcblx0XHRpZiAoIShmaWxlIGluc3RhbmNlb2YgVEZpbGUpKSBjb250aW51ZTtcclxuXHRcdFxyXG5cdFx0Ly8gQ2hlY2sgaWYgc2hvdWxkIGRlbGV0ZSBwYXJlbnQgZm9sZGVyXHJcblx0XHRpZiAoc2hvdWxkRGVsZXRlUGFyZW50Rm9sZGVyKGZpbGUsIGNvbmZpZykpIHtcclxuXHRcdFx0Y29uc3QgcGFyZW50Rm9sZGVyID0gZmlsZS5wYXJlbnQ7XHJcblx0XHRcdGlmIChwYXJlbnRGb2xkZXIgJiYgIWZvbGRlcnNUb0RlbGV0ZS5pbmNsdWRlcyhwYXJlbnRGb2xkZXIpKSB7XHJcblx0XHRcdFx0Zm9sZGVyc1RvRGVsZXRlLnB1c2gocGFyZW50Rm9sZGVyKTtcclxuXHRcdFx0XHRcclxuXHRcdFx0XHQvLyBHZXQgYWxsIGZpbGVzIGluIGZvbGRlciBmb3IgZGVsZXRpb25cclxuXHRcdFx0XHRjb25zdCBmb2xkZXJGaWxlcyA9IHBhcmVudEZvbGRlci5jaGlsZHJlbi5maWx0ZXIoXHJcblx0XHRcdFx0XHQoY2hpbGQpOiBjaGlsZCBpcyBURmlsZSA9PiBjaGlsZCBpbnN0YW5jZW9mIFRGaWxlXHJcblx0XHRcdFx0KTtcclxuXHRcdFx0XHRmaWxlc1RvRGVsZXRlLnB1c2goLi4uZm9sZGVyRmlsZXMpO1xyXG5cdFx0XHR9XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRmaWxlc1RvRGVsZXRlLnB1c2goZmlsZSk7XHJcblx0XHR9XHJcblx0XHRcclxuXHRcdC8vIEZpbmQgdW5pcXVlIGF0dGFjaG1lbnRzIGlmIHNldHRpbmcgZW5hYmxlZFxyXG5cdFx0aWYgKGNvbmZpZy5kZWxldGVVbmlxdWVBdHRhY2htZW50cykge1xyXG5cdFx0XHRjb25zdCBwYXJlbnRGb2xkZXIgPSBzaG91bGREZWxldGVQYXJlbnRGb2xkZXIoZmlsZSwgY29uZmlnKSBcclxuXHRcdFx0XHQ/IChmaWxlLnBhcmVudCB8fCB1bmRlZmluZWQpXHJcblx0XHRcdFx0OiB1bmRlZmluZWQ7XHJcblx0XHRcdGNvbnN0IHVuaXF1ZUF0dGFjaG1lbnRzID0gYXdhaXQgZmluZFVuaXF1ZUF0dGFjaG1lbnRzKFxyXG5cdFx0XHRcdGFwcCxcclxuXHRcdFx0XHRmaWxlLFxyXG5cdFx0XHRcdHBhcmVudEZvbGRlclxyXG5cdFx0XHQpO1xyXG5cdFx0XHRhdHRhY2htZW50c1RvRGVsZXRlLnB1c2goLi4udW5pcXVlQXR0YWNobWVudHMpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHRcclxuXHQvLyBSZW1vdmUgZHVwbGljYXRlc1xyXG5cdGNvbnN0IHVuaXF1ZUZpbGVzID0gQXJyYXkuZnJvbShuZXcgU2V0KGZpbGVzVG9EZWxldGUubWFwKGYgPT4gZi5wYXRoKSkpXHJcblx0XHQubWFwKHBhdGggPT4gYXBwLnZhdWx0LmdldEFic3RyYWN0RmlsZUJ5UGF0aChwYXRoKSlcclxuXHRcdC5maWx0ZXIoKGZpbGUpOiBmaWxlIGlzIFRGaWxlID0+IGZpbGUgaW5zdGFuY2VvZiBURmlsZSk7XHJcblx0XHJcblx0Y29uc3QgdW5pcXVlQXR0YWNobWVudHMgPSBBcnJheS5mcm9tKG5ldyBTZXQoYXR0YWNobWVudHNUb0RlbGV0ZS5tYXAoYSA9PiBhLnBhdGgpKSlcclxuXHRcdC5tYXAocGF0aCA9PiBhcHAudmF1bHQuZ2V0QWJzdHJhY3RGaWxlQnlQYXRoKHBhdGgpKVxyXG5cdFx0LmZpbHRlcigoZmlsZSk6IGZpbGUgaXMgVEZpbGUgPT4gZmlsZSBpbnN0YW5jZW9mIFRGaWxlKTtcclxuXHRcclxuXHRyZXR1cm4ge1xyXG5cdFx0ZmlsZXNUb0RlbGV0ZTogdW5pcXVlRmlsZXMsXHJcblx0XHRmb2xkZXJzVG9EZWxldGU6IEFycmF5LmZyb20obmV3IFNldChmb2xkZXJzVG9EZWxldGUpKSxcclxuXHRcdGF0dGFjaG1lbnRzVG9EZWxldGU6IHVuaXF1ZUF0dGFjaG1lbnRzLFxyXG5cdH07XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBFeGVjdXRlIHNtYXJ0IGRlbGV0aW9uXHJcbiAqL1xyXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZXhlY3V0ZVNtYXJ0RGVsZXRpb24oXHJcblx0YXBwOiBBcHAsXHJcblx0cHJldmlldzogRGVsZXRpb25QcmV2aWV3XHJcbik6IFByb21pc2U8dm9pZD4ge1xyXG5cdGxldCBkZWxldGVkQ291bnQgPSAwO1xyXG5cdGxldCBlcnJvckNvdW50ID0gMDtcclxuXHRcclxuXHQvLyBEZWxldGUgZmlsZXNcclxuXHRmb3IgKGNvbnN0IGZpbGUgb2YgcHJldmlldy5maWxlc1RvRGVsZXRlKSB7XHJcblx0XHR0cnkge1xyXG5cdFx0XHRhd2FpdCBhcHAuZmlsZU1hbmFnZXIudHJhc2hGaWxlKGZpbGUpO1xyXG5cdFx0XHRkZWxldGVkQ291bnQrKztcclxuXHRcdH0gY2F0Y2ggKGVycm9yKSB7XHJcblx0XHRcdGNvbnNvbGUuZXJyb3IoYEVycm9yIGRlbGV0aW5nIGZpbGUgJHtmaWxlLnBhdGh9OmAsIGVycm9yKTtcclxuXHRcdFx0ZXJyb3JDb3VudCsrO1xyXG5cdFx0fVxyXG5cdH1cclxuXHRcclxuXHQvLyBEZWxldGUgYXR0YWNobWVudHNcclxuXHRmb3IgKGNvbnN0IGF0dGFjaG1lbnQgb2YgcHJldmlldy5hdHRhY2htZW50c1RvRGVsZXRlKSB7XHJcblx0XHR0cnkge1xyXG5cdFx0XHRhd2FpdCBhcHAuZmlsZU1hbmFnZXIudHJhc2hGaWxlKGF0dGFjaG1lbnQpO1xyXG5cdFx0XHRkZWxldGVkQ291bnQrKztcclxuXHRcdH0gY2F0Y2ggKGVycm9yKSB7XHJcblx0XHRcdGNvbnNvbGUuZXJyb3IoYEVycm9yIGRlbGV0aW5nIGF0dGFjaG1lbnQgJHthdHRhY2htZW50LnBhdGh9OmAsIGVycm9yKTtcclxuXHRcdFx0ZXJyb3JDb3VudCsrO1xyXG5cdFx0fVxyXG5cdH1cclxuXHRcclxuXHQvLyBEZWxldGUgZm9sZGVycyAocmVjdXJzaXZlKVxyXG5cdGZvciAoY29uc3QgZm9sZGVyIG9mIHByZXZpZXcuZm9sZGVyc1RvRGVsZXRlKSB7XHJcblx0XHR0cnkge1xyXG5cdFx0XHRhd2FpdCBhcHAuZmlsZU1hbmFnZXIudHJhc2hGaWxlKGZvbGRlcik7XHJcblx0XHRcdGRlbGV0ZWRDb3VudCsrO1xyXG5cdFx0fSBjYXRjaCAoZXJyb3IpIHtcclxuXHRcdFx0Y29uc29sZS5lcnJvcihgRXJyb3IgZGVsZXRpbmcgZm9sZGVyICR7Zm9sZGVyLnBhdGh9OmAsIGVycm9yKTtcclxuXHRcdFx0ZXJyb3JDb3VudCsrO1xyXG5cdFx0fVxyXG5cdH1cclxuXHRcclxuXHRpZiAoZXJyb3JDb3VudCA+IDApIHtcclxuXHRcdG5ldyBOb3RpY2UoYERlbGV0ZWQgJHtkZWxldGVkQ291bnR9IGl0ZW1zLCAke2Vycm9yQ291bnR9IGVycm9ycyBvY2N1cnJlZGApO1xyXG5cdH0gZWxzZSB7XHJcblx0XHRuZXcgTm90aWNlKGBTdWNjZXNzZnVsbHkgZGVsZXRlZCAke2RlbGV0ZWRDb3VudH0gaXRlbSR7ZGVsZXRlZENvdW50ICE9PSAxID8gJ3MnIDogJyd9YCk7XHJcblx0fVxyXG59XHJcblxyXG5cclxuIiwgIi8qKlxyXG4gKiBEZWxldGlvbiBQcmV2aWV3IE1vZGFsXHJcbiAqIFNob3dzIHByZXZpZXcgb2Ygd2hhdCB3aWxsIGJlIGRlbGV0ZWQgYmVmb3JlIGNvbmZpcm1hdGlvblxyXG4gKi9cclxuXHJcbmltcG9ydCB7IE1vZGFsLCBBcHAsIFNldHRpbmcgfSBmcm9tICdvYnNpZGlhbic7XHJcbmltcG9ydCB7IERlbGV0aW9uUHJldmlldyB9IGZyb20gJy4uL3V0aWxzL3NtYXJ0LWRlbGV0aW9uJztcclxuaW1wb3J0IHsgZXhlY3V0ZVNtYXJ0RGVsZXRpb24gfSBmcm9tICcuLi91dGlscy9zbWFydC1kZWxldGlvbic7XHJcblxyXG5leHBvcnQgY2xhc3MgRGVsZXRpb25QcmV2aWV3TW9kYWwgZXh0ZW5kcyBNb2RhbCB7XHJcblx0cHJpdmF0ZSBwcmV2aWV3OiBEZWxldGlvblByZXZpZXc7XHJcblx0cHJpdmF0ZSBvbkNvbmZpcm06ICgpID0+IHZvaWQ7XHJcblxyXG5cdGNvbnN0cnVjdG9yKGFwcDogQXBwLCBwcmV2aWV3OiBEZWxldGlvblByZXZpZXcsIG9uQ29uZmlybTogKCkgPT4gdm9pZCkge1xyXG5cdFx0c3VwZXIoYXBwKTtcclxuXHRcdHRoaXMucHJldmlldyA9IHByZXZpZXc7XHJcblx0XHR0aGlzLm9uQ29uZmlybSA9IG9uQ29uZmlybTtcclxuXHR9XHJcblxyXG5cdG9uT3BlbigpOiB2b2lkIHtcclxuXHRcdGNvbnN0IHsgY29udGVudEVsIH0gPSB0aGlzO1xyXG5cclxuXHRcdGNvbnRlbnRFbC5lbXB0eSgpO1xyXG5cdFx0bmV3IFNldHRpbmcoY29udGVudEVsKS5zZXROYW1lKCdDb25maXJtIGRlbGV0aW9uJykuc2V0SGVhZGluZygpO1xyXG5cdFx0Y29udGVudEVsLmNyZWF0ZUVsKCdwJywgeyBcclxuXHRcdFx0dGV4dDogJ1RoZSBmb2xsb3dpbmcgaXRlbXMgd2lsbCBiZSBkZWxldGVkOicsXHJcblx0XHRcdGNsczogJ2Jhc2VzLWNtcy1kZWxldGlvbi13YXJuaW5nJ1xyXG5cdFx0fSk7XHJcblxyXG5cdFx0Ly8gRmlsZXMgdG8gZGVsZXRlXHJcblx0XHRpZiAodGhpcy5wcmV2aWV3LmZpbGVzVG9EZWxldGUubGVuZ3RoID4gMCkge1xyXG5cdFx0XHRjb250ZW50RWwuY3JlYXRlRWwoJ2gzJywgeyB0ZXh0OiBgRmlsZXMgKCR7dGhpcy5wcmV2aWV3LmZpbGVzVG9EZWxldGUubGVuZ3RofSlgIH0pO1xyXG5cdFx0XHRjb25zdCBmaWxlc0xpc3QgPSBjb250ZW50RWwuY3JlYXRlRWwoJ3VsJywgeyBjbHM6ICdiYXNlcy1jbXMtZGVsZXRpb24tbGlzdCcgfSk7XHJcblx0XHRcdGZvciAoY29uc3QgZmlsZSBvZiB0aGlzLnByZXZpZXcuZmlsZXNUb0RlbGV0ZS5zbGljZSgwLCAyMCkpIHtcclxuXHRcdFx0XHRjb25zdCBsaSA9IGZpbGVzTGlzdC5jcmVhdGVFbCgnbGknKTtcclxuXHRcdFx0XHRsaS5zZXRUZXh0KGZpbGUucGF0aCk7XHJcblx0XHRcdH1cclxuXHRcdFx0aWYgKHRoaXMucHJldmlldy5maWxlc1RvRGVsZXRlLmxlbmd0aCA+IDIwKSB7XHJcblx0XHRcdFx0ZmlsZXNMaXN0LmNyZWF0ZUVsKCdsaScsIHsgXHJcblx0XHRcdFx0XHR0ZXh0OiBgLi4uIGFuZCAke3RoaXMucHJldmlldy5maWxlc1RvRGVsZXRlLmxlbmd0aCAtIDIwfSBtb3JlIGZpbGVzYFxyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gRm9sZGVycyB0byBkZWxldGVcclxuXHRcdGlmICh0aGlzLnByZXZpZXcuZm9sZGVyc1RvRGVsZXRlLmxlbmd0aCA+IDApIHtcclxuXHRcdFx0Y29udGVudEVsLmNyZWF0ZUVsKCdoMycsIHsgdGV4dDogYEZvbGRlcnMgKCR7dGhpcy5wcmV2aWV3LmZvbGRlcnNUb0RlbGV0ZS5sZW5ndGh9KWAgfSk7XHJcblx0XHRcdGNvbnN0IGZvbGRlcnNMaXN0ID0gY29udGVudEVsLmNyZWF0ZUVsKCd1bCcsIHsgY2xzOiAnYmFzZXMtY21zLWRlbGV0aW9uLWxpc3QnIH0pO1xyXG5cdFx0XHRmb3IgKGNvbnN0IGZvbGRlciBvZiB0aGlzLnByZXZpZXcuZm9sZGVyc1RvRGVsZXRlKSB7XHJcblx0XHRcdFx0Y29uc3QgbGkgPSBmb2xkZXJzTGlzdC5jcmVhdGVFbCgnbGknKTtcclxuXHRcdFx0XHRsaS5zZXRUZXh0KGZvbGRlci5wYXRoKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdC8vIEF0dGFjaG1lbnRzIHRvIGRlbGV0ZVxyXG5cdFx0aWYgKHRoaXMucHJldmlldy5hdHRhY2htZW50c1RvRGVsZXRlLmxlbmd0aCA+IDApIHtcclxuXHRcdFx0Y29udGVudEVsLmNyZWF0ZUVsKCdoMycsIHsgdGV4dDogYEF0dGFjaG1lbnRzICgke3RoaXMucHJldmlldy5hdHRhY2htZW50c1RvRGVsZXRlLmxlbmd0aH0pYCB9KTtcclxuXHRcdFx0Y29uc3QgYXR0YWNobWVudHNMaXN0ID0gY29udGVudEVsLmNyZWF0ZUVsKCd1bCcsIHsgY2xzOiAnYmFzZXMtY21zLWRlbGV0aW9uLWxpc3QnIH0pO1xyXG5cdFx0XHRmb3IgKGNvbnN0IGF0dGFjaG1lbnQgb2YgdGhpcy5wcmV2aWV3LmF0dGFjaG1lbnRzVG9EZWxldGUuc2xpY2UoMCwgMjApKSB7XHJcblx0XHRcdFx0Y29uc3QgbGkgPSBhdHRhY2htZW50c0xpc3QuY3JlYXRlRWwoJ2xpJyk7XHJcblx0XHRcdFx0bGkuc2V0VGV4dChhdHRhY2htZW50LnBhdGgpO1xyXG5cdFx0XHR9XHJcblx0XHRcdGlmICh0aGlzLnByZXZpZXcuYXR0YWNobWVudHNUb0RlbGV0ZS5sZW5ndGggPiAyMCkge1xyXG5cdFx0XHRcdGF0dGFjaG1lbnRzTGlzdC5jcmVhdGVFbCgnbGknLCB7IFxyXG5cdFx0XHRcdFx0dGV4dDogYC4uLiBhbmQgJHt0aGlzLnByZXZpZXcuYXR0YWNobWVudHNUb0RlbGV0ZS5sZW5ndGggLSAyMH0gbW9yZSBhdHRhY2htZW50c2BcclxuXHRcdFx0XHR9KTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdC8vIFdhcm5pbmdcclxuXHRcdGNvbnRlbnRFbC5jcmVhdGVFbCgncCcsIHtcclxuXHRcdFx0dGV4dDogJ1RoaXMgYWN0aW9uIGNhbm5vdCBiZSB1bmRvbmUuJyxcclxuXHRcdFx0Y2xzOiAnYmFzZXMtY21zLWRlbGV0aW9uLXdhcm5pbmcnXHJcblx0XHR9KTtcclxuXHJcblx0XHQvLyBCdXR0b25zXHJcblx0XHRjb25zdCBidXR0b25Db250YWluZXIgPSBjb250ZW50RWwuY3JlYXRlRGl2KCk7XHJcblx0XHRidXR0b25Db250YWluZXIuYWRkQ2xhc3MoJ2Jhc2VzLWNtcy1tb2RhbC1idXR0b24tY29udGFpbmVyJyk7XHJcblxyXG5cdFx0Y29uc3QgY2FuY2VsQnRuID0gYnV0dG9uQ29udGFpbmVyLmNyZWF0ZUVsKCdidXR0b24nKTtcclxuXHRcdGNhbmNlbEJ0bi5zZXRUZXh0KCdDYW5jZWwnKTtcclxuXHRcdGNhbmNlbEJ0bi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHRoaXMuY2xvc2UoKSk7XHJcblxyXG5cdFx0Y29uc3QgZGVsZXRlQnRuID0gYnV0dG9uQ29udGFpbmVyLmNyZWF0ZUVsKCdidXR0b24nKTtcclxuXHRcdGRlbGV0ZUJ0bi5zZXRUZXh0KCdEZWxldGUnKTtcclxuXHRcdGRlbGV0ZUJ0bi5hZGRDbGFzcygnbW9kLWN0YScpO1xyXG5cdFx0ZGVsZXRlQnRuLmFkZENsYXNzKCdkZXN0cnVjdGl2ZScpO1xyXG5cdFx0ZGVsZXRlQnRuLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4ge1xyXG5cdFx0XHR2b2lkIChhc3luYyAoKSA9PiB7XHJcblx0XHRcdFx0YXdhaXQgZXhlY3V0ZVNtYXJ0RGVsZXRpb24odGhpcy5hcHAsIHRoaXMucHJldmlldyk7XHJcblx0XHRcdFx0dGhpcy5vbkNvbmZpcm0oKTtcclxuXHRcdFx0XHR0aGlzLmNsb3NlKCk7XHJcblx0XHRcdH0pKCk7XHJcblx0XHR9KTtcclxuXHR9XHJcblxyXG5cdG9uQ2xvc2UoKTogdm9pZCB7XHJcblx0XHRjb25zdCB7IGNvbnRlbnRFbCB9ID0gdGhpcztcclxuXHRcdGNvbnRlbnRFbC5lbXB0eSgpO1xyXG5cdH1cclxufVxyXG5cclxuXHJcbiIsICJpbXBvcnQgeyBQbHVnaW4sIFZpZXcsIENvbnN0cnVjdG9yIH0gZnJvbSAnb2JzaWRpYW4nO1xyXG5pbXBvcnQgeyBCYXNlc0NNU1NldHRpbmdUYWIgfSBmcm9tICcuL3NldHRpbmdzJztcclxuaW1wb3J0IHsgQmFzZXNDTVNWaWV3LCBDTVNfVklFV19UWVBFIH0gZnJvbSAnLi92aWV3cy9jbXMtdmlldyc7XHJcbmltcG9ydCB7IEJhc2VzQ01TU2V0dGluZ3MsIERFRkFVTFRfU0VUVElOR1MgfSBmcm9tICcuL3R5cGVzJztcclxuaW1wb3J0IHsgcmVnaXN0ZXJCYXNlc0NNU1ZpZXcgfSBmcm9tICcuL3V0aWxzL3ZpZXctcmVnaXN0cmF0aW9uJztcclxuaW1wb3J0IHsgbWlncmF0ZUJhc2VzQ21zVG9DbXMgfSBmcm9tICcuL3V0aWxzL21pZ3JhdGlvbic7XHJcbmltcG9ydCB7IE5vdGljZSB9IGZyb20gJ29ic2lkaWFuJztcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEJhc2VzQ01TUGx1Z2luIGV4dGVuZHMgUGx1Z2luIHtcclxuXHRzZXR0aW5ncyE6IEJhc2VzQ01TU2V0dGluZ3M7XHJcblx0YWN0aXZlVmlld3M6IFNldDxCYXNlc0NNU1ZpZXc+ID0gbmV3IFNldCgpO1xyXG5cdHJlZ2lzdHJhdGlvblRpbWVvdXQ6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cdHByaXZhdGUgcmVmcmVzaEVtYmVkZGVkVmlld3NUaW1lb3V0OiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHRzZWxlY3Rpb25zOiBNYXA8c3RyaW5nLCBTZXQ8c3RyaW5nPj4gPSBuZXcgTWFwKCk7XHJcblxyXG5cdGFzeW5jIG9ubG9hZCgpIHtcclxuXHRcdGF3YWl0IHRoaXMubG9hZFNldHRpbmdzKCk7XHJcblxyXG5cdFx0Ly8gUnVuIG9uZS10aW1lIHZhdWx0IG1pZ3JhdGlvbiBvbmNlIHRoZSBsYXlvdXQgaXMgcmVhZHkgYW5kIHZhdWx0IGlzIGluZGV4ZWRcclxuXHRcdHRoaXMuYXBwLndvcmtzcGFjZS5vbkxheW91dFJlYWR5KGFzeW5jICgpID0+IHtcclxuXHRcdFx0aWYgKCF0aGlzLnNldHRpbmdzLm1pZ3JhdGlvbkJhc2VzQ21zVG9DbXNEb25lKSB7XHJcblx0XHRcdFx0Y29uc3QgbWlncmF0ZWRDb3VudCA9IGF3YWl0IG1pZ3JhdGVCYXNlc0Ntc1RvQ21zKHRoaXMuYXBwKTtcclxuXHRcdFx0XHR0aGlzLnNldHRpbmdzLm1pZ3JhdGlvbkJhc2VzQ21zVG9DbXNEb25lID0gdHJ1ZTtcclxuXHRcdFx0XHRhd2FpdCB0aGlzLnNhdmVTZXR0aW5ncygpO1xyXG5cclxuXHRcdFx0XHRpZiAobWlncmF0ZWRDb3VudCA+IDApIHtcclxuXHRcdFx0XHRcdG5ldyBOb3RpY2UoYEJhc2VzIENNUzogU3VjY2Vzc2Z1bGx5IG1pZ3JhdGVkICR7bWlncmF0ZWRDb3VudH0gZmlsZXMgdG8gbmV3ICdjbXMnIHZpZXcgdHlwZS5gKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH0pO1xyXG5cclxuXHRcdC8vIEFkZCBtYW51YWwgbWlncmF0aW9uIGNvbW1hbmRcclxuXHRcdHRoaXMuYWRkQ29tbWFuZCh7XHJcblx0XHRcdGlkOiAncnVuLWJhc2VzLWNtcy1taWdyYXRpb24nLFxyXG5cdFx0XHRuYW1lOiAnUnVuIFZhdWx0IE1pZ3JhdGlvbiAoQ29udmVydCBiYXNlcy1jbXMgdG8gY21zKScsXHJcblx0XHRcdGNhbGxiYWNrOiBhc3luYyAoKSA9PiB7XHJcblx0XHRcdFx0Y29uc3QgbWlncmF0ZWRDb3VudCA9IGF3YWl0IG1pZ3JhdGVCYXNlc0Ntc1RvQ21zKHRoaXMuYXBwKTtcclxuXHRcdFx0XHRuZXcgTm90aWNlKGBCYXNlcyBDTVM6IE1pZ3JhdGlvbiBjb21wbGV0ZS4gJHttaWdyYXRlZENvdW50fSBmaWxlcyB1cGRhdGVkLmApO1xyXG5cdFx0XHR9XHJcblx0XHR9KTtcclxuXHJcblx0XHQvLyBSZWdpc3RlciBzZXR0aW5ncyB0YWJcclxuXHRcdHRoaXMuYWRkU2V0dGluZ1RhYihuZXcgQmFzZXNDTVNTZXR0aW5nVGFiKHRoaXMuYXBwLCB0aGlzKSk7XHJcblxyXG5cdFx0Ly8gUmVnaXN0ZXIgQ01TIHZpZXcgd2l0aCBCYXNlIHBsdWdpblxyXG5cdFx0Ly8gR3JhY2VmdWwgZGVncmFkYXRpb246IGlmIEJhc2UgcGx1Z2luIG5vdCBpbnN0YWxsZWQsIHRoaXMgd2lsbCBzaW1wbHkgZG8gbm90aGluZ1xyXG5cdFx0Ly8gT24gbW9iaWxlLCBCYXNlcyBwbHVnaW4gbWF5IG5vdCBiZSBsb2FkZWQgeWV0LCBzbyB3ZSB3YWl0IGEgYml0XHJcblx0XHRyZWdpc3RlckJhc2VzQ01TVmlldyh0aGlzKTtcclxuXHRcdC8vIFJlZ2lzdGVyIGtleWJvYXJkIHNob3J0Y3V0cyBmb3IgYnVsayBvcGVyYXRpb25zXHJcblx0XHR0aGlzLmFkZENvbW1hbmQoe1xyXG5cdFx0XHRpZDogJ3NlbGVjdC1hbGwnLFxyXG5cdFx0XHRuYW1lOiAnU2VsZWN0IGFsbCB2aXNpYmxlIGNhcmRzJyxcclxuXHRcdFx0Y2hlY2tDYWxsYmFjazogKGNoZWNraW5nOiBib29sZWFuKSA9PiB7XHJcblx0XHRcdFx0Y29uc3QgYWN0aXZlVmlldyA9IHRoaXMuZ2V0QWN0aXZlQ01TVmlldygpO1xyXG5cdFx0XHRcdGlmIChhY3RpdmVWaWV3KSB7XHJcblx0XHRcdFx0XHRpZiAoIWNoZWNraW5nKSB7XHJcblx0XHRcdFx0XHRcdGFjdGl2ZVZpZXcuc2VsZWN0QWxsKCk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0XHR9XHJcblx0XHR9KTtcclxuXHJcblx0XHR0aGlzLmFkZENvbW1hbmQoe1xyXG5cdFx0XHRpZDogJ2Rlc2VsZWN0LWFsbCcsXHJcblx0XHRcdG5hbWU6ICdEZXNlbGVjdCBhbGwgY2FyZHMnLFxyXG5cdFx0XHRjaGVja0NhbGxiYWNrOiAoY2hlY2tpbmc6IGJvb2xlYW4pID0+IHtcclxuXHRcdFx0XHRjb25zdCBhY3RpdmVWaWV3ID0gdGhpcy5nZXRBY3RpdmVDTVNWaWV3KCk7XHJcblx0XHRcdFx0aWYgKGFjdGl2ZVZpZXcpIHtcclxuXHRcdFx0XHRcdGlmICghY2hlY2tpbmcpIHtcclxuXHRcdFx0XHRcdFx0YWN0aXZlVmlldy5kZXNlbGVjdEFsbCgpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0cmV0dXJuIHRydWU7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdFx0fVxyXG5cdFx0fSk7XHJcblxyXG5cdFx0Ly8gTGlzdGVuIGZvciBhY3RpdmUgZmlsZSBjaGFuZ2VzIHRvIHJlZnJlc2ggZW1iZWRkZWQgdmlld3NcclxuXHRcdC8vIFRoaXMgZW5zdXJlcyBlbWJlZGRlZCB2aWV3cyB1cGRhdGUgd2hlbiB0aGUgYWN0aXZlIGZpbGUgY2hhbmdlcyAoZm9yIGR5bmFtaWMgZmlsdGVycyB1c2luZyB0aGlzLmZpbGUpXHJcblx0XHR0aGlzLnJlZ2lzdGVyRXZlbnQoXHJcblx0XHRcdHRoaXMuYXBwLndvcmtzcGFjZS5vbignYWN0aXZlLWxlYWYtY2hhbmdlJywgKCkgPT4ge1xyXG5cdFx0XHRcdHRoaXMucmVmcmVzaEVtYmVkZGVkVmlld3MoKTtcclxuXHRcdFx0fSlcclxuXHRcdCk7XHJcblxyXG5cdFx0Ly8gQWxzbyBsaXN0ZW4gZm9yIGZpbGUtb3BlbiBldmVudHMgYXMgYSBiYWNrdXBcclxuXHRcdHRoaXMucmVnaXN0ZXJFdmVudChcclxuXHRcdFx0dGhpcy5hcHAud29ya3NwYWNlLm9uKCdmaWxlLW9wZW4nLCAoKSA9PiB7XHJcblx0XHRcdFx0dGhpcy5yZWZyZXNoRW1iZWRkZWRWaWV3cygpO1xyXG5cdFx0XHR9KVxyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdG9udW5sb2FkKCkge1xyXG5cdFx0Ly8gQ2xlYXIgYW55IHBlbmRpbmcgcmVnaXN0cmF0aW9uIHRpbWVvdXRcclxuXHRcdGlmICh0aGlzLnJlZ2lzdHJhdGlvblRpbWVvdXQgIT09IG51bGwpIHtcclxuXHRcdFx0d2luZG93LmNsZWFyVGltZW91dCh0aGlzLnJlZ2lzdHJhdGlvblRpbWVvdXQpO1xyXG5cdFx0XHR0aGlzLnJlZ2lzdHJhdGlvblRpbWVvdXQgPSBudWxsO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8vIENsZWFyIGFueSBwZW5kaW5nIGVtYmVkZGVkIHZpZXcgcmVmcmVzaCB0aW1lb3V0XHJcblx0XHRpZiAodGhpcy5yZWZyZXNoRW1iZWRkZWRWaWV3c1RpbWVvdXQgIT09IG51bGwpIHtcclxuXHRcdFx0d2luZG93LmNsZWFyVGltZW91dCh0aGlzLnJlZnJlc2hFbWJlZGRlZFZpZXdzVGltZW91dCk7XHJcblx0XHRcdHRoaXMucmVmcmVzaEVtYmVkZGVkVmlld3NUaW1lb3V0ID0gbnVsbDtcclxuXHRcdH1cclxuXHJcblx0XHQvLyBDbGVhbiB1cCBhY3RpdmUgdmlld3NcclxuXHRcdHRoaXMuYWN0aXZlVmlld3MuY2xlYXIoKTtcclxuXHR9XHJcblxyXG5cdGFzeW5jIGxvYWRTZXR0aW5ncygpIHtcclxuXHRcdGNvbnN0IGRhdGEgPSBhd2FpdCB0aGlzLmxvYWREYXRhKCkgYXMgUGFydGlhbDxCYXNlc0NNU1NldHRpbmdzPjtcclxuXHRcdHRoaXMuc2V0dGluZ3MgPSBPYmplY3QuYXNzaWduKHt9LCBERUZBVUxUX1NFVFRJTkdTLCBkYXRhKTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIFJvYnVzdGx5IGZpbmQgdGhlIGFjdGl2ZSBDTVMgdmlld1xyXG5cdCAqL1xyXG5cdHByaXZhdGUgZ2V0QWN0aXZlQ01TVmlldygpOiBCYXNlc0NNU1ZpZXcgfCBudWxsIHtcclxuXHRcdC8vIDEuIFRyeSBzdGFuZGFyZCBPYnNpZGlhbiB3YXlcclxuXHRcdHRyeSB7XHJcblx0XHRcdC8vIFVzZSBzdHJpbmctYmFzZWQgY29uc3RydWN0b3IgYWNjZXNzIGlmIHBvc3NpYmxlLCBvciBkaXJlY3QgY2xhc3MgcmVmZXJlbmNlXHJcblx0XHRcdGNvbnN0IG9ic2lkaWFuQWN0aXZlVmlldyA9IHRoaXMuYXBwLndvcmtzcGFjZS5nZXRBY3RpdmVWaWV3T2ZUeXBlKEJhc2VzQ01TVmlldyBhcyB1bmtub3duIGFzIENvbnN0cnVjdG9yPFZpZXc+KTtcclxuXHRcdFx0aWYgKG9ic2lkaWFuQWN0aXZlVmlldyAmJiBvYnNpZGlhbkFjdGl2ZVZpZXcgaW5zdGFuY2VvZiBCYXNlc0NNU1ZpZXcpIHtcclxuXHRcdFx0XHRyZXR1cm4gb2JzaWRpYW5BY3RpdmVWaWV3O1xyXG5cdFx0XHR9XHJcblx0XHR9IGNhdGNoIChlKSB7XHJcblx0XHRcdC8vIElnbm9yZSBlcnJvcnMgZnJvbSBzdGFuZGFyZCBkZXRlY3Rpb25cclxuXHRcdH1cclxuXHJcblx0XHQvLyAyLiBGYWxsYmFjazogY2hlY2sgYWxsIG91ciB0cmFja2VkIHZpZXdzXHJcblx0XHQvLyBUaGlzIGlzIG5lY2Vzc2FyeSBiZWNhdXNlIEJhc2VzIHBsdWdpbiBtaWdodCBtYW5hZ2Ugdmlld3MgaW4gYSB3YXkgdGhhdFxyXG5cdFx0Ly8gZ2V0QWN0aXZlVmlld09mVHlwZSBkb2Vzbid0IHJlY29nbml6ZSAoZS5nLiwgaWYgaXQgd3JhcHMgdGhlIHZpZXcpXHJcblx0XHRjb25zdCBhY3RpdmVMZWFmID0gdGhpcy5hcHAud29ya3NwYWNlLmFjdGl2ZUxlYWY7XHJcblx0XHRpZiAoIWFjdGl2ZUxlYWYpIHJldHVybiBudWxsO1xyXG5cclxuXHRcdGZvciAoY29uc3QgdmlldyBvZiB0aGlzLmFjdGl2ZVZpZXdzKSB7XHJcblx0XHRcdHRyeSB7XHJcblx0XHRcdFx0Ly8gVXNlIHR5cGUgY2hlY2sgaW5zdGVhZCBvZiBpbnN0YW5jZW9mIHRvIGF2b2lkIGNpcmN1bGFyIGRlcGVuZGVuY3kgaXNzdWVzXHJcblx0XHRcdFx0aWYgKHZpZXcudHlwZSAhPT0gQ01TX1ZJRVdfVFlQRSkgY29udGludWU7XHJcblxyXG5cdFx0XHRcdGNvbnN0IGNvbnRhaW5lckVsID0gKHZpZXcgYXMgdW5rbm93biBhcyB7IGNvbnRhaW5lckVsPzogSFRNTEVsZW1lbnQgfSkuY29udGFpbmVyRWw7XHJcblx0XHRcdFx0aWYgKGNvbnRhaW5lckVsICYmIGNvbnRhaW5lckVsLmlzQ29ubmVjdGVkKSB7XHJcblx0XHRcdFx0XHQvLyBDaGVjayBpZiB0aGlzIHZpZXcncyBjb250YWluZXIgaXMgd2l0aGluIHRoZSBhY3RpdmUgbGVhZidzIGNvbnRhaW5lclxyXG5cdFx0XHRcdFx0aWYgKGFjdGl2ZUxlYWYudmlldy5jb250YWluZXJFbC5jb250YWlucyhjb250YWluZXJFbCkpIHtcclxuXHRcdFx0XHRcdFx0cmV0dXJuIHZpZXc7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9IGNhdGNoIChlKSB7XHJcblx0XHRcdFx0Ly8gU2tpcCBpZiB2aWV3IGlzIGluIGEgd2VpcmQgc3RhdGVcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiBudWxsO1xyXG5cdH1cclxuXHJcblx0YXN5bmMgc2F2ZVNldHRpbmdzKCkge1xyXG5cdFx0YXdhaXQgdGhpcy5zYXZlRGF0YSh0aGlzLnNldHRpbmdzKTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIENsZWFuIHVwIHN0YWxlIHZpZXcgcmVmZXJlbmNlcyB0aGF0IGFyZSBubyBsb25nZXIgaW4gdGhlIERPTVxyXG5cdCAqIFJldHVybnMgdGhlIG51bWJlciBvZiB2aWV3cyByZW1vdmVkXHJcblx0ICovXHJcblx0cHJpdmF0ZSBjbGVhbnVwU3RhbGVWaWV3cygpOiBudW1iZXIge1xyXG5cdFx0Y29uc3Qgdmlld3NUb1JlbW92ZTogQmFzZXNDTVNWaWV3W10gPSBbXTtcclxuXHRcdHRoaXMuYWN0aXZlVmlld3MuZm9yRWFjaCh2aWV3ID0+IHtcclxuXHRcdFx0Y29uc3QgY29udGFpbmVyRWwgPSAodmlldyBhcyB1bmtub3duIGFzIHsgY29udGFpbmVyRWw/OiBIVE1MRWxlbWVudCB9KS5jb250YWluZXJFbDtcclxuXHRcdFx0aWYgKCFjb250YWluZXJFbCB8fCAhY29udGFpbmVyRWwucGFyZW50RWxlbWVudCkge1xyXG5cdFx0XHRcdHZpZXdzVG9SZW1vdmUucHVzaCh2aWV3KTtcclxuXHRcdFx0fVxyXG5cdFx0fSk7XHJcblx0XHR2aWV3c1RvUmVtb3ZlLmZvckVhY2godmlldyA9PiB0aGlzLmFjdGl2ZVZpZXdzLmRlbGV0ZSh2aWV3KSk7XHJcblx0XHRyZXR1cm4gdmlld3NUb1JlbW92ZS5sZW5ndGg7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBSZWZyZXNoIHRvb2xiYXJzIGluIGFsbCBhY3RpdmUgQ01TIHZpZXdzXHJcblx0ICovXHJcblx0cmVmcmVzaEFsbFRvb2xiYXJzKCk6IHZvaWQge1xyXG5cdFx0dGhpcy5jbGVhbnVwU3RhbGVWaWV3cygpO1xyXG5cclxuXHRcdC8vIFJlZnJlc2ggYWxsIGFjdGl2ZSB2aWV3c1xyXG5cdFx0dGhpcy5hY3RpdmVWaWV3cy5mb3JFYWNoKHZpZXcgPT4ge1xyXG5cdFx0XHRpZiAodmlldyAmJiB0eXBlb2Ygdmlldy5yZWZyZXNoVG9vbGJhciA9PT0gJ2Z1bmN0aW9uJykge1xyXG5cdFx0XHRcdHZpZXcucmVmcmVzaFRvb2xiYXIoKTtcclxuXHRcdFx0fVxyXG5cdFx0fSk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBSZW1vdmUgYSB2aWV3IGZyb20gdHJhY2tpbmcgd2hlbiBpdCdzIGNsb3NlZFxyXG5cdCAqL1xyXG5cdHJlbW92ZVZpZXcodmlldzogQmFzZXNDTVNWaWV3KTogdm9pZCB7XHJcblx0XHR0aGlzLmFjdGl2ZVZpZXdzLmRlbGV0ZSh2aWV3KTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIFJlZnJlc2ggYWxsIGVtYmVkZGVkIENNUyB2aWV3cyB3aGVuIHRoZSBhY3RpdmUgZmlsZSBjaGFuZ2VzXHJcblx0ICogVGhpcyBlbnN1cmVzIGVtYmVkZGVkIHZpZXdzIHVwZGF0ZSB0aGVpciBmaWx0ZXJzIHdoZW4gdXNpbmcgdGhpcy5maWxlIHByb3BlcnRpZXNcclxuXHQgKiBEZWJvdW5jZWQgdG8gYXZvaWQgZXhjZXNzaXZlIHJlZnJlc2hlcyB3aGVuIHN3aXRjaGluZyBmaWxlcyBxdWlja2x5XHJcblx0ICovXHJcblx0cmVmcmVzaEVtYmVkZGVkVmlld3MoKTogdm9pZCB7XHJcblx0XHQvLyBEZWJvdW5jZSB0byBhdm9pZCBleGNlc3NpdmUgcmVmcmVzaGVzIHdoZW4gc3dpdGNoaW5nIGZpbGVzIHF1aWNrbHlcclxuXHRcdGlmICh0aGlzLnJlZnJlc2hFbWJlZGRlZFZpZXdzVGltZW91dCAhPT0gbnVsbCkge1xyXG5cdFx0XHR3aW5kb3cuY2xlYXJUaW1lb3V0KHRoaXMucmVmcmVzaEVtYmVkZGVkVmlld3NUaW1lb3V0KTtcclxuXHRcdH1cclxuXHJcblx0XHR0aGlzLnJlZnJlc2hFbWJlZGRlZFZpZXdzVGltZW91dCA9IHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcclxuXHRcdFx0dGhpcy5yZWZyZXNoRW1iZWRkZWRWaWV3c1RpbWVvdXQgPSBudWxsO1xyXG5cclxuXHRcdFx0dGhpcy5jbGVhbnVwU3RhbGVWaWV3cygpO1xyXG5cclxuXHRcdFx0Ly8gUmVmcmVzaCBhbGwgZW1iZWRkZWQgdmlld3NcclxuXHRcdFx0bGV0IHJlZnJlc2hlZENvdW50ID0gMDtcclxuXHRcdFx0dGhpcy5hY3RpdmVWaWV3cy5mb3JFYWNoKHZpZXcgPT4ge1xyXG5cdFx0XHRcdC8vIE9ubHkgcmVmcmVzaCBlbWJlZGRlZCB2aWV3c1xyXG5cdFx0XHRcdGlmICh2aWV3LmlzRW1iZWRkZWQpIHtcclxuXHRcdFx0XHRcdHRyeSB7XHJcblx0XHRcdFx0XHRcdC8vIENoZWNrIGlmIHZpZXcgaXMgc3RpbGwgY29ubmVjdGVkIHRvIERPTVxyXG5cdFx0XHRcdFx0XHRjb25zdCBjb250YWluZXJFbCA9ICh2aWV3IGFzIHVua25vd24gYXMgeyBjb250YWluZXJFbD86IEhUTUxFbGVtZW50IH0pLmNvbnRhaW5lckVsO1xyXG5cdFx0XHRcdFx0XHRpZiAoY29udGFpbmVyRWwgJiYgY29udGFpbmVyRWwuaXNDb25uZWN0ZWQpIHtcclxuXHRcdFx0XHRcdFx0XHQvLyBUcmlnZ2VyIHJlZnJlc2ggYnkgY2FsbGluZyBvbkRhdGFVcGRhdGVkXHJcblx0XHRcdFx0XHRcdFx0Ly8gVGhlIEJhc2VzIHBsdWdpbiB3aWxsIHJlLWV2YWx1YXRlIGZpbHRlcnMgd2l0aCB0aGUgbmV3IHRoaXMuZmlsZSBjb250ZXh0XHJcblx0XHRcdFx0XHRcdFx0aWYgKHR5cGVvZiAodmlldyBhcyB7IG9uRGF0YVVwZGF0ZWQ/OiAoKSA9PiB2b2lkIH0pLm9uRGF0YVVwZGF0ZWQgPT09ICdmdW5jdGlvbicpIHtcclxuXHRcdFx0XHRcdFx0XHRcdCh2aWV3IGFzIHsgb25EYXRhVXBkYXRlZDogKCkgPT4gdm9pZCB9KS5vbkRhdGFVcGRhdGVkKCk7XHJcblx0XHRcdFx0XHRcdFx0XHRyZWZyZXNoZWRDb3VudCsrO1xyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fSBjYXRjaCAoZXJyb3IpIHtcclxuXHRcdFx0XHRcdFx0Ly8gU2lsZW50bHkgaWdub3JlIGVycm9ycyBmb3IgaW5kaXZpZHVhbCB2aWV3c1xyXG5cdFx0XHRcdFx0XHRjb25zb2xlLndhcm4oJ0Jhc2VzIENNUzogRXJyb3IgcmVmcmVzaGluZyBlbWJlZGRlZCB2aWV3OicsIGVycm9yKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdH0pO1xyXG5cclxuXHRcdFx0Ly8gTG9nIGZvciBkZWJ1Z2dpbmcgKGNhbiBiZSByZW1vdmVkIGluIHByb2R1Y3Rpb24pXHJcblx0XHRcdGlmIChyZWZyZXNoZWRDb3VudCA+IDApIHtcclxuXHRcdFx0XHRjb25zb2xlLmRlYnVnKGBCYXNlcyBDTVM6IFJlZnJlc2hlZCAke3JlZnJlc2hlZENvdW50fSBlbWJlZGRlZCB2aWV3KHMpIGFmdGVyIGFjdGl2ZSBmaWxlIGNoYW5nZWApO1xyXG5cdFx0XHR9XHJcblx0XHR9LCB0aGlzLnNldHRpbmdzLmVtYmVkZGVkVmlld1JlZnJlc2hEZWJvdW5jZU1zKTsgLy8gQ29uZmlndXJhYmxlIGRlYm91bmNlIGRlbGF5XHJcblx0fVxyXG5cclxufVxyXG5cclxuXHJcbiIsICJpbXBvcnQgeyBQbHVnaW5TZXR0aW5nVGFiLCBTZXR0aW5nLCBBcHAsIFBsdWdpbiB9IGZyb20gJ29ic2lkaWFuJztcclxuaW1wb3J0IHsgQmFzZXNDTVNTZXR0aW5ncyB9IGZyb20gJy4vdHlwZXMnO1xyXG5pbXBvcnQgeyBDb21tYW5kUGlja2VyTW9kYWwgfSBmcm9tICcuL2NvbXBvbmVudHMvY29tbWFuZC1waWNrZXItbW9kYWwnO1xyXG5pbXBvcnQgeyBJY29uUGlja2VyTW9kYWwgfSBmcm9tICcuL2NvbXBvbmVudHMvaWNvbi1waWNrZXItbW9kYWwnO1xyXG5pbXBvcnQgeyBjcmVhdGVTZXR0aW5nc0dyb3VwIH0gZnJvbSAnLi91dGlscy9zZXR0aW5ncy1jb21wYXQnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEJhc2VzQ01TU2V0dGluZ1RhYiBleHRlbmRzIFBsdWdpblNldHRpbmdUYWIge1xyXG5cdHBsdWdpbjogUGx1Z2luICYgeyBzZXR0aW5nczogQmFzZXNDTVNTZXR0aW5ncyB9O1xyXG5cdHB1YmxpYyBpY29uID0gJ2x1Y2lkZS1ibG9ja3MnO1xyXG5cclxuXHRjb25zdHJ1Y3RvcihhcHA6IEFwcCwgcGx1Z2luOiBQbHVnaW4gJiB7IHNldHRpbmdzOiBCYXNlc0NNU1NldHRpbmdzIH0pIHtcclxuXHRcdHN1cGVyKGFwcCwgcGx1Z2luKTtcclxuXHRcdHRoaXMucGx1Z2luID0gcGx1Z2luO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogUmVmcmVzaCB0b29sYmFycyBpbiBhbGwgYWN0aXZlIENNUyB2aWV3cyB3aGVuIHNldHRpbmdzIGNoYW5nZVxyXG5cdCAqL1xyXG5cdHByaXZhdGUgcmVmcmVzaEFjdGl2ZVRvb2xiYXJzKCk6IHZvaWQge1xyXG5cdFx0Ly8gVXNlIHRoZSBwbHVnaW4ncyBtZXRob2QgdG8gcmVmcmVzaCBhbGwgdG9vbGJhcnNcclxuXHRcdGNvbnN0IHBsdWdpbldpdGhNZXRob2QgPSB0aGlzLnBsdWdpbiBhcyB7IHJlZnJlc2hBbGxUb29sYmFycz86ICgpID0+IHZvaWQgfTtcclxuXHRcdGlmIChwbHVnaW5XaXRoTWV0aG9kICYmIHR5cGVvZiBwbHVnaW5XaXRoTWV0aG9kLnJlZnJlc2hBbGxUb29sYmFycyA9PT0gJ2Z1bmN0aW9uJykge1xyXG5cdFx0XHRwbHVnaW5XaXRoTWV0aG9kLnJlZnJlc2hBbGxUb29sYmFycygpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0ZGlzcGxheSgpOiB2b2lkIHtcclxuXHRcdGNvbnN0IHsgY29udGFpbmVyRWwgfSA9IHRoaXM7XHJcblxyXG5cdFx0Y29udGFpbmVyRWwuZW1wdHkoKTtcclxuXHJcblx0XHQvLyBCdWxrIG9wZXJhdGlvbiBzZXR0aW5nc1xyXG5cdFx0bmV3IFNldHRpbmcoY29udGFpbmVyRWwpXHJcblx0XHRcdC5zZXROYW1lKCdDb25maXJtIGJ1bGsgb3BlcmF0aW9ucycpXHJcblx0XHRcdC5zZXREZXNjKCdTaG93IGNvbmZpcm1hdGlvbiBkaWFsb2dzIGJlZm9yZSBwZXJmb3JtaW5nIGJ1bGsgb3BlcmF0aW9ucy4nKVxyXG5cdFx0XHQuYWRkVG9nZ2xlKHRvZ2dsZSA9PiB0b2dnbGVcclxuXHRcdFx0XHQuc2V0VmFsdWUodGhpcy5wbHVnaW4uc2V0dGluZ3MuY29uZmlybUJ1bGtPcGVyYXRpb25zKVxyXG5cdFx0XHRcdC5vbkNoYW5nZSgodmFsdWUpID0+IHtcclxuXHRcdFx0XHRcdHZvaWQgKGFzeW5jICgpID0+IHtcclxuXHRcdFx0XHRcdFx0dGhpcy5wbHVnaW4uc2V0dGluZ3MuY29uZmlybUJ1bGtPcGVyYXRpb25zID0gdmFsdWU7XHJcblx0XHRcdFx0XHRcdGF3YWl0IHRoaXMucGx1Z2luLnNhdmVEYXRhKHRoaXMucGx1Z2luLnNldHRpbmdzKTtcclxuXHRcdFx0XHRcdH0pKCk7XHJcblx0XHRcdFx0fSkpO1xyXG5cclxuXHRcdC8vIFRvb2xiYXIgYnV0dG9uIHZpc2liaWxpdHkgc2V0dGluZ3NcclxuXHRcdGNvbnN0IHRvb2xiYXJCdXR0b25zR3JvdXAgPSBjcmVhdGVTZXR0aW5nc0dyb3VwKGNvbnRhaW5lckVsLCAnVG9vbGJhciBidXR0b25zJywgJ2Jhc2VzLWNtcycpO1xyXG5cclxuXHRcdHRvb2xiYXJCdXR0b25zR3JvdXAuYWRkU2V0dGluZyhzZXR0aW5nID0+IHtcclxuXHRcdFx0c2V0dGluZ1xyXG5cdFx0XHRcdC5zZXROYW1lKCdTaG93IHNlbGVjdCBhbGwgYnV0dG9uJylcclxuXHRcdFx0XHQuc2V0RGVzYygnRGlzcGxheSB0aGUgc2VsZWN0IGFsbCBidXR0b24gaW4gdGhlIENNUyB0b29sYmFyLicpXHJcblx0XHRcdFx0LmFkZFRvZ2dsZSh0b2dnbGUgPT4ge1xyXG5cdFx0XHRcdFx0dG9nZ2xlLnNldFZhbHVlKHRoaXMucGx1Z2luLnNldHRpbmdzLnNob3dUb29sYmFyU2VsZWN0QWxsKTtcclxuXHRcdFx0XHRcdHRvZ2dsZS5vbkNoYW5nZShhc3luYyAodmFsdWUpID0+IHtcclxuXHRcdFx0XHRcdFx0dGhpcy5wbHVnaW4uc2V0dGluZ3Muc2hvd1Rvb2xiYXJTZWxlY3RBbGwgPSB2YWx1ZTtcclxuXHRcdFx0XHRcdFx0YXdhaXQgdGhpcy5wbHVnaW4uc2F2ZURhdGEodGhpcy5wbHVnaW4uc2V0dGluZ3MpO1xyXG5cdFx0XHRcdFx0XHR0aGlzLnJlZnJlc2hBY3RpdmVUb29sYmFycygpO1xyXG5cdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0fSk7XHJcblx0XHR9KTtcclxuXHJcblx0XHR0b29sYmFyQnV0dG9uc0dyb3VwLmFkZFNldHRpbmcoc2V0dGluZyA9PiB7XHJcblx0XHRcdHNldHRpbmdcclxuXHRcdFx0XHQuc2V0TmFtZSgnU2hvdyBjbGVhciBidXR0b24nKVxyXG5cdFx0XHRcdC5zZXREZXNjKCdEaXNwbGF5IHRoZSBjbGVhciBzZWxlY3Rpb24gYnV0dG9uIGluIHRoZSBDTVMgdG9vbGJhci4nKVxyXG5cdFx0XHRcdC5hZGRUb2dnbGUodG9nZ2xlID0+IHtcclxuXHRcdFx0XHRcdHRvZ2dsZS5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy5zaG93VG9vbGJhckNsZWFyKTtcclxuXHRcdFx0XHRcdHRvZ2dsZS5vbkNoYW5nZShhc3luYyAodmFsdWUpID0+IHtcclxuXHRcdFx0XHRcdFx0dGhpcy5wbHVnaW4uc2V0dGluZ3Muc2hvd1Rvb2xiYXJDbGVhciA9IHZhbHVlO1xyXG5cdFx0XHRcdFx0XHRhd2FpdCB0aGlzLnBsdWdpbi5zYXZlRGF0YSh0aGlzLnBsdWdpbi5zZXR0aW5ncyk7XHJcblx0XHRcdFx0XHRcdHRoaXMucmVmcmVzaEFjdGl2ZVRvb2xiYXJzKCk7XHJcblx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHR9KTtcclxuXHRcdH0pO1xyXG5cclxuXHRcdHRvb2xiYXJCdXR0b25zR3JvdXAuYWRkU2V0dGluZyhzZXR0aW5nID0+IHtcclxuXHRcdFx0c2V0dGluZ1xyXG5cdFx0XHRcdC5zZXROYW1lKCdTaG93IHB1Ymxpc2ggYnV0dG9uJylcclxuXHRcdFx0XHQuc2V0RGVzYygnRGlzcGxheSB0aGUgcHVibGlzaCBidXR0b24gaW4gdGhlIENNUyB0b29sYmFyLicpXHJcblx0XHRcdFx0LmFkZFRvZ2dsZSh0b2dnbGUgPT4ge1xyXG5cdFx0XHRcdFx0dG9nZ2xlLnNldFZhbHVlKHRoaXMucGx1Z2luLnNldHRpbmdzLnNob3dUb29sYmFyUHVibGlzaCk7XHJcblx0XHRcdFx0XHR0b2dnbGUub25DaGFuZ2UoYXN5bmMgKHZhbHVlKSA9PiB7XHJcblx0XHRcdFx0XHRcdHRoaXMucGx1Z2luLnNldHRpbmdzLnNob3dUb29sYmFyUHVibGlzaCA9IHZhbHVlO1xyXG5cdFx0XHRcdFx0XHRhd2FpdCB0aGlzLnBsdWdpbi5zYXZlRGF0YSh0aGlzLnBsdWdpbi5zZXR0aW5ncyk7XHJcblx0XHRcdFx0XHRcdHRoaXMucmVmcmVzaEFjdGl2ZVRvb2xiYXJzKCk7XHJcblx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHR9KTtcclxuXHRcdH0pO1xyXG5cclxuXHRcdHRvb2xiYXJCdXR0b25zR3JvdXAuYWRkU2V0dGluZyhzZXR0aW5nID0+IHtcclxuXHRcdFx0c2V0dGluZ1xyXG5cdFx0XHRcdC5zZXROYW1lKCdTaG93IGRyYWZ0IGJ1dHRvbicpXHJcblx0XHRcdFx0LnNldERlc2MoJ0Rpc3BsYXkgdGhlIGRyYWZ0IGJ1dHRvbiBpbiB0aGUgQ01TIHRvb2xiYXIuJylcclxuXHRcdFx0XHQuYWRkVG9nZ2xlKHRvZ2dsZSA9PiB7XHJcblx0XHRcdFx0XHR0b2dnbGUuc2V0VmFsdWUodGhpcy5wbHVnaW4uc2V0dGluZ3Muc2hvd1Rvb2xiYXJEcmFmdCk7XHJcblx0XHRcdFx0XHR0b2dnbGUub25DaGFuZ2UoYXN5bmMgKHZhbHVlKSA9PiB7XHJcblx0XHRcdFx0XHRcdHRoaXMucGx1Z2luLnNldHRpbmdzLnNob3dUb29sYmFyRHJhZnQgPSB2YWx1ZTtcclxuXHRcdFx0XHRcdFx0YXdhaXQgdGhpcy5wbHVnaW4uc2F2ZURhdGEodGhpcy5wbHVnaW4uc2V0dGluZ3MpO1xyXG5cdFx0XHRcdFx0XHR0aGlzLnJlZnJlc2hBY3RpdmVUb29sYmFycygpO1xyXG5cdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0fSk7XHJcblx0XHR9KTtcclxuXHJcblx0XHR0b29sYmFyQnV0dG9uc0dyb3VwLmFkZFNldHRpbmcoc2V0dGluZyA9PiB7XHJcblx0XHRcdHNldHRpbmdcclxuXHRcdFx0XHQuc2V0TmFtZSgnU2hvdyB0YWdzIGJ1dHRvbicpXHJcblx0XHRcdFx0LnNldERlc2MoJ0Rpc3BsYXkgdGhlIHRhZ3MgYnV0dG9uIGluIHRoZSBDTVMgdG9vbGJhci4nKVxyXG5cdFx0XHRcdC5hZGRUb2dnbGUodG9nZ2xlID0+IHtcclxuXHRcdFx0XHRcdHRvZ2dsZS5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy5zaG93VG9vbGJhclRhZ3MpO1xyXG5cdFx0XHRcdFx0dG9nZ2xlLm9uQ2hhbmdlKGFzeW5jICh2YWx1ZSkgPT4ge1xyXG5cdFx0XHRcdFx0XHR0aGlzLnBsdWdpbi5zZXR0aW5ncy5zaG93VG9vbGJhclRhZ3MgPSB2YWx1ZTtcclxuXHRcdFx0XHRcdFx0YXdhaXQgdGhpcy5wbHVnaW4uc2F2ZURhdGEodGhpcy5wbHVnaW4uc2V0dGluZ3MpO1xyXG5cdFx0XHRcdFx0XHR0aGlzLnJlZnJlc2hBY3RpdmVUb29sYmFycygpO1xyXG5cdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0fSk7XHJcblx0XHR9KTtcclxuXHJcblx0XHR0b29sYmFyQnV0dG9uc0dyb3VwLmFkZFNldHRpbmcoc2V0dGluZyA9PiB7XHJcblx0XHRcdHNldHRpbmdcclxuXHRcdFx0XHQuc2V0TmFtZSgnU2hvdyBzZXQgYnV0dG9uJylcclxuXHRcdFx0XHQuc2V0RGVzYygnRGlzcGxheSB0aGUgc2V0IHByb3BlcnR5IGJ1dHRvbiBpbiB0aGUgQ01TIHRvb2xiYXIuJylcclxuXHRcdFx0XHQuYWRkVG9nZ2xlKHRvZ2dsZSA9PiB7XHJcblx0XHRcdFx0XHR0b2dnbGUuc2V0VmFsdWUodGhpcy5wbHVnaW4uc2V0dGluZ3Muc2hvd1Rvb2xiYXJTZXQpO1xyXG5cdFx0XHRcdFx0dG9nZ2xlLm9uQ2hhbmdlKGFzeW5jICh2YWx1ZSkgPT4ge1xyXG5cdFx0XHRcdFx0XHR0aGlzLnBsdWdpbi5zZXR0aW5ncy5zaG93VG9vbGJhclNldCA9IHZhbHVlO1xyXG5cdFx0XHRcdFx0XHRhd2FpdCB0aGlzLnBsdWdpbi5zYXZlRGF0YSh0aGlzLnBsdWdpbi5zZXR0aW5ncyk7XHJcblx0XHRcdFx0XHRcdHRoaXMucmVmcmVzaEFjdGl2ZVRvb2xiYXJzKCk7XHJcblx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHR9KTtcclxuXHRcdH0pO1xyXG5cclxuXHRcdHRvb2xiYXJCdXR0b25zR3JvdXAuYWRkU2V0dGluZyhzZXR0aW5nID0+IHtcclxuXHRcdFx0c2V0dGluZ1xyXG5cdFx0XHRcdC5zZXROYW1lKCdTaG93IHJlbW92ZSBidXR0b24nKVxyXG5cdFx0XHRcdC5zZXREZXNjKCdEaXNwbGF5IHRoZSByZW1vdmUgcHJvcGVydHkgYnV0dG9uIGluIHRoZSBDTVMgdG9vbGJhci4nKVxyXG5cdFx0XHRcdC5hZGRUb2dnbGUodG9nZ2xlID0+IHtcclxuXHRcdFx0XHRcdHRvZ2dsZS5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy5zaG93VG9vbGJhclJlbW92ZSk7XHJcblx0XHRcdFx0XHR0b2dnbGUub25DaGFuZ2UoYXN5bmMgKHZhbHVlKSA9PiB7XHJcblx0XHRcdFx0XHRcdHRoaXMucGx1Z2luLnNldHRpbmdzLnNob3dUb29sYmFyUmVtb3ZlID0gdmFsdWU7XHJcblx0XHRcdFx0XHRcdGF3YWl0IHRoaXMucGx1Z2luLnNhdmVEYXRhKHRoaXMucGx1Z2luLnNldHRpbmdzKTtcclxuXHRcdFx0XHRcdFx0dGhpcy5yZWZyZXNoQWN0aXZlVG9vbGJhcnMoKTtcclxuXHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdH0pO1xyXG5cdFx0fSk7XHJcblxyXG5cdFx0dG9vbGJhckJ1dHRvbnNHcm91cC5hZGRTZXR0aW5nKHNldHRpbmcgPT4ge1xyXG5cdFx0XHRzZXR0aW5nXHJcblx0XHRcdFx0LnNldE5hbWUoJ1Nob3cgZGVsZXRlIGJ1dHRvbicpXHJcblx0XHRcdFx0LnNldERlc2MoJ0Rpc3BsYXkgdGhlIGRlbGV0ZSBidXR0b24gaW4gdGhlIENNUyB0b29sYmFyLicpXHJcblx0XHRcdFx0LmFkZFRvZ2dsZSh0b2dnbGUgPT4ge1xyXG5cdFx0XHRcdFx0dG9nZ2xlLnNldFZhbHVlKHRoaXMucGx1Z2luLnNldHRpbmdzLnNob3dUb29sYmFyRGVsZXRlKTtcclxuXHRcdFx0XHRcdHRvZ2dsZS5vbkNoYW5nZShhc3luYyAodmFsdWUpID0+IHtcclxuXHRcdFx0XHRcdFx0dGhpcy5wbHVnaW4uc2V0dGluZ3Muc2hvd1Rvb2xiYXJEZWxldGUgPSB2YWx1ZTtcclxuXHRcdFx0XHRcdFx0YXdhaXQgdGhpcy5wbHVnaW4uc2F2ZURhdGEodGhpcy5wbHVnaW4uc2V0dGluZ3MpO1xyXG5cdFx0XHRcdFx0XHR0aGlzLnJlZnJlc2hBY3RpdmVUb29sYmFycygpO1xyXG5cdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0fSk7XHJcblx0XHR9KTtcclxuXHJcblx0XHQvLyBEZWxldGlvbiBzZXR0aW5nc1xyXG5cdFx0Y29uc3QgZGVsZXRpb25zR3JvdXAgPSBjcmVhdGVTZXR0aW5nc0dyb3VwKGNvbnRhaW5lckVsLCAnRGVsZXRpb25zJywgJ2Jhc2VzLWNtcycpO1xyXG5cclxuXHRcdGRlbGV0aW9uc0dyb3VwLmFkZFNldHRpbmcoc2V0dGluZyA9PiB7XHJcblx0XHRcdHNldHRpbmdcclxuXHRcdFx0XHQuc2V0TmFtZSgnRGVsZXRlIHBhcmVudCBmb2xkZXIgZm9yIHNwZWNpZmljIGZpbGUgbmFtZScpXHJcblx0XHRcdFx0LnNldERlc2MoJ1doZW4gZW5hYmxlZCwgZGVsZXRpbmcgYSBub3RlIHdpbGwgZGVsZXRlIGl0cyBwYXJlbnQgZm9sZGVyIGFuZCBhbGwgaXRzIGNvbnRlbnRzIGlmIHRoZSBub3RlIGZpbGUgbmFtZSBtYXRjaGVzIHRoZSBzcGVjaWZpZWQgbmFtZS4nKVxyXG5cdFx0XHRcdC5hZGRUb2dnbGUodG9nZ2xlID0+IHtcclxuXHRcdFx0XHRcdHRvZ2dsZS5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy5kZWxldGVQYXJlbnRGb2xkZXIpO1xyXG5cdFx0XHRcdFx0dG9nZ2xlLm9uQ2hhbmdlKGFzeW5jICh2YWx1ZSkgPT4ge1xyXG5cdFx0XHRcdFx0XHR0aGlzLnBsdWdpbi5zZXR0aW5ncy5kZWxldGVQYXJlbnRGb2xkZXIgPSB2YWx1ZTtcclxuXHRcdFx0XHRcdFx0YXdhaXQgdGhpcy5wbHVnaW4uc2F2ZURhdGEodGhpcy5wbHVnaW4uc2V0dGluZ3MpO1xyXG5cdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0fSk7XHJcblx0XHR9KTtcclxuXHJcblx0XHRkZWxldGlvbnNHcm91cC5hZGRTZXR0aW5nKHNldHRpbmcgPT4ge1xyXG5cdFx0XHRzZXR0aW5nXHJcblx0XHRcdFx0LnNldE5hbWUoJ0ZvbGRlciBkZWxldGlvbiBmaWxlIG5hbWUnKVxyXG5cdFx0XHRcdC5zZXREZXNjKCdGaWxlIG5hbWUgdGhhdCB0cmlnZ2VycyBwYXJlbnQgZm9sZGVyIGRlbGV0aW9uLicpXHJcblx0XHRcdFx0LmFkZFRleHQodGV4dCA9PiB7XHJcblx0XHRcdFx0XHR0ZXh0LnNldFBsYWNlaG9sZGVyKCdpbmRleCcpO1xyXG5cdFx0XHRcdFx0dGV4dC5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy5kZWxldGVQYXJlbnRGb2xkZXJGaWxlbmFtZSk7XHJcblx0XHRcdFx0XHR0ZXh0Lm9uQ2hhbmdlKGFzeW5jICh2YWx1ZSkgPT4ge1xyXG5cdFx0XHRcdFx0XHR0aGlzLnBsdWdpbi5zZXR0aW5ncy5kZWxldGVQYXJlbnRGb2xkZXJGaWxlbmFtZSA9IHZhbHVlO1xyXG5cdFx0XHRcdFx0XHRhd2FpdCB0aGlzLnBsdWdpbi5zYXZlRGF0YSh0aGlzLnBsdWdpbi5zZXR0aW5ncyk7XHJcblx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHR9KVxyXG5cdFx0XHRcdC5zZXREaXNhYmxlZCghdGhpcy5wbHVnaW4uc2V0dGluZ3MuZGVsZXRlUGFyZW50Rm9sZGVyKTtcclxuXHRcdH0pO1xyXG5cclxuXHRcdGRlbGV0aW9uc0dyb3VwLmFkZFNldHRpbmcoc2V0dGluZyA9PiB7XHJcblx0XHRcdHNldHRpbmdcclxuXHRcdFx0XHQuc2V0TmFtZSgnRGVsZXRlIGFzc29jaWF0ZWQgdW5pcXVlIGF0dGFjaG1lbnRzJylcclxuXHRcdFx0XHQuc2V0RGVzYygnV2hlbiBkZWxldGluZyBhIG5vdGUsIGF1dG9tYXRpY2FsbHkgZGVsZXRlIGF0dGFjaG1lbnRzIHRoYXQgYXJlIG9ubHkgdXNlZCBieSB0aGF0IG5vdGUuIEF0dGFjaG1lbnRzIHVzZWQgYnkgb3RoZXIgbm90ZXMgd2lsbCBiZSBwcmVzZXJ2ZWQuJylcclxuXHRcdFx0XHQuYWRkVG9nZ2xlKHRvZ2dsZSA9PiB7XHJcblx0XHRcdFx0XHR0b2dnbGUuc2V0VmFsdWUodGhpcy5wbHVnaW4uc2V0dGluZ3MuZGVsZXRlVW5pcXVlQXR0YWNobWVudHMpO1xyXG5cdFx0XHRcdFx0dG9nZ2xlLm9uQ2hhbmdlKGFzeW5jICh2YWx1ZSkgPT4ge1xyXG5cdFx0XHRcdFx0XHR0aGlzLnBsdWdpbi5zZXR0aW5ncy5kZWxldGVVbmlxdWVBdHRhY2htZW50cyA9IHZhbHVlO1xyXG5cdFx0XHRcdFx0XHRhd2FpdCB0aGlzLnBsdWdpbi5zYXZlRGF0YSh0aGlzLnBsdWdpbi5zZXR0aW5ncyk7XHJcblx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHR9KTtcclxuXHRcdH0pO1xyXG5cclxuXHRcdGRlbGV0aW9uc0dyb3VwLmFkZFNldHRpbmcoc2V0dGluZyA9PiB7XHJcblx0XHRcdHNldHRpbmdcclxuXHRcdFx0XHQuc2V0TmFtZSgnQ29uZmlybSBkZWxldGlvbnMnKVxyXG5cdFx0XHRcdC5zZXREZXNjKCdTaG93IGNvbmZpcm1hdGlvbiBkaWFsb2cgYmVmb3JlIGRlbGV0aW5nIGZpbGVzLicpXHJcblx0XHRcdFx0LmFkZFRvZ2dsZSh0b2dnbGUgPT4ge1xyXG5cdFx0XHRcdFx0dG9nZ2xlLnNldFZhbHVlKHRoaXMucGx1Z2luLnNldHRpbmdzLmNvbmZpcm1EZWxldGlvbnMpO1xyXG5cdFx0XHRcdFx0dG9nZ2xlLm9uQ2hhbmdlKGFzeW5jICh2YWx1ZSkgPT4ge1xyXG5cdFx0XHRcdFx0XHR0aGlzLnBsdWdpbi5zZXR0aW5ncy5jb25maXJtRGVsZXRpb25zID0gdmFsdWU7XHJcblx0XHRcdFx0XHRcdGF3YWl0IHRoaXMucGx1Z2luLnNhdmVEYXRhKHRoaXMucGx1Z2luLnNldHRpbmdzKTtcclxuXHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdH0pO1xyXG5cdFx0fSk7XHJcblxyXG5cdFx0Ly8gSWNvbiBzZXR0aW5nc1xyXG5cdFx0Y29uc3QgYXBwZWFyYW5jZUdyb3VwID0gY3JlYXRlU2V0dGluZ3NHcm91cChjb250YWluZXJFbCwgJ0FwcGVhcmFuY2UnLCAnYmFzZXMtY21zJyk7XHJcblxyXG5cdFx0YXBwZWFyYW5jZUdyb3VwLmFkZFNldHRpbmcoc2V0dGluZyA9PiB7XHJcblx0XHRcdHNldHRpbmdcclxuXHRcdFx0XHQuc2V0TmFtZSgnVXNlIGhvbWUgaWNvbiBmb3IgQ01TIHZpZXcnKVxyXG5cdFx0XHRcdC5zZXREZXNjKCdVc2UgdGhlIGhvbWUgaWNvbiBpbnN0ZWFkIG9mIGJsb2NrcyBpY29uIGZvciB0aGUgQ01TIHZpZXcgaW4gdGhlIEJhc2VzIHZpZXcgc2VsZWN0b3IuIFJlc3RhcnQgT2JzaWRpYW4gZm9yIHRoaXMgY2hhbmdlIHRvIHRha2UgZWZmZWN0LicpXHJcblx0XHRcdFx0LmFkZFRvZ2dsZSh0b2dnbGUgPT4ge1xyXG5cdFx0XHRcdFx0dG9nZ2xlLnNldFZhbHVlKHRoaXMucGx1Z2luLnNldHRpbmdzLnVzZUhvbWVJY29uKTtcclxuXHRcdFx0XHRcdHRvZ2dsZS5vbkNoYW5nZShhc3luYyAodmFsdWUpID0+IHtcclxuXHRcdFx0XHRcdFx0dGhpcy5wbHVnaW4uc2V0dGluZ3MudXNlSG9tZUljb24gPSB2YWx1ZTtcclxuXHRcdFx0XHRcdFx0YXdhaXQgdGhpcy5wbHVnaW4uc2F2ZURhdGEodGhpcy5wbHVnaW4uc2V0dGluZ3MpO1xyXG5cdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0fSk7XHJcblx0XHR9KTtcclxuXHJcblx0XHRhcHBlYXJhbmNlR3JvdXAuYWRkU2V0dGluZyhzZXR0aW5nID0+IHtcclxuXHRcdFx0c2V0dGluZ1xyXG5cdFx0XHRcdC5zZXROYW1lKCdGb3JjZSBzdGF0aWMgaW1hZ2UgZm9yIGFuaW1hdGVkIEdJRnMnKVxyXG5cdFx0XHRcdC5zZXREZXNjKCdXaGVuIGVuYWJsZWQsIGFuaW1hdGVkIEdJRnMgd2lsbCBkaXNwbGF5IG9ubHkgdGhlIGZpcnN0IGZyYW1lIHdoZW4gdXNlZCBhcyBjYXJkIGNvdmVycyBvciB0aHVtYm5haWxzLicpXHJcblx0XHRcdFx0LmFkZFRvZ2dsZSh0b2dnbGUgPT4ge1xyXG5cdFx0XHRcdFx0dG9nZ2xlLnNldFZhbHVlKHRoaXMucGx1Z2luLnNldHRpbmdzLmZvcmNlU3RhdGljR2lmSW1hZ2VzKTtcclxuXHRcdFx0XHRcdHRvZ2dsZS5vbkNoYW5nZShhc3luYyAodmFsdWUpID0+IHtcclxuXHRcdFx0XHRcdFx0dGhpcy5wbHVnaW4uc2V0dGluZ3MuZm9yY2VTdGF0aWNHaWZJbWFnZXMgPSB2YWx1ZTtcclxuXHRcdFx0XHRcdFx0YXdhaXQgdGhpcy5wbHVnaW4uc2F2ZURhdGEodGhpcy5wbHVnaW4uc2V0dGluZ3MpO1xyXG5cdFx0XHRcdFx0XHQvLyBSZWZyZXNoIGFsbCBhY3RpdmUgdmlld3MgdG8gYXBwbHkgdGhlIGNoYW5nZVxyXG5cdFx0XHRcdFx0XHRjb25zdCBwbHVnaW5XaXRoTWV0aG9kID0gdGhpcy5wbHVnaW4gYXMgeyBhY3RpdmVWaWV3cz86IFNldDx7IG9uRGF0YVVwZGF0ZWQ/OiAoKSA9PiB2b2lkIH0+IH07XHJcblx0XHRcdFx0XHRcdGlmIChwbHVnaW5XaXRoTWV0aG9kLmFjdGl2ZVZpZXdzKSB7XHJcblx0XHRcdFx0XHRcdFx0cGx1Z2luV2l0aE1ldGhvZC5hY3RpdmVWaWV3cy5mb3JFYWNoKHZpZXcgPT4ge1xyXG5cdFx0XHRcdFx0XHRcdFx0aWYgKHZpZXcub25EYXRhVXBkYXRlZCkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHR2aWV3Lm9uRGF0YVVwZGF0ZWQoKTtcclxuXHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0fSk7XHJcblx0XHR9KTtcclxuXHJcblx0XHQvLyBQZXJmb3JtYW5jZSBzZXR0aW5nc1xyXG5cdFx0Y29uc3QgcGVyZm9ybWFuY2VHcm91cCA9IGNyZWF0ZVNldHRpbmdzR3JvdXAoY29udGFpbmVyRWwsICdQZXJmb3JtYW5jZScsICdiYXNlcy1jbXMnKTtcclxuXHJcblx0XHRwZXJmb3JtYW5jZUdyb3VwLmFkZFNldHRpbmcoc2V0dGluZyA9PiB7XHJcblx0XHRcdHNldHRpbmdcclxuXHRcdFx0XHQuc2V0TmFtZSgnRW1iZWRkZWQgdmlldyByZWZyZXNoIGRlYm91bmNlIChtcyknKVxyXG5cdFx0XHRcdC5zZXREZXNjKCdEZWxheSBpbiBtaWxsaXNlY29uZHMgYmVmb3JlIHJlZnJlc2hpbmcgZW1iZWRkZWQgdmlld3Mgd2hlbiBzd2l0Y2hpbmcgZmlsZXMuIEhpZ2hlciB2YWx1ZXMgcmVkdWNlIENQVSB1c2FnZSBidXQgbWF5IG1ha2Ugdmlld3MgZmVlbCBsZXNzIHJlc3BvbnNpdmUuIFJhbmdlOiA1MC01MDBtcy4nKVxyXG5cdFx0XHRcdC5hZGRTbGlkZXIoc2xpZGVyID0+IHtcclxuXHRcdFx0XHRcdHNsaWRlci5zZXRMaW1pdHMoNTAsIDUwMCwgMjUpO1xyXG5cdFx0XHRcdFx0c2xpZGVyLnNldFZhbHVlKHRoaXMucGx1Z2luLnNldHRpbmdzLmVtYmVkZGVkVmlld1JlZnJlc2hEZWJvdW5jZU1zKTtcclxuXHRcdFx0XHRcdHNsaWRlci5zZXREeW5hbWljVG9vbHRpcCgpO1xyXG5cdFx0XHRcdFx0c2xpZGVyLm9uQ2hhbmdlKGFzeW5jICh2YWx1ZSkgPT4ge1xyXG5cdFx0XHRcdFx0XHR0aGlzLnBsdWdpbi5zZXR0aW5ncy5lbWJlZGRlZFZpZXdSZWZyZXNoRGVib3VuY2VNcyA9IHZhbHVlO1xyXG5cdFx0XHRcdFx0XHRhd2FpdCB0aGlzLnBsdWdpbi5zYXZlRGF0YSh0aGlzLnBsdWdpbi5zZXR0aW5ncyk7XHJcblx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHR9KTtcclxuXHRcdH0pO1xyXG5cclxuXHRcdHBlcmZvcm1hbmNlR3JvdXAuYWRkU2V0dGluZyhzZXR0aW5nID0+IHtcclxuXHRcdFx0c2V0dGluZ1xyXG5cdFx0XHRcdC5zZXROYW1lKCdWaXJ0dWFsIHNjcm9sbGluZyB0aHJlc2hvbGQnKVxyXG5cdFx0XHRcdC5zZXREZXNjKCdOdW1iZXIgb2YgY2FyZHMgYWJvdmUgd2hpY2ggdmlydHVhbCBzY3JvbGxpbmcgaXMgZW5hYmxlZC4gVmlydHVhbCBzY3JvbGxpbmcgb25seSByZW5kZXJzIGNhcmRzIGluIHRoZSB2aWV3cG9ydCwgaW1wcm92aW5nIHBlcmZvcm1hbmNlIGZvciBsYXJnZSBjb2xsZWN0aW9ucy4gU2V0IHRvIDAgdG8gYWx3YXlzIGVuYWJsZSwgb3IgYSBoaWdoIHZhbHVlIHRvIGRpc2FibGUuJylcclxuXHRcdFx0XHQuYWRkU2xpZGVyKHNsaWRlciA9PiB7XHJcblx0XHRcdFx0XHRzbGlkZXIuc2V0TGltaXRzKDAsIDUwMCwgMjUpO1xyXG5cdFx0XHRcdFx0c2xpZGVyLnNldFZhbHVlKHRoaXMucGx1Z2luLnNldHRpbmdzLnZpcnR1YWxTY3JvbGxUaHJlc2hvbGQpO1xyXG5cdFx0XHRcdFx0c2xpZGVyLnNldER5bmFtaWNUb29sdGlwKCk7XHJcblx0XHRcdFx0XHRzbGlkZXIub25DaGFuZ2UoYXN5bmMgKHZhbHVlKSA9PiB7XHJcblx0XHRcdFx0XHRcdHRoaXMucGx1Z2luLnNldHRpbmdzLnZpcnR1YWxTY3JvbGxUaHJlc2hvbGQgPSB2YWx1ZTtcclxuXHRcdFx0XHRcdFx0YXdhaXQgdGhpcy5wbHVnaW4uc2F2ZURhdGEodGhpcy5wbHVnaW4uc2V0dGluZ3MpO1xyXG5cdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0fSk7XHJcblx0XHR9KTtcclxuXHJcblx0XHRwZXJmb3JtYW5jZUdyb3VwLmFkZFNldHRpbmcoc2V0dGluZyA9PiB7XHJcblx0XHRcdHNldHRpbmdcclxuXHRcdFx0XHQuc2V0TmFtZSgnVmlydHVhbCBzY3JvbGwgYnVmZmVyJylcclxuXHRcdFx0XHQuc2V0RGVzYygnTnVtYmVyIG9mIGNhcmRzIHRvIHJlbmRlciBhYm92ZSBhbmQgYmVsb3cgdGhlIHZpc2libGUgdmlld3BvcnQgd2hlbiB2aXJ0dWFsIHNjcm9sbGluZyBpcyBhY3RpdmUuIEhpZ2hlciB2YWx1ZXMgcmVkdWNlIHZpc3VhbCBnbGl0Y2hlcyB3aGVuIHNjcm9sbGluZyBmYXN0IGJ1dCB1c2UgbW9yZSBtZW1vcnkuJylcclxuXHRcdFx0XHQuYWRkU2xpZGVyKHNsaWRlciA9PiB7XHJcblx0XHRcdFx0XHRzbGlkZXIuc2V0TGltaXRzKDUsIDUwLCA1KTtcclxuXHRcdFx0XHRcdHNsaWRlci5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy52aXJ0dWFsU2Nyb2xsQnVmZmVyKTtcclxuXHRcdFx0XHRcdHNsaWRlci5zZXREeW5hbWljVG9vbHRpcCgpO1xyXG5cdFx0XHRcdFx0c2xpZGVyLm9uQ2hhbmdlKGFzeW5jICh2YWx1ZSkgPT4ge1xyXG5cdFx0XHRcdFx0XHR0aGlzLnBsdWdpbi5zZXR0aW5ncy52aXJ0dWFsU2Nyb2xsQnVmZmVyID0gdmFsdWU7XHJcblx0XHRcdFx0XHRcdGF3YWl0IHRoaXMucGx1Z2luLnNhdmVEYXRhKHRoaXMucGx1Z2luLnNldHRpbmdzKTtcclxuXHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdH0pO1xyXG5cdFx0fSk7XHJcblxyXG5cdFx0Ly8gUHJvcGVydGllcyBpbmZvIG1vZGFsIHNldHRpbmdcclxuXHRcdC8vIFF1aWNrIGVkaXQgc2V0dGluZ3NcclxuXHRcdGNvbnN0IHF1aWNrRWRpdEdyb3VwID0gY3JlYXRlU2V0dGluZ3NHcm91cChjb250YWluZXJFbCwgJ1F1aWNrIGVkaXQnLCAnYmFzZXMtY21zJyk7XHJcblxyXG5cdFx0Ly8gRGVmaW5lIHF1aWNrIGVkaXQgc2V0dGluZ3MgZmlyc3QgKG5lZWRlZCBmb3IgdmlzaWJpbGl0eSB0b2dnbGluZylcclxuXHRcdGxldCBxdWlja0VkaXRDb21tYW5kU2V0dGluZzogU2V0dGluZztcclxuXHRcdGxldCBxdWlja0VkaXRJY29uU2V0dGluZzogU2V0dGluZztcclxuXHRcdGxldCBxdWlja0VkaXRPcGVuRmlsZVNldHRpbmc6IFNldHRpbmc7XHJcblxyXG5cdFx0cXVpY2tFZGl0R3JvdXAuYWRkU2V0dGluZyhzZXR0aW5nID0+IHtcclxuXHRcdFx0c2V0dGluZ1xyXG5cdFx0XHRcdC5zZXROYW1lKCdFbmFibGUgcXVpY2sgZWRpdCcpXHJcblx0XHRcdFx0LnNldERlc2MoJ1Nob3cgYW4gaWNvbiBvbiBjYXJkIHRpdGxlcyB0aGF0IGxhdW5jaGVzIGEgY29tbWFuZCB3aGVuIGNsaWNrZWQuJylcclxuXHRcdFx0XHQuYWRkVG9nZ2xlKHRvZ2dsZSA9PiB0b2dnbGVcclxuXHRcdFx0XHRcdC5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy5lbmFibGVRdWlja0VkaXQpXHJcblx0XHRcdFx0XHQub25DaGFuZ2UoKHZhbHVlKSA9PiB7XHJcblx0XHRcdFx0XHRcdHZvaWQgKGFzeW5jICgpID0+IHtcclxuXHRcdFx0XHRcdFx0XHR0aGlzLnBsdWdpbi5zZXR0aW5ncy5lbmFibGVRdWlja0VkaXQgPSB2YWx1ZTtcclxuXHRcdFx0XHRcdFx0XHRhd2FpdCB0aGlzLnBsdWdpbi5zYXZlRGF0YSh0aGlzLnBsdWdpbi5zZXR0aW5ncyk7XHJcblx0XHRcdFx0XHRcdFx0Ly8gU2hvdy9oaWRlIGNvbW1hbmQgc2VsZWN0b3IgYW5kIHJlbGF0ZWQgc2V0dGluZ3MgYmFzZWQgb24gdG9nZ2xlXHJcblx0XHRcdFx0XHRcdFx0Y29uc3Qgc2hvdWxkSGlkZSA9ICF2YWx1ZTtcclxuXHRcdFx0XHRcdFx0XHQvLyBFeHRyYWN0IHNldHRpbmdFbCBwcm9wZXJ0aWVzIHRvIGF2b2lkIHByb21pc2UgbWlzdXNlIGVycm9yc1xyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IGNvbW1hbmRFbCA9IHF1aWNrRWRpdENvbW1hbmRTZXR0aW5nPy5zZXR0aW5nRWw7XHJcblx0XHRcdFx0XHRcdFx0Y29uc3QgaWNvbkVsID0gcXVpY2tFZGl0SWNvblNldHRpbmc/LnNldHRpbmdFbDtcclxuXHRcdFx0XHRcdFx0XHRjb25zdCBvcGVuRmlsZUVsID0gcXVpY2tFZGl0T3BlbkZpbGVTZXR0aW5nPy5zZXR0aW5nRWw7XHJcblx0XHRcdFx0XHRcdFx0aWYgKGNvbW1hbmRFbCkge1xyXG5cdFx0XHRcdFx0XHRcdFx0Y29tbWFuZEVsLnRvZ2dsZUNsYXNzKCdiYXNlcy1jbXMtc2V0dGluZy1oaWRkZW4nLCBzaG91bGRIaWRlKTtcclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0aWYgKGljb25FbCkge1xyXG5cdFx0XHRcdFx0XHRcdFx0aWNvbkVsLnRvZ2dsZUNsYXNzKCdiYXNlcy1jbXMtc2V0dGluZy1oaWRkZW4nLCBzaG91bGRIaWRlKTtcclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0aWYgKG9wZW5GaWxlRWwpIHtcclxuXHRcdFx0XHRcdFx0XHRcdG9wZW5GaWxlRWwudG9nZ2xlQ2xhc3MoJ2Jhc2VzLWNtcy1zZXR0aW5nLWhpZGRlbicsIHNob3VsZEhpZGUpO1xyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0fSkoKTtcclxuXHRcdFx0XHRcdH0pKTtcclxuXHRcdH0pO1xyXG5cclxuXHRcdC8vIENvbW1hbmQgcGlja2VyIHNldHRpbmdcclxuXHRcdHF1aWNrRWRpdEdyb3VwLmFkZFNldHRpbmcoc2V0dGluZyA9PiB7XHJcblx0XHRcdHF1aWNrRWRpdENvbW1hbmRTZXR0aW5nID0gc2V0dGluZztcclxuXHRcdFx0c2V0dGluZ1xyXG5cdFx0XHRcdC5zZXROYW1lKCdRdWljayBlZGl0IGNvbW1hbmQnKVxyXG5cdFx0XHRcdC5zZXREZXNjKCdUaGUgY29tbWFuZCB0byBleGVjdXRlIHdoZW4gY2xpY2tpbmcgdGhlIHF1aWNrIGVkaXQgaWNvbiBvbiBhIGNhcmQgdGl0bGUuJylcclxuXHRcdFx0XHQuYWRkQnV0dG9uKGJ1dHRvbiA9PiB7XHJcblx0XHRcdFx0XHRjb25zdCBjdXJyZW50Q29tbWFuZE5hbWUgPSB0aGlzLnBsdWdpbi5zZXR0aW5ncy5xdWlja0VkaXRDb21tYW5kTmFtZSB8fFxyXG5cdFx0XHRcdFx0XHQodGhpcy5wbHVnaW4uc2V0dGluZ3MucXVpY2tFZGl0Q29tbWFuZCA/ICdTZWxlY3QgY29tbWFuZC4uLicgOiAnTm8gY29tbWFuZCBzZWxlY3RlZCcpO1xyXG5cdFx0XHRcdFx0YnV0dG9uLnNldEJ1dHRvblRleHQoY3VycmVudENvbW1hbmROYW1lKVxyXG5cdFx0XHRcdFx0XHQub25DbGljaygoKSA9PiB7XHJcblx0XHRcdFx0XHRcdFx0Y29uc3QgbW9kYWwgPSBuZXcgQ29tbWFuZFBpY2tlck1vZGFsKHRoaXMuYXBwLCAoY29tbWFuZElkOiBzdHJpbmcpID0+IHtcclxuXHRcdFx0XHRcdFx0XHRcdHZvaWQgKGFzeW5jICgpID0+IHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gR2V0IGNvbW1hbmQgbmFtZSBieSBsb29raW5nIGl0IHVwXHJcblx0XHRcdFx0XHRcdFx0XHRcdGNvbnN0IGNvbW1hbmRSZWdpc3RyeSA9ICh0aGlzLmFwcCBhcyB7IGNvbW1hbmRzPzogeyBsaXN0Q29tbWFuZHM/OiAoKSA9PiBBcnJheTx7IGlkOiBzdHJpbmc7IG5hbWU6IHN0cmluZyB9PjsgY29tbWFuZHM/OiBSZWNvcmQ8c3RyaW5nLCB7IG5hbWU/OiBzdHJpbmcgfT4gfSB9KS5jb21tYW5kcztcclxuXHRcdFx0XHRcdFx0XHRcdFx0bGV0IGNvbW1hbmROYW1lID0gJyc7XHJcblxyXG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBUcnkgdG8gZmluZCB0aGUgY29tbWFuZCBuYW1lXHJcblx0XHRcdFx0XHRcdFx0XHRcdGlmIChjb21tYW5kUmVnaXN0cnkpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBUcnkgbGlzdENvbW1hbmRzKClcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAodHlwZW9mIGNvbW1hbmRSZWdpc3RyeS5saXN0Q29tbWFuZHMgPT09ICdmdW5jdGlvbicpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNvbnN0IGNvbW1hbmRzID0gY29tbWFuZFJlZ2lzdHJ5Lmxpc3RDb21tYW5kcygpO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y29uc3QgY29tbWFuZCA9IGNvbW1hbmRzLmZpbmQoKGNtZCkgPT4gY21kLmlkID09PSBjb21tYW5kSWQpO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKGNvbW1hbmQpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y29tbWFuZE5hbWUgPSBjb21tYW5kLm5hbWU7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBGYWxsYmFjazogdHJ5IGRpcmVjdCByZWdpc3RyeSBhY2Nlc3NcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoIWNvbW1hbmROYW1lKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjb25zdCByZWdpc3RyeSA9IGNvbW1hbmRSZWdpc3RyeS5jb21tYW5kcztcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmIChyZWdpc3RyeSAmJiByZWdpc3RyeVtjb21tYW5kSWRdKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNvbW1hbmROYW1lID0gcmVnaXN0cnlbY29tbWFuZElkXS5uYW1lIHx8ICcnO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5wbHVnaW4uc2V0dGluZ3MucXVpY2tFZGl0Q29tbWFuZCA9IGNvbW1hbmRJZDtcclxuXHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5wbHVnaW4uc2V0dGluZ3MucXVpY2tFZGl0Q29tbWFuZE5hbWUgPSBjb21tYW5kTmFtZTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0YXdhaXQgdGhpcy5wbHVnaW4uc2F2ZURhdGEodGhpcy5wbHVnaW4uc2V0dGluZ3MpO1xyXG5cclxuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gUmUtcmVuZGVyIHRvIHVwZGF0ZSB0aGUgVUlcclxuXHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5kaXNwbGF5KCk7XHJcblx0XHRcdFx0XHRcdFx0XHR9KSgpO1xyXG5cdFx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0XHRcdG1vZGFsLm9wZW4oKTtcclxuXHRcdFx0XHRcdFx0fSk7XHJcblxyXG5cdFx0XHRcdFx0Ly8gQWRkIGEgY2xlYXIgYnV0dG9uIGlmIGEgY29tbWFuZCBpcyBzZWxlY3RlZFxyXG5cdFx0XHRcdFx0aWYgKHRoaXMucGx1Z2luLnNldHRpbmdzLnF1aWNrRWRpdENvbW1hbmQpIHtcclxuXHRcdFx0XHRcdFx0Y29uc3QgY2xlYXJCdXR0b24gPSBidXR0b24uYnV0dG9uRWwucGFyZW50RWxlbWVudD8uY3JlYXRlRWwoJ2J1dHRvbicsIHtcclxuXHRcdFx0XHRcdFx0XHR0ZXh0OiAnQ2xlYXInLFxyXG5cdFx0XHRcdFx0XHRcdGF0dHI6IHsgc3R5bGU6ICdtYXJnaW4tbGVmdDogOHB4OycgfVxyXG5cdFx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdFx0Y2xlYXJCdXR0b24/LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4ge1xyXG5cdFx0XHRcdFx0XHRcdHZvaWQgKGFzeW5jICgpID0+IHtcclxuXHRcdFx0XHRcdFx0XHRcdHRoaXMucGx1Z2luLnNldHRpbmdzLnF1aWNrRWRpdENvbW1hbmQgPSAnJztcclxuXHRcdFx0XHRcdFx0XHRcdHRoaXMucGx1Z2luLnNldHRpbmdzLnF1aWNrRWRpdENvbW1hbmROYW1lID0gJyc7XHJcblx0XHRcdFx0XHRcdFx0XHRhd2FpdCB0aGlzLnBsdWdpbi5zYXZlRGF0YSh0aGlzLnBsdWdpbi5zZXR0aW5ncyk7XHJcblx0XHRcdFx0XHRcdFx0XHQvLyBSZS1yZW5kZXIgdG8gdXBkYXRlIHRoZSBVSVxyXG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5kaXNwbGF5KCk7XHJcblx0XHRcdFx0XHRcdFx0fSkoKTtcclxuXHRcdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdC8vIEhpZGUgY29tbWFuZCBzZWxlY3RvciBpZiBxdWljayBlZGl0IGlzIGRpc2FibGVkXHJcblx0XHRcdHNldHRpbmcuc2V0dGluZ0VsLnRvZ2dsZUNsYXNzKCdiYXNlcy1jbXMtc2V0dGluZy1oaWRkZW4nLCAhdGhpcy5wbHVnaW4uc2V0dGluZ3MuZW5hYmxlUXVpY2tFZGl0KTtcclxuXHRcdH0pO1xyXG5cclxuXHRcdC8vIEljb24gcGlja2VyIHNldHRpbmdcclxuXHRcdHF1aWNrRWRpdEdyb3VwLmFkZFNldHRpbmcoc2V0dGluZyA9PiB7XHJcblx0XHRcdHF1aWNrRWRpdEljb25TZXR0aW5nID0gc2V0dGluZztcclxuXHRcdFx0c2V0dGluZ1xyXG5cdFx0XHRcdC5zZXROYW1lKCdRdWljayBlZGl0IGljb24nKVxyXG5cdFx0XHRcdC5zZXREZXNjKCdTZWxlY3QgdGhlIGljb24gdG8gZGlzcGxheSBmb3IgdGhlIHF1aWNrIGVkaXQgYnV0dG9uIG9uIGNhcmQgdGl0bGVzLicpXHJcblx0XHRcdFx0LmFkZEJ1dHRvbihidXR0b24gPT4ge1xyXG5cdFx0XHRcdFx0Y29uc3QgaWNvbk5hbWUgPSB0aGlzLmdldEljb25OYW1lKHRoaXMucGx1Z2luLnNldHRpbmdzLnF1aWNrRWRpdEljb24gfHwgJ3BlbmNpbC1saW5lJyk7XHJcblx0XHRcdFx0XHRidXR0b24uc2V0QnV0dG9uVGV4dChpY29uTmFtZSB8fCAnU2VsZWN0IGljb24uLi4nKVxyXG5cdFx0XHRcdFx0XHQub25DbGljaygoKSA9PiB7XHJcblx0XHRcdFx0XHRcdFx0Y29uc3QgbW9kYWwgPSBuZXcgSWNvblBpY2tlck1vZGFsKHRoaXMuYXBwLCAoaWNvbklkKSA9PiB7XHJcblx0XHRcdFx0XHRcdFx0XHR2b2lkIChhc3luYyAoKSA9PiB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdHRoaXMucGx1Z2luLnNldHRpbmdzLnF1aWNrRWRpdEljb24gPSBpY29uSWQ7XHJcblx0XHRcdFx0XHRcdFx0XHRcdGF3YWl0IHRoaXMucGx1Z2luLnNhdmVEYXRhKHRoaXMucGx1Z2luLnNldHRpbmdzKTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gUmUtcmVuZGVyIHRvIHNob3cgdXBkYXRlZCBpY29uIG5hbWVcclxuXHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5kaXNwbGF5KCk7XHJcblx0XHRcdFx0XHRcdFx0XHR9KSgpO1xyXG5cdFx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0XHRcdG1vZGFsLm9wZW4oKTtcclxuXHRcdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdC8vIEhpZGUgaWNvbiBzZWxlY3RvciBpZiBxdWljayBlZGl0IGlzIGRpc2FibGVkXHJcblx0XHRcdHNldHRpbmcuc2V0dGluZ0VsLnRvZ2dsZUNsYXNzKCdiYXNlcy1jbXMtc2V0dGluZy1oaWRkZW4nLCAhdGhpcy5wbHVnaW4uc2V0dGluZ3MuZW5hYmxlUXVpY2tFZGl0KTtcclxuXHRcdH0pO1xyXG5cclxuXHRcdC8vIFF1aWNrIGVkaXQgb3BlbiBmaWxlIHNldHRpbmdcclxuXHRcdHF1aWNrRWRpdEdyb3VwLmFkZFNldHRpbmcoc2V0dGluZyA9PiB7XHJcblx0XHRcdHF1aWNrRWRpdE9wZW5GaWxlU2V0dGluZyA9IHNldHRpbmc7XHJcblx0XHRcdHNldHRpbmdcclxuXHRcdFx0XHQuc2V0TmFtZSgnQXR0ZW1wdCB0byBvcGVuIGZpbGUgYW5kIGV4ZWN1dGUgcXVpY2sgZWRpdCBjb21tYW5kJylcclxuXHRcdFx0XHQuc2V0RGVzYygnRm9yIGNvbW1hbmRzIHRoYXQgZG9uXFwndCBoYXZlIHNwZWNpYWwgaGFuZGxpbmcsIGF0dGVtcHQgdG8gb3BlbiB0aGUgZmlsZSBhbmQgZXhlY3V0ZSB0aGUgY29tbWFuZC4gU29tZSBjb21tYW5kcyBtYXkgbm90IHdvcmsgcHJvcGVybHkgdGhpcyB3YXkuJylcclxuXHRcdFx0XHQuYWRkVG9nZ2xlKHRvZ2dsZSA9PiB0b2dnbGVcclxuXHRcdFx0XHRcdC5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy5xdWlja0VkaXRPcGVuRmlsZSlcclxuXHRcdFx0XHRcdC5vbkNoYW5nZSgodmFsdWUpID0+IHtcclxuXHRcdFx0XHRcdFx0dm9pZCAoYXN5bmMgKCkgPT4ge1xyXG5cdFx0XHRcdFx0XHRcdHRoaXMucGx1Z2luLnNldHRpbmdzLnF1aWNrRWRpdE9wZW5GaWxlID0gdmFsdWU7XHJcblx0XHRcdFx0XHRcdFx0YXdhaXQgdGhpcy5wbHVnaW4uc2F2ZURhdGEodGhpcy5wbHVnaW4uc2V0dGluZ3MpO1xyXG5cdFx0XHRcdFx0XHR9KSgpO1xyXG5cdFx0XHRcdFx0fSkpO1xyXG5cdFx0XHQvLyBIaWRlIHRoaXMgc2V0dGluZyBpZiBxdWljayBlZGl0IGlzIGRpc2FibGVkXHJcblx0XHRcdHNldHRpbmcuc2V0dGluZ0VsLnRvZ2dsZUNsYXNzKCdiYXNlcy1jbXMtc2V0dGluZy1oaWRkZW4nLCAhdGhpcy5wbHVnaW4uc2V0dGluZ3MuZW5hYmxlUXVpY2tFZGl0KTtcclxuXHRcdH0pO1xyXG5cclxuXHR9XHJcblxyXG5cdHByaXZhdGUgZ2V0SWNvbk5hbWUoaWNvbklkOiBzdHJpbmcpOiBzdHJpbmcge1xyXG5cdFx0aWYgKCFpY29uSWQpIHJldHVybiAnJztcclxuXHRcdC8vIENvbnZlcnQgaWNvbiBJRCB0byBhIHJlYWRhYmxlIG5hbWUsIHJlbW92aW5nIGx1Y2lkZS0gcHJlZml4IGlmIHByZXNlbnRcclxuXHRcdHJldHVybiBpY29uSWRcclxuXHRcdFx0LnJlcGxhY2UoL15sdWNpZGUtLywgJycpIC8vIFJlbW92ZSBsdWNpZGUtIHByZWZpeFxyXG5cdFx0XHQuc3BsaXQoJy0nKVxyXG5cdFx0XHQubWFwKHdvcmQgPT4gd29yZC5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHdvcmQuc2xpY2UoMSkpXHJcblx0XHRcdC5qb2luKCcgJyk7XHJcblx0fVxyXG59XHJcblxyXG5cclxuIiwgIi8qKlxyXG4gKiBDb21tYW5kIFBpY2tlciBNb2RhbFxyXG4gKiBTZWFyY2hhYmxlIG1vZGFsIGZvciBzZWxlY3RpbmcgYW4gT2JzaWRpYW4gY29tbWFuZFxyXG4gKi9cclxuXHJcbmltcG9ydCB7IEFwcCwgRnV6enlTdWdnZXN0TW9kYWwgfSBmcm9tICdvYnNpZGlhbic7XHJcblxyXG5pbnRlcmZhY2UgQ29tbWFuZE9wdGlvbiB7XHJcblx0aWQ6IHN0cmluZztcclxuXHRuYW1lOiBzdHJpbmc7XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBDb21tYW5kUGlja2VyTW9kYWwgZXh0ZW5kcyBGdXp6eVN1Z2dlc3RNb2RhbDxDb21tYW5kT3B0aW9uPiB7XHJcblx0cHJpdmF0ZSBvblNlbGVjdDogKGNvbW1hbmRJZDogc3RyaW5nKSA9PiB2b2lkO1xyXG5cclxuXHRjb25zdHJ1Y3RvcihhcHA6IEFwcCwgb25TZWxlY3Q6IChjb21tYW5kSWQ6IHN0cmluZykgPT4gdm9pZCkge1xyXG5cdFx0c3VwZXIoYXBwKTtcclxuXHRcdHRoaXMub25TZWxlY3QgPSBvblNlbGVjdDtcclxuXHR9XHJcblxyXG5cdGdldEl0ZW1zKCk6IENvbW1hbmRPcHRpb25bXSB7XHJcblx0XHQvLyBHZXQgYWxsIGF2YWlsYWJsZSBjb21tYW5kc1xyXG5cdFx0Ly8gVHJ5IG11bHRpcGxlIG1ldGhvZHMgdG8gZW5zdXJlIHdlIGdldCBBTEwgY29tbWFuZHMsIG5vdCBqdXN0IGNvbnRleHQtZmlsdGVyZWQgb25lc1xyXG5cdFx0Y29uc3QgY29tbWFuZFJlZ2lzdHJ5ID0gKHRoaXMuYXBwIGFzIHsgY29tbWFuZHM/OiB7IGxpc3RDb21tYW5kcz86ICgpID0+IENvbW1hbmRPcHRpb25bXTsgY29tbWFuZHM/OiBSZWNvcmQ8c3RyaW5nLCBDb21tYW5kT3B0aW9uPjsgY29tbWFuZFJlZ2lzdHJ5PzogUmVjb3JkPHN0cmluZywgQ29tbWFuZE9wdGlvbj4gfSB9KS5jb21tYW5kcztcclxuXHRcdFxyXG5cdFx0Ly8gVXNlIGEgU2V0IHRvIGRlZHVwbGljYXRlIGJ5IGNvbW1hbmQgSURcclxuXHRcdGNvbnN0IGNvbW1hbmRNYXAgPSBuZXcgTWFwPHN0cmluZywgQ29tbWFuZE9wdGlvbj4oKTtcclxuXHRcdFxyXG5cdFx0Ly8gTWV0aG9kIDE6IFRyeSBsaXN0Q29tbWFuZHMoKSAtIGJ1dCB0aGlzIG1pZ2h0IGJlIGNvbnRleHQtZmlsdGVyZWRcclxuXHRcdGlmIChjb21tYW5kUmVnaXN0cnkgJiYgdHlwZW9mIGNvbW1hbmRSZWdpc3RyeS5saXN0Q29tbWFuZHMgPT09ICdmdW5jdGlvbicpIHtcclxuXHRcdFx0dHJ5IHtcclxuXHRcdFx0XHRjb25zdCBjb21tYW5kcyA9IGNvbW1hbmRSZWdpc3RyeS5saXN0Q29tbWFuZHMoKTtcclxuXHRcdFx0XHRmb3IgKGNvbnN0IGNvbW1hbmQgb2YgY29tbWFuZHMpIHtcclxuXHRcdFx0XHRcdGlmIChjb21tYW5kICYmIGNvbW1hbmQuaWQgJiYgY29tbWFuZC5uYW1lICYmICFjb21tYW5kTWFwLmhhcyhjb21tYW5kLmlkKSkge1xyXG5cdFx0XHRcdFx0XHRjb21tYW5kTWFwLnNldChjb21tYW5kLmlkLCB7XHJcblx0XHRcdFx0XHRcdFx0aWQ6IGNvbW1hbmQuaWQsXHJcblx0XHRcdFx0XHRcdFx0bmFtZTogY29tbWFuZC5uYW1lXHJcblx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSBjYXRjaCAoZSkge1xyXG5cdFx0XHRcdGNvbnNvbGUud2FybignW0Jhc2VzIENNU10gRXJyb3IgZ2V0dGluZyBjb21tYW5kcyB2aWEgbGlzdENvbW1hbmRzKCk6JywgZSk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdFxyXG5cdFx0Ly8gTWV0aG9kIDI6IFRyeSBhY2Nlc3NpbmcgdGhlIGludGVybmFsIGNvbW1hbmRzIHJlZ2lzdHJ5IGRpcmVjdGx5XHJcblx0XHQvLyBUaGlzIHNob3VsZCBnaXZlIHVzIEFMTCBjb21tYW5kcyByZWdhcmRsZXNzIG9mIGNvbnRleHRcclxuXHRcdHRyeSB7XHJcblx0XHRcdGNvbnN0IHJlZ2lzdHJ5ID0gY29tbWFuZFJlZ2lzdHJ5Py5jb21tYW5kcztcclxuXHRcdFx0aWYgKHJlZ2lzdHJ5ICYmIHR5cGVvZiByZWdpc3RyeSA9PT0gJ29iamVjdCcpIHtcclxuXHRcdFx0XHRjb25zdCBhbGxDb21tYW5kcyA9IE9iamVjdC52YWx1ZXMocmVnaXN0cnkpO1xyXG5cdFx0XHRcdGZvciAoY29uc3QgY29tbWFuZCBvZiBhbGxDb21tYW5kcykge1xyXG5cdFx0XHRcdFx0aWYgKGNvbW1hbmQgJiYgY29tbWFuZC5pZCAmJiBjb21tYW5kLm5hbWUgJiYgIWNvbW1hbmRNYXAuaGFzKGNvbW1hbmQuaWQpKSB7XHJcblx0XHRcdFx0XHRcdGNvbW1hbmRNYXAuc2V0KGNvbW1hbmQuaWQsIHtcclxuXHRcdFx0XHRcdFx0XHRpZDogY29tbWFuZC5pZCxcclxuXHRcdFx0XHRcdFx0XHRuYW1lOiBjb21tYW5kLm5hbWVcclxuXHRcdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9IGNhdGNoIChlKSB7XHJcblx0XHRcdGNvbnNvbGUud2FybignW0Jhc2VzIENNU10gRXJyb3IgZ2V0dGluZyBjb21tYW5kcyB2aWEgcmVnaXN0cnk6JywgZSk7XHJcblx0XHR9XHJcblx0XHRcclxuXHRcdC8vIE1ldGhvZCAzOiBUcnkgYWNjZXNzaW5nIHZpYSBpbnRlcm5hbCBzdHJ1Y3R1cmUgKGZhbGxiYWNrKVxyXG5cdFx0dHJ5IHtcclxuXHRcdFx0Y29uc3QgaW50ZXJuYWxSZWdpc3RyeSA9IGNvbW1hbmRSZWdpc3RyeT8uY29tbWFuZFJlZ2lzdHJ5O1xyXG5cdFx0XHRpZiAoaW50ZXJuYWxSZWdpc3RyeSAmJiB0eXBlb2YgaW50ZXJuYWxSZWdpc3RyeSA9PT0gJ29iamVjdCcpIHtcclxuXHRcdFx0XHRjb25zdCBhbGxDb21tYW5kcyA9IE9iamVjdC52YWx1ZXMoaW50ZXJuYWxSZWdpc3RyeSk7XHJcblx0XHRcdFx0Zm9yIChjb25zdCBjb21tYW5kIG9mIGFsbENvbW1hbmRzKSB7XHJcblx0XHRcdFx0XHRpZiAoY29tbWFuZCAmJiBjb21tYW5kLmlkICYmIGNvbW1hbmQubmFtZSAmJiAhY29tbWFuZE1hcC5oYXMoY29tbWFuZC5pZCkpIHtcclxuXHRcdFx0XHRcdFx0Y29tbWFuZE1hcC5zZXQoY29tbWFuZC5pZCwge1xyXG5cdFx0XHRcdFx0XHRcdGlkOiBjb21tYW5kLmlkLFxyXG5cdFx0XHRcdFx0XHRcdG5hbWU6IGNvbW1hbmQubmFtZVxyXG5cdFx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH0gY2F0Y2ggKGUpIHtcclxuXHRcdFx0Y29uc29sZS53YXJuKCdbQmFzZXMgQ01TXSBFcnJvciBnZXR0aW5nIGNvbW1hbmRzIHZpYSBpbnRlcm5hbCByZWdpc3RyeTonLCBlKTtcclxuXHRcdH1cclxuXHRcdFxyXG5cdFx0Y29uc3QgY29tbWFuZE9wdGlvbnMgPSBBcnJheS5mcm9tKGNvbW1hbmRNYXAudmFsdWVzKCkpO1xyXG5cdFx0XHJcblx0XHQvLyBTb3J0IGFscGhhYmV0aWNhbGx5IGJ5IG5hbWVcclxuXHRcdGNvbW1hbmRPcHRpb25zLnNvcnQoKGEsIGIpID0+IGEubmFtZS5sb2NhbGVDb21wYXJlKGIubmFtZSkpO1xyXG5cdFx0XHJcblx0XHRyZXR1cm4gY29tbWFuZE9wdGlvbnM7XHJcblx0fVxyXG5cclxuXHRnZXRJdGVtVGV4dChpdGVtOiBDb21tYW5kT3B0aW9uKTogc3RyaW5nIHtcclxuXHRcdHJldHVybiBpdGVtLm5hbWU7XHJcblx0fVxyXG5cclxuXHRvbkNob29zZUl0ZW0oaXRlbTogQ29tbWFuZE9wdGlvbiwgZXZ0OiBNb3VzZUV2ZW50IHwgS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xyXG5cdFx0dGhpcy5vblNlbGVjdChpdGVtLmlkKTtcclxuXHR9XHJcblxyXG5cdC8vIE92ZXJyaWRlIHRvIHNob3cgY29tbWFuZCBuYW1lIG9ubHlcclxuXHRyZW5kZXJTdWdnZXN0aW9uKG1hdGNoOiB7IGl0ZW06IENvbW1hbmRPcHRpb24gfSwgZWw6IEhUTUxFbGVtZW50KTogdm9pZCB7XHJcblx0XHRjb25zdCBpdGVtID0gbWF0Y2guaXRlbTtcclxuXHRcdGVsLmNyZWF0ZURpdih7IGNsczogJ3N1Z2dlc3Rpb24tdGl0bGUnLCB0ZXh0OiBpdGVtLm5hbWUgfSk7XHJcblx0fVxyXG59XHJcblxyXG5cclxuIiwgIi8qKlxyXG4gKiBJY29uIFBpY2tlciBNb2RhbFxyXG4gKiBTZWFyY2hhYmxlIG1vZGFsIGZvciBzZWxlY3RpbmcgYSBMdWNpZGUgaWNvblxyXG4gKi9cclxuXHJcbmltcG9ydCB7IEFwcCwgRnV6enlTdWdnZXN0TW9kYWwsIHNldEljb24sIGdldEljb25JZHMsIHJlcXVpcmVBcGlWZXJzaW9uIH0gZnJvbSAnb2JzaWRpYW4nO1xyXG5cclxuaW50ZXJmYWNlIEljb25PcHRpb24ge1xyXG5cdGlkOiBzdHJpbmc7XHJcblx0bmFtZTogc3RyaW5nO1xyXG59XHJcblxyXG4vLyBHZXQgaWNvbiBsaXN0IGZyb20gT2JzaWRpYW4gQVBJIGlmIGF2YWlsYWJsZSwgb3RoZXJ3aXNlIHVzZSBmYWxsYmFjayBsaXN0XHJcbmNvbnN0IGdldEljb25MaXN0ID0gKCk6IHN0cmluZ1tdID0+IHtcclxuXHRpZiAocmVxdWlyZUFwaVZlcnNpb24gJiYgcmVxdWlyZUFwaVZlcnNpb24oJzEuNy4zJykgJiYgZ2V0SWNvbklkcykge1xyXG5cdFx0dHJ5IHtcclxuXHRcdFx0cmV0dXJuIGdldEljb25JZHMoKTtcclxuXHRcdH0gY2F0Y2ggKGUpIHtcclxuXHRcdFx0Y29uc29sZS53YXJuKCdbQmFzZXMgQ01TXSBFcnJvciBnZXR0aW5nIGljb24gSURzIGZyb20gT2JzaWRpYW46JywgZSk7XHJcblx0XHR9XHJcblx0fVxyXG5cdC8vIEZhbGxiYWNrIHRvIGEgYmFzaWMgbGlzdCBpZiBBUEkgaXMgbm90IGF2YWlsYWJsZVxyXG5cdHJldHVybiBbXHJcblx0XHQnc2V0dGluZ3MtMicsICdzZXR0aW5ncycsICdoZWxwLWNpcmNsZScsICdpbmZvJywgJ3N0YXInLCAnaGVhcnQnLCAnYm9va21hcmsnLFxyXG5cdFx0J2hvbWUnLCAnc2VhcmNoJywgJ2JlbGwnLCAnbWFpbCcsICd1c2VyJywgJ3VzZXJzJywgJ2ZvbGRlcicsICdmaWxlJywgJ2ZpbGUtdGV4dCcsXHJcblx0XHQnaW1hZ2UnLCAndmlkZW8nLCAnbXVzaWMnLCAnY2FsZW5kYXInLCAnY2xvY2snLCAnZWRpdCcsICdwZW5jaWwnLCAndHJhc2gnLFxyXG5cdFx0J2NvcHknLCAnY3V0JywgJ3Bhc3RlJywgJ2Rvd25sb2FkJywgJ3VwbG9hZCcsICdzYXZlJywgJ3NoYXJlJywgJ2xpbmsnLFxyXG5cdFx0J2V4dGVybmFsLWxpbmsnLCAnbG9jaycsICd1bmxvY2snLCAnZXllJywgJ2V5ZS1vZmYnLCAna2V5JywgJ3NoaWVsZCcsXHJcblx0XHQnY2hlY2snLCAneCcsICdwbHVzJywgJ21pbnVzJywgJ2Fycm93LWxlZnQnLCAnYXJyb3ctcmlnaHQnLCAnYXJyb3ctdXAnLFxyXG5cdFx0J2Fycm93LWRvd24nLCAnY2hldnJvbi1sZWZ0JywgJ2NoZXZyb24tcmlnaHQnLCAnY2hldnJvbi11cCcsICdjaGV2cm9uLWRvd24nLFxyXG5cdFx0J21lbnUnLCAnbW9yZS1ob3Jpem9udGFsJywgJ21vcmUtdmVydGljYWwnLCAnZ3JpZCcsICdsaXN0JywgJ2xheW91dCcsXHJcblx0XHQnY29sdW1ucycsICdyb3dzJywgJ21heGltaXplJywgJ21pbmltaXplJywgJ3pvb20taW4nLCAnem9vbS1vdXQnLFxyXG5cdFx0J3JlZnJlc2gtY3cnLCAncGxheScsICdwYXVzZScsICdzdG9wJywgJ3N1bicsICdtb29uJywgJ2Nsb3VkJywgJ3phcCcsXHJcblx0XHQnd2FuZC0yJywgJ3dhbmQnLCAnd2FuZC1zcGFya2xlcycsICdwYWxldHRlJywgJ2JydXNoJywgJ3NsaWRlcnMnLFxyXG5cdFx0J3Bvd2VyJywgJ3dpZmknLCAnYmx1ZXRvb3RoJywgJ21vbml0b3InLCAnbGFwdG9wJywgJ3NtYXJ0cGhvbmUnLFxyXG5cdFx0J2NhbWVyYScsICdtaWMnLCAnaGVhZHBob25lcycsICdjb2RlJywgJ3Rlcm1pbmFsJywgJ3Rlcm1pbmFsLXNxdWFyZScsXHJcblx0XHQnZ2l0aHViJywgJ2dpdGxhYicsICdnaXQtYnJhbmNoJywgJ2dpdC1jb21taXQnLCAnZGF0YWJhc2UnLCAnc2VydmVyJyxcclxuXHRcdCdjbG91ZC1kb3dubG9hZCcsICdjbG91ZC11cGxvYWQnLCAndGFnJywgJ3RhZ3MnLCAnZmxhZycsICdwaW4nLFxyXG5cdFx0J21hcC1waW4nLCAnY29tcGFzcycsICdnbG9iZScsICdyb2NrZXQnLCAnY2FyJywgJ2Jpa2UnLCAncm9ib3QnLFxyXG5cdFx0J2FwcGxlJywgJ3dpbmRvd3MnLCAnbGludXgnLCAnY2hyb21lJywgJ2ZpcmVmb3gnLCAnc2FmYXJpJyxcclxuXHRcdCdjcmVkaXQtY2FyZCcsICd3YWxsZXQnLCAnY29pbnMnLCAnYm9vaycsICdib29rLW9wZW4nLCAnYXdhcmQnLFxyXG5cdFx0J3Ryb3BoeScsICdiYWRnZScsICd3cmVuY2gnLCAndG9vbCcsICdwYWNrYWdlJywgJ2JveCcsICdhcmNoaXZlJyxcclxuXHRcdCdzZW5kJywgJ3JlcGx5JywgJ2ZvcndhcmQnLCAnbWFpbC1vcGVuJywgJ3RhZy1wbHVzJywgJ3RhZy1taW51cycsXHJcblx0XHQnZmxhZy1vZmYnLCAncGluLW9mZicsICdtYXAtcGluLW9mZicsICduYXZpZ2F0aW9uJywgJ21hcCcsICdlYXJ0aCcsXHJcblx0XHQncGxhbmUnLCAnc2hpcCcsICdhbmNob3InLCAnaGVsaWNvcHRlcicsICdkcm9uZScsICdhbmRyb2lkJyxcclxuXHRcdCdrZXlob2xlJywgJ2tleXMnLCAnZmluZ2VycHJpbnQnLCAnc2NhbicsICdxci1jb2RlJywgJ2JhcmNvZGUnLFxyXG5cdFx0J3JlY2VpcHQnLCAncGlnZ3ktYmFuaycsICdiYW5rbm90ZScsICdwZW5jaWwtbGluZScsICdlZGl0LTInLCAnZWRpdC0zJ1xyXG5cdF07XHJcbn07XHJcblxyXG4vLyBDb252ZXJ0IGljb24gSURzIHRvIEljb25PcHRpb24gZm9ybWF0XHJcbmNvbnN0IExVQ0lERV9JQ09OUzogSWNvbk9wdGlvbltdID0gZ2V0SWNvbkxpc3QoKS5tYXAoaWQgPT4gKHtcclxuXHRpZDogaWQsXHJcblx0bmFtZTogaWRcclxuXHRcdC5yZXBsYWNlKC9ebHVjaWRlLS8sICcnKSAvLyBSZW1vdmUgbHVjaWRlLSBwcmVmaXggZm9yIGRpc3BsYXlcclxuXHRcdC5yZXBsYWNlKC8tL2csICcgJylcclxuXHRcdC5yZXBsYWNlKC8oXlxcd3sxfSl8KFxccytcXHd7MX0pL2csIChsZXR0ZXIpID0+IGxldHRlci50b1VwcGVyQ2FzZSgpKVxyXG59KSkuc29ydCgoYSwgYikgPT4gYS5uYW1lLmxvY2FsZUNvbXBhcmUoYi5uYW1lKSk7XHJcblxyXG5leHBvcnQgY2xhc3MgSWNvblBpY2tlck1vZGFsIGV4dGVuZHMgRnV6enlTdWdnZXN0TW9kYWw8SWNvbk9wdGlvbj4ge1xyXG5cdHByaXZhdGUgb25TZWxlY3Q6IChpY29uSWQ6IHN0cmluZykgPT4gdm9pZDtcclxuXHJcblx0Y29uc3RydWN0b3IoYXBwOiBBcHAsIG9uU2VsZWN0OiAoaWNvbklkOiBzdHJpbmcpID0+IHZvaWQpIHtcclxuXHRcdHN1cGVyKGFwcCk7XHJcblx0XHR0aGlzLm9uU2VsZWN0ID0gb25TZWxlY3Q7XHJcblx0fVxyXG5cclxuXHRnZXRJdGVtcygpOiBJY29uT3B0aW9uW10ge1xyXG5cdFx0cmV0dXJuIExVQ0lERV9JQ09OUztcclxuXHR9XHJcblxyXG5cdGdldEl0ZW1UZXh0KGl0ZW06IEljb25PcHRpb24pOiBzdHJpbmcge1xyXG5cdFx0cmV0dXJuIGl0ZW0ubmFtZTtcclxuXHR9XHJcblxyXG5cdG9uQ2hvb3NlSXRlbShpdGVtOiBJY29uT3B0aW9uLCBldnQ6IE1vdXNlRXZlbnQgfCBLZXlib2FyZEV2ZW50KTogdm9pZCB7XHJcblx0XHR0aGlzLm9uU2VsZWN0KGl0ZW0uaWQpO1xyXG5cdH1cclxuXHJcblx0Ly8gT3ZlcnJpZGUgdG8gc2hvdyBpY29uIHByZXZpZXdcclxuXHRyZW5kZXJTdWdnZXN0aW9uKG1hdGNoOiB7IGl0ZW06IEljb25PcHRpb24gfSwgZWw6IEhUTUxFbGVtZW50KTogdm9pZCB7XHJcblx0XHRjb25zdCBpdGVtID0gbWF0Y2guaXRlbTtcclxuXHRcdGVsLmFkZENsYXNzKCdtb2QtY29tcGxleCcpO1xyXG5cdFx0Y29uc3QgY29udGVudCA9IGVsLmNyZWF0ZURpdih7IGNsczogJ3N1Z2dlc3Rpb24tY29udGVudCcgfSk7XHJcblx0XHRjb250ZW50LmNyZWF0ZURpdih7IGNsczogJ3N1Z2dlc3Rpb24tdGl0bGUnLCB0ZXh0OiBpdGVtLm5hbWUgfSk7XHJcblx0XHRcclxuXHRcdC8vIENyZWF0ZSBpY29uIHByZXZpZXcgdXNpbmcgT2JzaWRpYW4ncyBzZXRJY29uXHJcblx0XHRjb25zdCBhdXggPSBlbC5jcmVhdGVEaXYoeyBjbHM6ICdzdWdnZXN0aW9uLWF1eCcgfSk7XHJcblx0XHRzZXRJY29uKGF1eC5jcmVhdGVTcGFuKHsgY2xzOiAnc3VnZ2VzdGlvbi1mbGFpcicgfSksIGl0ZW0uaWQpO1xyXG5cdH1cclxufVxyXG5cclxuXHJcbiIsICIvKipcclxuICogQ29tcGF0aWJpbGl0eSB1dGlsaXRpZXMgZm9yIHNldHRpbmdzXHJcbiAqIFByb3ZpZGVzIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgZm9yIFNldHRpbmdHcm91cCAocmVxdWlyZXMgQVBJIDEuMTEuMCspXHJcbiAqL1xyXG5pbXBvcnQgeyBTZXR0aW5nLCByZXF1aXJlQXBpVmVyc2lvbiB9IGZyb20gJ29ic2lkaWFuJztcclxuXHJcbi8vIFR5cGUgZGVmaW5pdGlvbiBmb3IgU2V0dGluZ0dyb3VwIChtYXkgbm90IGJlIGluIHR5cGUgZGVmaW5pdGlvbnMgZm9yIG9sZGVyIHZlcnNpb25zKVxyXG50eXBlIFNldHRpbmdHcm91cENvbnN0cnVjdG9yID0gbmV3IChjb250YWluZXJFbDogSFRNTEVsZW1lbnQpID0+IHtcclxuXHRzZXRIZWFkaW5nKGhlYWRpbmc6IHN0cmluZyk6IHtcclxuXHRcdGFkZFNldHRpbmcoY2I6IChzZXR0aW5nOiBTZXR0aW5nKSA9PiB2b2lkKTogdm9pZDtcclxuXHR9O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEludGVyZmFjZSB0aGF0IHdvcmtzIHdpdGggYm90aCBTZXR0aW5nR3JvdXAgYW5kIGZhbGxiYWNrIGNvbnRhaW5lclxyXG4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBTZXR0aW5nc0NvbnRhaW5lciB7XHJcblx0YWRkU2V0dGluZyhjYjogKHNldHRpbmc6IFNldHRpbmcpID0+IHZvaWQpOiB2b2lkO1xyXG59XHJcblxyXG4vKipcclxuICogQ3JlYXRlcyBhIHNldHRpbmdzIGNvbnRhaW5lciB0aGF0IHVzZXMgU2V0dGluZ0dyb3VwIGlmIGF2YWlsYWJsZSAoQVBJIDEuMTEuMCspLFxyXG4gKiBvdGhlcndpc2UgZmFsbHMgYmFjayB0byBjcmVhdGluZyBhIGhlYWRpbmcgYW5kIHVzaW5nIHRoZSBjb250YWluZXIgZGlyZWN0bHkuXHJcbiAqIFxyXG4gKiBVc2VzIHJlcXVpcmVBcGlWZXJzaW9uKCcxLjExLjAnKSB0byBjaGVjayBpZiBTZXR0aW5nR3JvdXAgaXMgYXZhaWxhYmxlLlxyXG4gKiBUaGlzIGlzIHRoZSBvZmZpY2lhbCBPYnNpZGlhbiBBUEkgbWV0aG9kIGZvciB2ZXJzaW9uIGNoZWNraW5nLlxyXG4gKiBcclxuICogQHBhcmFtIGNvbnRhaW5lckVsIC0gVGhlIGNvbnRhaW5lciBlbGVtZW50IGZvciBzZXR0aW5nc1xyXG4gKiBAcGFyYW0gaGVhZGluZyAtIFRoZSBoZWFkaW5nIHRleHQgZm9yIHRoZSBzZXR0aW5ncyBncm91cFxyXG4gKiBAcGFyYW0gbWFuaWZlc3RJZCAtIFRoZSBwbHVnaW4ncyBtYW5pZmVzdCBJRCBmb3IgQ1NTIHNjb3BpbmcgKHJlcXVpcmVkIGZvciBmYWxsYmFjayBtb2RlKVxyXG4gKiBAcmV0dXJucyBBIGNvbnRhaW5lciB0aGF0IGNhbiBiZSB1c2VkIHRvIGFkZCBzZXR0aW5nc1xyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVNldHRpbmdzR3JvdXAoXHJcblx0Y29udGFpbmVyRWw6IEhUTUxFbGVtZW50LFxyXG5cdGhlYWRpbmc6IHN0cmluZyxcclxuXHRtYW5pZmVzdElkPzogc3RyaW5nXHJcbik6IFNldHRpbmdzQ29udGFpbmVyIHtcclxuXHQvLyBDaGVjayBpZiBTZXR0aW5nR3JvdXAgaXMgYXZhaWxhYmxlIChBUEkgMS4xMS4wKylcclxuXHQvLyByZXF1aXJlQXBpVmVyc2lvbiBpcyB0aGUgb2ZmaWNpYWwgT2JzaWRpYW4gQVBJIG1ldGhvZCBmb3IgdmVyc2lvbiBjaGVja2luZ1xyXG5cdGlmIChyZXF1aXJlQXBpVmVyc2lvbignMS4xMS4wJykpIHtcclxuXHRcdC8vIFVzZSBTZXR0aW5nR3JvdXAgLSBpdCdzIGd1YXJhbnRlZWQgdG8gZXhpc3QgaWYgcmVxdWlyZUFwaVZlcnNpb24gcmV0dXJucyB0cnVlXHJcblx0XHQvLyBBY2Nlc3MgU2V0dGluZ0dyb3VwIGZyb20gdGhlIG9ic2lkaWFuIG1vZHVsZSBkeW5hbWljYWxseSB0byBhdm9pZCB0eXBlIGVycm9yc1xyXG5cdFx0Ly8gV2UgbmVlZCB0byB1c2UgcmVxdWlyZSBoZXJlIGJlY2F1c2UgU2V0dGluZ0dyb3VwIG1heSBub3QgYmUgaW4gdHlwZSBkZWZpbml0aW9ucyBmb3Igb2xkZXIgdmVyc2lvbnNcclxuXHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tcmVxdWlyZS1pbXBvcnRzLCBuby11bmRlZiAtLSBSZXF1aXJlZCBmb3IgZHluYW1pYyBhc3NldCBsb2FkaW5nIG9uIGRlc2t0b3BcclxuXHRcdGNvbnN0IG9ic2lkaWFuTW9kdWxlID0gcmVxdWlyZSgnb2JzaWRpYW4nKSBhcyB7IFNldHRpbmdHcm91cD86IFNldHRpbmdHcm91cENvbnN0cnVjdG9yIH07XHJcblx0XHRjb25zdCBTZXR0aW5nR3JvdXAgPSBvYnNpZGlhbk1vZHVsZS5TZXR0aW5nR3JvdXA7XHJcblx0XHRpZiAoU2V0dGluZ0dyb3VwKSB7XHJcblx0XHRcdGNvbnN0IGdyb3VwID0gbmV3IFNldHRpbmdHcm91cChjb250YWluZXJFbCkuc2V0SGVhZGluZyhoZWFkaW5nKTtcclxuXHRcdFx0cmV0dXJuIHtcclxuXHRcdFx0XHRhZGRTZXR0aW5nKGNiOiAoc2V0dGluZzogU2V0dGluZykgPT4gdm9pZCkge1xyXG5cdFx0XHRcdFx0Z3JvdXAuYWRkU2V0dGluZyhjYik7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9O1xyXG5cdFx0fVxyXG5cdFx0Ly8gRmFsbGJhY2sgaWYgU2V0dGluZ0dyb3VwIGlzIG5vdCBmb3VuZCAoc2hvdWxkbid0IGhhcHBlbiBpZiByZXF1aXJlQXBpVmVyc2lvbiBpcyBjb3JyZWN0KVxyXG5cdH1cclxuXHJcblx0Ly8gRmFsbGJhY2sgcGF0aCAoZWl0aGVyIEFQSSA8IDEuMTEuMCBvciBTZXR0aW5nR3JvdXAgbm90IGZvdW5kKVxyXG5cdC8vIEFkZCBzY29waW5nIGNsYXNzIHRvIGNvbnRhaW5lckVsIHRvIHNjb3BlIENTUyB0byBvbmx5IHRoaXMgcGx1Z2luJ3Mgc2V0dGluZ3NcclxuXHRpZiAobWFuaWZlc3RJZCkge1xyXG5cdFx0Y29udGFpbmVyRWwuYWRkQ2xhc3MoYCR7bWFuaWZlc3RJZH0tc2V0dGluZ3MtY29tcGF0YCk7XHJcblx0fVxyXG5cclxuXHQvLyBGYWxsYmFjazogQ3JlYXRlIGEgaGVhZGluZyBtYW51YWxseSBhbmQgdXNlIGNvbnRhaW5lciBkaXJlY3RseVxyXG5cdGNvbnN0IGhlYWRpbmdFbCA9IGNvbnRhaW5lckVsLmNyZWF0ZURpdignc2V0dGluZy1ncm91cC1oZWFkaW5nJyk7XHJcblx0aGVhZGluZ0VsLmNyZWF0ZUVsKCdoMycsIHsgdGV4dDogaGVhZGluZyB9KTtcclxuXHJcblx0cmV0dXJuIHtcclxuXHRcdGFkZFNldHRpbmcoY2I6IChzZXR0aW5nOiBTZXR0aW5nKSA9PiB2b2lkKSB7XHJcblx0XHRcdGNvbnN0IHNldHRpbmcgPSBuZXcgU2V0dGluZyhjb250YWluZXJFbCk7XHJcblx0XHRcdGNiKHNldHRpbmcpO1xyXG5cdFx0fVxyXG5cdH07XHJcbn1cclxuIiwgIi8qKlxuICogQmFzZXMgQ01TIFZpZXdcbiAqL1xuXG5pbXBvcnQgeyBCYXNlc1ZpZXcsIEJhc2VzRW50cnksIFF1ZXJ5Q29udHJvbGxlciwgVEZpbGUgfSBmcm9tICdvYnNpZGlhbic7XG5pbXBvcnQgeyBzZXRDc3NQcm9wcyB9IGZyb20gJy4uL3V0aWxzL2Nzcy1wcm9wcyc7XG5pbXBvcnQgdHlwZSBCYXNlc0NNU1BsdWdpbiBmcm9tICcuLi9tYWluJztcbmltcG9ydCB7IHRyYW5zZm9ybUJhc2VzRW50cmllcywgdHlwZSBDYXJkRGF0YSwgdHlwZSBDTVNTZXR0aW5ncyB9IGZyb20gJy4uL3NoYXJlZC9kYXRhLXRyYW5zZm9ybSc7XG5pbXBvcnQgeyByZWFkQ01TU2V0dGluZ3MgfSBmcm9tICcuLi9zaGFyZWQvc2V0dGluZ3Mtc2NoZW1hJztcbmltcG9ydCB7IGdldEZpcnN0QmFzZXNQcm9wZXJ0eVZhbHVlLCBnZXRBbGxCYXNlc0ltYWdlUHJvcGVydHlWYWx1ZXMgfSBmcm9tICcuLi91dGlscy9wcm9wZXJ0eSc7XG5pbXBvcnQgeyBsb2FkU25pcHBldHNGb3JFbnRyaWVzLCBsb2FkSW1hZ2VzRm9yRW50cmllcyB9IGZyb20gJy4uL3NoYXJlZC9jb250ZW50LWxvYWRlcic7XG5pbXBvcnQgeyBTaGFyZWRDYXJkUmVuZGVyZXIgfSBmcm9tICcuL3NoYXJlZC1yZW5kZXJlcic7XG5pbXBvcnQgeyBCdWxrVG9vbGJhciB9IGZyb20gJy4uL2NvbXBvbmVudHMvYnVsay10b29sYmFyJztcbmltcG9ydCB7IHNldHVwTmV3Tm90ZUludGVyY2VwdG9yIH0gZnJvbSAnLi4vdXRpbHMvbmV3LW5vdGUtaW50ZXJjZXB0b3InO1xuaW1wb3J0IHsgUHJvcGVydHlUb2dnbGVIYW5kbGVyIH0gZnJvbSAnLi4vdXRpbHMvcHJvcGVydHktdG9nZ2xlLWhhbmRsZXInO1xuaW1wb3J0IHsgU2Nyb2xsTGF5b3V0TWFuYWdlciB9IGZyb20gJy4uL3V0aWxzL3Njcm9sbC1sYXlvdXQtbWFuYWdlcic7XG5pbXBvcnQgeyBWaWV3U3dpdGNoTGlzdGVuZXIgfSBmcm9tICcuLi91dGlscy92aWV3LXN3aXRjaC1saXN0ZW5lcic7XG5pbXBvcnQgeyBjb252ZXJ0R2lmVG9TdGF0aWMgfSBmcm9tICcuLi91dGlscy9pbWFnZSc7XG5pbXBvcnQgeyBnZXRGaWxlRnJvbnRtYXR0ZXIgfSBmcm9tICcuLi91dGlscy9mcm9udG1hdHRlci1oZWxwZXInO1xuaW1wb3J0IHsgaXNFbWJlZGRlZFZpZXcgfSBmcm9tICcuLi91dGlscy9lbWJlZGRlZC12aWV3LWRldGVjdG9yJztcblxuZXhwb3J0IGNvbnN0IENNU19WSUVXX1RZUEUgPSAnY21zJztcblxuZXhwb3J0IGNsYXNzIEJhc2VzQ01TVmlldyBleHRlbmRzIEJhc2VzVmlldyB7XG5cdHJlYWRvbmx5IHR5cGUgPSBDTVNfVklFV19UWVBFO1xuXHRwcml2YXRlIGNvbnRhaW5lckVsOiBIVE1MRWxlbWVudDtcblx0cHJpdmF0ZSBwbHVnaW46IEJhc2VzQ01TUGx1Z2luO1xuXHRwdWJsaWMgc2VsZWN0ZWRGaWxlczogU2V0PHN0cmluZz4gPSBuZXcgU2V0KCk7XG5cdHByaXZhdGUgc25pcHBldHM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcblx0cHJpdmF0ZSBpbWFnZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IHN0cmluZ1tdPiA9IHt9O1xuXHRwcml2YXRlIGhhc0ltYWdlQXZhaWxhYmxlOiBSZWNvcmQ8c3RyaW5nLCBib29sZWFuPiA9IHt9O1xuXHRwcml2YXRlIG1keEZyb250bWF0dGVyQ2FjaGU6IFJlY29yZDxzdHJpbmcsIFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgbnVsbD4gPSB7fTtcblx0cHJpdmF0ZSB1cGRhdGVMYXlvdXRSZWY6IHsgY3VycmVudDogKCgpID0+IHZvaWQpIHwgbnVsbCB9ID0geyBjdXJyZW50OiBudWxsIH07XG5cdHByaXZhdGUgcHJvcGVydHlPYnNlcnZlcnM6IFJlc2l6ZU9ic2VydmVyW10gPSBbXTtcblx0cHJpdmF0ZSBjYXJkUmVuZGVyZXI6IFNoYXJlZENhcmRSZW5kZXJlcjtcblx0cHJpdmF0ZSBidWxrVG9vbGJhcjogQnVsa1Rvb2xiYXIgfCBudWxsID0gbnVsbDtcblx0cHJpdmF0ZSBpc1JlZnJlc2hpbmdXaXRoU2VsZWN0aW9uOiBib29sZWFuID0gZmFsc2U7XG5cdHByaXZhdGUgcHJvcGVydHlUb2dnbGVIYW5kbGVyOiBQcm9wZXJ0eVRvZ2dsZUhhbmRsZXIgfCBudWxsID0gbnVsbDtcblx0cHJpdmF0ZSBzY3JvbGxMYXlvdXRNYW5hZ2VyOiBTY3JvbGxMYXlvdXRNYW5hZ2VyO1xuXHRwcml2YXRlIHZpZXdTd2l0Y2hMaXN0ZW5lcjogVmlld1N3aXRjaExpc3RlbmVyIHwgbnVsbCA9IG51bGw7XG5cdHByaXZhdGUgc2V0dGluZ3NQb2xsSW50ZXJ2YWw6IG51bWJlciB8IG51bGwgPSBudWxsO1xuXHRwcml2YXRlIGxhc3RTZXR0aW5nczogUGFydGlhbDxDTVNTZXR0aW5ncz4gfCBudWxsID0gbnVsbDtcblx0cHJpdmF0ZSBsYXN0VXBkYXRlSWQ6IG51bWJlciA9IDA7XG5cdHByaXZhdGUgbGFzdEJhc2VJZDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG5cdHByaXZhdGUgaGFzQXV0b1N3aXRjaGVkOiBib29sZWFuID0gZmFsc2U7XG5cdHByaXZhdGUgYmFzZXNDb250cm9sbGVyOiBRdWVyeUNvbnRyb2xsZXI7XG5cdHB1YmxpYyByZWFkb25seSBpc0VtYmVkZGVkOiBib29sZWFuO1xuXHRwcml2YXRlIGxhc3RDbGlja2VkUGF0aDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG5cdHByaXZhdGUgbGFzdFZpc2libGVQYXRoczogc3RyaW5nW10gPSBbXTtcblxuXHRjb25zdHJ1Y3Rvcihjb250cm9sbGVyOiBRdWVyeUNvbnRyb2xsZXIsIHBhcmVudENvbnRhaW5lckVsOiBIVE1MRWxlbWVudCwgcGx1Z2luOiBCYXNlc0NNU1BsdWdpbikge1xuXHRcdHN1cGVyKGNvbnRyb2xsZXIpO1xuXHRcdHRoaXMuYmFzZXNDb250cm9sbGVyID0gY29udHJvbGxlcjtcblx0XHQvLyBXZSBjcmVhdGUgYSB3cmFwcGVyIGRpdiBpbnNpZGUgdGhlIHBhcmVudCBjb250YWluZXIgdG8gcHJldmVudCBvdXIgXG5cdFx0Ly8gYC5lbXB0eSgpYCBjYWxscyBmcm9tIGRlc3Ryb3lpbmcgVUkgZWxlbWVudHMgYWRkZWQgYnkgdGhlIGNvcmUgQmFzZXMgcGx1Z2luXG5cdFx0dGhpcy5jb250YWluZXJFbCA9IHBhcmVudENvbnRhaW5lckVsLmNyZWF0ZURpdignYmFzZXMtY21zLXdyYXBwZXInKTtcblx0XHR0aGlzLmNvbnRhaW5lckVsLnN0eWxlLmhlaWdodCA9ICcxMDAlJztcblx0XHR0aGlzLmNvbnRhaW5lckVsLnN0eWxlLndpZHRoID0gJzEwMCUnO1xuXG5cdFx0dGhpcy5wbHVnaW4gPSBwbHVnaW47XG5cblx0XHQvLyBJbml0aWFsaXplIHNlbGVjdGlvbiBmcm9tIHBsdWdpbiBzdG9yYWdlIGlmIGl0IGV4aXN0c1xuXHRcdC8vIFdlIHVzZSBhIHN0YWJsZSByZWZlcmVuY2UgZm9yIHNlbGVjdGVkRmlsZXMgc28gbWFuYWdlcnMgZG9uJ3QgbG9zZSB0cmFjayBvZiBpdFxuXHRcdGNvbnN0IGJhc2VJZCA9IHRoaXMuZ2V0QmFzZUlkZW50aWZpZXIoKTtcblx0XHRpZiAoYmFzZUlkKSB7XG5cdFx0XHRjb25zdCBzYXZlZFNlbGVjdGlvbiA9IHRoaXMucGx1Z2luLnNlbGVjdGlvbnMuZ2V0KGJhc2VJZCk7XG5cdFx0XHRpZiAoc2F2ZWRTZWxlY3Rpb24gJiYgc2F2ZWRTZWxlY3Rpb24gIT09IHRoaXMuc2VsZWN0ZWRGaWxlcykge1xuXHRcdFx0XHQvLyBJbml0aWFsIHN5bmMgZnJvbSBwbHVnaW4ncyBleGlzdGluZyBzZWxlY3Rpb24gZm9yIHRoaXMgYmFzZVxuXHRcdFx0XHRzYXZlZFNlbGVjdGlvbi5mb3JFYWNoKGl0ZW0gPT4gdGhpcy5zZWxlY3RlZEZpbGVzLmFkZChpdGVtKSk7XG5cdFx0XHRcdC8vIEVuc3VyZSB0aGV5IGJvdGggcG9pbnQgdG8gdGhlIFNBTUUgU2V0IGluc3RhbmNlIGZvciBmdXR1cmUgdXBkYXRlc1xuXHRcdFx0XHR0aGlzLnBsdWdpbi5zZWxlY3Rpb25zLnNldChiYXNlSWQsIHRoaXMuc2VsZWN0ZWRGaWxlcyk7XG5cdFx0XHR9IGVsc2UgaWYgKCFzYXZlZFNlbGVjdGlvbikge1xuXHRcdFx0XHQvLyBGaXJzdCB0aW1lIHRoaXMgYmFzZSBpcyBzZWVuLCByZWdpc3RlciBvdXIgU2V0IGluc3RhbmNlXG5cdFx0XHRcdHRoaXMucGx1Z2luLnNlbGVjdGlvbnMuc2V0KGJhc2VJZCwgdGhpcy5zZWxlY3RlZEZpbGVzKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBEZXRlY3QgaWYgdGhpcyB2aWV3IGlzIGVtYmVkZGVkIGluIGEgbWFya2Rvd24gbm90ZVxuXHRcdHRoaXMuaXNFbWJlZGRlZCA9IGlzRW1iZWRkZWRWaWV3KHBhcmVudENvbnRhaW5lckVsKTtcblxuXHRcdC8vIEluaXRpYWxpemUgc2hhcmVkIGNhcmQgcmVuZGVyZXIgKGNvbmZpZyB3aWxsIGJlIHNldCBsYXRlciBpbiBvbkRhdGFVcGRhdGVkKVxuXHRcdHRoaXMuY2FyZFJlbmRlcmVyID0gbmV3IFNoYXJlZENhcmRSZW5kZXJlcihcblx0XHRcdHRoaXMuYXBwLFxuXHRcdFx0dGhpcy5wbHVnaW4sXG5cdFx0XHR0aGlzLnByb3BlcnR5T2JzZXJ2ZXJzLFxuXHRcdFx0dGhpcy51cGRhdGVMYXlvdXRSZWYsXG5cdFx0XHR1bmRlZmluZWQsIC8vIENvbmZpZyBub3QgYXZhaWxhYmxlIGluIGNvbnN0cnVjdG9yXG5cdFx0XHRjb250cm9sbGVyXG5cdFx0KTtcblxuXHRcdC8vIEFkZCBDTVMgY29udGFpbmVyIGNsYXNzZXNcblx0XHR0aGlzLmNvbnRhaW5lckVsLmFkZENsYXNzKCdiYXNlcy1jbXMnKTtcblx0XHR0aGlzLmNvbnRhaW5lckVsLmFkZENsYXNzKCdiYXNlcy1jbXMtY29udGFpbmVyJyk7XG5cblx0XHQvLyBJbml0aWFsaXplIG1hbmFnZXJzIHdpdGggZXJyb3IgaGFuZGxpbmdcblx0XHR0cnkge1xuXHRcdFx0dGhpcy5wcm9wZXJ0eVRvZ2dsZUhhbmRsZXIgPSBuZXcgUHJvcGVydHlUb2dnbGVIYW5kbGVyKFxuXHRcdFx0XHR0aGlzLmFwcCxcblx0XHRcdFx0dGhpcy5jb25maWcgYXMgeyBnZXQ6IChrZXk6IHN0cmluZykgPT4gdW5rbm93biB9LFxuXHRcdFx0XHR0aGlzLnBsdWdpbi5zZXR0aW5ncyxcblx0XHRcdFx0KCkgPT4gdGhpcy5vbkRhdGFVcGRhdGVkKClcblx0XHRcdCk7XG5cdFx0fSBjYXRjaCB7XG5cdFx0XHR0aGlzLnByb3BlcnR5VG9nZ2xlSGFuZGxlciA9IG51bGw7XG5cdFx0fVxuXG5cdFx0dHJ5IHtcblx0XHRcdC8vIENoZWNrIGlmIGNvbmZpZyBpcyBhdmFpbGFibGUsIG90aGVyd2lzZSB1c2UgYSBzYWZlIGZhbGxiYWNrXG5cdFx0XHRjb25zdCBjb25maWdUb1VzZSA9ICh0aGlzLmNvbmZpZyAmJiB0eXBlb2YgKHRoaXMuY29uZmlnIGFzIHsgZ2V0PzogKGtleTogc3RyaW5nKSA9PiB1bmtub3duIH0pLmdldCA9PT0gJ2Z1bmN0aW9uJylcblx0XHRcdFx0PyAodGhpcy5jb25maWcgYXMgeyBnZXQ6IChrZXk6IHN0cmluZykgPT4gdW5rbm93biB9KVxuXHRcdFx0XHQ6IHsgZ2V0OiAoKSA9PiB1bmRlZmluZWQgfTtcblxuXHRcdFx0dGhpcy5zY3JvbGxMYXlvdXRNYW5hZ2VyID0gbmV3IFNjcm9sbExheW91dE1hbmFnZXIoXG5cdFx0XHRcdHRoaXMuY29udGFpbmVyRWwsXG5cdFx0XHRcdHRoaXMuYXBwLFxuXHRcdFx0XHRjb25maWdUb1VzZSxcblx0XHRcdFx0dGhpcy5wbHVnaW4uc2V0dGluZ3MsXG5cdFx0XHRcdCgpID0+IHRoaXMub25EYXRhVXBkYXRlZCgpLFxuXHRcdFx0XHQoY2xlYW51cCkgPT4gdGhpcy5yZWdpc3RlcihjbGVhbnVwKVxuXHRcdFx0KTtcblx0XHR9IGNhdGNoIHtcblx0XHRcdC8vIENyZWF0ZSBhIG1pbmltYWwgZmFsbGJhY2sgd2l0aCBhIGR1bW15IGNvbmZpZ1xuXHRcdFx0Y29uc3QgZHVtbXlDb25maWcgPSB7IGdldDogKCkgPT4gdW5kZWZpbmVkIH07XG5cdFx0XHR0aGlzLnNjcm9sbExheW91dE1hbmFnZXIgPSBuZXcgU2Nyb2xsTGF5b3V0TWFuYWdlcihcblx0XHRcdFx0dGhpcy5jb250YWluZXJFbCxcblx0XHRcdFx0dGhpcy5hcHAsXG5cdFx0XHRcdGR1bW15Q29uZmlnLFxuXHRcdFx0XHR0aGlzLnBsdWdpbi5zZXR0aW5ncyxcblx0XHRcdFx0KCkgPT4gdGhpcy5vbkRhdGFVcGRhdGVkKCksXG5cdFx0XHRcdChjbGVhbnVwKSA9PiB0aGlzLnJlZ2lzdGVyKGNsZWFudXApXG5cdFx0XHQpO1xuXHRcdH1cblxuXHRcdHRyeSB7XG5cdFx0XHR0aGlzLnZpZXdTd2l0Y2hMaXN0ZW5lciA9IG5ldyBWaWV3U3dpdGNoTGlzdGVuZXIoXG5cdFx0XHRcdHRoaXMuY29udGFpbmVyRWwsXG5cdFx0XHRcdHRoaXMucGx1Z2luLFxuXHRcdFx0XHR0aGlzLmNvbmZpZyBhcyB7IGdldE5hbWU/OiAoKSA9PiBzdHJpbmc7IG5hbWU/OiBzdHJpbmcgfSxcblx0XHRcdFx0KHRoaXMgYXMgdW5rbm93biBhcyB7IGNvbnRyb2xsZXI/OiB7IGdldEJhc2VOYW1lPzogKCkgPT4gc3RyaW5nOyBiYXNlTmFtZT86IHN0cmluZyB9IH0pLmNvbnRyb2xsZXIsXG5cdFx0XHRcdHRoaXMuZGF0YSBhcyB7IGJhc2VOYW1lPzogc3RyaW5nIH0gfCB1bmRlZmluZWQsXG5cdFx0XHRcdHRoaXMuc2VsZWN0ZWRGaWxlcyxcblx0XHRcdFx0KCkgPT4gdGhpcy51cGRhdGVTZWxlY3Rpb25VSSgpLFxuXHRcdFx0XHQoY2xlYW51cCkgPT4gdGhpcy5yZWdpc3RlcihjbGVhbnVwKVxuXHRcdFx0KTtcblx0XHR9IGNhdGNoIHtcblx0XHRcdHRoaXMudmlld1N3aXRjaExpc3RlbmVyID0gbnVsbDtcblx0XHR9XG5cblx0XHQvLyBTZXR1cCB2aWV3IHN3aXRjaCBsaXN0ZW5lciAtIHdyYXBzIGhhbmRsZVNlbGVjdGlvbkNoYW5nZVxuXHRcdGlmICh0aGlzLnZpZXdTd2l0Y2hMaXN0ZW5lcikge1xuXHRcdFx0Y29uc3Qgb3JpZ2luYWxIYW5kbGVTZWxlY3Rpb25DaGFuZ2UgPSB0aGlzLmhhbmRsZVNlbGVjdGlvbkNoYW5nZS5iaW5kKHRoaXMpO1xuXHRcdFx0dGhpcy5oYW5kbGVTZWxlY3Rpb25DaGFuZ2UgPSB0aGlzLnZpZXdTd2l0Y2hMaXN0ZW5lci5zZXR1cChvcmlnaW5hbEhhbmRsZVNlbGVjdGlvbkNoYW5nZSk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFNvcnQgZW50cmllcyBieSBwcm9wZXJ0eSB1c2luZyBjb25zaXN0ZW50IGxvZ2ljIGZvciBib3RoIE1EIGFuZCBNRFggZmlsZXNcblx0ICovXG5cdHByaXZhdGUgYXN5bmMgc29ydEVudHJpZXNCeVByb3BlcnR5KGVudHJpZXM6IEJhc2VzRW50cnlbXSwgcHJvcGVydHlOYW1lOiBzdHJpbmcsIGRpcmVjdGlvbjogJ2FzYycgfCAnZGVzYycpOiBQcm9taXNlPEJhc2VzRW50cnlbXT4ge1xuXHRcdGlmICghcHJvcGVydHlOYW1lIHx8IHByb3BlcnR5TmFtZSA9PT0gJycpIHtcblx0XHRcdHJldHVybiBlbnRyaWVzO1xuXHRcdH1cblxuXHRcdC8vIEhhbmRsZSBzcGVjaWFsIGZpbGUgcHJvcGVydGllc1xuXHRcdGlmIChwcm9wZXJ0eU5hbWUgPT09ICdmaWxlLmN0aW1lJyB8fCBwcm9wZXJ0eU5hbWUgPT09ICdmaWxlLm10aW1lJykge1xuXHRcdFx0Y29uc3QgaXNDdGltZSA9IHByb3BlcnR5TmFtZSA9PT0gJ2ZpbGUuY3RpbWUnO1xuXHRcdFx0cmV0dXJuIFsuLi5lbnRyaWVzXS5zb3J0KChhLCBiKSA9PiB7XG5cdFx0XHRcdGNvbnN0IGFUaW1lID0gaXNDdGltZSA/IGEuZmlsZS5zdGF0LmN0aW1lIDogYS5maWxlLnN0YXQubXRpbWU7XG5cdFx0XHRcdGNvbnN0IGJUaW1lID0gaXNDdGltZSA/IGIuZmlsZS5zdGF0LmN0aW1lIDogYi5maWxlLnN0YXQubXRpbWU7XG5cdFx0XHRcdGNvbnN0IGNvbXBhcmlzb24gPSBhVGltZSAtIGJUaW1lO1xuXHRcdFx0XHRyZXR1cm4gZGlyZWN0aW9uID09PSAnZGVzYycgPyAtY29tcGFyaXNvbiA6IGNvbXBhcmlzb247XG5cdFx0XHR9KTtcblx0XHR9XG5cblx0XHQvLyBGb3Igb3RoZXIgcHJvcGVydGllcywgdXNlIGFzeW5jIHByb3BlcnR5IHJlc29sdXRpb25cblx0XHRjb25zdCBlbnRyaWVzV2l0aFZhbHVlcyA9IGF3YWl0IFByb21pc2UuYWxsKFxuXHRcdFx0ZW50cmllcy5tYXAoYXN5bmMgKGVudHJ5KSA9PiB7XG5cdFx0XHRcdGNvbnN0IHZhbHVlID0gYXdhaXQgZ2V0Rmlyc3RCYXNlc1Byb3BlcnR5VmFsdWUoZW50cnksIHByb3BlcnR5TmFtZSwgdGhpcy5hcHApO1xuXHRcdFx0XHRyZXR1cm4geyBlbnRyeSwgdmFsdWUgfTtcblx0XHRcdH0pXG5cdFx0KTtcblxuXHRcdHJldHVybiBlbnRyaWVzV2l0aFZhbHVlc1xuXHRcdFx0LnNvcnQoKGEsIGIpID0+IHtcblx0XHRcdFx0Y29uc3QgYVZhbCA9IGEudmFsdWU7XG5cdFx0XHRcdGNvbnN0IGJWYWwgPSBiLnZhbHVlO1xuXG5cdFx0XHRcdC8vIEhhbmRsZSBudWxsL3VuZGVmaW5lZCB2YWx1ZXMgKHNvcnQgdG8gZW5kKVxuXHRcdFx0XHRpZiAoYVZhbCA9PSBudWxsICYmIGJWYWwgPT0gbnVsbCkgcmV0dXJuIDA7XG5cdFx0XHRcdGlmIChhVmFsID09IG51bGwpIHJldHVybiAxOyAvLyBudWxsIHNvcnRzIGFmdGVyXG5cdFx0XHRcdGlmIChiVmFsID09IG51bGwpIHJldHVybiAtMTsgLy8gbnVsbCBzb3J0cyBhZnRlclxuXG5cdFx0XHRcdC8vIFBhcnNlIGRhdGVzIGZvciBib3RoIGVudHJpZXMgdXNpbmcgdGhlIHNhbWUgbG9naWMgYXMgdGhlIHJlbmRlcmVyXG5cdFx0XHRcdGNvbnN0IGFEYXRlID0gdGhpcy5wYXJzZURhdGVWYWx1ZShhVmFsKTtcblx0XHRcdFx0Y29uc3QgYkRhdGUgPSB0aGlzLnBhcnNlRGF0ZVZhbHVlKGJWYWwpO1xuXG5cdFx0XHRcdC8vIElmIGJvdGggYXJlIHZhbGlkIGRhdGVzLCBjb21wYXJlIHRoZW1cblx0XHRcdFx0aWYgKGFEYXRlICYmIGJEYXRlKSB7XG5cdFx0XHRcdFx0Y29uc3QgY29tcGFyaXNvbiA9IGFEYXRlLmdldFRpbWUoKSAtIGJEYXRlLmdldFRpbWUoKTtcblx0XHRcdFx0XHRyZXR1cm4gZGlyZWN0aW9uID09PSAnZGVzYycgPyAtY29tcGFyaXNvbiA6IGNvbXBhcmlzb247XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBJZiBvbmx5IG9uZSBpcyBhIGRhdGUsIGRhdGVzIHNvcnQgZmlyc3Rcblx0XHRcdFx0aWYgKGFEYXRlICYmICFiRGF0ZSkge1xuXHRcdFx0XHRcdHJldHVybiBkaXJlY3Rpb24gPT09ICdkZXNjJyA/IC0xIDogMTsgLy8gZGF0ZXMgc29ydCBiZWZvcmUgbm9uLWRhdGVzXG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKCFhRGF0ZSAmJiBiRGF0ZSkge1xuXHRcdFx0XHRcdHJldHVybiBkaXJlY3Rpb24gPT09ICdkZXNjJyA/IDEgOiAtMTsgLy8gZGF0ZXMgc29ydCBiZWZvcmUgbm9uLWRhdGVzXG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBOZWl0aGVyIGlzIGEgZGF0ZSwgZmFsbCBiYWNrIHRvIHN0cmluZyBjb21wYXJpc29uXG5cdFx0XHRcdGNvbnN0IGFTdHIgPSB0aGlzLnZhbHVlVG9TdHJpbmcoYVZhbCk7XG5cdFx0XHRcdGNvbnN0IGJTdHIgPSB0aGlzLnZhbHVlVG9TdHJpbmcoYlZhbCk7XG5cdFx0XHRcdGNvbnN0IGNvbXBhcmlzb24gPSBhU3RyLmxvY2FsZUNvbXBhcmUoYlN0cik7XG5cdFx0XHRcdHJldHVybiBkaXJlY3Rpb24gPT09ICdkZXNjJyA/IC1jb21wYXJpc29uIDogY29tcGFyaXNvbjtcblx0XHRcdH0pXG5cdFx0XHQubWFwKGl0ZW0gPT4gaXRlbS5lbnRyeSk7XG5cdH1cblxuXHQvKipcblx0ICogUGFyc2UgYSBkYXRlIHZhbHVlIHVzaW5nIHRoZSBzYW1lIGxvZ2ljIGFzIHRoZSBzaGFyZWQgcmVuZGVyZXJcblx0ICovXG5cdHByaXZhdGUgcGFyc2VEYXRlVmFsdWUodmFsdWU6IHVua25vd24pOiBEYXRlIHwgbnVsbCB7XG5cdFx0aWYgKCF2YWx1ZSkgcmV0dXJuIG51bGw7XG5cblx0XHQvLyBIYW5kbGUgQmFzZXMgQVBJIGRhdGUgb2JqZWN0c1xuXHRcdGlmICh0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmICdkYXRlJyBpbiB2YWx1ZSAmJiB2YWx1ZS5kYXRlIGluc3RhbmNlb2YgRGF0ZSkge1xuXHRcdFx0cmV0dXJuIHZhbHVlLmRhdGU7XG5cdFx0fVxuXG5cdFx0Ly8gRXh0cmFjdCBkYXRhIGZyb20gQmFzZXMgQVBJIGZvcm1hdFxuXHRcdGxldCBkYXRhOiB1bmtub3duID0gdmFsdWU7XG5cdFx0aWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgJ2RhdGEnIGluIHZhbHVlKSB7XG5cdFx0XHRkYXRhID0gKHZhbHVlIGFzIHsgZGF0YTogdW5rbm93biB9KS5kYXRhO1xuXHRcdH1cblxuXHRcdGlmICghZGF0YSkgcmV0dXJuIG51bGw7XG5cblx0XHQvLyBIYW5kbGUgRGF0ZSBvYmplY3RzIChpbmNsdWRpbmcgdGhvc2UgZnJvbSBZQU1MIHBhcnNpbmcpXG5cdFx0aWYgKGRhdGEgaW5zdGFuY2VvZiBEYXRlKSB7XG5cdFx0XHRyZXR1cm4gZGF0YTtcblx0XHR9XG5cblx0XHQvLyBIYW5kbGUgZGF0ZS1saWtlIG9iamVjdHMgKFlBTUwgcGFyc2VycyBzb21ldGltZXMgcmV0dXJuIGN1c3RvbSBEYXRlIG9iamVjdHMpXG5cdFx0aWYgKGRhdGEgJiYgdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnICYmICdnZXRUaW1lJyBpbiBkYXRhKSB7XG5cdFx0XHRjb25zdCBkYXRlTGlrZSA9IGRhdGEgYXMgeyBnZXRUaW1lOiAoKSA9PiBudW1iZXIgfTtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdGNvbnN0IHRpbWVzdGFtcCA9IGRhdGVMaWtlLmdldFRpbWUoKTtcblx0XHRcdFx0aWYgKHR5cGVvZiB0aW1lc3RhbXAgPT09ICdudW1iZXInICYmICFpc05hTih0aW1lc3RhbXApKSB7XG5cdFx0XHRcdFx0cmV0dXJuIG5ldyBEYXRlKHRpbWVzdGFtcCk7XG5cdFx0XHRcdH1cblx0XHRcdH0gY2F0Y2gge1xuXHRcdFx0XHQvLyBGYWxsIHRocm91Z2ggdG8gc3RyaW5nL251bWJlciBoYW5kbGluZ1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIEhhbmRsZSBzdHJpbmdzIC0gZXNwZWNpYWxseSBJU08gZGF0ZSBzdHJpbmdzIGxpa2UgXCIyMDI1LTEyLTI5XCJcblx0XHRpZiAodHlwZW9mIGRhdGEgPT09ICdzdHJpbmcnKSB7XG5cdFx0XHRjb25zdCBkYXRlU3RyID0gZGF0YS50cmltKCk7XG5cdFx0XHQvLyBUcnkgcGFyc2luZyBhcyBJU08gZGF0ZSAoWVlZWS1NTS1ERCkgLSB0aGlzIGlzIHdoYXQgT2JzaWRpYW4gdXNlc1xuXHRcdFx0Ly8gQWRkIHRpbWUgY29tcG9uZW50IHRvIGF2b2lkIHRpbWV6b25lIGlzc3VlczogXCIyMDI1LTEyLTI5XCIgLT4gXCIyMDI1LTEyLTI5VDAwOjAwOjAwXCJcblx0XHRcdGNvbnN0IGlzb0RhdGVTdHIgPSBkYXRlU3RyLmluY2x1ZGVzKCdUJykgPyBkYXRlU3RyIDogYCR7ZGF0ZVN0cn1UMDA6MDA6MDBgO1xuXHRcdFx0Y29uc3QgcGFyc2VkRGF0ZSA9IG5ldyBEYXRlKGlzb0RhdGVTdHIpO1xuXHRcdFx0aWYgKCFpc05hTihwYXJzZWREYXRlLmdldFRpbWUoKSkpIHtcblx0XHRcdFx0cmV0dXJuIHBhcnNlZERhdGU7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHQvLyBGYWxsYmFjayB0byBkaXJlY3QgRGF0ZSBjb25zdHJ1Y3RvciBmb3Igb3RoZXIgZm9ybWF0cyBsaWtlIFwiOS82LzIwMjVcIlxuXHRcdFx0XHRjb25zdCBmYWxsYmFja0RhdGUgPSBuZXcgRGF0ZShkYXRlU3RyKTtcblx0XHRcdFx0aWYgKCFpc05hTihmYWxsYmFja0RhdGUuZ2V0VGltZSgpKSkge1xuXHRcdFx0XHRcdHJldHVybiBmYWxsYmFja0RhdGU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBIYW5kbGUgbnVtYmVycyAodGltZXN0YW1wcylcblx0XHRpZiAodHlwZW9mIGRhdGEgPT09ICdudW1iZXInKSB7XG5cdFx0XHRjb25zdCBwYXJzZWREYXRlID0gbmV3IERhdGUoZGF0YSk7XG5cdFx0XHRpZiAoIWlzTmFOKHBhcnNlZERhdGUuZ2V0VGltZSgpKSkge1xuXHRcdFx0XHRyZXR1cm4gcGFyc2VkRGF0ZTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXG5cdC8qKlxuXHQgKiBDb252ZXJ0IGEgdmFsdWUgdG8gc3RyaW5nIGZvciBjb21wYXJpc29uXG5cdCAqL1xuXHRwcml2YXRlIHZhbHVlVG9TdHJpbmcodmFsdWU6IHVua25vd24pOiBzdHJpbmcge1xuXHRcdGlmICghdmFsdWUpIHJldHVybiAnJztcblxuXHRcdC8vIEV4dHJhY3QgZGF0YSBmcm9tIEJhc2VzIEFQSSBmb3JtYXRcblx0XHRsZXQgZGF0YTogdW5rbm93biA9IHZhbHVlO1xuXHRcdGlmICh0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmICdkYXRhJyBpbiB2YWx1ZSkge1xuXHRcdFx0ZGF0YSA9ICh2YWx1ZSBhcyB7IGRhdGE6IHVua25vd24gfSkuZGF0YTtcblx0XHR9XG5cblx0XHRpZiAodHlwZW9mIGRhdGEgPT09ICdzdHJpbmcnKSB7XG5cdFx0XHRyZXR1cm4gZGF0YTtcblx0XHR9IGVsc2UgaWYgKHR5cGVvZiBkYXRhID09PSAnbnVtYmVyJyB8fCB0eXBlb2YgZGF0YSA9PT0gJ2Jvb2xlYW4nKSB7XG5cdFx0XHRyZXR1cm4gU3RyaW5nKGRhdGEpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gJyc7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIENvbnRpbnVlIHByb2Nlc3NpbmcgZGF0YSBhZnRlciBzb3J0aW5nIGlzIGNvbXBsZXRlXG5cdCAqL1xuXHRwcml2YXRlIGFzeW5jIGNvbnRpbnVlRGF0YVByb2Nlc3NpbmcoXG5cdFx0cHJvY2Vzc2VkR3JvdXBzOiBBcnJheTx7IGdyb3VwOiB7IGhhc0tleTogKCkgPT4gYm9vbGVhbjsga2V5PzogdW5rbm93bjsgZW50cmllczogQmFzZXNFbnRyeVtdIH07IGVudHJpZXM6IEJhc2VzRW50cnlbXSB9Pixcblx0XHRzZXR0aW5nczogQ01TU2V0dGluZ3MsXG5cdFx0dG90YWxFbnRyaWVzQ291bnQ6IG51bWJlcixcblx0XHRzYXZlZFNjcm9sbFRvcDogbnVtYmVyLFxuXHRcdHVwZGF0ZUlkOiBudW1iZXJcblx0KTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0Y29uc3QgaXNTdGlsbFZhbGlkID0gKCkgPT4gdXBkYXRlSWQgPT09IHRoaXMubGFzdFVwZGF0ZUlkO1xuXG5cdFx0Ly8gRmxhdHRlbiBhbGwgZW50cmllcyBmb3IgdmlydHVhbCBzY3JvbGxpbmdcblx0XHRjb25zdCBhbGxGbGF0RW50cmllczogQmFzZXNFbnRyeVtdID0gW107XG5cdFx0Zm9yIChjb25zdCBwcm9jZXNzZWRHcm91cCBvZiBwcm9jZXNzZWRHcm91cHMpIHtcblx0XHRcdGFsbEZsYXRFbnRyaWVzLnB1c2goLi4ucHJvY2Vzc2VkR3JvdXAuZW50cmllcyk7XG5cdFx0fVxuXG5cdFx0Ly8gQ2hlY2sgaWYgdmlydHVhbCBzY3JvbGxpbmcgc2hvdWxkIGJlIGVuYWJsZWRcblx0XHRjb25zdCB1c2VWaXJ0dWFsU2Nyb2xsID0gdGhpcy5zY3JvbGxMYXlvdXRNYW5hZ2VyLnNob3VsZEVuYWJsZVZpcnR1YWxTY3JvbGwodG90YWxFbnRyaWVzQ291bnQpO1xuXG5cdFx0Ly8gQ2FsY3VsYXRlIHdoaWNoIGVudHJpZXMgdG8gZGlzcGxheVxuXHRcdGxldCB2aXNpYmxlRW50cmllczogQmFzZXNFbnRyeVtdO1xuXHRcdGxldCBzdGFydEluZGV4ID0gMDtcblx0XHRsZXQgdmlydHVhbFJhbmdlOiB7IHN0YXJ0SW5kZXg6IG51bWJlcjsgZW5kSW5kZXg6IG51bWJlcjsgdG9wUGFkZGluZzogbnVtYmVyOyBib3R0b21QYWRkaW5nOiBudW1iZXIgfSB8IG51bGwgPSBudWxsO1xuXG5cdFx0aWYgKHVzZVZpcnR1YWxTY3JvbGwpIHtcblx0XHRcdC8vIFVzZSB2aXJ0dWFsIHNjcm9sbGluZyAtIG9ubHkgbG9hZCB2aXNpYmxlIGVudHJpZXNcblx0XHRcdHZpcnR1YWxSYW5nZSA9IHRoaXMuc2Nyb2xsTGF5b3V0TWFuYWdlci5jYWxjdWxhdGVWaXNpYmxlUmFuZ2UodG90YWxFbnRyaWVzQ291bnQpO1xuXHRcdFx0c3RhcnRJbmRleCA9IHZpcnR1YWxSYW5nZS5zdGFydEluZGV4O1xuXHRcdFx0dmlzaWJsZUVudHJpZXMgPSBhbGxGbGF0RW50cmllcy5zbGljZSh2aXJ0dWFsUmFuZ2Uuc3RhcnRJbmRleCwgdmlydHVhbFJhbmdlLmVuZEluZGV4ICsgMSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIFVzZSBpbmZpbml0ZSBzY3JvbGwgLSBsb2FkIHVwIHRvIGRpc3BsYXllZENvdW50XG5cdFx0XHRjb25zdCByZW1haW5pbmdDb3VudCA9IHRoaXMuc2Nyb2xsTGF5b3V0TWFuYWdlci5nZXREaXNwbGF5ZWRDb3VudCgpO1xuXHRcdFx0dmlzaWJsZUVudHJpZXMgPSBhbGxGbGF0RW50cmllcy5zbGljZSgwLCByZW1haW5pbmdDb3VudCk7XG5cdFx0fVxuXG5cdFx0Ly8gTG9hZCBzbmlwcGV0cyBhbmQgaW1hZ2VzIE9OTFkgZm9yIGRpc3BsYXllZCBlbnRyaWVzXG5cdFx0YXdhaXQgdGhpcy5sb2FkQ29udGVudEZvckVudHJpZXModmlzaWJsZUVudHJpZXMsIHNldHRpbmdzKTtcblxuXHRcdGlmICghaXNTdGlsbFZhbGlkKCkpIHJldHVybjtcblxuXHRcdC8vIFNldCB1cCBpbnRlcmNlcHRvciBvbmNlIGNvbmZpZyBpcyBhdmFpbGFibGUgKG9ubHkgb24gZmlyc3QgY2FsbClcblx0XHRpZiAodGhpcy5jb25maWcgJiYgISh0aGlzLmNvbnRhaW5lckVsIGFzIHVua25vd24gYXMgeyBfX2Ntc0ludGVyY2VwdG9yU2V0dXA/OiBib29sZWFuIH0pLl9fY21zSW50ZXJjZXB0b3JTZXR1cCkge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0KHRoaXMuY29udGFpbmVyRWwgYXMgdW5rbm93biBhcyB7IF9fY21zSW50ZXJjZXB0b3JTZXR1cD86IGJvb2xlYW4gfSkuX19jbXNJbnRlcmNlcHRvclNldHVwID0gdHJ1ZTtcblx0XHRcdFx0Y29uc3QgY29udGFpbmVyV2l0aENvbmZpZyA9IHRoaXMuY29udGFpbmVyRWwgYXMgdW5rbm93biBhcyB7XG5cdFx0XHRcdFx0X19jbXNDb25maWc/OiB7IGdldDogKGtleTogc3RyaW5nKSA9PiB1bmtub3duIH07XG5cdFx0XHRcdFx0X19jbXNWaWV3PzogQmFzZXNDTVNWaWV3O1xuXHRcdFx0XHR9O1xuXHRcdFx0XHRjb250YWluZXJXaXRoQ29uZmlnLl9fY21zQ29uZmlnID0gdGhpcy5jb25maWc7XG5cdFx0XHRcdGNvbnRhaW5lcldpdGhDb25maWcuX19jbXNWaWV3ID0gdGhpcztcblx0XHRcdFx0c2V0dXBOZXdOb3RlSW50ZXJjZXB0b3IoXG5cdFx0XHRcdFx0dGhpcy5hcHAsXG5cdFx0XHRcdFx0dGhpcy5jb250YWluZXJFbCxcblx0XHRcdFx0XHR0aGlzLmNvbmZpZyxcblx0XHRcdFx0XHR0aGlzLnBsdWdpbi5zZXR0aW5ncyxcblx0XHRcdFx0XHQoY2xlYW51cCkgPT4gdGhpcy5yZWdpc3RlcihjbGVhbnVwKVxuXHRcdFx0XHQpO1xuXHRcdFx0fSBjYXRjaCB7XG5cdFx0XHRcdC8vIEZhaWxlZCB0byBzZXR1cCBpbnRlcmNlcHRvciAtIGNvbnRpbnVlIGFueXdheVxuXHRcdFx0XHQodGhpcy5jb250YWluZXJFbCBhcyB1bmtub3duIGFzIHsgX19jbXNJbnRlcmNlcHRvclNldHVwPzogYm9vbGVhbiB9KS5fX2Ntc0ludGVyY2VwdG9yU2V0dXAgPSB0cnVlO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmICghaXNTdGlsbFZhbGlkKCkpIHJldHVybjtcblxuXHRcdC8vIFVwZGF0ZSBjYXJkIHJlbmRlcmVyIHdpdGggY29uZmlnIChub3cgYXZhaWxhYmxlKVxuXHRcdCh0aGlzLmNhcmRSZW5kZXJlciBhcyB1bmtub3duIGFzIHsgYmFzZXNDb25maWc/OiB7IGdldD86IChrZXk6IHN0cmluZykgPT4gdW5rbm93biB9IH0pLmJhc2VzQ29uZmlnID0gdGhpcy5jb25maWc7XG5cblx0XHQvLyBVcGRhdGUgY2FyZCByZW5kZXJlciB3aXRoIE1EWCBmcm9udG1hdHRlciBjYWNoZSBmb3Igc3luY2hyb25vdXMgcmVuZGVyaW5nXG5cdFx0aWYgKHRoaXMuY2FyZFJlbmRlcmVyICYmIHR5cGVvZiAodGhpcy5jYXJkUmVuZGVyZXIgYXMgeyBzZXRNZHhGcm9udG1hdHRlckNhY2hlPzogKGNhY2hlOiBSZWNvcmQ8c3RyaW5nLCBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IG51bGw+KSA9PiB2b2lkIH0pLnNldE1keEZyb250bWF0dGVyQ2FjaGUgPT09ICdmdW5jdGlvbicpIHtcblx0XHRcdCh0aGlzLmNhcmRSZW5kZXJlciBhcyB7IHNldE1keEZyb250bWF0dGVyQ2FjaGU6IChjYWNoZTogUmVjb3JkPHN0cmluZywgUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCBudWxsPikgPT4gdm9pZCB9KS5zZXRNZHhGcm9udG1hdHRlckNhY2hlKHRoaXMubWR4RnJvbnRtYXR0ZXJDYWNoZSk7XG5cdFx0fVxuXG5cdFx0Ly8gQ2xlYXIgYW5kIHJlLXJlbmRlciBhZnRlciBjb250ZW50IGlzIGxvYWRlZFxuXHRcdHRoaXMuY29udGFpbmVyRWwuZW1wdHkoKTtcblxuXHRcdC8vIENsZWFyIE1EWCBmcm9udG1hdHRlciBjYWNoZSB3aGVuIHJlLXJlbmRlcmluZ1xuXHRcdHRoaXMubWR4RnJvbnRtYXR0ZXJDYWNoZSA9IHt9O1xuXG5cdFx0Ly8gRGlzY29ubmVjdCBvbGQgcHJvcGVydHkgb2JzZXJ2ZXJzIGJlZm9yZSByZS1yZW5kZXJpbmdcblx0XHR0aGlzLnByb3BlcnR5T2JzZXJ2ZXJzLmZvckVhY2gob2JzID0+IG9icy5kaXNjb25uZWN0KCkpO1xuXHRcdHRoaXMucHJvcGVydHlPYnNlcnZlcnMgPSBbXTtcblxuXHRcdC8vIENyZWF0ZSBjYXJkcyBmZWVkIGNvbnRhaW5lclxuXHRcdGNvbnN0IGZlZWRFbCA9IHRoaXMuY29udGFpbmVyRWwuY3JlYXRlRGl2KCdiYXNlcy1jbXMtZ3JpZCcpO1xuXG5cdFx0Ly8gRm9yIHZpcnR1YWwgc2Nyb2xsaW5nLCBhZGQgdG9wIHNwYWNlclxuXHRcdGlmICh1c2VWaXJ0dWFsU2Nyb2xsICYmIHZpcnR1YWxSYW5nZSAmJiB2aXJ0dWFsUmFuZ2UudG9wUGFkZGluZyA+IDApIHtcblx0XHRcdGNvbnN0IHRvcFNwYWNlciA9IGZlZWRFbC5jcmVhdGVEaXYoJ2Jhc2VzLWNtcy12aXJ0dWFsLXNwYWNlcicpO1xuXHRcdFx0dG9wU3BhY2VyLnN0eWxlLmhlaWdodCA9IGAke3ZpcnR1YWxSYW5nZS50b3BQYWRkaW5nfXB4YDtcblx0XHRcdHNldENzc1Byb3BzKHRvcFNwYWNlciwgeyBncmlkQ29sdW1uOiAnMSAvIC0xJyB9KTtcblx0XHR9XG5cblx0XHQvLyBSZW5kZXIgY2FyZHNcblx0XHRsZXQgdG90YWxDYXJkc1JlbmRlcmVkID0gMDtcblxuXHRcdC8vIFRyYW5zZm9ybSBlbnRyaWVzIHRvIGNhcmRzXG5cdFx0Y29uc3QgY2FyZHMgPSBhd2FpdCB0cmFuc2Zvcm1CYXNlc0VudHJpZXMoXG5cdFx0XHR2aXNpYmxlRW50cmllcyxcblx0XHRcdHNldHRpbmdzLFxuXHRcdFx0JycsIC8vIHNvcnRNZXRob2Qgbm90IHVzZWQgaW4gdHJhbnNmb3JtQmFzZXNFbnRyaWVzXG5cdFx0XHRmYWxzZSxcblx0XHRcdHRoaXMuc25pcHBldHMsXG5cdFx0XHR0aGlzLmltYWdlcyxcblx0XHRcdHRoaXMuaGFzSW1hZ2VBdmFpbGFibGUsXG5cdFx0XHR0aGlzLmFwcCxcblx0XHRcdHRoaXMubWR4RnJvbnRtYXR0ZXJDYWNoZVxuXHRcdCk7XG5cblx0XHRpZiAoIWlzU3RpbGxWYWxpZCgpKSByZXR1cm47XG5cblx0XHQvLyBJZiB1c2luZyBncm91cHMgKG5vdCB2aXJ0dWFsIHNjcm9sbCksIHJlbmRlciB3aXRoIGdyb3VwIGhlYWRlcnNcblx0XHRpZiAoIXVzZVZpcnR1YWxTY3JvbGwgJiYgcHJvY2Vzc2VkR3JvdXBzLnNvbWUoZyA9PiBnLmdyb3VwLmhhc0tleSgpKSkge1xuXHRcdFx0bGV0IGRpc3BsYXllZFNvRmFyID0gMDtcblx0XHRcdGxldCBjYXJkSW5kZXggPSAwO1xuXG5cdFx0XHRmb3IgKGNvbnN0IHByb2Nlc3NlZEdyb3VwIG9mIHByb2Nlc3NlZEdyb3Vwcykge1xuXHRcdFx0XHRpZiAoZGlzcGxheWVkU29GYXIgPj0gdGhpcy5zY3JvbGxMYXlvdXRNYW5hZ2VyLmdldERpc3BsYXllZENvdW50KCkpIGJyZWFrO1xuXG5cdFx0XHRcdGNvbnN0IGVudHJpZXNUb0Rpc3BsYXkgPSBNYXRoLm1pbihwcm9jZXNzZWRHcm91cC5lbnRyaWVzLmxlbmd0aCwgdGhpcy5zY3JvbGxMYXlvdXRNYW5hZ2VyLmdldERpc3BsYXllZENvdW50KCkgLSBkaXNwbGF5ZWRTb0Zhcik7XG5cdFx0XHRcdGlmIChlbnRyaWVzVG9EaXNwbGF5ID09PSAwKSBjb250aW51ZTtcblxuXHRcdFx0XHQvLyBDcmVhdGUgZ3JvdXAgY29udGFpbmVyXG5cdFx0XHRcdGNvbnN0IGdyb3VwRWwgPSBmZWVkRWwuY3JlYXRlRGl2KCdiYXNlcy1jbXMtZ3JvdXAnKTtcblxuXHRcdFx0XHQvLyBSZW5kZXIgZ3JvdXAgaGVhZGVyIGlmIGtleSBleGlzdHNcblx0XHRcdFx0aWYgKHByb2Nlc3NlZEdyb3VwLmdyb3VwLmhhc0tleSgpKSB7XG5cdFx0XHRcdFx0Y29uc3QgaGVhZGVyRWwgPSBncm91cEVsLmNyZWF0ZURpdignYmFzZXMtY21zLWdyb3VwLWhlYWRpbmcnKTtcblx0XHRcdFx0XHRjb25zdCB2YWx1ZUVsID0gaGVhZGVyRWwuY3JlYXRlRGl2KCdiYXNlcy1jbXMtZ3JvdXAtdmFsdWUnKTtcblx0XHRcdFx0XHRjb25zdCBrZXlWYWx1ZSA9IHByb2Nlc3NlZEdyb3VwLmdyb3VwLmtleT8udG9TdHJpbmcoKSB8fCAnJztcblx0XHRcdFx0XHR2YWx1ZUVsLnNldFRleHQoa2V5VmFsdWUpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gUmVuZGVyIGNhcmRzIGluIHRoaXMgZ3JvdXBcblx0XHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBlbnRyaWVzVG9EaXNwbGF5ICYmIGNhcmRJbmRleCA8IGNhcmRzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdFx0Y29uc3QgY2FyZCA9IGNhcmRzW2NhcmRJbmRleF07XG5cdFx0XHRcdFx0Y29uc3QgZW50cnkgPSB2aXNpYmxlRW50cmllc1tjYXJkSW5kZXhdO1xuXHRcdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0XHR0aGlzLnJlbmRlckNhcmQoZ3JvdXBFbCwgY2FyZCwgZW50cnksIGRpc3BsYXllZFNvRmFyICsgaSwgc2V0dGluZ3MpO1xuXHRcdFx0XHRcdFx0dG90YWxDYXJkc1JlbmRlcmVkKys7XG5cdFx0XHRcdFx0fSBjYXRjaCB7XG5cdFx0XHRcdFx0XHQvLyBDb250aW51ZSByZW5kZXJpbmcgb3RoZXIgY2FyZHMgZXZlbiBpZiBvbmUgZmFpbHNcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Y2FyZEluZGV4Kys7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRkaXNwbGF5ZWRTb0ZhciArPSBlbnRyaWVzVG9EaXNwbGF5O1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBSZW5kZXIgZmxhdCBsaXN0ICh2aXJ0dWFsIHNjcm9sbCBvciBubyBncm91cHMpXG5cdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGNhcmRzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdGNvbnN0IGNhcmQgPSBjYXJkc1tpXTtcblx0XHRcdFx0Y29uc3QgZW50cnkgPSB2aXNpYmxlRW50cmllc1tpXTtcblx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHR0aGlzLnJlbmRlckNhcmQoZmVlZEVsLCBjYXJkLCBlbnRyeSwgc3RhcnRJbmRleCArIGksIHNldHRpbmdzKTtcblx0XHRcdFx0XHR0b3RhbENhcmRzUmVuZGVyZWQrKztcblx0XHRcdFx0fSBjYXRjaCB7XG5cdFx0XHRcdFx0Ly8gQ29udGludWUgcmVuZGVyaW5nIG90aGVyIGNhcmRzIGV2ZW4gaWYgb25lIGZhaWxzXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBGb3IgdmlydHVhbCBzY3JvbGxpbmcsIGFkZCBib3R0b20gc3BhY2VyXG5cdFx0aWYgKHVzZVZpcnR1YWxTY3JvbGwgJiYgdmlydHVhbFJhbmdlICYmIHZpcnR1YWxSYW5nZS5ib3R0b21QYWRkaW5nID4gMCkge1xuXHRcdFx0Y29uc3QgYm90dG9tU3BhY2VyID0gZmVlZEVsLmNyZWF0ZURpdignYmFzZXMtY21zLXZpcnR1YWwtc3BhY2VyJyk7XG5cdFx0XHRib3R0b21TcGFjZXIuc3R5bGUuaGVpZ2h0ID0gYCR7dmlydHVhbFJhbmdlLmJvdHRvbVBhZGRpbmd9cHhgO1xuXHRcdFx0c2V0Q3NzUHJvcHMoYm90dG9tU3BhY2VyLCB7IGdyaWRDb2x1bW46ICcxIC8gLTEnIH0pO1xuXHRcdH1cblxuXHRcdGlmICghaXNTdGlsbFZhbGlkKCkpIHJldHVybjtcblxuXHRcdC8vIENSSVRJQ0FMOiBJZiBubyBjYXJkcyB3ZXJlIHJlbmRlcmVkLCBzaG93IGVycm9yIGluc3RlYWQgb2YgYmxhbmsgc2NyZWVuXG5cdFx0aWYgKHRvdGFsQ2FyZHNSZW5kZXJlZCA9PT0gMCAmJiB0b3RhbEVudHJpZXNDb3VudCA+IDApIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcignTm8gY2FyZHMgd2VyZSByZW5kZXJlZCBkZXNwaXRlIGhhdmluZyBlbnRyaWVzLiBDaGVjayBjYXJkIHJlbmRlcmluZyBsb2dpYy4nKTtcblx0XHR9XG5cblx0XHQvLyBVcGRhdGUgY2FyZCBtZXRyaWNzIGZvciB2aXJ0dWFsIHNjcm9sbGluZ1xuXHRcdGlmICh0b3RhbENhcmRzUmVuZGVyZWQgPiAwKSB7XG5cdFx0XHRjb25zdCBmaXJzdENhcmQgPSBmZWVkRWwucXVlcnlTZWxlY3RvcignLmJhc2VzLWNtcy1jYXJkJykgYXMgSFRNTEVsZW1lbnQ7XG5cdFx0XHRpZiAoZmlyc3RDYXJkKSB7XG5cdFx0XHRcdC8vIE1lYXN1cmUgYWN0dWFsIGNhcmQgaGVpZ2h0IGFmdGVyIHJlbmRlclxuXHRcdFx0XHRyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuXHRcdFx0XHRcdGNvbnN0IGNhcmRIZWlnaHQgPSBmaXJzdENhcmQub2Zmc2V0SGVpZ2h0O1xuXHRcdFx0XHRcdGNvbnN0IGNvbnRhaW5lcldpZHRoID0gdGhpcy5jb250YWluZXJFbC5jbGllbnRXaWR0aDtcblx0XHRcdFx0XHRjb25zdCBjYXJkTWluV2lkdGggPSBzZXR0aW5ncy5jYXJkU2l6ZSB8fCAyODA7XG5cdFx0XHRcdFx0Y29uc3QgZ2FwID0gMTY7XG5cdFx0XHRcdFx0Y29uc3QgY2FyZHNQZXJSb3cgPSBNYXRoLm1heCgxLCBNYXRoLmZsb29yKChjb250YWluZXJXaWR0aCArIGdhcCkgLyAoY2FyZE1pbldpZHRoICsgZ2FwKSkpO1xuXHRcdFx0XHRcdHRoaXMuc2Nyb2xsTGF5b3V0TWFuYWdlci51cGRhdGVDYXJkTWV0cmljcyhjYXJkSGVpZ2h0LCBjYXJkc1BlclJvdyk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIFJlc3RvcmUgc2Nyb2xsIHBvc2l0aW9uIGFmdGVyIHJlbmRlcmluZ1xuXHRcdGlmIChzYXZlZFNjcm9sbFRvcCA+IDApIHtcblx0XHRcdHRoaXMuY29udGFpbmVyRWwuc2Nyb2xsVG9wID0gc2F2ZWRTY3JvbGxUb3A7XG5cdFx0fVxuXG5cdFx0Ly8gU2V0dXAgc2Nyb2xsaW5nICh2aXJ0dWFsIG9yIGluZmluaXRlKSBhbmQgcmVzaXplIG9ic2VydmVyXG5cdFx0aWYgKHVzZVZpcnR1YWxTY3JvbGwpIHtcblx0XHRcdC8vIFN0b3JlIGNvbnRleHQgZm9yIHZpcnR1YWwgc2Nyb2xsIGhhbmRsZXJcblx0XHRcdGNvbnN0IGNhY2hlZEFsbEVudHJpZXMgPSBhbGxGbGF0RW50cmllcztcblx0XHRcdGNvbnN0IGNhY2hlZFNldHRpbmdzID0gc2V0dGluZ3M7XG5cdFx0XHRjb25zdCBjYWNoZWRVcGRhdGVJZCA9IHVwZGF0ZUlkO1xuXG5cdFx0XHR0aGlzLnNjcm9sbExheW91dE1hbmFnZXIuc2V0dXBWaXJ0dWFsU2Nyb2xsKHRvdGFsRW50cmllc0NvdW50LCAocmFuZ2UpID0+IHtcblx0XHRcdFx0Ly8gUmUtcmVuZGVyIHdoZW4gc2Nyb2xsIHJhbmdlIGNoYW5nZXMgc2lnbmlmaWNhbnRseVxuXHRcdFx0XHRpZiAoY2FjaGVkVXBkYXRlSWQgPT09IHRoaXMubGFzdFVwZGF0ZUlkKSB7XG5cdFx0XHRcdFx0dm9pZCB0aGlzLnJlbmRlclZpcnR1YWxSYW5nZShjYWNoZWRBbGxFbnRyaWVzLCBjYWNoZWRTZXR0aW5ncywgcmFuZ2UsIGZlZWRFbCk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLnNjcm9sbExheW91dE1hbmFnZXIuc2V0dXBJbmZpbml0ZVNjcm9sbCh0b3RhbEVudHJpZXNDb3VudCk7XG5cdFx0fVxuXHRcdHRoaXMuc2Nyb2xsTGF5b3V0TWFuYWdlci5zZXR1cFJlc2l6ZU9ic2VydmVyKCk7XG5cblx0XHQvLyBTZXR1cCBzZXR0aW5ncyBwb2xsaW5nIHRvIGRldGVjdCBjaGFuZ2VzIGFuZCByZWZyZXNoIHZpZXdcblx0XHR0aGlzLnNldHVwU2V0dGluZ3NQb2xsaW5nKHNldHRpbmdzKTtcblxuXHRcdC8vIFVwZGF0ZSBzZWxlY3Rpb24gVUlcblx0XHR0aGlzLnVwZGF0ZVNlbGVjdGlvblVJKCk7XG5cblx0XHQvLyBDbGVhciBsb2FkaW5nIGZsYWcgYWZ0ZXIgYXN5bmMgd29yayBjb21wbGV0ZXNcblx0XHR0aGlzLnNjcm9sbExheW91dE1hbmFnZXIuc2V0SXNMb2FkaW5nKGZhbHNlKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZW5kZXIgY2FyZHMgZm9yIGEgc3BlY2lmaWMgdmlydHVhbCBzY3JvbGwgcmFuZ2Vcblx0ICovXG5cdHByaXZhdGUgYXN5bmMgcmVuZGVyVmlydHVhbFJhbmdlKFxuXHRcdGFsbEVudHJpZXM6IEJhc2VzRW50cnlbXSxcblx0XHRzZXR0aW5nczogQ01TU2V0dGluZ3MsXG5cdFx0cmFuZ2U6IHsgc3RhcnRJbmRleDogbnVtYmVyOyBlbmRJbmRleDogbnVtYmVyOyB0b3BQYWRkaW5nOiBudW1iZXI7IGJvdHRvbVBhZGRpbmc6IG51bWJlciB9LFxuXHRcdGZlZWRFbDogSFRNTEVsZW1lbnRcblx0KTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0Y29uc3QgdmlzaWJsZUVudHJpZXMgPSBhbGxFbnRyaWVzLnNsaWNlKHJhbmdlLnN0YXJ0SW5kZXgsIHJhbmdlLmVuZEluZGV4ICsgMSk7XG5cblx0XHQvLyBMb2FkIGNvbnRlbnQgZm9yIG5ld2x5IHZpc2libGUgZW50cmllc1xuXHRcdGF3YWl0IHRoaXMubG9hZENvbnRlbnRGb3JFbnRyaWVzKHZpc2libGVFbnRyaWVzLCBzZXR0aW5ncyk7XG5cblx0XHQvLyBDbGVhciBhbmQgcmUtcmVuZGVyXG5cdFx0ZmVlZEVsLmVtcHR5KCk7XG5cblx0XHQvLyBBZGQgdG9wIHNwYWNlclxuXHRcdGlmIChyYW5nZS50b3BQYWRkaW5nID4gMCkge1xuXHRcdFx0Y29uc3QgdG9wU3BhY2VyID0gZmVlZEVsLmNyZWF0ZURpdignYmFzZXMtY21zLXZpcnR1YWwtc3BhY2VyJyk7XG5cdFx0XHR0b3BTcGFjZXIuc3R5bGUuaGVpZ2h0ID0gYCR7cmFuZ2UudG9wUGFkZGluZ31weGA7XG5cdFx0XHRzZXRDc3NQcm9wcyh0b3BTcGFjZXIsIHsgZ3JpZENvbHVtbjogJzEgLyAtMScgfSk7XG5cdFx0fVxuXG5cdFx0Ly8gVHJhbnNmb3JtIGFuZCByZW5kZXIgY2FyZHNcblx0XHRjb25zdCBjYXJkcyA9IGF3YWl0IHRyYW5zZm9ybUJhc2VzRW50cmllcyhcblx0XHRcdHZpc2libGVFbnRyaWVzLFxuXHRcdFx0c2V0dGluZ3MsXG5cdFx0XHQnJyxcblx0XHRcdGZhbHNlLFxuXHRcdFx0dGhpcy5zbmlwcGV0cyxcblx0XHRcdHRoaXMuaW1hZ2VzLFxuXHRcdFx0dGhpcy5oYXNJbWFnZUF2YWlsYWJsZSxcblx0XHRcdHRoaXMuYXBwLFxuXHRcdFx0dGhpcy5tZHhGcm9udG1hdHRlckNhY2hlXG5cdFx0KTtcblxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgY2FyZHMubGVuZ3RoOyBpKyspIHtcblx0XHRcdGNvbnN0IGNhcmQgPSBjYXJkc1tpXTtcblx0XHRcdGNvbnN0IGVudHJ5ID0gdmlzaWJsZUVudHJpZXNbaV07XG5cdFx0XHR0cnkge1xuXHRcdFx0XHR0aGlzLnJlbmRlckNhcmQoZmVlZEVsLCBjYXJkLCBlbnRyeSwgcmFuZ2Uuc3RhcnRJbmRleCArIGksIHNldHRpbmdzKTtcblx0XHRcdH0gY2F0Y2gge1xuXHRcdFx0XHQvLyBDb250aW51ZSByZW5kZXJpbmcgb3RoZXIgY2FyZHNcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBBZGQgYm90dG9tIHNwYWNlclxuXHRcdGlmIChyYW5nZS5ib3R0b21QYWRkaW5nID4gMCkge1xuXHRcdFx0Y29uc3QgYm90dG9tU3BhY2VyID0gZmVlZEVsLmNyZWF0ZURpdignYmFzZXMtY21zLXZpcnR1YWwtc3BhY2VyJyk7XG5cdFx0XHRib3R0b21TcGFjZXIuc3R5bGUuaGVpZ2h0ID0gYCR7cmFuZ2UuYm90dG9tUGFkZGluZ31weGA7XG5cdFx0XHRzZXRDc3NQcm9wcyhib3R0b21TcGFjZXIsIHsgZ3JpZENvbHVtbjogJzEgLyAtMScgfSk7XG5cdFx0fVxuXG5cdFx0Ly8gVXBkYXRlIHNlbGVjdGlvbiBVSVxuXHRcdHRoaXMudXBkYXRlU2VsZWN0aW9uVUkoKTtcblx0fVxuXG5cdG9uRGF0YVVwZGF0ZWQoKTogdm9pZCB7XG5cdFx0Y29uc3QgdXBkYXRlSWQgPSArK3RoaXMubGFzdFVwZGF0ZUlkO1xuXG5cdFx0dm9pZCAoYXN5bmMgKCkgPT4ge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0Ly8gR3VhcmQ6IGNoZWNrIGlmIHRoaXMgdXBkYXRlIGlzIHN0aWxsIHZhbGlkXG5cdFx0XHRcdGNvbnN0IGlzU3RpbGxWYWxpZCA9ICgpID0+IHVwZGF0ZUlkID09PSB0aGlzLmxhc3RVcGRhdGVJZDtcblxuXHRcdFx0XHQvLyBHdWFyZDogd2FpdCBmb3IgZGF0YSB0byBiZSByZWFkeSAtIE5FVkVSIHJldHVybiBlYXJseSBhbmQgbGVhdmUgYmxhbmsgc2NyZWVuXG5cdFx0XHRcdGlmICghdGhpcy5kYXRhKSB7XG5cdFx0XHRcdFx0Ly8gU2hvdyBsb2FkaW5nIHN0YXRlIGluc3RlYWQgb2YgYmxhbmsgc2NyZWVuXG5cdFx0XHRcdFx0bGV0IGxvYWRpbmdFbCA9IHRoaXMuY29udGFpbmVyRWwucXVlcnlTZWxlY3RvcignLmJhc2VzLWNtcy1sb2FkaW5nJykgYXMgSFRNTEVsZW1lbnQ7XG5cdFx0XHRcdFx0aWYgKCFsb2FkaW5nRWwgJiYgdGhpcy5jb250YWluZXJFbC5jaGlsZHJlbi5sZW5ndGggPT09IDApIHtcblx0XHRcdFx0XHRcdGxvYWRpbmdFbCA9IHRoaXMuY29udGFpbmVyRWwuY3JlYXRlRGl2KCdiYXNlcy1jbXMtbG9hZGluZycpO1xuXHRcdFx0XHRcdFx0bG9hZGluZ0VsLnNldFRleHQoJ0xvYWRpbmcuLi4nKTtcblx0XHRcdFx0XHRcdHNldENzc1Byb3BzKGxvYWRpbmdFbCwge1xuXHRcdFx0XHRcdFx0XHRwYWRkaW5nOiAnMjBweCcsXG5cdFx0XHRcdFx0XHRcdHRleHRBbGlnbjogJ2NlbnRlcidcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHQvLyBSZXRyeSBhZnRlciBhIHNob3J0IGRlbGF5XG5cdFx0XHRcdFx0c2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRcdFx0XHRpZiAoaXNTdGlsbFZhbGlkKCkgJiYgdGhpcy5kYXRhKSB7XG5cdFx0XHRcdFx0XHRcdHRoaXMub25EYXRhVXBkYXRlZCgpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0sIDEwMCk7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKCFpc1N0aWxsVmFsaWQoKSkgcmV0dXJuO1xuXG5cdFx0XHRcdC8vIFN5bmMgd2l0aCBkZWZhdWx0IHZpZXcgaWYgZGVmaW5lZCBhbmQgbm90IGFscmVhZHkgYWN0aXZlXG5cdFx0XHRcdGNvbnN0IGRhdGEgPSB0aGlzLmRhdGEgYXMgdW5rbm93biBhcyB7IGRlZmF1bHRWaWV3Pzogc3RyaW5nIH07XG5cdFx0XHRcdGNvbnN0IHRvcExldmVsRGVmYXVsdFZpZXcgPSBkYXRhPy5kZWZhdWx0VmlldztcblxuXHRcdFx0XHRjb25zdCBjb25maWcgPSB0aGlzLmNvbmZpZyBhcyB1bmtub3duIGFzIHsgZ2V0TmFtZT86ICgpID0+IHN0cmluZzsgbmFtZT86IHN0cmluZyB9O1xuXHRcdFx0XHRjb25zdCBjdXJyZW50Vmlld05hbWUgPSB0eXBlb2YgY29uZmlnLmdldE5hbWUgPT09ICdmdW5jdGlvbidcblx0XHRcdFx0XHQ/IGNvbmZpZy5nZXROYW1lKClcblx0XHRcdFx0XHQ6IGNvbmZpZy5uYW1lO1xuXG5cdFx0XHRcdGlmICh0b3BMZXZlbERlZmF1bHRWaWV3ICYmIGN1cnJlbnRWaWV3TmFtZSAhPT0gdG9wTGV2ZWxEZWZhdWx0Vmlldykge1xuXHRcdFx0XHRcdC8vIE9ubHkgZG8gdGhpcyBvbmNlIG9uIGluaXRpYWwgbG9hZCB0byBhdm9pZCBsb29wXG5cdFx0XHRcdFx0aWYgKCF0aGlzLmhhc0F1dG9Td2l0Y2hlZCkge1xuXHRcdFx0XHRcdFx0dGhpcy5oYXNBdXRvU3dpdGNoZWQgPSB0cnVlO1xuXG5cdFx0XHRcdFx0XHQvLyBMb2dpYyB0byB0cmlnZ2VyIGEgdmlldyBzd2l0Y2ggdmlhIHRoZSBjb3JlIEJhc2VzIHBsdWdpbiBjb250cm9sbGVyXG5cdFx0XHRcdFx0XHRjb25zdCBjb250cm9sbGVyID0gdGhpcy5iYXNlc0NvbnRyb2xsZXIgYXMgdW5rbm93biBhcyB7XG5cdFx0XHRcdFx0XHRcdHNlbGVjdFZpZXc/OiAodmlldzogc3RyaW5nKSA9PiB2b2lkO1xuXHRcdFx0XHRcdFx0XHRzZXRWaWV3PzogKHZpZXc6IHN0cmluZykgPT4gdm9pZDtcblx0XHRcdFx0XHRcdFx0c3dpdGNoVmlldz86ICh2aWV3OiBzdHJpbmcpID0+IHZvaWQ7XG5cdFx0XHRcdFx0XHR9O1xuXG5cdFx0XHRcdFx0XHQvLyBEaWFnbm9zdGljIGxvZyB0byBoZWxwIHRyb3VibGVzaG9vdCBpZiBpdCBzdGlsbCBkb2Vzbid0IHdvcmtcblx0XHRcdFx0XHRcdGNvbnNvbGUuZGVidWcoJ0Jhc2VzIENNUzogRGVmYXVsdCB2aWV3IHN5bmMgdHJpZ2dlcmVkJywge1xuXHRcdFx0XHRcdFx0XHR0YXJnZXQ6IHRvcExldmVsRGVmYXVsdFZpZXcsXG5cdFx0XHRcdFx0XHRcdGN1cnJlbnQ6IGN1cnJlbnRWaWV3TmFtZVxuXHRcdFx0XHRcdFx0fSk7XG5cblx0XHRcdFx0XHRcdGlmICh0eXBlb2YgY29udHJvbGxlci5zZWxlY3RWaWV3ID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0XHRcdFx0XHRcdGNvbnRyb2xsZXIuc2VsZWN0Vmlldyh0b3BMZXZlbERlZmF1bHRWaWV3KTtcblx0XHRcdFx0XHRcdFx0cmV0dXJuOyAvLyBFeGl0IGVhcmx5IGFzIHRoZSB2aWV3IHdpbGwgYmUgcmVwbGFjZWRcblx0XHRcdFx0XHRcdH0gZWxzZSBpZiAodHlwZW9mIGNvbnRyb2xsZXIuc2V0VmlldyA9PT0gJ2Z1bmN0aW9uJykge1xuXHRcdFx0XHRcdFx0XHRjb250cm9sbGVyLnNldFZpZXcodG9wTGV2ZWxEZWZhdWx0Vmlldyk7XG5cdFx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHRcdH0gZWxzZSBpZiAodHlwZW9mIGNvbnRyb2xsZXIuc3dpdGNoVmlldyA9PT0gJ2Z1bmN0aW9uJykge1xuXHRcdFx0XHRcdFx0XHRjb250cm9sbGVyLnN3aXRjaFZpZXcodG9wTGV2ZWxEZWZhdWx0Vmlldyk7XG5cdFx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBDaGVjayBpZiB0aGUgYmFzZSBjb25maWd1cmF0aW9uIGhhcyBjaGFuZ2VkXG5cdFx0XHRcdGNvbnN0IGN1cnJlbnRCYXNlSWQgPSB0aGlzLmdldEJhc2VJZGVudGlmaWVyKCk7XG5cdFx0XHRcdGlmICh0aGlzLmxhc3RCYXNlSWQgIT09IGN1cnJlbnRCYXNlSWQpIHtcblx0XHRcdFx0XHR0aGlzLmxhc3RCYXNlSWQgPSBjdXJyZW50QmFzZUlkO1xuXG5cdFx0XHRcdFx0Ly8gU3luYyBzZWxlY3Rpb24gZnJvbSBwbHVnaW4gd2hlbiBiYXNlIGNoYW5nZXMgb3IgaXMgZmlyc3QgZGV0ZWN0ZWRcblx0XHRcdFx0XHRpZiAoY3VycmVudEJhc2VJZCkge1xuXHRcdFx0XHRcdFx0Y29uc3Qgc2F2ZWRTZWxlY3Rpb24gPSB0aGlzLnBsdWdpbi5zZWxlY3Rpb25zLmdldChjdXJyZW50QmFzZUlkKTtcblx0XHRcdFx0XHRcdGlmIChzYXZlZFNlbGVjdGlvbiAmJiBzYXZlZFNlbGVjdGlvbiAhPT0gdGhpcy5zZWxlY3RlZEZpbGVzKSB7XG5cdFx0XHRcdFx0XHRcdC8vIFN5bmMgY29udGVudHMgdG8gb3VyIGxvY2FsIChtYW5hZ2VyLWxpbmtlZCkgU2V0XG5cdFx0XHRcdFx0XHRcdHRoaXMuc2VsZWN0ZWRGaWxlcy5jbGVhcigpO1xuXHRcdFx0XHRcdFx0XHRzYXZlZFNlbGVjdGlvbi5mb3JFYWNoKGl0ZW0gPT4gdGhpcy5zZWxlY3RlZEZpbGVzLmFkZChpdGVtKSk7XG5cdFx0XHRcdFx0XHRcdC8vIEVuc3VyZSB0aGV5IHNoYXJlIHRoZSByZWZlcmVuY2UgZ29pbmcgZm9yd2FyZFxuXHRcdFx0XHRcdFx0XHR0aGlzLnBsdWdpbi5zZWxlY3Rpb25zLnNldChjdXJyZW50QmFzZUlkLCB0aGlzLnNlbGVjdGVkRmlsZXMpO1xuXHRcdFx0XHRcdFx0fSBlbHNlIGlmICghc2F2ZWRTZWxlY3Rpb24pIHtcblx0XHRcdFx0XHRcdFx0dGhpcy5wbHVnaW4uc2VsZWN0aW9ucy5zZXQoY3VycmVudEJhc2VJZCwgdGhpcy5zZWxlY3RlZEZpbGVzKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBSZXNldCBzY3JvbGwgYW5kIGRpc3BsYXllZCBjb3VudCB3aGVuIHN3aXRjaGluZyBiYXNlc1xuXHRcdFx0XHRcdHRoaXMuc2Nyb2xsTGF5b3V0TWFuYWdlci5yZXNldFNjcm9sbCgpO1xuXHRcdFx0XHRcdC8vIENsZWFyIGNhY2hlcyB0aGF0IGFyZSBzcGVjaWZpYyB0byBhIGJhc2Vcblx0XHRcdFx0XHR0aGlzLnNuaXBwZXRzID0ge307XG5cdFx0XHRcdFx0dGhpcy5pbWFnZXMgPSB7fTtcblx0XHRcdFx0XHR0aGlzLmhhc0ltYWdlQXZhaWxhYmxlID0ge307XG5cdFx0XHRcdFx0dGhpcy5tZHhGcm9udG1hdHRlckNhY2hlID0ge307XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBFbnN1cmUgd2UgaGF2ZSB2YWxpZCBkYXRhIHN0cnVjdHVyZXNcblx0XHRcdFx0aWYgKCF0aGlzLmRhdGEuZ3JvdXBlZERhdGEgfHwgIXRoaXMuZGF0YS5kYXRhKSB7XG5cdFx0XHRcdFx0c2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRcdFx0XHRpZiAoaXNTdGlsbFZhbGlkKCkgJiYgdGhpcy5kYXRhICYmIHRoaXMuZGF0YS5ncm91cGVkRGF0YSAmJiB0aGlzLmRhdGEuZGF0YSkge1xuXHRcdFx0XHRcdFx0XHR0aGlzLm9uRGF0YVVwZGF0ZWQoKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9LCAxMDApO1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmICghaXNTdGlsbFZhbGlkKCkpIHJldHVybjtcblxuXHRcdFx0XHRjb25zdCBncm91cGVkRGF0YSA9IHRoaXMuZGF0YS5ncm91cGVkRGF0YTtcblx0XHRcdFx0Y29uc3QgYWxsRW50cmllcyA9IHRoaXMuZGF0YS5kYXRhO1xuXG5cdFx0XHRcdC8vIFJlYWQgc2V0dGluZ3MgZnJvbSBCYXNlcyBjb25maWdcblx0XHRcdFx0Y29uc3Qgc2V0dGluZ3MgPSByZWFkQ01TU2V0dGluZ3MoXG5cdFx0XHRcdFx0dGhpcy5jb25maWcsXG5cdFx0XHRcdFx0dGhpcy5wbHVnaW4uc2V0dGluZ3Ncblx0XHRcdFx0KTtcblxuXHRcdFx0XHRpZiAoIWlzU3RpbGxWYWxpZCgpKSByZXR1cm47XG5cblx0XHRcdFx0Ly8gU3RvcmUgZmxhdCBsaXN0IG9mIHBhdGhzIGZvciBzZWxlY3Rpb24gYW5kIHJhbmdlIHNlbGVjdGlvblxuXHRcdFx0XHRjb25zdCBhbGxGbGF0RW50cmllcyA9IEFycmF5LmlzQXJyYXkodGhpcy5kYXRhLmRhdGEpID8gdGhpcy5kYXRhLmRhdGEgOiBbXTtcblx0XHRcdFx0dGhpcy5sYXN0VmlzaWJsZVBhdGhzID0gYWxsRmxhdEVudHJpZXMubWFwKGUgPT4gZS5maWxlPy5wYXRoKS5maWx0ZXIoQm9vbGVhbik7XG5cblx0XHRcdFx0Ly8gVXBkYXRlIGNvbmZpZyByZWZlcmVuY2UgaW4gc2Nyb2xsIGxheW91dCBtYW5hZ2VyIGlmIGl0J3Mgbm93IGF2YWlsYWJsZVxuXHRcdFx0XHRpZiAodGhpcy5jb25maWcgJiYgdHlwZW9mICh0aGlzLmNvbmZpZyBhcyB7IGdldD86IChrZXk6IHN0cmluZykgPT4gdW5rbm93biB9KS5nZXQgPT09ICdmdW5jdGlvbicpIHtcblx0XHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdFx0dGhpcy5zY3JvbGxMYXlvdXRNYW5hZ2VyLnVwZGF0ZUNvbmZpZyh0aGlzLmNvbmZpZyBhcyB7IGdldDogKGtleTogc3RyaW5nKSA9PiB1bmtub3duIH0pO1xuXHRcdFx0XHRcdH0gY2F0Y2gge1xuXHRcdFx0XHRcdFx0Ly8gSWdub3JlIC0gY29uZmlnIHVwZGF0ZSBpcyBvcHRpb25hbFxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIFVwZGF0ZSBncmlkIGxheW91dCB1c2luZyBzY3JvbGwgbGF5b3V0IG1hbmFnZXJcblx0XHRcdFx0dGhpcy5zY3JvbGxMYXlvdXRNYW5hZ2VyLnVwZGF0ZUdyaWRMYXlvdXQoc2V0dGluZ3MpO1xuXG5cdFx0XHRcdC8vIFNhdmUgc2Nyb2xsIHBvc2l0aW9uIGJlZm9yZSByZS1yZW5kZXJpbmdcblx0XHRcdFx0Y29uc3Qgc2F2ZWRTY3JvbGxUb3AgPSB0aGlzLmNvbnRhaW5lckVsLnNjcm9sbFRvcDtcblxuXHRcdFx0XHQvLyBHZXQgc29ydCBjb25maWdzICh1c2VkIGZvciBjdXN0b20gc29ydGluZylcblx0XHRcdFx0Y29uc3Qgc29ydENvbmZpZ3MgPSB0aGlzLmNvbmZpZy5nZXRTb3J0KCk7XG5cblx0XHRcdFx0Ly8gUHJvY2VzcyBncm91cHMgYW5kIGFwcGx5IGN1c3RvbSBzb3J0aW5nIGZvciBwcm9wZXJ0aWVzXG5cdFx0XHRcdGxldCBwcm9jZXNzZWRHcm91cHM6IEFycmF5PHsgZ3JvdXA6IHsgaGFzS2V5OiAoKSA9PiBib29sZWFuOyBrZXk/OiB1bmtub3duOyBlbnRyaWVzOiBCYXNlc0VudHJ5W10gfTsgZW50cmllczogQmFzZXNFbnRyeVtdIH0+ID0gZ3JvdXBlZERhdGEubWFwKGdyb3VwID0+ICh7XG5cdFx0XHRcdFx0Z3JvdXA6IGdyb3VwIGFzIHsgaGFzS2V5OiAoKSA9PiBib29sZWFuOyBrZXk/OiB1bmtub3duOyBlbnRyaWVzOiBCYXNlc0VudHJ5W10gfSxcblx0XHRcdFx0XHRlbnRyaWVzOiBbLi4uZ3JvdXAuZW50cmllc11cblx0XHRcdFx0fSkpO1xuXG5cdFx0XHRcdC8vIEFwcGx5IGN1c3RvbSBzb3J0aW5nIGlmIHNvcnRpbmcgYnkgYSBwcm9wZXJ0eSAobm90IGp1c3QgZmlsZSB0aW1lKVxuXHRcdFx0XHRpZiAoc29ydENvbmZpZ3MgJiYgc29ydENvbmZpZ3MubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRcdGNvbnN0IGZpcnN0U29ydCA9IHNvcnRDb25maWdzWzBdO1xuXHRcdFx0XHRcdGNvbnN0IHByb3BlcnR5ID0gZmlyc3RTb3J0LnByb3BlcnR5O1xuXHRcdFx0XHRcdGNvbnN0IGRpcmVjdGlvbiA9IGZpcnN0U29ydC5kaXJlY3Rpb24udG9Mb3dlckNhc2UoKSBhcyAnYXNjJyB8ICdkZXNjJztcblxuXHRcdFx0XHRcdC8vIE9ubHkgYXBwbHkgY3VzdG9tIHNvcnRpbmcgZm9yIHByb3BlcnRpZXMgKG5vdCBmaWxlLmN0aW1lL2ZpbGUubXRpbWUgd2hpY2ggYXJlIGhhbmRsZWQgYnkgQmFzZXMpXG5cdFx0XHRcdFx0aWYgKHByb3BlcnR5ICYmICFwcm9wZXJ0eS5pbmNsdWRlcygnY3RpbWUnKSAmJiAhcHJvcGVydHkuaW5jbHVkZXMoJ210aW1lJykpIHtcblx0XHRcdFx0XHRcdC8vIFVzZSBJSUZFIHRvIGhhbmRsZSBhc3luYyBzb3J0aW5nXG5cdFx0XHRcdFx0XHR2b2lkIChhc3luYyAoKSA9PiB7XG5cdFx0XHRcdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0XHRcdFx0Ly8gRmxhdHRlbiBhbGwgZW50cmllcyBmcm9tIGFsbCBncm91cHNcblx0XHRcdFx0XHRcdFx0XHRjb25zdCBhbGxFbnRyaWVzOiBCYXNlc0VudHJ5W10gPSBbXTtcblx0XHRcdFx0XHRcdFx0XHRmb3IgKGNvbnN0IHByb2Nlc3NlZEdyb3VwIG9mIHByb2Nlc3NlZEdyb3Vwcykge1xuXHRcdFx0XHRcdFx0XHRcdFx0YWxsRW50cmllcy5wdXNoKC4uLnByb2Nlc3NlZEdyb3VwLmVudHJpZXMpO1xuXHRcdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRcdC8vIFNvcnQgYWxsIGVudHJpZXMgYnkgdGhlIHByb3BlcnR5XG5cdFx0XHRcdFx0XHRcdFx0Y29uc3Qgc29ydGVkRW50cmllcyA9IGF3YWl0IHRoaXMuc29ydEVudHJpZXNCeVByb3BlcnR5KGFsbEVudHJpZXMsIHByb3BlcnR5LCBkaXJlY3Rpb24pO1xuXG5cdFx0XHRcdFx0XHRcdFx0Ly8gUmUtZ3JvdXAgZW50cmllcyAocHV0IGFsbCBpbiBhIHNpbmdsZSBncm91cCBzaW5jZSB3ZSdyZSBvdmVycmlkaW5nIEJhc2VzJyBncm91cGluZylcblx0XHRcdFx0XHRcdFx0XHRjb25zdCBzb3J0ZWRQcm9jZXNzZWRHcm91cHM6IEFycmF5PHsgZ3JvdXA6IHsgaGFzS2V5OiAoKSA9PiBib29sZWFuOyBrZXk/OiB1bmtub3duOyBlbnRyaWVzOiBCYXNlc0VudHJ5W10gfTsgZW50cmllczogQmFzZXNFbnRyeVtdIH0+ID0gW3tcblx0XHRcdFx0XHRcdFx0XHRcdGdyb3VwOiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGhhc0tleTogKCkgPT4gZmFsc2UsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGtleTogbnVsbCxcblx0XHRcdFx0XHRcdFx0XHRcdFx0ZW50cmllczogc29ydGVkRW50cmllc1xuXHRcdFx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdFx0XHRcdGVudHJpZXM6IHNvcnRlZEVudHJpZXNcblx0XHRcdFx0XHRcdFx0XHR9XTtcblxuXHRcdFx0XHRcdFx0XHRcdC8vIENvbnRpbnVlIHByb2Nlc3Npbmcgd2l0aCBzb3J0ZWQgZ3JvdXBzXG5cdFx0XHRcdFx0XHRcdFx0YXdhaXQgdGhpcy5jb250aW51ZURhdGFQcm9jZXNzaW5nKHNvcnRlZFByb2Nlc3NlZEdyb3Vwcywgc2V0dGluZ3MsIGFsbEVudHJpZXMubGVuZ3RoLCBzYXZlZFNjcm9sbFRvcCwgdXBkYXRlSWQpO1xuXHRcdFx0XHRcdFx0XHR9IGNhdGNoIChlcnJvcikge1xuXHRcdFx0XHRcdFx0XHRcdGNvbnNvbGUuZXJyb3IoJ0Jhc2VzIENNUzogRXJyb3IgZHVyaW5nIGN1c3RvbSBzb3J0aW5nOicsIGVycm9yKTtcblx0XHRcdFx0XHRcdFx0XHQvLyBGYWxsIGJhY2sgdG8gb3JpZ2luYWwgcHJvY2Vzc2luZ1xuXHRcdFx0XHRcdFx0XHRcdGF3YWl0IHRoaXMuY29udGludWVEYXRhUHJvY2Vzc2luZyhwcm9jZXNzZWRHcm91cHMsIHNldHRpbmdzLCBhbGxFbnRyaWVzLmxlbmd0aCwgc2F2ZWRTY3JvbGxUb3AsIHVwZGF0ZUlkKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fSkoKTtcblx0XHRcdFx0XHRcdHJldHVybjsgLy8gRXhpdCBlYXJseSwgcHJvY2Vzc2luZyB3aWxsIGNvbnRpbnVlIGluIHRoZSBhc3luYyBjYWxsYmFja1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIENvbnRpbnVlIHdpdGggdGhlIHJlc3Qgb2YgcHJvY2Vzc2luZ1xuXHRcdFx0XHRhd2FpdCB0aGlzLmNvbnRpbnVlRGF0YVByb2Nlc3NpbmcocHJvY2Vzc2VkR3JvdXBzLCBzZXR0aW5ncywgYWxsRW50cmllcy5sZW5ndGgsIHNhdmVkU2Nyb2xsVG9wLCB1cGRhdGVJZCk7XG5cdFx0XHR9IGNhdGNoIChlcnJvcikge1xuXHRcdFx0XHQvLyBFbnN1cmUgbG9hZGluZyBmbGFnIGlzIGNsZWFyZWQgZXZlbiBvbiBlcnJvclxuXHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdHRoaXMuc2Nyb2xsTGF5b3V0TWFuYWdlci5zZXRJc0xvYWRpbmcoZmFsc2UpO1xuXHRcdFx0XHR9IGNhdGNoIHtcblx0XHRcdFx0XHQvLyBJZ25vcmUgY2xlYW51cCBlcnJvcnNcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIElmIGNvbnRhaW5lciBpcyBlbXB0eSBkdWUgdG8gZXJyb3IsIHNob3cgZXJyb3IgbWVzc2FnZVxuXHRcdFx0XHRpZiAodGhpcy5jb250YWluZXJFbCAmJiB0aGlzLmNvbnRhaW5lckVsLmlzQ29ubmVjdGVkKSB7XG5cdFx0XHRcdFx0dGhpcy5jb250YWluZXJFbC5lbXB0eSgpO1xuXHRcdFx0XHRcdGNvbnN0IGVycm9yRWwgPSB0aGlzLmNvbnRhaW5lckVsLmNyZWF0ZURpdignYmFzZXMtY21zLWVycm9yJyk7XG5cdFx0XHRcdFx0ZXJyb3JFbC5zZXRUZXh0KCdFcnJvciBsb2FkaW5nIHZpZXcuIENoZWNrIGNvbnNvbGUgZm9yIGRldGFpbHMuJyk7XG5cdFx0XHRcdFx0c2V0Q3NzUHJvcHMoZXJyb3JFbCwge1xuXHRcdFx0XHRcdFx0cGFkZGluZzogJzIwcHgnLFxuXHRcdFx0XHRcdFx0dGV4dEFsaWduOiAnY2VudGVyJyxcblx0XHRcdFx0XHRcdGNvbG9yOiAndmFyKC0tdGV4dC1lcnJvciknLFxuXHRcdFx0XHRcdFx0bWFyZ2luOiAnMjBweCdcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0XHRjb25zb2xlLmVycm9yKCdCYXNlcyBDTVM6IEVycm9yIGluIG9uRGF0YVVwZGF0ZWQ6JywgZXJyb3IpO1xuXHRcdFx0fVxuXHRcdH0pKCk7XG5cdH1cblxuXHQvKipcblx0ICogR2V0IGEgdW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoZSBjdXJyZW50IGJhc2UgY29uZmlndXJhdGlvblxuXHQgKi9cblx0cHJpdmF0ZSBnZXRCYXNlSWRlbnRpZmllcigpOiBzdHJpbmcgfCBudWxsIHtcblx0XHR0cnkge1xuXHRcdFx0Ly8gQ2hlY2sgY29udHJvbGxlciBmaXJzdCAoYXZhaWxhYmxlIGVhcmxpZXN0IGluIGNvbnN0cnVjdG9yKVxuXHRcdFx0Y29uc3QgY29udHJvbGxlciA9IHRoaXMuYmFzZXNDb250cm9sbGVyIGFzIHVua25vd24gYXMgeyBnZXRCYXNlTmFtZT86ICgpID0+IHN0cmluZzsgYmFzZU5hbWU/OiBzdHJpbmcgfTtcblx0XHRcdGlmIChjb250cm9sbGVyKSB7XG5cdFx0XHRcdGlmICh0eXBlb2YgY29udHJvbGxlci5nZXRCYXNlTmFtZSA9PT0gJ2Z1bmN0aW9uJykgcmV0dXJuIGNvbnRyb2xsZXIuZ2V0QmFzZU5hbWUoKTtcblx0XHRcdFx0aWYgKGNvbnRyb2xsZXIuYmFzZU5hbWUpIHJldHVybiBjb250cm9sbGVyLmJhc2VOYW1lO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAodGhpcy5jb25maWcgJiYgdHlwZW9mICh0aGlzLmNvbmZpZyBhcyB1bmtub3duIGFzIHsgZ2V0TmFtZT86ICgpID0+IHN0cmluZyB9KS5nZXROYW1lID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0XHRcdHJldHVybiAodGhpcy5jb25maWcgYXMgdW5rbm93biBhcyB7IGdldE5hbWU6ICgpID0+IHN0cmluZyB9KS5nZXROYW1lKCk7XG5cdFx0XHR9XG5cdFx0XHRpZiAodGhpcy5jb25maWcgJiYgKHRoaXMuY29uZmlnIGFzIHVua25vd24gYXMgeyBuYW1lPzogc3RyaW5nIH0pLm5hbWUpIHtcblx0XHRcdFx0cmV0dXJuIFN0cmluZygodGhpcy5jb25maWcgYXMgdW5rbm93biBhcyB7IG5hbWU6IHN0cmluZyB9KS5uYW1lKTtcblx0XHRcdH1cblx0XHRcdGlmICh0aGlzLmRhdGEgJiYgKHRoaXMuZGF0YSBhcyB1bmtub3duIGFzIHsgYmFzZU5hbWU/OiBzdHJpbmcgfSkuYmFzZU5hbWUpIHtcblx0XHRcdFx0cmV0dXJuIFN0cmluZygodGhpcy5kYXRhIGFzIHVua25vd24gYXMgeyBiYXNlTmFtZTogc3RyaW5nIH0pLmJhc2VOYW1lKTtcblx0XHRcdH1cblx0XHR9IGNhdGNoIHtcblx0XHRcdC8vIElnbm9yZSBlcnJvcnNcblx0XHR9XG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblxuXHQvKipcblx0ICogU2V0dXAgcG9sbGluZyB0byBkZXRlY3Qgc2V0dGluZ3MgY2hhbmdlcyBhbmQgcmVmcmVzaCB2aWV3XG5cdCAqL1xuXHRwcml2YXRlIHNldHVwU2V0dGluZ3NQb2xsaW5nKGluaXRpYWxTZXR0aW5nczogQ01TU2V0dGluZ3MpOiB2b2lkIHtcblx0XHQvLyBPbmx5IHNldCB1cCBvbmNlXG5cdFx0aWYgKHRoaXMuc2V0dGluZ3NQb2xsSW50ZXJ2YWwgIT09IG51bGwpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBTdG9yZSBpbml0aWFsIHNldHRpbmdzIGZvciBjb21wYXJpc29uXG5cdFx0dGhpcy5sYXN0U2V0dGluZ3MgPSB7XG5cdFx0XHRkZXNjcmlwdGlvblByb3BlcnR5OiBpbml0aWFsU2V0dGluZ3MuZGVzY3JpcHRpb25Qcm9wZXJ0eSxcblx0XHRcdHNob3dUZXh0UHJldmlldzogaW5pdGlhbFNldHRpbmdzLnNob3dUZXh0UHJldmlldyxcblx0XHRcdGZhbGxiYWNrVG9Db250ZW50OiBpbml0aWFsU2V0dGluZ3MuZmFsbGJhY2tUb0NvbnRlbnQsXG5cdFx0XHR0cnVuY2F0ZVByZXZpZXdQcm9wZXJ0eTogaW5pdGlhbFNldHRpbmdzLnRydW5jYXRlUHJldmlld1Byb3BlcnR5LFxuXHRcdFx0aW1hZ2VQcm9wZXJ0eTogaW5pdGlhbFNldHRpbmdzLmltYWdlUHJvcGVydHksXG5cdFx0XHRpbWFnZUZvcm1hdDogaW5pdGlhbFNldHRpbmdzLmltYWdlRm9ybWF0LFxuXHRcdFx0ZmFsbGJhY2tUb0VtYmVkczogaW5pdGlhbFNldHRpbmdzLmZhbGxiYWNrVG9FbWJlZHMsXG5cdFx0XHRwcm9wZXJ0eURpc3BsYXkxOiBpbml0aWFsU2V0dGluZ3MucHJvcGVydHlEaXNwbGF5MSxcblx0XHRcdHByb3BlcnR5RGlzcGxheTI6IGluaXRpYWxTZXR0aW5ncy5wcm9wZXJ0eURpc3BsYXkyLFxuXHRcdFx0cHJvcGVydHlEaXNwbGF5MzogaW5pdGlhbFNldHRpbmdzLnByb3BlcnR5RGlzcGxheTMsXG5cdFx0XHRwcm9wZXJ0eURpc3BsYXk0OiBpbml0aWFsU2V0dGluZ3MucHJvcGVydHlEaXNwbGF5NCxcblx0XHRcdHByb3BlcnR5RGlzcGxheTU6IGluaXRpYWxTZXR0aW5ncy5wcm9wZXJ0eURpc3BsYXk1LFxuXHRcdFx0cHJvcGVydHlEaXNwbGF5NjogaW5pdGlhbFNldHRpbmdzLnByb3BlcnR5RGlzcGxheTYsXG5cdFx0XHRwcm9wZXJ0eURpc3BsYXk3OiBpbml0aWFsU2V0dGluZ3MucHJvcGVydHlEaXNwbGF5Nyxcblx0XHRcdHByb3BlcnR5RGlzcGxheTg6IGluaXRpYWxTZXR0aW5ncy5wcm9wZXJ0eURpc3BsYXk4LFxuXHRcdFx0cHJvcGVydHlEaXNwbGF5OTogaW5pdGlhbFNldHRpbmdzLnByb3BlcnR5RGlzcGxheTksXG5cdFx0XHRwcm9wZXJ0eURpc3BsYXkxMDogaW5pdGlhbFNldHRpbmdzLnByb3BlcnR5RGlzcGxheTEwLFxuXHRcdFx0cHJvcGVydHlEaXNwbGF5MTE6IGluaXRpYWxTZXR0aW5ncy5wcm9wZXJ0eURpc3BsYXkxMSxcblx0XHRcdHByb3BlcnR5RGlzcGxheTEyOiBpbml0aWFsU2V0dGluZ3MucHJvcGVydHlEaXNwbGF5MTIsXG5cdFx0XHRwcm9wZXJ0eURpc3BsYXkxMzogaW5pdGlhbFNldHRpbmdzLnByb3BlcnR5RGlzcGxheTEzLFxuXHRcdFx0cHJvcGVydHlEaXNwbGF5MTQ6IGluaXRpYWxTZXR0aW5ncy5wcm9wZXJ0eURpc3BsYXkxNCxcblx0XHR9O1xuXG5cdFx0Ly8gUG9sbCBldmVyeSAxMDBtcyB0byBjaGVjayBmb3Igc2V0dGluZ3MgY2hhbmdlc1xuXHRcdHRoaXMuc2V0dGluZ3NQb2xsSW50ZXJ2YWwgPSB3aW5kb3cuc2V0SW50ZXJ2YWwoKCkgPT4ge1xuXHRcdFx0aWYgKCF0aGlzLmNvbmZpZyB8fCB0eXBlb2YgdGhpcy5jb25maWcuZ2V0ICE9PSAnZnVuY3Rpb24nKSB7XG5cdFx0XHRcdHJldHVybjsgLy8gQ29uZmlnIG5vdCByZWFkeSB5ZXRcblx0XHRcdH1cblxuXHRcdFx0Y29uc3QgY3VycmVudFNldHRpbmdzID0gcmVhZENNU1NldHRpbmdzKFxuXHRcdFx0XHR0aGlzLmNvbmZpZyxcblx0XHRcdFx0dGhpcy5wbHVnaW4uc2V0dGluZ3Ncblx0XHRcdCk7XG5cblx0XHRcdC8vIFNraXAgaWYgbGFzdFNldHRpbmdzIGlzIG5vdCBpbml0aWFsaXplZCB5ZXRcblx0XHRcdGlmICghdGhpcy5sYXN0U2V0dGluZ3MpIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBDaGVjayBpZiBhbnkgcmVsZXZhbnQgc2V0dGluZ3MgaGF2ZSBjaGFuZ2VkXG5cdFx0XHRjb25zdCBzZXR0aW5nc0NoYW5nZWQgPVxuXHRcdFx0XHR0aGlzLmxhc3RTZXR0aW5ncy5kZXNjcmlwdGlvblByb3BlcnR5ICE9PSBjdXJyZW50U2V0dGluZ3MuZGVzY3JpcHRpb25Qcm9wZXJ0eSB8fFxuXHRcdFx0XHR0aGlzLmxhc3RTZXR0aW5ncy5zaG93VGV4dFByZXZpZXcgIT09IGN1cnJlbnRTZXR0aW5ncy5zaG93VGV4dFByZXZpZXcgfHxcblx0XHRcdFx0dGhpcy5sYXN0U2V0dGluZ3MuZmFsbGJhY2tUb0NvbnRlbnQgIT09IGN1cnJlbnRTZXR0aW5ncy5mYWxsYmFja1RvQ29udGVudCB8fFxuXHRcdFx0XHR0aGlzLmxhc3RTZXR0aW5ncy50cnVuY2F0ZVByZXZpZXdQcm9wZXJ0eSAhPT0gY3VycmVudFNldHRpbmdzLnRydW5jYXRlUHJldmlld1Byb3BlcnR5IHx8XG5cdFx0XHRcdHRoaXMubGFzdFNldHRpbmdzLmltYWdlUHJvcGVydHkgIT09IGN1cnJlbnRTZXR0aW5ncy5pbWFnZVByb3BlcnR5IHx8XG5cdFx0XHRcdHRoaXMubGFzdFNldHRpbmdzLmltYWdlRm9ybWF0ICE9PSBjdXJyZW50U2V0dGluZ3MuaW1hZ2VGb3JtYXQgfHxcblx0XHRcdFx0dGhpcy5sYXN0U2V0dGluZ3MuZmFsbGJhY2tUb0VtYmVkcyAhPT0gY3VycmVudFNldHRpbmdzLmZhbGxiYWNrVG9FbWJlZHMgfHxcblx0XHRcdFx0dGhpcy5sYXN0U2V0dGluZ3MucHJvcGVydHlEaXNwbGF5MSAhPT0gY3VycmVudFNldHRpbmdzLnByb3BlcnR5RGlzcGxheTEgfHxcblx0XHRcdFx0dGhpcy5sYXN0U2V0dGluZ3MucHJvcGVydHlEaXNwbGF5MiAhPT0gY3VycmVudFNldHRpbmdzLnByb3BlcnR5RGlzcGxheTIgfHxcblx0XHRcdFx0dGhpcy5sYXN0U2V0dGluZ3MucHJvcGVydHlEaXNwbGF5MyAhPT0gY3VycmVudFNldHRpbmdzLnByb3BlcnR5RGlzcGxheTMgfHxcblx0XHRcdFx0dGhpcy5sYXN0U2V0dGluZ3MucHJvcGVydHlEaXNwbGF5NCAhPT0gY3VycmVudFNldHRpbmdzLnByb3BlcnR5RGlzcGxheTQgfHxcblx0XHRcdFx0dGhpcy5sYXN0U2V0dGluZ3MucHJvcGVydHlEaXNwbGF5NSAhPT0gY3VycmVudFNldHRpbmdzLnByb3BlcnR5RGlzcGxheTUgfHxcblx0XHRcdFx0dGhpcy5sYXN0U2V0dGluZ3MucHJvcGVydHlEaXNwbGF5NiAhPT0gY3VycmVudFNldHRpbmdzLnByb3BlcnR5RGlzcGxheTYgfHxcblx0XHRcdFx0dGhpcy5sYXN0U2V0dGluZ3MucHJvcGVydHlEaXNwbGF5NyAhPT0gY3VycmVudFNldHRpbmdzLnByb3BlcnR5RGlzcGxheTcgfHxcblx0XHRcdFx0dGhpcy5sYXN0U2V0dGluZ3MucHJvcGVydHlEaXNwbGF5OCAhPT0gY3VycmVudFNldHRpbmdzLnByb3BlcnR5RGlzcGxheTggfHxcblx0XHRcdFx0dGhpcy5sYXN0U2V0dGluZ3MucHJvcGVydHlEaXNwbGF5OSAhPT0gY3VycmVudFNldHRpbmdzLnByb3BlcnR5RGlzcGxheTkgfHxcblx0XHRcdFx0dGhpcy5sYXN0U2V0dGluZ3MucHJvcGVydHlEaXNwbGF5MTAgIT09IGN1cnJlbnRTZXR0aW5ncy5wcm9wZXJ0eURpc3BsYXkxMCB8fFxuXHRcdFx0XHR0aGlzLmxhc3RTZXR0aW5ncy5wcm9wZXJ0eURpc3BsYXkxMSAhPT0gY3VycmVudFNldHRpbmdzLnByb3BlcnR5RGlzcGxheTExIHx8XG5cdFx0XHRcdHRoaXMubGFzdFNldHRpbmdzLnByb3BlcnR5RGlzcGxheTEyICE9PSBjdXJyZW50U2V0dGluZ3MucHJvcGVydHlEaXNwbGF5MTIgfHxcblx0XHRcdFx0dGhpcy5sYXN0U2V0dGluZ3MucHJvcGVydHlEaXNwbGF5MTMgIT09IGN1cnJlbnRTZXR0aW5ncy5wcm9wZXJ0eURpc3BsYXkxMyB8fFxuXHRcdFx0XHR0aGlzLmxhc3RTZXR0aW5ncy5wcm9wZXJ0eURpc3BsYXkxNCAhPT0gY3VycmVudFNldHRpbmdzLnByb3BlcnR5RGlzcGxheTE0O1xuXG5cdFx0XHRpZiAoc2V0dGluZ3NDaGFuZ2VkKSB7XG5cdFx0XHRcdC8vIENsZWFyIGNhY2hlcyB3aGVuIHJlbGV2YW50IHNldHRpbmdzIGNoYW5nZVxuXHRcdFx0XHRpZiAodGhpcy5sYXN0U2V0dGluZ3MuZGVzY3JpcHRpb25Qcm9wZXJ0eSAhPT0gY3VycmVudFNldHRpbmdzLmRlc2NyaXB0aW9uUHJvcGVydHkgfHxcblx0XHRcdFx0XHR0aGlzLmxhc3RTZXR0aW5ncy5zaG93VGV4dFByZXZpZXcgIT09IGN1cnJlbnRTZXR0aW5ncy5zaG93VGV4dFByZXZpZXcgfHxcblx0XHRcdFx0XHR0aGlzLmxhc3RTZXR0aW5ncy5mYWxsYmFja1RvQ29udGVudCAhPT0gY3VycmVudFNldHRpbmdzLmZhbGxiYWNrVG9Db250ZW50IHx8XG5cdFx0XHRcdFx0dGhpcy5sYXN0U2V0dGluZ3MudHJ1bmNhdGVQcmV2aWV3UHJvcGVydHkgIT09IGN1cnJlbnRTZXR0aW5ncy50cnVuY2F0ZVByZXZpZXdQcm9wZXJ0eSkge1xuXHRcdFx0XHRcdC8vIENsZWFyIHNuaXBwZXQgY2FjaGUgd2hlbiB0ZXh0IHByZXZpZXcgc2V0dGluZ3MgY2hhbmdlXG5cdFx0XHRcdFx0dGhpcy5zbmlwcGV0cyA9IHt9O1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKHRoaXMubGFzdFNldHRpbmdzLmltYWdlUHJvcGVydHkgIT09IGN1cnJlbnRTZXR0aW5ncy5pbWFnZVByb3BlcnR5IHx8XG5cdFx0XHRcdFx0dGhpcy5sYXN0U2V0dGluZ3MuaW1hZ2VGb3JtYXQgIT09IGN1cnJlbnRTZXR0aW5ncy5pbWFnZUZvcm1hdCB8fFxuXHRcdFx0XHRcdHRoaXMubGFzdFNldHRpbmdzLmZhbGxiYWNrVG9FbWJlZHMgIT09IGN1cnJlbnRTZXR0aW5ncy5mYWxsYmFja1RvRW1iZWRzKSB7XG5cdFx0XHRcdFx0Ly8gQ2xlYXIgaW1hZ2UgY2FjaGUgd2hlbiBpbWFnZSBzZXR0aW5ncyBjaGFuZ2Vcblx0XHRcdFx0XHR0aGlzLmltYWdlcyA9IHt9O1xuXHRcdFx0XHRcdHRoaXMuaGFzSW1hZ2VBdmFpbGFibGUgPSB7fTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIFVwZGF0ZSBsYXN0IHNldHRpbmdzXG5cdFx0XHRcdHRoaXMubGFzdFNldHRpbmdzID0ge1xuXHRcdFx0XHRcdGRlc2NyaXB0aW9uUHJvcGVydHk6IGN1cnJlbnRTZXR0aW5ncy5kZXNjcmlwdGlvblByb3BlcnR5LFxuXHRcdFx0XHRcdHNob3dUZXh0UHJldmlldzogY3VycmVudFNldHRpbmdzLnNob3dUZXh0UHJldmlldyxcblx0XHRcdFx0XHRmYWxsYmFja1RvQ29udGVudDogY3VycmVudFNldHRpbmdzLmZhbGxiYWNrVG9Db250ZW50LFxuXHRcdFx0XHRcdHRydW5jYXRlUHJldmlld1Byb3BlcnR5OiBjdXJyZW50U2V0dGluZ3MudHJ1bmNhdGVQcmV2aWV3UHJvcGVydHksXG5cdFx0XHRcdFx0aW1hZ2VQcm9wZXJ0eTogY3VycmVudFNldHRpbmdzLmltYWdlUHJvcGVydHksXG5cdFx0XHRcdFx0aW1hZ2VGb3JtYXQ6IGN1cnJlbnRTZXR0aW5ncy5pbWFnZUZvcm1hdCxcblx0XHRcdFx0XHRmYWxsYmFja1RvRW1iZWRzOiBjdXJyZW50U2V0dGluZ3MuZmFsbGJhY2tUb0VtYmVkcyxcblx0XHRcdFx0XHRwcm9wZXJ0eURpc3BsYXkxOiBjdXJyZW50U2V0dGluZ3MucHJvcGVydHlEaXNwbGF5MSxcblx0XHRcdFx0XHRwcm9wZXJ0eURpc3BsYXkyOiBjdXJyZW50U2V0dGluZ3MucHJvcGVydHlEaXNwbGF5Mixcblx0XHRcdFx0XHRwcm9wZXJ0eURpc3BsYXkzOiBjdXJyZW50U2V0dGluZ3MucHJvcGVydHlEaXNwbGF5Myxcblx0XHRcdFx0XHRwcm9wZXJ0eURpc3BsYXk0OiBjdXJyZW50U2V0dGluZ3MucHJvcGVydHlEaXNwbGF5NCxcblx0XHRcdFx0XHRwcm9wZXJ0eURpc3BsYXk1OiBjdXJyZW50U2V0dGluZ3MucHJvcGVydHlEaXNwbGF5NSxcblx0XHRcdFx0XHRwcm9wZXJ0eURpc3BsYXk2OiBjdXJyZW50U2V0dGluZ3MucHJvcGVydHlEaXNwbGF5Nixcblx0XHRcdFx0XHRwcm9wZXJ0eURpc3BsYXk3OiBjdXJyZW50U2V0dGluZ3MucHJvcGVydHlEaXNwbGF5Nyxcblx0XHRcdFx0XHRwcm9wZXJ0eURpc3BsYXk4OiBjdXJyZW50U2V0dGluZ3MucHJvcGVydHlEaXNwbGF5OCxcblx0XHRcdFx0XHRwcm9wZXJ0eURpc3BsYXk5OiBjdXJyZW50U2V0dGluZ3MucHJvcGVydHlEaXNwbGF5OSxcblx0XHRcdFx0XHRwcm9wZXJ0eURpc3BsYXkxMDogY3VycmVudFNldHRpbmdzLnByb3BlcnR5RGlzcGxheTEwLFxuXHRcdFx0XHRcdHByb3BlcnR5RGlzcGxheTExOiBjdXJyZW50U2V0dGluZ3MucHJvcGVydHlEaXNwbGF5MTEsXG5cdFx0XHRcdFx0cHJvcGVydHlEaXNwbGF5MTI6IGN1cnJlbnRTZXR0aW5ncy5wcm9wZXJ0eURpc3BsYXkxMixcblx0XHRcdFx0XHRwcm9wZXJ0eURpc3BsYXkxMzogY3VycmVudFNldHRpbmdzLnByb3BlcnR5RGlzcGxheTEzLFxuXHRcdFx0XHRcdHByb3BlcnR5RGlzcGxheTE0OiBjdXJyZW50U2V0dGluZ3MucHJvcGVydHlEaXNwbGF5MTQsXG5cdFx0XHRcdH07XG5cblx0XHRcdFx0Ly8gVHJpZ2dlciB2aWV3IHJlZnJlc2hcblx0XHRcdFx0dGhpcy5vbkRhdGFVcGRhdGVkKCk7XG5cdFx0XHR9XG5cdFx0fSwgMTAwKTtcblxuXHRcdC8vIFJlZ2lzdGVyIGNsZWFudXBcblx0XHR0aGlzLnJlZ2lzdGVyKCgpID0+IHtcblx0XHRcdGlmICh0aGlzLnNldHRpbmdzUG9sbEludGVydmFsICE9PSBudWxsKSB7XG5cdFx0XHRcdHdpbmRvdy5jbGVhckludGVydmFsKHRoaXMuc2V0dGluZ3NQb2xsSW50ZXJ2YWwpO1xuXHRcdFx0XHR0aGlzLnNldHRpbmdzUG9sbEludGVydmFsID0gbnVsbDtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBQcmVsb2FkIE1EWCBmcm9udG1hdHRlciBmb3IgYWxsIHZpc2libGUgZW50cmllcyB0byBwcmV2ZW50IGZsYXNoaW5nXG5cdCAqIFRoaXMgZW5zdXJlcyBhbGwgTURYIGRhdGEgaXMgYXZhaWxhYmxlIHN5bmNocm9ub3VzbHkgZHVyaW5nIGNhcmQgdHJhbnNmb3JtYXRpb25cblx0ICovXG5cdHByaXZhdGUgYXN5bmMgcHJlbG9hZE1keEZyb250bWF0dGVyKGVudHJpZXM6IEJhc2VzRW50cnlbXSk6IFByb21pc2U8dm9pZD4ge1xuXHRcdC8vIEZpbHRlciB0byBvbmx5IE1EWCBmaWxlcyB0aGF0IGFyZW4ndCBhbHJlYWR5IGNhY2hlZFxuXHRcdGNvbnN0IG1keEVudHJpZXMgPSBlbnRyaWVzLmZpbHRlcihlbnRyeSA9PiB7XG5cdFx0XHRjb25zdCBmaWxlID0gdGhpcy5hcHAudmF1bHQuZ2V0QWJzdHJhY3RGaWxlQnlQYXRoKGVudHJ5LmZpbGUucGF0aCk7XG5cdFx0XHRyZXR1cm4gZmlsZSBpbnN0YW5jZW9mIFRGaWxlICYmIGZpbGUuZXh0ZW5zaW9uID09PSAnbWR4JyAmJiAhKGVudHJ5LmZpbGUucGF0aCBpbiB0aGlzLm1keEZyb250bWF0dGVyQ2FjaGUpO1xuXHRcdH0pO1xuXG5cdFx0aWYgKG1keEVudHJpZXMubGVuZ3RoID09PSAwKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gTG9hZCBhbGwgTURYIGZyb250bWF0dGVyIGluIHBhcmFsbGVsXG5cdFx0YXdhaXQgUHJvbWlzZS5hbGwoXG5cdFx0XHRtZHhFbnRyaWVzLm1hcChhc3luYyAoZW50cnkpID0+IHtcblx0XHRcdFx0Y29uc3QgZmlsZSA9IHRoaXMuYXBwLnZhdWx0LmdldEFic3RyYWN0RmlsZUJ5UGF0aChlbnRyeS5maWxlLnBhdGgpO1xuXHRcdFx0XHRpZiAoZmlsZSBpbnN0YW5jZW9mIFRGaWxlKSB7XG5cdFx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRcdGNvbnN0IGZyb250bWF0dGVyID0gYXdhaXQgZ2V0RmlsZUZyb250bWF0dGVyKHRoaXMuYXBwLCBmaWxlKTtcblx0XHRcdFx0XHRcdHRoaXMubWR4RnJvbnRtYXR0ZXJDYWNoZVtlbnRyeS5maWxlLnBhdGhdID0gZnJvbnRtYXR0ZXI7XG5cdFx0XHRcdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdFx0XHRcdGNvbnNvbGUuZXJyb3IoYEJhc2VzIENNUzogRXJyb3IgcHJlbG9hZGluZyBwcm9wZXJ0aWVzIGZvciAke2VudHJ5LmZpbGUucGF0aH06YCwgZXJyb3IpO1xuXHRcdFx0XHRcdFx0dGhpcy5tZHhGcm9udG1hdHRlckNhY2hlW2VudHJ5LmZpbGUucGF0aF0gPSBudWxsO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSlcblx0XHQpO1xuXHR9XG5cblx0cHJpdmF0ZSBhc3luYyBsb2FkQ29udGVudEZvckVudHJpZXMoXG5cdFx0ZW50cmllczogQmFzZXNFbnRyeVtdLFxuXHRcdHNldHRpbmdzOiBDTVNTZXR0aW5nc1xuXHQpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHQvLyBMb2FkIHNuaXBwZXRzIGZvciB0ZXh0IHByZXZpZXdcblx0XHRpZiAoc2V0dGluZ3Muc2hvd1RleHRQcmV2aWV3KSB7XG5cdFx0XHRjb25zdCBzbmlwcGV0RW50cmllc1Byb21pc2VzID0gZW50cmllc1xuXHRcdFx0XHQuZmlsdGVyKGVudHJ5ID0+ICEoZW50cnkuZmlsZS5wYXRoIGluIHRoaXMuc25pcHBldHMpKVxuXHRcdFx0XHQubWFwKGFzeW5jIGVudHJ5ID0+IHtcblx0XHRcdFx0XHRjb25zdCBmaWxlID0gdGhpcy5hcHAudmF1bHQuZ2V0QWJzdHJhY3RGaWxlQnlQYXRoKGVudHJ5LmZpbGUucGF0aCk7XG5cdFx0XHRcdFx0aWYgKCEoZmlsZSBpbnN0YW5jZW9mIFRGaWxlKSkgcmV0dXJuIG51bGw7XG5cdFx0XHRcdFx0Y29uc3QgZGVzY1ZhbHVlID0gYXdhaXQgZ2V0Rmlyc3RCYXNlc1Byb3BlcnR5VmFsdWUoZW50cnksIHNldHRpbmdzLmRlc2NyaXB0aW9uUHJvcGVydHksIHRoaXMuYXBwKSBhcyB7IGRhdGE/OiB1bmtub3duIH0gfCBudWxsO1xuXHRcdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0XHRwYXRoOiBlbnRyeS5maWxlLnBhdGgsXG5cdFx0XHRcdFx0XHRmaWxlLFxuXHRcdFx0XHRcdFx0ZGVzY3JpcHRpb25EYXRhOiBkZXNjVmFsdWU/LmRhdGFcblx0XHRcdFx0XHR9O1xuXHRcdFx0XHR9KTtcblx0XHRcdGNvbnN0IHNuaXBwZXRFbnRyaWVzID0gKGF3YWl0IFByb21pc2UuYWxsKHNuaXBwZXRFbnRyaWVzUHJvbWlzZXMpKVxuXHRcdFx0XHQuZmlsdGVyKChlKTogZSBpcyB7IHBhdGg6IHN0cmluZzsgZmlsZTogVEZpbGU7IGRlc2NyaXB0aW9uRGF0YTogdW5rbm93biB9ID0+IGUgIT09IG51bGwpO1xuXG5cdFx0XHRpZiAoc25pcHBldEVudHJpZXMubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRhd2FpdCBsb2FkU25pcHBldHNGb3JFbnRyaWVzKFxuXHRcdFx0XHRcdHNuaXBwZXRFbnRyaWVzLFxuXHRcdFx0XHRcdHNldHRpbmdzLmZhbGxiYWNrVG9Db250ZW50LFxuXHRcdFx0XHRcdGZhbHNlLFxuXHRcdFx0XHRcdHRoaXMuYXBwLFxuXHRcdFx0XHRcdHRoaXMuc25pcHBldHMsXG5cdFx0XHRcdFx0c2V0dGluZ3MudHJ1bmNhdGVQcmV2aWV3UHJvcGVydHlcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBMb2FkIGltYWdlcyBmb3IgdGh1bWJuYWlsc1xuXHRcdGlmIChzZXR0aW5ncy5pbWFnZUZvcm1hdCAhPT0gJ25vbmUnKSB7XG5cdFx0XHRjb25zdCBpbWFnZUVudHJpZXNQcm9taXNlcyA9IGVudHJpZXNcblx0XHRcdFx0LmZpbHRlcihlbnRyeSA9PiAhKGVudHJ5LmZpbGUucGF0aCBpbiB0aGlzLmltYWdlcykpXG5cdFx0XHRcdC5tYXAoYXN5bmMgZW50cnkgPT4ge1xuXHRcdFx0XHRcdGNvbnN0IGZpbGUgPSB0aGlzLmFwcC52YXVsdC5nZXRBYnN0cmFjdEZpbGVCeVBhdGgoZW50cnkuZmlsZS5wYXRoKTtcblx0XHRcdFx0XHRpZiAoIShmaWxlIGluc3RhbmNlb2YgVEZpbGUpKSByZXR1cm4gbnVsbDtcblx0XHRcdFx0XHRjb25zdCBpbWFnZVByb3BlcnR5VmFsdWVzID0gYXdhaXQgZ2V0QWxsQmFzZXNJbWFnZVByb3BlcnR5VmFsdWVzKGVudHJ5LCBzZXR0aW5ncy5pbWFnZVByb3BlcnR5LCB0aGlzLmFwcCk7XG5cdFx0XHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0XHRcdHBhdGg6IGVudHJ5LmZpbGUucGF0aCxcblx0XHRcdFx0XHRcdGZpbGUsXG5cdFx0XHRcdFx0XHRpbWFnZVByb3BlcnR5VmFsdWVzOiBpbWFnZVByb3BlcnR5VmFsdWVzIGFzIHVua25vd25bXVxuXHRcdFx0XHRcdH07XG5cdFx0XHRcdH0pO1xuXHRcdFx0Y29uc3QgaW1hZ2VFbnRyaWVzID0gKGF3YWl0IFByb21pc2UuYWxsKGltYWdlRW50cmllc1Byb21pc2VzKSlcblx0XHRcdFx0LmZpbHRlcigoZSk6IGUgaXMgTm9uTnVsbGFibGU8dHlwZW9mIGU+ID0+IGUgIT09IG51bGwpO1xuXG5cdFx0XHRpZiAoaW1hZ2VFbnRyaWVzLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0YXdhaXQgbG9hZEltYWdlc0ZvckVudHJpZXMoXG5cdFx0XHRcdFx0aW1hZ2VFbnRyaWVzLFxuXHRcdFx0XHRcdHNldHRpbmdzLmZhbGxiYWNrVG9FbWJlZHMsXG5cdFx0XHRcdFx0dGhpcy5hcHAsXG5cdFx0XHRcdFx0dGhpcy5pbWFnZXMsXG5cdFx0XHRcdFx0dGhpcy5oYXNJbWFnZUF2YWlsYWJsZVxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBEaXJlY3QgZGVsZXRlIGhhbmRsZXIgZm9yIGNvbnRleHQgbWVudSAtIGRlbGV0ZXMgYSBzaW5nbGUgZmlsZSB3aXRob3V0IHNlbGVjdGlvblxuXHQgKi9cblx0cHJpdmF0ZSBnZXREaXJlY3REZWxldGVIYW5kbGVyKGZpbGVQYXRoOiBzdHJpbmcpOiAoKSA9PiBQcm9taXNlPHZvaWQ+IHtcblx0XHRyZXR1cm4gYXN5bmMgKCkgPT4ge1xuXHRcdFx0Y29uc3QgeyBwcmVwYXJlRGVsZXRpb25QcmV2aWV3LCBleGVjdXRlU21hcnREZWxldGlvbiB9ID0gYXdhaXQgaW1wb3J0KCcuLi91dGlscy9zbWFydC1kZWxldGlvbicpO1xuXHRcdFx0Y29uc3QgeyBEZWxldGlvblByZXZpZXdNb2RhbCB9ID0gYXdhaXQgaW1wb3J0KCcuLi9jb21wb25lbnRzL2RlbGV0aW9uLXByZXZpZXcnKTtcblxuXHRcdFx0aWYgKHRoaXMucGx1Z2luLnNldHRpbmdzLmNvbmZpcm1EZWxldGlvbnMpIHtcblx0XHRcdFx0Y29uc3QgcHJldmlldyA9IGF3YWl0IHByZXBhcmVEZWxldGlvblByZXZpZXcoXG5cdFx0XHRcdFx0dGhpcy5hcHAsXG5cdFx0XHRcdFx0W2ZpbGVQYXRoXSxcblx0XHRcdFx0XHR0aGlzLnBsdWdpbi5zZXR0aW5nc1xuXHRcdFx0XHQpO1xuXG5cdFx0XHRcdGNvbnN0IG1vZGFsID0gbmV3IERlbGV0aW9uUHJldmlld01vZGFsKFxuXHRcdFx0XHRcdHRoaXMuYXBwLFxuXHRcdFx0XHRcdHByZXZpZXcsXG5cdFx0XHRcdFx0KCkgPT4ge1xuXHRcdFx0XHRcdFx0Ly8gUmVmcmVzaCB2aWV3IGFmdGVyIGRlbGV0aW9uXG5cdFx0XHRcdFx0XHR0aGlzLm9uRGF0YVVwZGF0ZWQoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdCk7XG5cdFx0XHRcdG1vZGFsLm9wZW4oKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdC8vIERpcmVjdCBkZWxldGlvbiB3aXRob3V0IGNvbmZpcm1hdGlvblxuXHRcdFx0XHRjb25zdCBwcmV2aWV3ID0gYXdhaXQgcHJlcGFyZURlbGV0aW9uUHJldmlldyhcblx0XHRcdFx0XHR0aGlzLmFwcCxcblx0XHRcdFx0XHRbZmlsZVBhdGhdLFxuXHRcdFx0XHRcdHRoaXMucGx1Z2luLnNldHRpbmdzXG5cdFx0XHRcdCk7XG5cdFx0XHRcdGF3YWl0IGV4ZWN1dGVTbWFydERlbGV0aW9uKHRoaXMuYXBwLCBwcmV2aWV3KTtcblx0XHRcdFx0Ly8gUmVmcmVzaCB2aWV3IGFmdGVyIGRlbGV0aW9uXG5cdFx0XHRcdHRoaXMub25EYXRhVXBkYXRlZCgpO1xuXHRcdFx0fVxuXHRcdH07XG5cdH1cblxuXHRwcml2YXRlIHJlbmRlckNhcmQoXG5cdFx0Y29udGFpbmVyOiBIVE1MRWxlbWVudCxcblx0XHRjYXJkOiBDYXJkRGF0YSxcblx0XHRlbnRyeTogQmFzZXNFbnRyeSxcblx0XHRpbmRleDogbnVtYmVyLFxuXHRcdHNldHRpbmdzOiBDTVNTZXR0aW5nc1xuXHQpOiB2b2lkIHtcblx0XHRjb25zdCBpc1NlbGVjdGVkID0gdGhpcy5zZWxlY3RlZEZpbGVzLmhhcyhjYXJkLnBhdGgpO1xuXHRcdHJldHVybiB0aGlzLmNhcmRSZW5kZXJlci5yZW5kZXJDYXJkKFxuXHRcdFx0Y29udGFpbmVyLFxuXHRcdFx0Y2FyZCxcblx0XHRcdGVudHJ5LFxuXHRcdFx0c2V0dGluZ3MsXG5cdFx0XHR0aGlzLFxuXHRcdFx0aXNTZWxlY3RlZCxcblx0XHRcdChwYXRoOiBzdHJpbmcsIHNlbGVjdGVkOiBib29sZWFuLCBzaGlmdEtleT86IGJvb2xlYW4pID0+IHtcblx0XHRcdFx0dGhpcy5oYW5kbGVTZWxlY3Rpb25DaGFuZ2UocGF0aCwgc2VsZWN0ZWQsIHNoaWZ0S2V5KTtcblx0XHRcdH0sXG5cdFx0XHQocGF0aDogc3RyaW5nLCBwcm9wZXJ0eTogc3RyaW5nLCB2YWx1ZTogdW5rbm93bikgPT4ge1xuXHRcdFx0XHR2b2lkIHRoaXMuaGFuZGxlUHJvcGVydHlUb2dnbGUocGF0aCwgcHJvcGVydHksIHZhbHVlKTtcblx0XHRcdH0sXG5cdFx0XHR7IGhhbmRsZURlbGV0ZTogdGhpcy5nZXREaXJlY3REZWxldGVIYW5kbGVyKGNhcmQucGF0aCkgfVxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICogVXBkYXRlIGNhcmQgaW1hZ2Ugd2hlbiBpdCBiZWNvbWVzIGF2YWlsYWJsZVxuXHQgKiBDYWxsZWQgYXN5bmNocm9ub3VzbHkgYWZ0ZXIgaW1hZ2VzIGxvYWRcblx0ICovXG5cdHByaXZhdGUgdXBkYXRlQ2FyZEltYWdlKHBhdGg6IHN0cmluZywgaW1hZ2VVcmw6IHN0cmluZyB8IHN0cmluZ1tdKTogdm9pZCB7XG5cdFx0Y29uc3QgY2FyZEVsID0gdGhpcy5jb250YWluZXJFbC5xdWVyeVNlbGVjdG9yKGAuY2FyZFtkYXRhLXBhdGg9XCIke3BhdGh9XCJdYCkgYXMgSFRNTEVsZW1lbnQ7XG5cdFx0aWYgKCFjYXJkRWwpIHJldHVybjtcblxuXHRcdGNvbnN0IHVybCA9IEFycmF5LmlzQXJyYXkoaW1hZ2VVcmwpID8gaW1hZ2VVcmxbMF0gOiBpbWFnZVVybDtcblx0XHRpZiAoIXVybCkgcmV0dXJuO1xuXG5cdFx0Ly8gQ2hlY2sgaWYgaW1hZ2UtZW1iZWQgY29udGFpbmVyIGV4aXN0c1xuXHRcdGxldCBpbWFnZUVtYmVkQ29udGFpbmVyID0gY2FyZEVsLnF1ZXJ5U2VsZWN0b3IoJy5pbWFnZS1lbWJlZCcpIGFzIEhUTUxFbGVtZW50O1xuXHRcdGlmICghaW1hZ2VFbWJlZENvbnRhaW5lcikge1xuXHRcdFx0Ly8gTm8gaW1hZ2UgY29udGFpbmVyIC0gbmVlZCB0byBjcmVhdGUgaXRcblx0XHRcdGNvbnN0IHBsYWNlaG9sZGVyID0gY2FyZEVsLnF1ZXJ5U2VsZWN0b3IoJy5jYXJkLWNvdmVyLXBsYWNlaG9sZGVyLCAuY2FyZC10aHVtYm5haWwtcGxhY2Vob2xkZXInKTtcblx0XHRcdGNvbnN0IGlzVGh1bWJuYWlsID0gY2FyZEVsLmNsYXNzTGlzdC5jb250YWlucygnaW1hZ2UtZm9ybWF0LXRodW1ibmFpbCcpO1xuXHRcdFx0Y29uc3QgaXNDb3ZlciA9IGNhcmRFbC5jbGFzc0xpc3QuY29udGFpbnMoJ2ltYWdlLWZvcm1hdC1jb3ZlcicpO1xuXG5cdFx0XHRpZiAocGxhY2Vob2xkZXIpIHtcblx0XHRcdFx0Ly8gUmVwbGFjZSBwbGFjZWhvbGRlclxuXHRcdFx0XHRjb25zdCBleGlzdGluZ0JhZGdlID0gcGxhY2Vob2xkZXIucXVlcnlTZWxlY3RvcignLmNhcmQtc3RhdHVzLWJhZGdlJyk7XG5cdFx0XHRcdGNvbnN0IGltYWdlQ2xhc3NOYW1lID0gcGxhY2Vob2xkZXIuY2xhc3NMaXN0LmNvbnRhaW5zKCdjYXJkLWNvdmVyLXBsYWNlaG9sZGVyJykgPyAnY2FyZC1jb3ZlcicgOiAnY2FyZC10aHVtYm5haWwnO1xuXHRcdFx0XHRjb25zdCBpbWFnZUVsID0gcGxhY2Vob2xkZXIucGFyZW50RWxlbWVudD8uY3JlYXRlRGl2KGltYWdlQ2xhc3NOYW1lKTtcblx0XHRcdFx0aWYgKGltYWdlRWwpIHtcblx0XHRcdFx0XHRpbWFnZUVtYmVkQ29udGFpbmVyID0gaW1hZ2VFbC5jcmVhdGVEaXYoJ2ltYWdlLWVtYmVkJyk7XG5cdFx0XHRcdFx0aWYgKGV4aXN0aW5nQmFkZ2UpIHtcblx0XHRcdFx0XHRcdGltYWdlRWwuYXBwZW5kQ2hpbGQoZXhpc3RpbmdCYWRnZSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHBsYWNlaG9sZGVyLnJlbW92ZSgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2UgaWYgKGlzVGh1bWJuYWlsKSB7XG5cdFx0XHRcdC8vIEZvciB0aHVtYm5haWxzLCBjcmVhdGUgZWxlbWVudCBkaXJlY3RseSBpbiBjb250ZW50Q29udGFpbmVyIChubyBwbGFjZWhvbGRlcnMpXG5cdFx0XHRcdGNvbnN0IGNvbnRlbnRDb250YWluZXIgPSBjYXJkRWwucXVlcnlTZWxlY3RvcignLmNhcmQtY29udGVudCcpIGFzIEhUTUxFbGVtZW50O1xuXHRcdFx0XHRpZiAoY29udGVudENvbnRhaW5lcikge1xuXHRcdFx0XHRcdC8vIEluc2VydCB0aHVtYm5haWwgQkVGT1JFIHRleHQtd3JhcHBlciBmb3IgcHJvcGVyIHBvc2l0aW9uaW5nXG5cdFx0XHRcdFx0Y29uc3QgdGV4dFdyYXBwZXIgPSBjb250ZW50Q29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoJy5jYXJkLXRleHQtd3JhcHBlcicpO1xuXHRcdFx0XHRcdGNvbnN0IGltYWdlRWwgPSB0ZXh0V3JhcHBlclxuXHRcdFx0XHRcdFx0PyBjb250ZW50Q29udGFpbmVyLmluc2VydEJlZm9yZShjb250ZW50Q29udGFpbmVyLmNyZWF0ZURpdignY2FyZC10aHVtYm5haWwnKSwgdGV4dFdyYXBwZXIpXG5cdFx0XHRcdFx0XHQ6IGNvbnRlbnRDb250YWluZXIuY3JlYXRlRGl2KCdjYXJkLXRodW1ibmFpbCcpO1xuXHRcdFx0XHRcdGltYWdlRW1iZWRDb250YWluZXIgPSBpbWFnZUVsLmNyZWF0ZURpdignaW1hZ2UtZW1iZWQnKTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIGlmIChpc0NvdmVyKSB7XG5cdFx0XHRcdC8vIEZvciBjb3ZlciwgY3JlYXRlIGluIGNvbnRlbnRDb250YWluZXJcblx0XHRcdFx0Y29uc3QgY29udGVudENvbnRhaW5lciA9IGNhcmRFbC5xdWVyeVNlbGVjdG9yKCcuY2FyZC1jb250ZW50JykgYXMgSFRNTEVsZW1lbnQ7XG5cdFx0XHRcdGlmIChjb250ZW50Q29udGFpbmVyKSB7XG5cdFx0XHRcdFx0Y29uc3QgaW1hZ2VFbCA9IGNvbnRlbnRDb250YWluZXIuY3JlYXRlRGl2KCdjYXJkLWNvdmVyJyk7XG5cdFx0XHRcdFx0aW1hZ2VFbWJlZENvbnRhaW5lciA9IGltYWdlRWwuY3JlYXRlRGl2KCdpbWFnZS1lbWJlZCcpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gVXBkYXRlIGJhY2tncm91bmQtaW1hZ2Ugb24gdGhlIGNvbnRhaW5lclxuXHRcdGlmIChpbWFnZUVtYmVkQ29udGFpbmVyKSB7XG5cdFx0XHQvLyBDb252ZXJ0IEdJRiB0byBzdGF0aWMgaWYgc2V0dGluZyBpcyBlbmFibGVkXG5cdFx0XHR2b2lkIChhc3luYyAoKSA9PiB7XG5cdFx0XHRcdGNvbnN0IGZpbmFsVXJsID0gYXdhaXQgY29udmVydEdpZlRvU3RhdGljKHVybCwgdGhpcy5wbHVnaW4uc2V0dGluZ3MuZm9yY2VTdGF0aWNHaWZJbWFnZXMpO1xuXHRcdFx0XHRpbWFnZUVtYmVkQ29udGFpbmVyLnN0eWxlLmJhY2tncm91bmRJbWFnZSA9IGB1cmwoXCIke2ZpbmFsVXJsfVwiKWA7XG5cdFx0XHR9KSgpO1xuXG5cdFx0XHQvLyBTZXQgaW5pdGlhbCBiYWNrZ3JvdW5kIGltYWdlICh3aWxsIGJlIHVwZGF0ZWQgaWYgR0lGIGNvbnZlcnNpb24gaXMgbmVlZGVkKVxuXHRcdFx0aW1hZ2VFbWJlZENvbnRhaW5lci5zdHlsZS5iYWNrZ3JvdW5kSW1hZ2UgPSBgdXJsKFwiJHt1cmx9XCIpYDtcblx0XHRcdHNldENzc1Byb3BzKGltYWdlRW1iZWRDb250YWluZXIsIHtcblx0XHRcdFx0YmFja2dyb3VuZFNpemU6ICdjb3ZlcicsXG5cdFx0XHRcdGJhY2tncm91bmRQb3NpdGlvbjogJ2NlbnRlciBjZW50ZXInLFxuXHRcdFx0XHRiYWNrZ3JvdW5kUmVwZWF0OiAnbm8tcmVwZWF0J1xuXHRcdFx0fSk7XG5cdFx0fVxuXHR9XG5cblx0cHJpdmF0ZSBnZXRTb3J0TWV0aG9kKCk6IHN0cmluZyB7XG5cdFx0Y29uc3Qgc29ydENvbmZpZ3MgPSB0aGlzLmNvbmZpZy5nZXRTb3J0KCk7XG5cdFx0aWYgKHNvcnRDb25maWdzICYmIHNvcnRDb25maWdzLmxlbmd0aCA+IDApIHtcblx0XHRcdGNvbnN0IGZpcnN0U29ydCA9IHNvcnRDb25maWdzWzBdO1xuXHRcdFx0Y29uc3QgcHJvcGVydHkgPSBmaXJzdFNvcnQucHJvcGVydHk7XG5cdFx0XHRjb25zdCBkaXJlY3Rpb24gPSBmaXJzdFNvcnQuZGlyZWN0aW9uLnRvTG93ZXJDYXNlKCk7XG5cdFx0XHRpZiAocHJvcGVydHkuaW5jbHVkZXMoJ2N0aW1lJykpIHtcblx0XHRcdFx0cmV0dXJuIGBjdGltZS0ke2RpcmVjdGlvbn1gO1xuXHRcdFx0fVxuXHRcdFx0aWYgKHByb3BlcnR5LmluY2x1ZGVzKCdtdGltZScpKSB7XG5cdFx0XHRcdHJldHVybiBgbXRpbWUtJHtkaXJlY3Rpb259YDtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuICdtdGltZS1kZXNjJztcblx0fVxuXG5cblxuXHRwcml2YXRlIGhhbmRsZVNlbGVjdGlvbkNoYW5nZShwYXRoOiBzdHJpbmcsIHNlbGVjdGVkOiBib29sZWFuLCBzaGlmdEtleT86IGJvb2xlYW4pOiB2b2lkIHtcblx0XHRpZiAoc2hpZnRLZXkgJiYgdGhpcy5sYXN0Q2xpY2tlZFBhdGggJiYgdGhpcy5sYXN0Q2xpY2tlZFBhdGggIT09IHBhdGgpIHtcblx0XHRcdC8vIEltcGxlbWVudCByYW5nZSBzZWxlY3Rpb25cblx0XHRcdGNvbnN0IHN0YXJ0ID0gdGhpcy5sYXN0VmlzaWJsZVBhdGhzLmluZGV4T2YodGhpcy5sYXN0Q2xpY2tlZFBhdGgpO1xuXHRcdFx0Y29uc3QgZW5kID0gdGhpcy5sYXN0VmlzaWJsZVBhdGhzLmluZGV4T2YocGF0aCk7XG5cblx0XHRcdGlmIChzdGFydCAhPT0gLTEgJiYgZW5kICE9PSAtMSkge1xuXHRcdFx0XHRjb25zdCBtaW4gPSBNYXRoLm1pbihzdGFydCwgZW5kKTtcblx0XHRcdFx0Y29uc3QgbWF4ID0gTWF0aC5tYXgoc3RhcnQsIGVuZCk7XG5cdFx0XHRcdGNvbnN0IHBhdGhzVG9Ub2dnbGUgPSB0aGlzLmxhc3RWaXNpYmxlUGF0aHMuc2xpY2UobWluLCBtYXggKyAxKTtcblxuXHRcdFx0XHRwYXRoc1RvVG9nZ2xlLmZvckVhY2gocCA9PiB7XG5cdFx0XHRcdFx0aWYgKHNlbGVjdGVkKSB7XG5cdFx0XHRcdFx0XHR0aGlzLnNlbGVjdGVkRmlsZXMuYWRkKHApO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHR0aGlzLnNlbGVjdGVkRmlsZXMuZGVsZXRlKHApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdGlmIChzZWxlY3RlZCkge1xuXHRcdFx0XHR0aGlzLnNlbGVjdGVkRmlsZXMuYWRkKHBhdGgpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dGhpcy5zZWxlY3RlZEZpbGVzLmRlbGV0ZShwYXRoKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHR0aGlzLmxhc3RDbGlja2VkUGF0aCA9IHBhdGg7XG5cblx0XHQvLyBBbHdheXMgdXBkYXRlIFVJIHdoZW4gc2VsZWN0aW9uIGNoYW5nZXMgLSB0aGlzIHdpbGwgaGlkZSB0b29sYmFyIGlmIHNlbGVjdGlvbiBpcyBlbXB0eVxuXHRcdHRoaXMudXBkYXRlU2VsZWN0aW9uVUkoKTtcblxuXHRcdC8vIEZvcmNlIGhpZGUgdG9vbGJhciBpbW1lZGlhdGVseSBpZiBzZWxlY3Rpb24gaXMgZW1wdHlcblx0XHQvLyBEbyB0aGlzIGFmdGVyIHVwZGF0ZVNlbGVjdGlvblVJIHRvIGVuc3VyZSBpdCB0YWtlcyBwcmVjZWRlbmNlXG5cdFx0aWYgKHRoaXMuc2VsZWN0ZWRGaWxlcy5zaXplID09PSAwKSB7XG5cdFx0XHRpZiAodGhpcy5idWxrVG9vbGJhcikge1xuXHRcdFx0XHQvLyBGb3JjZSBpbW1lZGlhdGUgaGlkZSB3aXRob3V0IHdhaXRpbmcgZm9yIHRyYW5zaXRpb25zXG5cdFx0XHRcdHRoaXMuYnVsa1Rvb2xiYXIuaGlkZSgpO1xuXHRcdFx0XHQvLyBBbHNvIGRpcmVjdGx5IGhpZGUgdGhlIGVsZW1lbnQgYXMgYSBiYWNrdXBcblx0XHRcdFx0Y29uc3QgdG9vbGJhckVsID0gdGhpcy5jb250YWluZXJFbC5xdWVyeVNlbGVjdG9yKCcuYmFzZXMtY21zLWJ1bGstdG9vbGJhcicpO1xuXHRcdFx0XHRpZiAodG9vbGJhckVsIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHtcblx0XHRcdFx0XHR0b29sYmFyRWwucmVtb3ZlQ2xhc3MoJ2Jhc2VzLWNtcy1idWxrLXRvb2xiYXItdmlzaWJsZScpO1xuXHRcdFx0XHRcdHRvb2xiYXJFbC5hZGRDbGFzcygnYmFzZXMtY21zLWJ1bGstdG9vbGJhci1oaWRkZW4nKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHByaXZhdGUgYXN5bmMgaGFuZGxlUHJvcGVydHlUb2dnbGUocGF0aDogc3RyaW5nLCBwcm9wZXJ0eTogc3RyaW5nLCB2YWx1ZTogdW5rbm93bik6IFByb21pc2U8dm9pZD4ge1xuXHRcdGlmICh0aGlzLnByb3BlcnR5VG9nZ2xlSGFuZGxlcikge1xuXHRcdFx0YXdhaXQgdGhpcy5wcm9wZXJ0eVRvZ2dsZUhhbmRsZXIuaGFuZGxlUHJvcGVydHlUb2dnbGUocGF0aCwgcHJvcGVydHksIHZhbHVlKTtcblx0XHR9XG5cdH1cblxuXHRwdWJsaWMgc2VsZWN0QWxsKCk6IHZvaWQge1xuXHRcdHRoaXMubGFzdFZpc2libGVQYXRocy5mb3JFYWNoKHBhdGggPT4ge1xuXHRcdFx0dGhpcy5zZWxlY3RlZEZpbGVzLmFkZChwYXRoKTtcblx0XHR9KTtcblx0XHR0aGlzLnVwZGF0ZVNlbGVjdGlvblVJKCk7XG5cdH1cblxuXHRwdWJsaWMgZGVzZWxlY3RBbGwoKTogdm9pZCB7XG5cdFx0Ly8gVXBkYXRlIHZpc3VhbCBzdGF0ZSBvZiBjdXJyZW50bHkgc2VsZWN0ZWQgY2FyZHMgYmVmb3JlIGNsZWFyaW5nIHRoZSBzZXRcblx0XHRjb25zdCBjYXJkcyA9IHRoaXMuY29udGFpbmVyRWwucXVlcnlTZWxlY3RvckFsbCgnLmJhc2VzLWNtcy1jYXJkLnNlbGVjdGVkJyk7XG5cdFx0Y2FyZHMuZm9yRWFjaCgoY2FyZEVsKSA9PiB7XG5cdFx0XHRjYXJkRWwucmVtb3ZlQ2xhc3MoJ3NlbGVjdGVkJyk7XG5cdFx0XHRjb25zdCBjaGVja2JveCA9IGNhcmRFbC5xdWVyeVNlbGVjdG9yKCdpbnB1dFt0eXBlPVwiY2hlY2tib3hcIl0uc2VsZWN0aW9uLWNoZWNrYm94JykgYXMgSFRNTElucHV0RWxlbWVudDtcblx0XHRcdGlmIChjaGVja2JveCkge1xuXHRcdFx0XHRjaGVja2JveC5jaGVja2VkID0gZmFsc2U7XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHR0aGlzLnNlbGVjdGVkRmlsZXMuY2xlYXIoKTtcblx0XHR0aGlzLmxhc3RDbGlja2VkUGF0aCA9IG51bGw7XG5cdFx0dGhpcy51cGRhdGVTZWxlY3Rpb25VSSgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFVwZGF0ZSBjaGVja2JveCBhbmQgY2xhc3MgZm9yIGEgc3BlY2lmaWMgY2FyZCBpbiB0aGUgRE9NXG5cdCAqL1xuXHRwcml2YXRlIHVwZGF0ZUNhcmRDaGVja2JveFN0YXRlKHBhdGg6IHN0cmluZywgc2VsZWN0ZWQ6IGJvb2xlYW4pOiB2b2lkIHtcblx0XHRjb25zdCBjYXJkRWwgPSB0aGlzLmNvbnRhaW5lckVsLnF1ZXJ5U2VsZWN0b3IoYC5iYXNlcy1jbXMtY2FyZFtkYXRhLXBhdGg9XCIke3BhdGh9XCJdYCk7XG5cdFx0aWYgKGNhcmRFbCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSB7XG5cdFx0XHRpZiAoc2VsZWN0ZWQpIHtcblx0XHRcdFx0Y2FyZEVsLmFkZENsYXNzKCdzZWxlY3RlZCcpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y2FyZEVsLnJlbW92ZUNsYXNzKCdzZWxlY3RlZCcpO1xuXHRcdFx0fVxuXHRcdFx0Y29uc3QgY2hlY2tib3ggPSBjYXJkRWwucXVlcnlTZWxlY3RvcignaW5wdXRbdHlwZT1cImNoZWNrYm94XCJdLnNlbGVjdGlvbi1jaGVja2JveCcpIGFzIEhUTUxJbnB1dEVsZW1lbnQ7XG5cdFx0XHRpZiAoY2hlY2tib3gpIHtcblx0XHRcdFx0Y2hlY2tib3guY2hlY2tlZCA9IHNlbGVjdGVkO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHQvKipcblx0ICogUmVmcmVzaCB0aGUgdG9vbGJhciB3aGVuIHNldHRpbmdzIGNoYW5nZVxuXHQgKiBDYWxsZWQgZnJvbSBzZXR0aW5ncyB0YWIgd2hlbiB0b29sYmFyIGJ1dHRvbiB2aXNpYmlsaXR5IHNldHRpbmdzIGFyZSB1cGRhdGVkXG5cdCAqL1xuXHRyZWZyZXNoVG9vbGJhcigpOiB2b2lkIHtcblx0XHRpZiAodGhpcy5idWxrVG9vbGJhcikge1xuXHRcdFx0Y29uc3QgY3VycmVudENvdW50ID0gdGhpcy5zZWxlY3RlZEZpbGVzLnNpemU7XG5cdFx0XHR0aGlzLmJ1bGtUb29sYmFyLnJlY3JlYXRlKCk7XG5cdFx0XHQvLyBVcGRhdGUgY291bnQgYWZ0ZXIgcmVjcmVhdGlvblxuXHRcdFx0aWYgKGN1cnJlbnRDb3VudCA+IDApIHtcblx0XHRcdFx0dGhpcy5idWxrVG9vbGJhci51cGRhdGVDb3VudChjdXJyZW50Q291bnQpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHByaXZhdGUgdXBkYXRlU2VsZWN0aW9uVUkoKTogdm9pZCB7XG5cdFx0Ly8gVXBkYXRlIGNhcmQgdmlzdWFsIHN0YXRlc1xuXHRcdGNvbnN0IGNhcmRzID0gdGhpcy5jb250YWluZXJFbC5xdWVyeVNlbGVjdG9yQWxsKCcuY2FyZCcpO1xuXHRcdGNhcmRzLmZvckVhY2goKGNhcmRFbCkgPT4ge1xuXHRcdFx0Y29uc3QgcGF0aCA9IGNhcmRFbC5nZXRBdHRyaWJ1dGUoJ2RhdGEtcGF0aCcpO1xuXHRcdFx0Y29uc3QgY2hlY2tib3ggPSBjYXJkRWwucXVlcnlTZWxlY3RvcignaW5wdXRbdHlwZT1cImNoZWNrYm94XCJdLnNlbGVjdGlvbi1jaGVja2JveCcpIGFzIEhUTUxJbnB1dEVsZW1lbnQ7XG5cdFx0XHRpZiAocGF0aCkge1xuXHRcdFx0XHRjb25zdCBpc1NlbGVjdGVkID0gdGhpcy5zZWxlY3RlZEZpbGVzLmhhcyhwYXRoKTtcblx0XHRcdFx0aWYgKGlzU2VsZWN0ZWQpIHtcblx0XHRcdFx0XHRjYXJkRWwuYWRkQ2xhc3MoJ3NlbGVjdGVkJyk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Y2FyZEVsLnJlbW92ZUNsYXNzKCdzZWxlY3RlZCcpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChjaGVja2JveCkge1xuXHRcdFx0XHRcdGNoZWNrYm94LmNoZWNrZWQgPSBpc1NlbGVjdGVkO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHQvLyBTaG93L2hpZGUgYnVsayB0b29sYmFyIC0gaGlkZSB3aGVuIHNlbGVjdGlvbiBpcyBlbXB0eVxuXHRcdC8vIERvbid0IGhpZGUgaWYgd2UncmUgaW4gdGhlIG1pZGRsZSBvZiBhIHJlZnJlc2ggdGhhdCB3aWxsIHJlc3RvcmUgc2VsZWN0aW9uXG5cdFx0aWYgKHRoaXMuc2VsZWN0ZWRGaWxlcy5zaXplID4gMCkge1xuXHRcdFx0Ly8gQ2hlY2sgaWYgdG9vbGJhciBlbGVtZW50IGFscmVhZHkgZXhpc3RzIGluIERPTSAoZnJvbSBwcmV2aW91cyB2aWV3IHN3aXRjaClcblx0XHRcdC8vIFJlbW92ZSBhbnkgb3JwaGFuZWQgdG9vbGJhciBlbGVtZW50cyB0aGF0IG1pZ2h0IGJlIGxlZnQgb3ZlclxuXHRcdFx0Y29uc3Qgb3JwaGFuZWRUb29sYmFycyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5iYXNlcy1jbXMtYnVsay10b29sYmFyJyk7XG5cdFx0XHRvcnBoYW5lZFRvb2xiYXJzLmZvckVhY2godG9vbGJhciA9PiB7XG5cdFx0XHRcdC8vIE9ubHkgcmVtb3ZlIGlmIGl0J3Mgbm90IG91ciBjdXJyZW50IHRvb2xiYXJcblx0XHRcdFx0Y29uc3QgdG9vbGJhckluc3RhbmNlID0gKHRvb2xiYXIgYXMgdW5rbm93biBhcyB7IF9fYnVsa1Rvb2xiYXJJbnN0YW5jZT86IEJ1bGtUb29sYmFyIH0pLl9fYnVsa1Rvb2xiYXJJbnN0YW5jZTtcblx0XHRcdFx0aWYgKCF0b29sYmFySW5zdGFuY2UgfHwgdG9vbGJhckluc3RhbmNlICE9PSB0aGlzLmJ1bGtUb29sYmFyKSB7XG5cdFx0XHRcdFx0dG9vbGJhci5yZW1vdmUoKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cblx0XHRcdC8vIElmIHRvb2xiYXIgZG9lc24ndCBleGlzdCwgY3JlYXRlIGl0XG5cdFx0XHRpZiAoIXRoaXMuYnVsa1Rvb2xiYXIpIHtcblx0XHRcdFx0Y29uc3Qgc2V0dGluZ3MgPSByZWFkQ01TU2V0dGluZ3MoXG5cdFx0XHRcdFx0dGhpcy5jb25maWcsXG5cdFx0XHRcdFx0dGhpcy5wbHVnaW4uc2V0dGluZ3Ncblx0XHRcdFx0KTtcblx0XHRcdFx0dGhpcy5idWxrVG9vbGJhciA9IG5ldyBCdWxrVG9vbGJhcihcblx0XHRcdFx0XHR0aGlzLmFwcCxcblx0XHRcdFx0XHR0aGlzLnBsdWdpbixcblx0XHRcdFx0XHR0aGlzLmNvbnRhaW5lckVsLFxuXHRcdFx0XHRcdCgpID0+IEFycmF5LmZyb20odGhpcy5zZWxlY3RlZEZpbGVzKSxcblx0XHRcdFx0XHQoKSA9PiB7XG5cdFx0XHRcdFx0XHR0aGlzLnNlbGVjdGVkRmlsZXMuY2xlYXIoKTtcblx0XHRcdFx0XHRcdHRoaXMudXBkYXRlU2VsZWN0aW9uVUkoKTtcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdCgpID0+IHtcblx0XHRcdFx0XHRcdC8vIFJlZnJlc2ggdmlldyBidXQgcHJlc2VydmUgc2VsZWN0aW9uXG5cdFx0XHRcdFx0XHRjb25zdCBzZWxlY3RlZFBhdGhzID0gQXJyYXkuZnJvbSh0aGlzLnNlbGVjdGVkRmlsZXMpO1xuXG5cdFx0XHRcdFx0XHQvLyBTZXQgZmxhZyB0byBwcmV2ZW50IHRvb2xiYXIgZnJvbSBiZWluZyBoaWRkZW4gZHVyaW5nIHJlZnJlc2hcblx0XHRcdFx0XHRcdHRoaXMuaXNSZWZyZXNoaW5nV2l0aFNlbGVjdGlvbiA9IHRydWU7XG5cblx0XHRcdFx0XHRcdC8vIEtlZXAgdG9vbGJhciB2aXNpYmxlIGR1cmluZyByZWZyZXNoIC0gY3JpdGljYWwgdG8gcHJldmVudCBpdCBmcm9tIGRpc2FwcGVhcmluZ1xuXHRcdFx0XHRcdFx0aWYgKHRoaXMuYnVsa1Rvb2xiYXIgJiYgc2VsZWN0ZWRQYXRocy5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdFx0XHRcdHRoaXMuYnVsa1Rvb2xiYXIuc2hvdygpO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHQvLyBSZWZyZXNoIHRoZSB2aWV3XG5cdFx0XHRcdFx0XHR0aGlzLm9uRGF0YVVwZGF0ZWQoKTtcblxuXHRcdFx0XHRcdFx0Ly8gUmVzdG9yZSBzZWxlY3Rpb24gYWZ0ZXIgcmVmcmVzaCBjb21wbGV0ZXNcblx0XHRcdFx0XHRcdC8vIFVzZSBtdWx0aXBsZSB0aW1lb3V0cyB0byBlbnN1cmUgaXQgd29ya3MgZXZlbiBpZiB0aGUgZmlyc3Qgb25lIGlzIHRvbyBlYXJseVxuXHRcdFx0XHRcdFx0d2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0XHRcdFx0XHQvLyBSZXN0b3JlIHNlbGVjdGlvblxuXHRcdFx0XHRcdFx0XHRzZWxlY3RlZFBhdGhzLmZvckVhY2gocGF0aCA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKHRoaXMuYXBwLnZhdWx0LmdldEFic3RyYWN0RmlsZUJ5UGF0aChwYXRoKSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5zZWxlY3RlZEZpbGVzLmFkZChwYXRoKTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH0pO1xuXG5cdFx0XHRcdFx0XHRcdC8vIENsZWFyIHRoZSBmbGFnIGFuZCB1cGRhdGUgVUlcblx0XHRcdFx0XHRcdFx0dGhpcy5pc1JlZnJlc2hpbmdXaXRoU2VsZWN0aW9uID0gZmFsc2U7XG5cdFx0XHRcdFx0XHRcdHRoaXMudXBkYXRlU2VsZWN0aW9uVUkoKTtcblxuXHRcdFx0XHRcdFx0XHQvLyBFbnN1cmUgdG9vbGJhciBpcyB2aXNpYmxlIGFuZCB1cGRhdGVkXG5cdFx0XHRcdFx0XHRcdGlmICh0aGlzLnNlbGVjdGVkRmlsZXMuc2l6ZSA+IDAgJiYgdGhpcy5idWxrVG9vbGJhcikge1xuXHRcdFx0XHRcdFx0XHRcdHRoaXMuYnVsa1Rvb2xiYXIuc2hvdygpO1xuXHRcdFx0XHRcdFx0XHRcdHRoaXMuYnVsa1Rvb2xiYXIudXBkYXRlQ291bnQodGhpcy5zZWxlY3RlZEZpbGVzLnNpemUpO1xuXHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0Ly8gRG91YmxlLWNoZWNrIGFmdGVyIGEgYml0IG1vcmUgdGltZVxuXHRcdFx0XHRcdFx0XHR3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKHRoaXMuc2VsZWN0ZWRGaWxlcy5zaXplID4gMCAmJiB0aGlzLmJ1bGtUb29sYmFyKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHR0aGlzLmJ1bGtUb29sYmFyLnNob3coKTtcblx0XHRcdFx0XHRcdFx0XHRcdHRoaXMuYnVsa1Rvb2xiYXIudXBkYXRlQ291bnQodGhpcy5zZWxlY3RlZEZpbGVzLnNpemUpO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fSwgMTAwKTtcblx0XHRcdFx0XHRcdH0sIDI1MCk7XG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHQoKSA9PiB7XG5cdFx0XHRcdFx0XHQvLyBTZWxlY3QgYWxsIGNhbGxiYWNrXG5cdFx0XHRcdFx0XHR0aGlzLnNlbGVjdEFsbCgpO1xuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0c2V0dGluZ3Ncblx0XHRcdFx0KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdC8vIFVwZGF0ZSBzZXR0aW5ncyBpZiB0b29sYmFyIGFscmVhZHkgZXhpc3RzXG5cdFx0XHRcdGNvbnN0IHNldHRpbmdzID0gcmVhZENNU1NldHRpbmdzKFxuXHRcdFx0XHRcdHRoaXMuY29uZmlnLFxuXHRcdFx0XHRcdHRoaXMucGx1Z2luLnNldHRpbmdzXG5cdFx0XHRcdCk7XG5cdFx0XHRcdHRoaXMuYnVsa1Rvb2xiYXIudXBkYXRlU2V0dGluZ3Moc2V0dGluZ3MpO1xuXHRcdFx0fVxuXHRcdFx0dGhpcy5idWxrVG9vbGJhci51cGRhdGVDb3VudCh0aGlzLnNlbGVjdGVkRmlsZXMuc2l6ZSk7XG5cdFx0XHR0aGlzLmJ1bGtUb29sYmFyLnNob3coKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gU2VsZWN0aW9uIGlzIGVtcHR5IC0gZm9yY2UgaGlkZSB0b29sYmFyIGltbWVkaWF0ZWx5XG5cdFx0XHRpZiAodGhpcy5idWxrVG9vbGJhciAmJiAhdGhpcy5pc1JlZnJlc2hpbmdXaXRoU2VsZWN0aW9uKSB7XG5cdFx0XHRcdHRoaXMuYnVsa1Rvb2xiYXIuaGlkZSgpO1xuXHRcdFx0XHQvLyBGb3JjZSBpbW1lZGlhdGUgaGlkZSBhcyBiYWNrdXBcblx0XHRcdFx0Y29uc3QgdG9vbGJhckVsID0gdGhpcy5jb250YWluZXJFbC5xdWVyeVNlbGVjdG9yKCcuYmFzZXMtY21zLWJ1bGstdG9vbGJhcicpO1xuXHRcdFx0XHRpZiAodG9vbGJhckVsIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHtcblx0XHRcdFx0XHR0b29sYmFyRWwucmVtb3ZlQ2xhc3MoJ2Jhc2VzLWNtcy1idWxrLXRvb2xiYXItdmlzaWJsZScpO1xuXHRcdFx0XHRcdHRvb2xiYXJFbC5hZGRDbGFzcygnYmFzZXMtY21zLWJ1bGstdG9vbGJhci1oaWRkZW4nKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGFzeW5jIG9uQ2xvc2UoKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0dGhpcy5zY3JvbGxMYXlvdXRNYW5hZ2VyLmNsZWFudXAoKTtcblx0XHRpZiAodGhpcy52aWV3U3dpdGNoTGlzdGVuZXIpIHtcblx0XHRcdHRoaXMudmlld1N3aXRjaExpc3RlbmVyLmNsZWFudXAoKTtcblx0XHR9XG5cdFx0aWYgKHRoaXMuc2V0dGluZ3NQb2xsSW50ZXJ2YWwgIT09IG51bGwpIHtcblx0XHRcdHdpbmRvdy5jbGVhckludGVydmFsKHRoaXMuc2V0dGluZ3NQb2xsSW50ZXJ2YWwpO1xuXHRcdFx0dGhpcy5zZXR0aW5nc1BvbGxJbnRlcnZhbCA9IG51bGw7XG5cdFx0fVxuXHRcdHRoaXMucHJvcGVydHlPYnNlcnZlcnMuZm9yRWFjaChvYnMgPT4gb2JzLmRpc2Nvbm5lY3QoKSk7XG5cdFx0dGhpcy5wcm9wZXJ0eU9ic2VydmVycyA9IFtdO1xuXHRcdGlmICh0aGlzLmJ1bGtUb29sYmFyKSB7XG5cdFx0XHR0aGlzLmJ1bGtUb29sYmFyLmRlc3Ryb3koKTtcblx0XHR9XG5cblx0XHQvLyBSRU1PVkVEOiB0aGlzLnNlbGVjdGVkRmlsZXMuY2xlYXIoKTsgXG5cdFx0Ly8gV2Ugd2FudCB0byBwZXJzaXN0IHNlbGVjdGlvbiBpbiB0aGUgcGx1Z2luIGFjcm9zcyB2aWV3IGxpZmVjeWNsZVxuXG5cdFx0Y29uc3Qgb3JwaGFuZWRUb29sYmFycyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5iYXNlcy1jbXMtYnVsay10b29sYmFyJyk7XG5cdFx0b3JwaGFuZWRUb29sYmFycy5mb3JFYWNoKHRvb2xiYXIgPT4gdG9vbGJhci5yZW1vdmUoKSk7XG5cblx0XHQvLyBSZW1vdmUgZnJvbSBwbHVnaW4gdHJhY2tpbmdcblx0XHRjb25zdCBwbHVnaW5XaXRoTWV0aG9kID0gdGhpcy5wbHVnaW4gYXMgeyByZW1vdmVWaWV3PzogKHZpZXc6IEJhc2VzQ01TVmlldykgPT4gdm9pZCB9O1xuXHRcdGlmIChwbHVnaW5XaXRoTWV0aG9kICYmIHR5cGVvZiBwbHVnaW5XaXRoTWV0aG9kLnJlbW92ZVZpZXcgPT09ICdmdW5jdGlvbicpIHtcblx0XHRcdHBsdWdpbldpdGhNZXRob2QucmVtb3ZlVmlldyh0aGlzKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogT3ZlcnJpZGUgbmV3IG5vdGUgY3JlYXRpb24gdG8gdXNlIGN1c3RvbSBsb2NhdGlvbiBpZiBjb25maWd1cmVkXG5cdCAqL1xuXHRhc3luYyBvbk5ldygpOiBQcm9taXNlPGJvb2xlYW4+IHtcblx0XHRjb25zdCBzZXR0aW5ncyA9IHJlYWRDTVNTZXR0aW5ncyhcblx0XHRcdHRoaXMuY29uZmlnLFxuXHRcdFx0dGhpcy5wbHVnaW4uc2V0dGluZ3Ncblx0XHQpO1xuXG5cdFx0aWYgKHNldHRpbmdzLmN1c3RvbWl6ZU5ld0J1dHRvbikge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0Y29uc3QgbG9jYXRpb25JbnB1dCA9IHNldHRpbmdzLm5ld05vdGVMb2NhdGlvbj8udHJpbSgpIHx8ICcnO1xuXG5cdFx0XHRcdC8vIElmIGxvY2F0aW9uIGlzIGVtcHR5LCB1c2UgT2JzaWRpYW4ncyBkZWZhdWx0IG5ldyBub3RlIGxvY2F0aW9uXG5cdFx0XHRcdGlmIChsb2NhdGlvbklucHV0ID09PSAnJykge1xuXHRcdFx0XHRcdC8vIFVzZSBPYnNpZGlhbidzIGRlZmF1bHQgbmV3IG5vdGUgY3JlYXRpb24gYmVoYXZpb3Jcblx0XHRcdFx0XHRjb25zdCB2YXVsdENvbmZpZyA9ICh0aGlzLmFwcC52YXVsdCBhcyB7IGNvbmZpZz86IHsgbmV3RmlsZUxvY2F0aW9uPzogc3RyaW5nOyBuZXdGaWxlRm9sZGVyUGF0aD86IHN0cmluZyB9IH0pLmNvbmZpZztcblx0XHRcdFx0XHRjb25zdCBuZXdGaWxlTG9jYXRpb24gPSB2YXVsdENvbmZpZz8ubmV3RmlsZUxvY2F0aW9uIHx8ICdmb2xkZXInO1xuXHRcdFx0XHRcdGNvbnN0IG5ld0ZpbGVGb2xkZXJQYXRoID0gdmF1bHRDb25maWc/Lm5ld0ZpbGVGb2xkZXJQYXRoIHx8ICcnO1xuXG5cdFx0XHRcdFx0bGV0IGZpbGVQYXRoID0gJ1VudGl0bGVkLm1kJztcblxuXHRcdFx0XHRcdC8vIEhhbmRsZSBPYnNpZGlhbidzIG5ldyBmaWxlIGxvY2F0aW9uIHNldHRpbmdzXG5cdFx0XHRcdFx0aWYgKG5ld0ZpbGVMb2NhdGlvbiA9PT0gJ2ZvbGRlcicgJiYgbmV3RmlsZUZvbGRlclBhdGgpIHtcblx0XHRcdFx0XHRcdGZpbGVQYXRoID0gYCR7bmV3RmlsZUZvbGRlclBhdGh9L1VudGl0bGVkLm1kYDtcblx0XHRcdFx0XHR9IGVsc2UgaWYgKG5ld0ZpbGVMb2NhdGlvbiA9PT0gJ2N1cnJlbnQnKSB7XG5cdFx0XHRcdFx0XHRjb25zdCBhY3RpdmVGaWxlID0gdGhpcy5hcHAud29ya3NwYWNlLmdldEFjdGl2ZUZpbGUoKTtcblx0XHRcdFx0XHRcdGlmIChhY3RpdmVGaWxlICYmIGFjdGl2ZUZpbGUucGFyZW50KSB7XG5cdFx0XHRcdFx0XHRcdGZpbGVQYXRoID0gYCR7YWN0aXZlRmlsZS5wYXJlbnQucGF0aH0vVW50aXRsZWQubWRgO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0gZWxzZSBpZiAobmV3RmlsZUxvY2F0aW9uID09PSAncm9vdCcpIHtcblx0XHRcdFx0XHRcdGZpbGVQYXRoID0gJ1VudGl0bGVkLm1kJztcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRjb25zdCBmaWxlID0gYXdhaXQgdGhpcy5hcHAudmF1bHQuY3JlYXRlKGZpbGVQYXRoLCAnJyk7XG5cdFx0XHRcdFx0YXdhaXQgdGhpcy5hcHAud29ya3NwYWNlLm9wZW5MaW5rVGV4dChmaWxlLnBhdGgsICcnLCBmYWxzZSk7XG5cdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBJZiBsb2NhdGlvbiBpcyBcIi9cIiBvciBqdXN0IHNsYXNoZXMsIHVzZSB2YXVsdCByb290XG5cdFx0XHRcdGlmIChsb2NhdGlvbklucHV0ID09PSAnLycgfHwgbG9jYXRpb25JbnB1dC5yZXBsYWNlKC9cXC8vZywgJycpID09PSAnJykge1xuXHRcdFx0XHRcdGNvbnN0IG5ld0ZpbGUgPSBhd2FpdCB0aGlzLmFwcC52YXVsdC5jcmVhdGUoJ1VudGl0bGVkLm1kJywgJycpO1xuXHRcdFx0XHRcdGF3YWl0IHRoaXMuYXBwLndvcmtzcGFjZS5vcGVuTGlua1RleHQobmV3RmlsZS5wYXRoLCAnJywgZmFsc2UpO1xuXHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gT3RoZXJ3aXNlLCB1c2UgdGhlIHNwZWNpZmllZCBmb2xkZXJcblx0XHRcdFx0Y29uc3QgZm9sZGVyUGF0aCA9IGxvY2F0aW9uSW5wdXQucmVwbGFjZSgvXlxcLyt8XFwvKyQvZywgJycpO1xuXG5cdFx0XHRcdGxldCBmb2xkZXIgPSB0aGlzLmFwcC52YXVsdC5nZXRBYnN0cmFjdEZpbGVCeVBhdGgoZm9sZGVyUGF0aCk7XG5cblx0XHRcdFx0aWYgKCFmb2xkZXIgfHwgISgnY2hpbGRyZW4nIGluIGZvbGRlcikpIHtcblx0XHRcdFx0XHRhd2FpdCB0aGlzLmFwcC52YXVsdC5jcmVhdGVGb2xkZXIoZm9sZGVyUGF0aCk7XG5cdFx0XHRcdFx0Zm9sZGVyID0gdGhpcy5hcHAudmF1bHQuZ2V0QWJzdHJhY3RGaWxlQnlQYXRoKGZvbGRlclBhdGgpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKGZvbGRlciAmJiAnY2hpbGRyZW4nIGluIGZvbGRlcikge1xuXHRcdFx0XHRcdGNvbnN0IG5ld0ZpbGUgPSBhd2FpdCB0aGlzLmFwcC52YXVsdC5jcmVhdGUoYCR7Zm9sZGVyUGF0aH0vVW50aXRsZWQubWRgLCAnJyk7XG5cdFx0XHRcdFx0YXdhaXQgdGhpcy5hcHAud29ya3NwYWNlLm9wZW5MaW5rVGV4dChuZXdGaWxlLnBhdGgsICcnLCBmYWxzZSk7XG5cdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdH1cblx0XHRcdH0gY2F0Y2gge1xuXHRcdFx0XHQvLyBFcnJvciBjcmVhdGluZyBuZXcgbm90ZSAtIHNpbGVudGx5IGZhaWxcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBEZWZhdWx0IGJlaGF2aW9yIC0gbGV0IEJhc2VzIGhhbmRsZSBpdFxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxufVxuIiwgIi8qKlxyXG4gKiBVdGlsaXR5IGZ1bmN0aW9uIHRvIHNldCBDU1MgcHJvcGVydGllcyBvbiBhbiBlbGVtZW50XHJcbiAqIFJlcGxhY2VzIHRoZSBub24tZXhpc3RlbnQgc2V0Q3NzUHJvcHMgZnJvbSBvYnNpZGlhblxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBTZXRzIENTUyBwcm9wZXJ0aWVzIG9uIGFuIGVsZW1lbnQgZnJvbSBhbiBvYmplY3RcclxuICogQHBhcmFtIGVsZW1lbnQgLSBUaGUgZWxlbWVudCB0byBhcHBseSBzdHlsZXMgdG8gKEhUTUxFbGVtZW50IG9yIFNWR0VsZW1lbnQpXHJcbiAqIEBwYXJhbSBwcm9wcyAtIE9iamVjdCB3aXRoIENTUyBwcm9wZXJ0aWVzIGluIGNhbWVsQ2FzZSBvciBrZWJhYi1jYXNlXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gc2V0Q3NzUHJvcHMoZWxlbWVudDogSFRNTEVsZW1lbnQgfCBTVkdFbGVtZW50LCBwcm9wczogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgbnVtYmVyPik6IHZvaWQge1xyXG5cdGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHByb3BzKSkge1xyXG5cdFx0Ly8gQ1NTIGN1c3RvbSBwcm9wZXJ0aWVzICh2YXJpYWJsZXMpIHN0YXJ0IHdpdGggLS1cclxuXHRcdGlmIChrZXkuc3RhcnRzV2l0aCgnLS0nKSkge1xyXG5cdFx0XHRlbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KGtleSwgU3RyaW5nKHZhbHVlKSk7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHQvLyBDb252ZXJ0IGNhbWVsQ2FzZSB0byBrZWJhYi1jYXNlIGZvciBDU1MgcHJvcGVydGllc1xyXG5cdFx0XHRjb25zdCBjc3NLZXkgPSBrZXkucmVwbGFjZSgvKFtBLVpdKS9nLCAnLSQxJykudG9Mb3dlckNhc2UoKTtcclxuXHRcdFx0ZWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eShjc3NLZXksIFN0cmluZyh2YWx1ZSkpO1xyXG5cdFx0fVxyXG5cdH1cclxufVxyXG4iLCAiLyoqXHJcbiAqIERhdGEgdHJhbnNmb3JtYXRpb24gdXRpbGl0aWVzXHJcbiAqIENvbnZlcnRzIEJhc2VzIGVudHJpZXMgaW50byBub3JtYWxpemVkIENhcmREYXRhIGZvcm1hdFxyXG4gKiBVcGRhdGVkIHRvIHN1cHBvcnQgTURYIGZpbGVzIHZpYSBtYW51YWwgZnJvbnRtYXR0ZXIgcGFyc2luZ1xyXG4gKi9cclxuXHJcbmltcG9ydCB0eXBlIHsgQXBwLCBCYXNlc0VudHJ5IH0gZnJvbSAnb2JzaWRpYW4nO1xyXG5pbXBvcnQgeyBURmlsZSB9IGZyb20gJ29ic2lkaWFuJztcclxuaW1wb3J0IHsgZ2V0Rmlyc3RCYXNlc1Byb3BlcnR5VmFsdWUgfSBmcm9tICcuLi91dGlscy9wcm9wZXJ0eSc7XHJcbmltcG9ydCB7IGdldExpc3RTZXBhcmF0b3IgfSBmcm9tICcuLi91dGlscy9zdHlsZS1zZXR0aW5ncyc7XHJcbmltcG9ydCB7IGdldEZpbGVGcm9udG1hdHRlciB9IGZyb20gJy4uL3V0aWxzL2Zyb250bWF0dGVyLWhlbHBlcic7XHJcblxyXG4vKipcclxuICogUmVtb3ZlIGR1cGxpY2F0aW9uIGZyb20gYSBzdHJpbmcgKGUuZy4sIFwidmFsdWV2YWx1ZVwiIC0+IFwidmFsdWVcIilcclxuICogSGFuZGxlcyBtdWx0aXBsZSByZXBldGl0aW9ucyAtIGZpbmRzIHRoZSBzaG9ydGVzdCByZXBlYXRpbmcgcGF0dGVyblxyXG4gKi9cclxuZnVuY3Rpb24gcmVtb3ZlRHVwbGljYXRpb24oc3RyOiBzdHJpbmcpOiBzdHJpbmcge1xyXG5cdGlmIChzdHIubGVuZ3RoID09PSAwKSByZXR1cm4gc3RyO1xyXG5cdFxyXG5cdC8vIEZpbmQgdGhlIHNob3J0ZXN0IHJlcGVhdGluZyBwYXR0ZXJuIGJ5IGNoZWNraW5nIGFsbCBwb3NzaWJsZSBwcmVmaXggbGVuZ3Roc1xyXG5cdC8vIFN0YXJ0IGZyb20gMSBhbmQgZ28gdXAgdG8gaGFsZiB0aGUgc3RyaW5nIGxlbmd0aFxyXG5cdGZvciAobGV0IGxlbiA9IDE7IGxlbiA8PSBNYXRoLmZsb29yKHN0ci5sZW5ndGggLyAyKTsgbGVuKyspIHtcclxuXHRcdGNvbnN0IHByZWZpeCA9IHN0ci5zdWJzdHJpbmcoMCwgbGVuKTtcclxuXHRcdFxyXG5cdFx0Ly8gQ2hlY2sgaWYgc3RyaW5nIGlzIGV4YWN0bHkgbWFkZSBvZiByZXBldGl0aW9ucyBvZiB0aGlzIHByZWZpeFxyXG5cdFx0Y29uc3QgcmVwZWF0Q291bnQgPSBNYXRoLmZsb29yKHN0ci5sZW5ndGggLyBsZW4pO1xyXG5cdFx0aWYgKHJlcGVhdENvdW50IDwgMikgY29udGludWU7IC8vIE5lZWQgYXQgbGVhc3QgMiByZXBldGl0aW9uc1xyXG5cdFx0XHJcblx0XHRsZXQgaXNDb21wbGV0ZUR1cGxpY2F0aW9uID0gdHJ1ZTtcclxuXHRcdFxyXG5cdFx0Ly8gVmVyaWZ5IGFsbCBmdWxsIHNlZ21lbnRzIG1hdGNoIHRoZSBwcmVmaXhcclxuXHRcdGZvciAobGV0IGkgPSAxOyBpIDwgcmVwZWF0Q291bnQ7IGkrKykge1xyXG5cdFx0XHRjb25zdCBzZWdtZW50ID0gc3RyLnN1YnN0cmluZyhpICogbGVuLCAoaSArIDEpICogbGVuKTtcclxuXHRcdFx0aWYgKHNlZ21lbnQgIT09IHByZWZpeCkge1xyXG5cdFx0XHRcdGlzQ29tcGxldGVEdXBsaWNhdGlvbiA9IGZhbHNlO1xyXG5cdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHRcclxuXHRcdC8vIElmIHRoZXJlJ3MgYSByZW1haW5kZXIsIGNoZWNrIGlmIGl0IG1hdGNoZXMgdGhlIHN0YXJ0IG9mIHRoZSBwcmVmaXhcclxuXHRcdGNvbnN0IHJlbWFpbmRlciA9IHN0ci5sZW5ndGggJSBsZW47XHJcblx0XHRpZiAocmVtYWluZGVyID4gMCkge1xyXG5cdFx0XHRjb25zdCBsYXN0U2VnbWVudCA9IHN0ci5zdWJzdHJpbmcocmVwZWF0Q291bnQgKiBsZW4pO1xyXG5cdFx0XHRpZiAobGFzdFNlZ21lbnQgIT09IHByZWZpeC5zdWJzdHJpbmcoMCwgcmVtYWluZGVyKSkge1xyXG5cdFx0XHRcdGlzQ29tcGxldGVEdXBsaWNhdGlvbiA9IGZhbHNlO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHRcclxuXHRcdGlmIChpc0NvbXBsZXRlRHVwbGljYXRpb24pIHtcclxuXHRcdFx0XHRyZXR1cm4gcHJlZml4O1xyXG5cdFx0fVxyXG5cdH1cclxuXHRcclxuXHRyZXR1cm4gc3RyO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIENhcmREYXRhIHtcclxuXHRwYXRoOiBzdHJpbmc7XHJcblx0bmFtZTogc3RyaW5nO1xyXG5cdHRpdGxlOiBzdHJpbmc7XHJcblx0dGFnczogc3RyaW5nW107XHJcblx0eWFtbFRhZ3M6IHN0cmluZ1tdO1xyXG5cdGN0aW1lOiBudW1iZXI7XHJcblx0bXRpbWU6IG51bWJlcjtcclxuXHRmb2xkZXJQYXRoOiBzdHJpbmc7XHJcblx0c25pcHBldD86IHN0cmluZztcclxuXHRpbWFnZVVybD86IHN0cmluZyB8IHN0cmluZ1tdO1xyXG5cdGhhc0ltYWdlQXZhaWxhYmxlPzogYm9vbGVhbjtcclxuXHRkaXNwbGF5VGFncz86IHN0cmluZ1tdO1xyXG5cdHByb3BlcnR5TmFtZTE/OiBzdHJpbmc7XHJcblx0cHJvcGVydHlOYW1lMj86IHN0cmluZztcclxuXHRwcm9wZXJ0eU5hbWUzPzogc3RyaW5nO1xyXG5cdHByb3BlcnR5TmFtZTQ/OiBzdHJpbmc7XHJcblx0cHJvcGVydHlOYW1lNT86IHN0cmluZztcclxuXHRwcm9wZXJ0eU5hbWU2Pzogc3RyaW5nO1xyXG5cdHByb3BlcnR5TmFtZTc/OiBzdHJpbmc7XHJcblx0cHJvcGVydHlOYW1lOD86IHN0cmluZztcclxuXHRwcm9wZXJ0eU5hbWU5Pzogc3RyaW5nO1xyXG5cdHByb3BlcnR5TmFtZTEwPzogc3RyaW5nO1xyXG5cdHByb3BlcnR5TmFtZTExPzogc3RyaW5nO1xyXG5cdHByb3BlcnR5TmFtZTEyPzogc3RyaW5nO1xyXG5cdHByb3BlcnR5TmFtZTEzPzogc3RyaW5nO1xyXG5cdHByb3BlcnR5TmFtZTE0Pzogc3RyaW5nO1xyXG5cdHByb3BlcnR5MT86IHN0cmluZyB8IG51bGw7XHJcblx0cHJvcGVydHkyPzogc3RyaW5nIHwgbnVsbDtcclxuXHRwcm9wZXJ0eTM/OiBzdHJpbmcgfCBudWxsO1xyXG5cdHByb3BlcnR5ND86IHN0cmluZyB8IG51bGw7XHJcblx0cHJvcGVydHk1Pzogc3RyaW5nIHwgbnVsbDtcclxuXHRwcm9wZXJ0eTY/OiBzdHJpbmcgfCBudWxsO1xyXG5cdHByb3BlcnR5Nz86IHN0cmluZyB8IG51bGw7XHJcblx0cHJvcGVydHk4Pzogc3RyaW5nIHwgbnVsbDtcclxuXHRwcm9wZXJ0eTk/OiBzdHJpbmcgfCBudWxsO1xyXG5cdHByb3BlcnR5MTA/OiBzdHJpbmcgfCBudWxsO1xyXG5cdHByb3BlcnR5MTE/OiBzdHJpbmcgfCBudWxsO1xyXG5cdHByb3BlcnR5MTI/OiBzdHJpbmcgfCBudWxsO1xyXG5cdHByb3BlcnR5MTM/OiBzdHJpbmcgfCBudWxsO1xyXG5cdHByb3BlcnR5MTQ/OiBzdHJpbmcgfCBudWxsO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIENNU1NldHRpbmdzIHtcclxuXHR0aXRsZVByb3BlcnR5OiBzdHJpbmc7XHJcblx0ZGVzY3JpcHRpb25Qcm9wZXJ0eTogc3RyaW5nO1xyXG5cdGltYWdlUHJvcGVydHk6IHN0cmluZztcclxuXHRzaG93VGl0bGU6IGJvb2xlYW47XHJcblx0c2hvd0RhdGU6IGJvb2xlYW47XHJcblx0ZGF0ZVByb3BlcnR5OiBzdHJpbmc7XHJcblx0ZGF0ZUluY2x1ZGVUaW1lOiBib29sZWFuO1xyXG5cdHNob3dUZXh0UHJldmlldzogYm9vbGVhbjtcclxuXHRmYWxsYmFja1RvQ29udGVudDogYm9vbGVhbjtcclxuXHR0cnVuY2F0ZVByZXZpZXdQcm9wZXJ0eTogYm9vbGVhbjtcclxuXHRmYWxsYmFja1RvRW1iZWRzOiBib29sZWFuIHwgJ2Fsd2F5cycgfCAnaWYtZW1wdHknIHwgJ25ldmVyJztcclxuXHRwcm9wZXJ0eURpc3BsYXkxOiBzdHJpbmc7XHJcblx0cHJvcGVydHlEaXNwbGF5Mjogc3RyaW5nO1xyXG5cdHByb3BlcnR5RGlzcGxheTM6IHN0cmluZztcclxuXHRwcm9wZXJ0eURpc3BsYXk0OiBzdHJpbmc7XHJcblx0cHJvcGVydHlEaXNwbGF5NTogc3RyaW5nO1xyXG5cdHByb3BlcnR5RGlzcGxheTY6IHN0cmluZztcclxuXHRwcm9wZXJ0eURpc3BsYXk3OiBzdHJpbmc7XHJcblx0cHJvcGVydHlEaXNwbGF5ODogc3RyaW5nO1xyXG5cdHByb3BlcnR5RGlzcGxheTk6IHN0cmluZztcclxuXHRwcm9wZXJ0eURpc3BsYXkxMDogc3RyaW5nO1xyXG5cdHByb3BlcnR5RGlzcGxheTExOiBzdHJpbmc7XHJcblx0cHJvcGVydHlEaXNwbGF5MTI6IHN0cmluZztcclxuXHRwcm9wZXJ0eURpc3BsYXkxMzogc3RyaW5nO1xyXG5cdHByb3BlcnR5RGlzcGxheTE0OiBzdHJpbmc7XHJcblx0cHJvcGVydHlMYXlvdXQxMlNpZGVCeVNpZGU6IGJvb2xlYW47XHJcblx0cHJvcGVydHlMYXlvdXQzNFNpZGVCeVNpZGU6IGJvb2xlYW47XHJcblx0cHJvcGVydHlMYXlvdXQ1NlNpZGVCeVNpZGU6IGJvb2xlYW47XHJcblx0cHJvcGVydHlMYXlvdXQ3OFNpZGVCeVNpZGU6IGJvb2xlYW47XHJcblx0cHJvcGVydHlMYXlvdXQ5MTBTaWRlQnlTaWRlOiBib29sZWFuO1xyXG5cdHByb3BlcnR5TGF5b3V0MTExMlNpZGVCeVNpZGU6IGJvb2xlYW47XHJcblx0cHJvcGVydHlMYXlvdXQxMzE0U2lkZUJ5U2lkZTogYm9vbGVhbjtcclxuXHRwcm9wZXJ0eUdyb3VwMVBvc2l0aW9uOiAndG9wJyB8ICdib3R0b20nO1xyXG5cdHByb3BlcnR5R3JvdXAyUG9zaXRpb246ICd0b3AnIHwgJ2JvdHRvbSc7XHJcblx0cHJvcGVydHlHcm91cDNQb3NpdGlvbjogJ3RvcCcgfCAnYm90dG9tJztcclxuXHRwcm9wZXJ0eUdyb3VwNFBvc2l0aW9uOiAndG9wJyB8ICdib3R0b20nO1xyXG5cdHByb3BlcnR5R3JvdXA1UG9zaXRpb246ICd0b3AnIHwgJ2JvdHRvbSc7XHJcblx0cHJvcGVydHlHcm91cDZQb3NpdGlvbjogJ3RvcCcgfCAnYm90dG9tJztcclxuXHRwcm9wZXJ0eUdyb3VwN1Bvc2l0aW9uOiAndG9wJyB8ICdib3R0b20nO1xyXG5cdGltYWdlRm9ybWF0OiAnbm9uZScgfCAndGh1bWJuYWlsJyB8ICdjb3Zlcic7XHJcblx0aW1hZ2VQb3NpdGlvbjogJ2xlZnQnIHwgJ3JpZ2h0JyB8ICd0b3AnIHwgJ2JvdHRvbSc7XHJcblx0cHJvcGVydHlMYWJlbHM6ICdoaWRlJyB8ICdpbmxpbmUnIHwgJ2Fib3ZlJztcclxuXHRzaG93RHJhZnRTdGF0dXM6IGJvb2xlYW47XHJcblx0ZHJhZnRTdGF0dXNQcm9wZXJ0eTogc3RyaW5nO1xyXG5cdGRyYWZ0U3RhdHVzUmV2ZXJzZTogYm9vbGVhbjtcclxuXHRkcmFmdFN0YXR1c1VzZUZpbGVuYW1lUHJlZml4OiBib29sZWFuO1xyXG5cdHNob3dUYWdzOiBib29sZWFuO1xyXG5cdHRhZ3NQcm9wZXJ0eTogc3RyaW5nO1xyXG5cdG1heFRhZ3NUb1Nob3c6IG51bWJlcjtcclxuXHRjdXN0b21pemVOZXdCdXR0b246IGJvb2xlYW47XHJcblx0bmV3Tm90ZUxvY2F0aW9uOiBzdHJpbmc7XHJcblx0aGlkZVF1aWNrRWRpdEljb246IGJvb2xlYW47XHJcblx0Y2FyZFNpemU6IG51bWJlcjtcclxuXHRpbWFnZUFzcGVjdFJhdGlvOiBudW1iZXI7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBUcmFuc2Zvcm0gQmFzZXMgZW50cnkgaW50byBDYXJkRGF0YVxyXG4gKiBTdXBwb3J0cyBNRFggZmlsZXMgdmlhIG1hbnVhbCBmcm9udG1hdHRlciBwYXJzaW5nXHJcbiAqL1xyXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYmFzZXNFbnRyeVRvQ2FyZERhdGEoXHJcblx0ZW50cnk6IEJhc2VzRW50cnksXHJcblx0c2V0dGluZ3M6IENNU1NldHRpbmdzLFxyXG5cdHNvcnRNZXRob2Q6IHN0cmluZyxcclxuXHRpc1NodWZmbGVkOiBib29sZWFuLFxyXG5cdHNuaXBwZXQ/OiBzdHJpbmcsXHJcblx0aW1hZ2VVcmw/OiBzdHJpbmcgfCBzdHJpbmdbXSxcclxuXHRoYXNJbWFnZUF2YWlsYWJsZT86IGJvb2xlYW4sXHJcblx0YXBwPzogQXBwLFxyXG5cdG1keEZyb250bWF0dGVyQ2FjaGU/OiBSZWNvcmQ8c3RyaW5nLCBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IG51bGw+XHJcbik6IFByb21pc2U8Q2FyZERhdGE+IHtcclxuXHRjb25zdCBmaWxlTmFtZSA9IGVudHJ5LmZpbGUuYmFzZW5hbWUgfHwgZW50cnkuZmlsZS5uYW1lO1xyXG5cclxuXHQvLyBHZXQgdGl0bGUgZnJvbSBwcm9wZXJ0eSBvciBmYWxsYmFjayB0byBmaWxlbmFtZVxyXG5cdC8vIEZvciBNRFggZmlsZXMsIGNoZWNrIGNhY2hlIGZpcnN0IHRvIGF2b2lkIGFzeW5jIGxvYWRpbmdcclxuXHRsZXQgdGl0bGVWYWx1ZTogeyBkYXRhPzogdW5rbm93biB9IHwgbnVsbCA9IG51bGw7XHJcblx0aWYgKGFwcCkge1xyXG5cdFx0Y29uc3QgZmlsZSA9IGFwcC52YXVsdC5nZXRBYnN0cmFjdEZpbGVCeVBhdGgoZW50cnkuZmlsZS5wYXRoKTtcclxuXHRcdGlmIChmaWxlIGluc3RhbmNlb2YgVEZpbGUgJiYgZmlsZS5leHRlbnNpb24gPT09ICdtZHgnICYmIG1keEZyb250bWF0dGVyQ2FjaGUpIHtcclxuXHRcdFx0Y29uc3QgZnJvbnRtYXR0ZXIgPSBtZHhGcm9udG1hdHRlckNhY2hlW2VudHJ5LmZpbGUucGF0aF07XHJcblx0XHRcdGlmIChmcm9udG1hdHRlcikge1xyXG5cdFx0XHRcdC8vIFN0cmlwIFwibm90ZS5cIiBwcmVmaXggaWYgcHJlc2VudFxyXG5cdFx0XHRcdGNvbnN0IGNsZWFuUHJvcCA9IHNldHRpbmdzLnRpdGxlUHJvcGVydHkuc3RhcnRzV2l0aCgnbm90ZS4nKSA/IHNldHRpbmdzLnRpdGxlUHJvcGVydHkuc3Vic3RyaW5nKDUpIDogc2V0dGluZ3MudGl0bGVQcm9wZXJ0eTtcclxuXHRcdFx0XHRjb25zdCBmcm9udG1hdHRlclZhbHVlID0gZnJvbnRtYXR0ZXJbY2xlYW5Qcm9wXTtcclxuXHRcdFx0XHRpZiAoZnJvbnRtYXR0ZXJWYWx1ZSAhPSBudWxsKSB7XHJcblx0XHRcdFx0XHR0aXRsZVZhbHVlID0geyBkYXRhOiBmcm9udG1hdHRlclZhbHVlIH07XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fVxyXG5cdFxyXG5cdC8vIElmIGNhY2hlIGRpZG4ndCBoYXZlIGl0LCB1c2UgdGhlIGFzeW5jIG1ldGhvZFxyXG5cdGlmICghdGl0bGVWYWx1ZSkge1xyXG5cdFx0dGl0bGVWYWx1ZSA9IGF3YWl0IGdldEZpcnN0QmFzZXNQcm9wZXJ0eVZhbHVlKGVudHJ5LCBzZXR0aW5ncy50aXRsZVByb3BlcnR5LCBhcHApIGFzIHsgZGF0YT86IHVua25vd24gfSB8IG51bGw7XHJcblx0fVxyXG5cdGNvbnN0IHRpdGxlRGF0YSA9IHRpdGxlVmFsdWU/LmRhdGE7XHJcblx0XHJcblx0Ly8gSGFuZGxlIGFycmF5cyAoZS5nLiwgYWxpYXNlcykgYnkgam9pbmluZyB0aGVtXHJcblx0bGV0IHRpdGxlOiBzdHJpbmc7XHJcblx0aWYgKHRpdGxlRGF0YSAhPSBudWxsICYmIHRpdGxlRGF0YSAhPT0gJycpIHtcclxuXHRcdGlmIChBcnJheS5pc0FycmF5KHRpdGxlRGF0YSkpIHtcclxuXHRcdFx0Ly8gSm9pbiBhcnJheSBpdGVtcyBpbnRvIGEgc3RyaW5nXHJcblx0XHRcdGNvbnN0IGl0ZW1zID0gdGl0bGVEYXRhLm1hcCgoaXRlbTogdW5rbm93bikgPT4ge1xyXG5cdFx0XHRcdGlmIChpdGVtICYmIHR5cGVvZiBpdGVtID09PSAnb2JqZWN0JyAmJiAnZGF0YScgaW4gaXRlbSkge1xyXG5cdFx0XHRcdFx0cmV0dXJuIFN0cmluZygoaXRlbSBhcyB7IGRhdGE6IHVua25vd24gfSkuZGF0YSk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdHJldHVybiBTdHJpbmcoaXRlbSk7XHJcblx0XHRcdH0pLmZpbHRlcigoczogc3RyaW5nKSA9PiBzLnRyaW0oKS5sZW5ndGggPiAwKTtcclxuXHRcdFx0dGl0bGUgPSBpdGVtcy5sZW5ndGggPiAwID8gaXRlbXMuam9pbignLCAnKSA6IGZpbGVOYW1lO1xyXG5cdFx0fSBlbHNlIGlmICh0eXBlb2YgdGl0bGVEYXRhID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgdGl0bGVEYXRhID09PSAnbnVtYmVyJykge1xyXG5cdFx0XHR0aXRsZSA9IFN0cmluZyh0aXRsZURhdGEpO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0dGl0bGUgPSBmaWxlTmFtZTtcclxuXHRcdH1cclxuXHR9IGVsc2Uge1xyXG5cdFx0dGl0bGUgPSBmaWxlTmFtZTtcclxuXHR9XHJcblxyXG5cdC8vIEdldCBmb2xkZXIgcGF0aFxyXG5cdGNvbnN0IHBhdGggPSBlbnRyeS5maWxlLnBhdGg7XHJcblx0Y29uc3QgZm9sZGVyUGF0aCA9IHBhdGguc3BsaXQoJy8nKS5zbGljZSgwLCAtMSkuam9pbignLycpO1xyXG5cclxuXHQvLyBHZXQgWUFNTCB0YWdzIG9ubHlcclxuXHRsZXQgeWFtbFRhZ3NWYWx1ZSA9IGVudHJ5LmdldFZhbHVlKCdub3RlLnRhZ3MnKSBhcyB7IGRhdGE/OiB1bmtub3duIH0gfCBudWxsO1xyXG5cdGxldCB5YW1sVGFnczogc3RyaW5nW10gPSBbXTtcclxuXHJcblx0Ly8gRm9yIE1EWCBmaWxlcywgZmFsbGJhY2sgdG8gbWFudWFsIGZyb250bWF0dGVyIHBhcnNpbmcgaWYgQmFzZXMgQVBJIHJldHVybnMgbnVsbFxyXG5cdGlmICgheWFtbFRhZ3NWYWx1ZSAmJiBhcHApIHtcclxuXHRcdGNvbnN0IGZpbGUgPSBhcHAudmF1bHQuZ2V0QWJzdHJhY3RGaWxlQnlQYXRoKGVudHJ5LmZpbGUucGF0aCk7XHJcblx0XHRpZiAoZmlsZSBpbnN0YW5jZW9mIFRGaWxlICYmIGZpbGUuZXh0ZW5zaW9uID09PSAnbWR4Jykge1xyXG5cdFx0XHQvLyBDaGVjayBjYWNoZSBmaXJzdCwgdGhlbiBmYWxsYmFjayB0byBhc3luYyBsb2FkaW5nXHJcblx0XHRcdGxldCBmcm9udG1hdHRlciA9IG1keEZyb250bWF0dGVyQ2FjaGU/LltlbnRyeS5maWxlLnBhdGhdID8/IG51bGw7XHJcblx0XHRcdGlmIChmcm9udG1hdHRlciA9PT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdFx0ZnJvbnRtYXR0ZXIgPSBhd2FpdCBnZXRGaWxlRnJvbnRtYXR0ZXIoYXBwLCBmaWxlKTtcclxuXHRcdFx0fVxyXG5cdFx0XHRpZiAoZnJvbnRtYXR0ZXI/LnRhZ3MpIHtcclxuXHRcdFx0XHRjb25zdCB0YWdEYXRhID0gZnJvbnRtYXR0ZXIudGFncztcclxuXHRcdFx0XHRjb25zdCByYXdUYWdzID0gQXJyYXkuaXNBcnJheSh0YWdEYXRhKVxyXG5cdFx0XHRcdFx0PyB0YWdEYXRhLm1hcCgodDogdW5rbm93bikgPT4ge1xyXG5cdFx0XHRcdFx0XHRpZiAodCAmJiB0eXBlb2YgdCA9PT0gJ29iamVjdCcgJiYgdCAhPT0gbnVsbCkge1xyXG5cdFx0XHRcdFx0XHRcdHJldHVybiBKU09OLnN0cmluZ2lmeSh0KTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRpZiAodHlwZW9mIHQgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiB0ID09PSAnbnVtYmVyJykge1xyXG5cdFx0XHRcdFx0XHRcdHJldHVybiBTdHJpbmcodCk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0cmV0dXJuIHQgPyBKU09OLnN0cmluZ2lmeSh0KSA6ICcnO1xyXG5cdFx0XHRcdFx0fSlcclxuXHRcdFx0XHRcdDogKCgpID0+IHtcclxuXHRcdFx0XHRcdFx0aWYgKHRhZ0RhdGEgJiYgdHlwZW9mIHRhZ0RhdGEgPT09ICdvYmplY3QnICYmIHRhZ0RhdGEgIT09IG51bGwpIHtcclxuXHRcdFx0XHRcdFx0XHRyZXR1cm4gW0pTT04uc3RyaW5naWZ5KHRhZ0RhdGEpXTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRpZiAodHlwZW9mIHRhZ0RhdGEgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiB0YWdEYXRhID09PSAnbnVtYmVyJykge1xyXG5cdFx0XHRcdFx0XHRcdHJldHVybiBbU3RyaW5nKHRhZ0RhdGEpXTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRyZXR1cm4gdGFnRGF0YSA/IFtKU09OLnN0cmluZ2lmeSh0YWdEYXRhKV0gOiBbJyddO1xyXG5cdFx0XHRcdFx0fSkoKTtcclxuXHRcdFx0XHR5YW1sVGFncyA9IHJhd1RhZ3MubWFwKHRhZyA9PiB0YWcucmVwbGFjZSgvXiMvLCAnJykpO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRpZiAoeWFtbFRhZ3NWYWx1ZSAmJiB5YW1sVGFnc1ZhbHVlLmRhdGEgIT0gbnVsbCkge1xyXG5cdFx0Y29uc3QgdGFnRGF0YSA9IHlhbWxUYWdzVmFsdWUuZGF0YTtcclxuXHRcdGNvbnN0IHJhd1RhZ3MgPSBBcnJheS5pc0FycmF5KHRhZ0RhdGEpXHJcblx0XHRcdD8gdGFnRGF0YS5tYXAoKHQ6IHVua25vd24pID0+IHtcclxuXHRcdFx0XHRpZiAodCAmJiB0eXBlb2YgdCA9PT0gJ29iamVjdCcgJiYgJ2RhdGEnIGluIHQpIHtcclxuXHRcdFx0XHRcdHJldHVybiBTdHJpbmcoKHQgYXMgeyBkYXRhOiB1bmtub3duIH0pLmRhdGEpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRyZXR1cm4gKHR5cGVvZiB0ID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgdCA9PT0gJ251bWJlcicpID8gU3RyaW5nKHQpIDogJyc7XHJcblx0XHRcdH0pLmZpbHRlcih0ID0+IHQpXHJcblx0XHRcdDogKHR5cGVvZiB0YWdEYXRhID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgdGFnRGF0YSA9PT0gJ251bWJlcicpID8gW1N0cmluZyh0YWdEYXRhKV0gOiBbXTtcclxuXHRcdHlhbWxUYWdzID0gcmF3VGFncy5tYXAodGFnID0+IHRhZy5yZXBsYWNlKC9eIy8sICcnKSk7XHJcblx0fVxyXG5cclxuXHQvLyBHZXQgdGFncyBpbiBZQU1MICsgbm90ZSBib2R5XHJcblx0bGV0IGFsbFRhZ3NWYWx1ZSA9IGVudHJ5LmdldFZhbHVlKCdmaWxlLnRhZ3MnKSBhcyB7IGRhdGE/OiB1bmtub3duIH0gfCBudWxsO1xyXG5cdGxldCB0YWdzOiBzdHJpbmdbXSA9IFtdO1xyXG5cclxuXHRcdGlmIChhbGxUYWdzVmFsdWUgJiYgYWxsVGFnc1ZhbHVlLmRhdGEgIT0gbnVsbCkge1xyXG5cdFx0XHRjb25zdCB0YWdEYXRhID0gYWxsVGFnc1ZhbHVlLmRhdGE7XHJcblx0XHRcdGNvbnN0IHJhd1RhZ3MgPSBBcnJheS5pc0FycmF5KHRhZ0RhdGEpXHJcblx0XHRcdFx0PyB0YWdEYXRhLm1hcCgodDogdW5rbm93bikgPT4ge1xyXG5cdFx0XHRcdFx0aWYgKHQgJiYgdHlwZW9mIHQgPT09ICdvYmplY3QnICYmIHQgIT09IG51bGwgJiYgJ2RhdGEnIGluIHQpIHtcclxuXHRcdFx0XHRcdFx0Y29uc3QgaXRlbURhdGEgPSAodCBhcyB7IGRhdGE6IHVua25vd24gfSkuZGF0YTtcclxuXHRcdFx0XHRcdFx0aWYgKGl0ZW1EYXRhICYmIHR5cGVvZiBpdGVtRGF0YSA9PT0gJ29iamVjdCcgJiYgaXRlbURhdGEgIT09IG51bGwpIHtcclxuXHRcdFx0XHRcdFx0XHRyZXR1cm4gSlNPTi5zdHJpbmdpZnkoaXRlbURhdGEpO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdHJldHVybiBTdHJpbmcoaXRlbURhdGEpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0aWYgKHQgJiYgdHlwZW9mIHQgPT09ICdvYmplY3QnICYmIHQgIT09IG51bGwpIHtcclxuXHRcdFx0XHRcdFx0cmV0dXJuIEpTT04uc3RyaW5naWZ5KHQpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0cmV0dXJuICh0eXBlb2YgdCA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIHQgPT09ICdudW1iZXInKSA/IFN0cmluZyh0KSA6ICcnO1xyXG5cdFx0XHRcdH0pLmZpbHRlcigodCk6IHQgaXMgc3RyaW5nID0+IHR5cGVvZiB0ID09PSAnc3RyaW5nJyAmJiB0Lmxlbmd0aCA+IDApXHJcblx0XHRcdFx0OiAoKCkgPT4ge1xyXG5cdFx0XHRcdFx0aWYgKHRhZ0RhdGEgJiYgdHlwZW9mIHRhZ0RhdGEgPT09ICdvYmplY3QnICYmIHRhZ0RhdGEgIT09IG51bGwpIHtcclxuXHRcdFx0XHRcdFx0cmV0dXJuIFtKU09OLnN0cmluZ2lmeSh0YWdEYXRhKV07XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRyZXR1cm4gKHR5cGVvZiB0YWdEYXRhID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgdGFnRGF0YSA9PT0gJ251bWJlcicpID8gW1N0cmluZyh0YWdEYXRhKV0gOiBbXTtcclxuXHRcdFx0XHR9KSgpO1xyXG5cdFx0XHR0YWdzID0gcmF3VGFncy5tYXAodGFnID0+IHRhZy5yZXBsYWNlKC9eIy8sICcnKSk7XHJcblx0XHR9IGVsc2UgaWYgKCFhbGxUYWdzVmFsdWUgJiYgYXBwKSB7XHJcblx0XHRcdC8vIEZvciBNRFggZmlsZXMsIHVzZSBZQU1MIHRhZ3MgKG5vIGJvZHkgdGFncyBzaW5jZSBtZXRhZGF0YSBjYWNoZSBkb2Vzbid0IHdvcmspXHJcblx0XHRcdGNvbnN0IGZpbGUgPSBhcHAudmF1bHQuZ2V0QWJzdHJhY3RGaWxlQnlQYXRoKGVudHJ5LmZpbGUucGF0aCk7XHJcblx0XHRcdGlmIChmaWxlIGluc3RhbmNlb2YgVEZpbGUgJiYgZmlsZS5leHRlbnNpb24gPT09ICdtZHgnKSB7XHJcblx0XHRcdFx0Ly8gRm9yIE1EWCwgZmlsZS50YWdzIGlzIHNhbWUgYXMgbm90ZS50YWdzIChubyBib2R5IHBhcnNpbmcpXHJcblx0XHRcdFx0Ly8gRnJvbnRtYXR0ZXIgYWxyZWFkeSBsb2FkZWQgYWJvdmUgaWYgbmVlZGVkXHJcblx0XHRcdFx0dGFncyA9IFsuLi55YW1sVGFnc107XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0Ly8gR2V0IHRpbWVzdGFtcHNcclxuXHRjb25zdCBjdGltZSA9IGVudHJ5LmZpbGUuc3RhdC5jdGltZTtcclxuXHRjb25zdCBtdGltZSA9IGVudHJ5LmZpbGUuc3RhdC5tdGltZTtcclxuXHJcblx0Ly8gR2V0IHRhZ3MgZnJvbSBzcGVjaWZpZWQgcHJvcGVydHkgaWYgZW5hYmxlZFxyXG5cdGxldCBkaXNwbGF5VGFnczogc3RyaW5nW10gPSBbXTtcclxuXHRpZiAoc2V0dGluZ3Muc2hvd1RhZ3MgJiYgc2V0dGluZ3MudGFnc1Byb3BlcnR5KSB7XHJcblx0XHRjb25zdCB0YWdzVmFsdWUgPSBhd2FpdCBnZXRGaXJzdEJhc2VzUHJvcGVydHlWYWx1ZShlbnRyeSwgc2V0dGluZ3MudGFnc1Byb3BlcnR5LCBhcHApIGFzIHsgZGF0YT86IHVua25vd24gfSB8IG51bGw7XHJcblx0XHRpZiAodGFnc1ZhbHVlICYmIHRhZ3NWYWx1ZS5kYXRhICE9IG51bGwpIHtcclxuXHRcdFx0Y29uc3QgdGFnRGF0YSA9IHRhZ3NWYWx1ZS5kYXRhO1xyXG5cdFx0XHRpZiAoQXJyYXkuaXNBcnJheSh0YWdEYXRhKSkge1xyXG5cdFx0XHRcdGRpc3BsYXlUYWdzID0gdGFnRGF0YS5tYXAoKHQ6IHVua25vd24pID0+IHtcclxuXHRcdFx0XHRcdGlmICh0ICYmIHR5cGVvZiB0ID09PSAnb2JqZWN0JyAmJiAnZGF0YScgaW4gdCkge1xyXG5cdFx0XHRcdFx0XHRyZXR1cm4gU3RyaW5nKCh0IGFzIHsgZGF0YTogdW5rbm93biB9KS5kYXRhKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdHJldHVybiAodHlwZW9mIHQgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiB0ID09PSAnbnVtYmVyJykgPyBTdHJpbmcodCkgOiAnJztcclxuXHRcdFx0XHR9KS5maWx0ZXIoKHQpOiB0IGlzIHN0cmluZyA9PiB0eXBlb2YgdCA9PT0gJ3N0cmluZycgJiYgdC5sZW5ndGggPiAwKTtcclxuXHRcdFx0fSBlbHNlIGlmICh0eXBlb2YgdGFnRGF0YSA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIHRhZ0RhdGEgPT09ICdudW1iZXInKSB7XHJcblx0XHRcdFx0ZGlzcGxheVRhZ3MgPSBbU3RyaW5nKHRhZ0RhdGEpXTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0Ly8gQ3JlYXRlIGJhc2UgY2FyZCBkYXRhXHJcblx0Y29uc3QgY2FyZERhdGE6IENhcmREYXRhID0ge1xyXG5cdFx0cGF0aCxcclxuXHRcdG5hbWU6IGZpbGVOYW1lLFxyXG5cdFx0dGl0bGUsXHJcblx0XHR0YWdzLFxyXG5cdFx0eWFtbFRhZ3MsXHJcblx0XHRjdGltZSxcclxuXHRcdG10aW1lLFxyXG5cdFx0Zm9sZGVyUGF0aCxcclxuXHRcdHNuaXBwZXQsXHJcblx0XHRpbWFnZVVybCxcclxuXHRcdGhhc0ltYWdlQXZhaWxhYmxlOiBoYXNJbWFnZUF2YWlsYWJsZSB8fCBmYWxzZSxcclxuXHRcdGRpc3BsYXlUYWdzOiBkaXNwbGF5VGFncy5sZW5ndGggPiAwID8gZGlzcGxheVRhZ3MgOiB1bmRlZmluZWRcclxuXHR9O1xyXG5cclxuXHQvLyBSZXNvbHZlIHByb3BlcnRpZXNcclxuXHRjb25zdCBwcm9wcyA9IFtcclxuXHRcdHNldHRpbmdzLnByb3BlcnR5RGlzcGxheTEsXHJcblx0XHRzZXR0aW5ncy5wcm9wZXJ0eURpc3BsYXkyLFxyXG5cdFx0c2V0dGluZ3MucHJvcGVydHlEaXNwbGF5MyxcclxuXHRcdHNldHRpbmdzLnByb3BlcnR5RGlzcGxheTQsXHJcblx0XHRzZXR0aW5ncy5wcm9wZXJ0eURpc3BsYXk1LFxyXG5cdFx0c2V0dGluZ3MucHJvcGVydHlEaXNwbGF5NixcclxuXHRcdHNldHRpbmdzLnByb3BlcnR5RGlzcGxheTcsXHJcblx0XHRzZXR0aW5ncy5wcm9wZXJ0eURpc3BsYXk4LFxyXG5cdFx0c2V0dGluZ3MucHJvcGVydHlEaXNwbGF5OSxcclxuXHRcdHNldHRpbmdzLnByb3BlcnR5RGlzcGxheTEwLFxyXG5cdFx0c2V0dGluZ3MucHJvcGVydHlEaXNwbGF5MTEsXHJcblx0XHRzZXR0aW5ncy5wcm9wZXJ0eURpc3BsYXkxMixcclxuXHRcdHNldHRpbmdzLnByb3BlcnR5RGlzcGxheTEzLFxyXG5cdFx0c2V0dGluZ3MucHJvcGVydHlEaXNwbGF5MTRcclxuXHRdO1xyXG5cclxuXHQvLyBEZXRlY3QgZHVwbGljYXRlc1xyXG5cdGNvbnN0IHNlZW4gPSBuZXcgU2V0PHN0cmluZz4oKTtcclxuXHRjb25zdCBlZmZlY3RpdmVQcm9wcyA9IHByb3BzLm1hcChwcm9wID0+IHtcclxuXHRcdGlmICghcHJvcCB8fCBwcm9wID09PSAnJykgcmV0dXJuICcnO1xyXG5cdFx0aWYgKHNlZW4uaGFzKHByb3ApKSByZXR1cm4gJyc7XHJcblx0XHRzZWVuLmFkZChwcm9wKTtcclxuXHRcdHJldHVybiBwcm9wO1xyXG5cdH0pO1xyXG5cclxuXHQvLyBTdG9yZSBwcm9wZXJ0eSBuYW1lc1xyXG5cdGNhcmREYXRhLnByb3BlcnR5TmFtZTEgPSBlZmZlY3RpdmVQcm9wc1swXSB8fCB1bmRlZmluZWQ7XHJcblx0Y2FyZERhdGEucHJvcGVydHlOYW1lMiA9IGVmZmVjdGl2ZVByb3BzWzFdIHx8IHVuZGVmaW5lZDtcclxuXHRjYXJkRGF0YS5wcm9wZXJ0eU5hbWUzID0gZWZmZWN0aXZlUHJvcHNbMl0gfHwgdW5kZWZpbmVkO1xyXG5cdGNhcmREYXRhLnByb3BlcnR5TmFtZTQgPSBlZmZlY3RpdmVQcm9wc1szXSB8fCB1bmRlZmluZWQ7XHJcblx0Y2FyZERhdGEucHJvcGVydHlOYW1lNSA9IGVmZmVjdGl2ZVByb3BzWzRdIHx8IHVuZGVmaW5lZDtcclxuXHRjYXJkRGF0YS5wcm9wZXJ0eU5hbWU2ID0gZWZmZWN0aXZlUHJvcHNbNV0gfHwgdW5kZWZpbmVkO1xyXG5cdGNhcmREYXRhLnByb3BlcnR5TmFtZTcgPSBlZmZlY3RpdmVQcm9wc1s2XSB8fCB1bmRlZmluZWQ7XHJcblx0Y2FyZERhdGEucHJvcGVydHlOYW1lOCA9IGVmZmVjdGl2ZVByb3BzWzddIHx8IHVuZGVmaW5lZDtcclxuXHRjYXJkRGF0YS5wcm9wZXJ0eU5hbWU5ID0gZWZmZWN0aXZlUHJvcHNbOF0gfHwgdW5kZWZpbmVkO1xyXG5cdGNhcmREYXRhLnByb3BlcnR5TmFtZTEwID0gZWZmZWN0aXZlUHJvcHNbOV0gfHwgdW5kZWZpbmVkO1xyXG5cdGNhcmREYXRhLnByb3BlcnR5TmFtZTExID0gZWZmZWN0aXZlUHJvcHNbMTBdIHx8IHVuZGVmaW5lZDtcclxuXHRjYXJkRGF0YS5wcm9wZXJ0eU5hbWUxMiA9IGVmZmVjdGl2ZVByb3BzWzExXSB8fCB1bmRlZmluZWQ7XHJcblx0Y2FyZERhdGEucHJvcGVydHlOYW1lMTMgPSBlZmZlY3RpdmVQcm9wc1sxMl0gfHwgdW5kZWZpbmVkO1xyXG5cdGNhcmREYXRhLnByb3BlcnR5TmFtZTE0ID0gZWZmZWN0aXZlUHJvcHNbMTNdIHx8IHVuZGVmaW5lZDtcclxuXHJcblx0Ly8gUmVzb2x2ZSBwcm9wZXJ0eSB2YWx1ZXNcclxuXHQvLyBSZXNvbHZlIHByb3BlcnR5IHZhbHVlcyAoYXN5bmMgZm9yIE1EWCBzdXBwb3J0LCBidXQgdXNlcyBjYWNoZSB3aGVuIGF2YWlsYWJsZSlcclxuXHRjYXJkRGF0YS5wcm9wZXJ0eTEgPSBlZmZlY3RpdmVQcm9wc1swXSA/IGF3YWl0IHJlc29sdmVCYXNlc1Byb3BlcnR5QXN5bmMoZWZmZWN0aXZlUHJvcHNbMF0sIGVudHJ5LCBjYXJkRGF0YSwgc2V0dGluZ3MsIGFwcCwgbWR4RnJvbnRtYXR0ZXJDYWNoZSkgOiBudWxsO1xyXG5cdGNhcmREYXRhLnByb3BlcnR5MiA9IGVmZmVjdGl2ZVByb3BzWzFdID8gYXdhaXQgcmVzb2x2ZUJhc2VzUHJvcGVydHlBc3luYyhlZmZlY3RpdmVQcm9wc1sxXSwgZW50cnksIGNhcmREYXRhLCBzZXR0aW5ncywgYXBwLCBtZHhGcm9udG1hdHRlckNhY2hlKSA6IG51bGw7XHJcblx0Y2FyZERhdGEucHJvcGVydHkzID0gZWZmZWN0aXZlUHJvcHNbMl0gPyBhd2FpdCByZXNvbHZlQmFzZXNQcm9wZXJ0eUFzeW5jKGVmZmVjdGl2ZVByb3BzWzJdLCBlbnRyeSwgY2FyZERhdGEsIHNldHRpbmdzLCBhcHAsIG1keEZyb250bWF0dGVyQ2FjaGUpIDogbnVsbDtcclxuXHRjYXJkRGF0YS5wcm9wZXJ0eTQgPSBlZmZlY3RpdmVQcm9wc1szXSA/IGF3YWl0IHJlc29sdmVCYXNlc1Byb3BlcnR5QXN5bmMoZWZmZWN0aXZlUHJvcHNbM10sIGVudHJ5LCBjYXJkRGF0YSwgc2V0dGluZ3MsIGFwcCwgbWR4RnJvbnRtYXR0ZXJDYWNoZSkgOiBudWxsO1xyXG5cdGNhcmREYXRhLnByb3BlcnR5NSA9IGVmZmVjdGl2ZVByb3BzWzRdID8gYXdhaXQgcmVzb2x2ZUJhc2VzUHJvcGVydHlBc3luYyhlZmZlY3RpdmVQcm9wc1s0XSwgZW50cnksIGNhcmREYXRhLCBzZXR0aW5ncywgYXBwLCBtZHhGcm9udG1hdHRlckNhY2hlKSA6IG51bGw7XHJcblx0Y2FyZERhdGEucHJvcGVydHk2ID0gZWZmZWN0aXZlUHJvcHNbNV0gPyBhd2FpdCByZXNvbHZlQmFzZXNQcm9wZXJ0eUFzeW5jKGVmZmVjdGl2ZVByb3BzWzVdLCBlbnRyeSwgY2FyZERhdGEsIHNldHRpbmdzLCBhcHAsIG1keEZyb250bWF0dGVyQ2FjaGUpIDogbnVsbDtcclxuXHRjYXJkRGF0YS5wcm9wZXJ0eTcgPSBlZmZlY3RpdmVQcm9wc1s2XSA/IGF3YWl0IHJlc29sdmVCYXNlc1Byb3BlcnR5QXN5bmMoZWZmZWN0aXZlUHJvcHNbNl0sIGVudHJ5LCBjYXJkRGF0YSwgc2V0dGluZ3MsIGFwcCwgbWR4RnJvbnRtYXR0ZXJDYWNoZSkgOiBudWxsO1xyXG5cdGNhcmREYXRhLnByb3BlcnR5OCA9IGVmZmVjdGl2ZVByb3BzWzddID8gYXdhaXQgcmVzb2x2ZUJhc2VzUHJvcGVydHlBc3luYyhlZmZlY3RpdmVQcm9wc1s3XSwgZW50cnksIGNhcmREYXRhLCBzZXR0aW5ncywgYXBwLCBtZHhGcm9udG1hdHRlckNhY2hlKSA6IG51bGw7XHJcblx0Y2FyZERhdGEucHJvcGVydHk5ID0gZWZmZWN0aXZlUHJvcHNbOF0gPyBhd2FpdCByZXNvbHZlQmFzZXNQcm9wZXJ0eUFzeW5jKGVmZmVjdGl2ZVByb3BzWzhdLCBlbnRyeSwgY2FyZERhdGEsIHNldHRpbmdzLCBhcHAsIG1keEZyb250bWF0dGVyQ2FjaGUpIDogbnVsbDtcclxuXHRjYXJkRGF0YS5wcm9wZXJ0eTEwID0gZWZmZWN0aXZlUHJvcHNbOV0gPyBhd2FpdCByZXNvbHZlQmFzZXNQcm9wZXJ0eUFzeW5jKGVmZmVjdGl2ZVByb3BzWzldLCBlbnRyeSwgY2FyZERhdGEsIHNldHRpbmdzLCBhcHAsIG1keEZyb250bWF0dGVyQ2FjaGUpIDogbnVsbDtcclxuXHRjYXJkRGF0YS5wcm9wZXJ0eTExID0gZWZmZWN0aXZlUHJvcHNbMTBdID8gYXdhaXQgcmVzb2x2ZUJhc2VzUHJvcGVydHlBc3luYyhlZmZlY3RpdmVQcm9wc1sxMF0sIGVudHJ5LCBjYXJkRGF0YSwgc2V0dGluZ3MsIGFwcCwgbWR4RnJvbnRtYXR0ZXJDYWNoZSkgOiBudWxsO1xyXG5cdGNhcmREYXRhLnByb3BlcnR5MTIgPSBlZmZlY3RpdmVQcm9wc1sxMV0gPyBhd2FpdCByZXNvbHZlQmFzZXNQcm9wZXJ0eUFzeW5jKGVmZmVjdGl2ZVByb3BzWzExXSwgZW50cnksIGNhcmREYXRhLCBzZXR0aW5ncywgYXBwLCBtZHhGcm9udG1hdHRlckNhY2hlKSA6IG51bGw7XHJcblx0Y2FyZERhdGEucHJvcGVydHkxMyA9IGVmZmVjdGl2ZVByb3BzWzEyXSA/IGF3YWl0IHJlc29sdmVCYXNlc1Byb3BlcnR5QXN5bmMoZWZmZWN0aXZlUHJvcHNbMTJdLCBlbnRyeSwgY2FyZERhdGEsIHNldHRpbmdzLCBhcHAsIG1keEZyb250bWF0dGVyQ2FjaGUpIDogbnVsbDtcclxuXHRjYXJkRGF0YS5wcm9wZXJ0eTE0ID0gZWZmZWN0aXZlUHJvcHNbMTNdID8gYXdhaXQgcmVzb2x2ZUJhc2VzUHJvcGVydHlBc3luYyhlZmZlY3RpdmVQcm9wc1sxM10sIGVudHJ5LCBjYXJkRGF0YSwgc2V0dGluZ3MsIGFwcCwgbWR4RnJvbnRtYXR0ZXJDYWNoZSkgOiBudWxsO1xyXG5cclxuXHRyZXR1cm4gY2FyZERhdGE7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBCYXRjaCB0cmFuc2Zvcm0gQmFzZXMgZW50cmllcyB0byBDYXJkRGF0YSBhcnJheVxyXG4gKiBTdXBwb3J0cyBNRFggZmlsZXMgdmlhIG1hbnVhbCBmcm9udG1hdHRlciBwYXJzaW5nXHJcbiAqL1xyXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdHJhbnNmb3JtQmFzZXNFbnRyaWVzKFxyXG5cdGVudHJpZXM6IEJhc2VzRW50cnlbXSxcclxuXHRzZXR0aW5nczogQ01TU2V0dGluZ3MsXHJcblx0c29ydE1ldGhvZDogc3RyaW5nLFxyXG5cdGlzU2h1ZmZsZWQ6IGJvb2xlYW4sXHJcblx0c25pcHBldHM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4sXHJcblx0aW1hZ2VzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCBzdHJpbmdbXT4sXHJcblx0aGFzSW1hZ2VBdmFpbGFibGU6IFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+LFxyXG5cdGFwcD86IEFwcCxcclxuXHRtZHhGcm9udG1hdHRlckNhY2hlPzogUmVjb3JkPHN0cmluZywgUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCBudWxsPlxyXG4pOiBQcm9taXNlPENhcmREYXRhW10+IHtcclxuXHRyZXR1cm4gUHJvbWlzZS5hbGwoZW50cmllcy5tYXAoZW50cnkgPT4gYmFzZXNFbnRyeVRvQ2FyZERhdGEoXHJcblx0XHRlbnRyeSxcclxuXHRcdHNldHRpbmdzLFxyXG5cdFx0c29ydE1ldGhvZCxcclxuXHRcdGlzU2h1ZmZsZWQsXHJcblx0XHRzbmlwcGV0c1tlbnRyeS5maWxlLnBhdGhdLFxyXG5cdFx0aW1hZ2VzW2VudHJ5LmZpbGUucGF0aF0sXHJcblx0XHRoYXNJbWFnZUF2YWlsYWJsZVtlbnRyeS5maWxlLnBhdGhdLFxyXG5cdFx0YXBwLFxyXG5cdFx0bWR4RnJvbnRtYXR0ZXJDYWNoZVxyXG5cdCkpKTtcclxufVxyXG5cclxuLyoqXHJcbiAqIFJlc29sdmUgcHJvcGVydHkgdmFsdWUgZm9yIEJhc2VzIGVudHJ5IChhc3luYyB2ZXJzaW9uIHdpdGggTURYIHN1cHBvcnQpXHJcbiAqL1xyXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVzb2x2ZUJhc2VzUHJvcGVydHlBc3luYyhcclxuXHRwcm9wZXJ0eU5hbWU6IHN0cmluZyxcclxuXHRlbnRyeTogQmFzZXNFbnRyeSxcclxuXHRjYXJkRGF0YTogQ2FyZERhdGEsXHJcblx0c2V0dGluZ3M6IENNU1NldHRpbmdzLFxyXG5cdGFwcD86IEFwcCxcclxuXHRtZHhGcm9udG1hdHRlckNhY2hlPzogUmVjb3JkPHN0cmluZywgUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCBudWxsPlxyXG4pOiBQcm9taXNlPHN0cmluZyB8IG51bGw+IHtcclxuXHRpZiAoIXByb3BlcnR5TmFtZSB8fCBwcm9wZXJ0eU5hbWUgPT09ICcnKSB7XHJcblx0XHRyZXR1cm4gbnVsbDtcclxuXHR9XHJcblxyXG5cdC8vIEhhbmRsZSBzcGVjaWFsIHByb3BlcnRpZXNcclxuXHRpZiAocHJvcGVydHlOYW1lID09PSAnZmlsZS5wYXRoJyB8fCBwcm9wZXJ0eU5hbWUgPT09ICdmaWxlIHBhdGgnKSB7XHJcblx0XHRyZXR1cm4gY2FyZERhdGEuZm9sZGVyUGF0aCB8fCBudWxsO1xyXG5cdH1cclxuXHJcblx0aWYgKHByb3BlcnR5TmFtZSA9PT0gJ3RhZ3MnIHx8IHByb3BlcnR5TmFtZSA9PT0gJ25vdGUudGFncycpIHtcclxuXHRcdHJldHVybiBjYXJkRGF0YS55YW1sVGFncy5sZW5ndGggPiAwID8gJ3RhZ3MnIDogbnVsbDtcclxuXHR9XHJcblxyXG5cdGlmIChwcm9wZXJ0eU5hbWUgPT09ICdmaWxlLnRhZ3MnIHx8IHByb3BlcnR5TmFtZSA9PT0gJ2ZpbGUgdGFncycpIHtcclxuXHRcdHJldHVybiBjYXJkRGF0YS50YWdzLmxlbmd0aCA+IDAgPyAndGFncycgOiBudWxsO1xyXG5cdH1cclxuXHJcblx0aWYgKHByb3BlcnR5TmFtZSA9PT0gJ2ZpbGUuY3RpbWUnIHx8IHByb3BlcnR5TmFtZSA9PT0gJ2NyZWF0ZWQgdGltZScpIHtcclxuXHRcdHJldHVybiBuZXcgRGF0ZShjYXJkRGF0YS5jdGltZSkudG9Mb2NhbGVEYXRlU3RyaW5nKCk7XHJcblx0fVxyXG5cclxuXHRpZiAocHJvcGVydHlOYW1lID09PSAnZmlsZS5tdGltZScgfHwgcHJvcGVydHlOYW1lID09PSAnbW9kaWZpZWQgdGltZScpIHtcclxuXHRcdHJldHVybiBuZXcgRGF0ZShjYXJkRGF0YS5tdGltZSkudG9Mb2NhbGVEYXRlU3RyaW5nKCk7XHJcblx0fVxyXG5cclxuXHQvLyBHZW5lcmljIHByb3BlcnR5OiByZWFkIGZyb20gZnJvbnRtYXR0ZXJcclxuXHQvLyBGb3IgTURYIGZpbGVzLCBjaGVjayBjYWNoZSBmaXJzdCB0byBhdm9pZCBhc3luYyBsb2FkaW5nXHJcblx0bGV0IHZhbHVlOiB1bmtub3duID0gbnVsbDtcclxuXHRpZiAoYXBwKSB7XHJcblx0XHRjb25zdCBmaWxlID0gYXBwLnZhdWx0LmdldEFic3RyYWN0RmlsZUJ5UGF0aChlbnRyeS5maWxlLnBhdGgpO1xyXG5cdFx0aWYgKGZpbGUgaW5zdGFuY2VvZiBURmlsZSAmJiBmaWxlLmV4dGVuc2lvbiA9PT0gJ21keCcgJiYgbWR4RnJvbnRtYXR0ZXJDYWNoZSkge1xyXG5cdFx0XHRjb25zdCBmcm9udG1hdHRlciA9IG1keEZyb250bWF0dGVyQ2FjaGVbZW50cnkuZmlsZS5wYXRoXTtcclxuXHRcdFx0aWYgKGZyb250bWF0dGVyKSB7XHJcblx0XHRcdFx0Ly8gU3RyaXAgXCJub3RlLlwiIHByZWZpeCBpZiBwcmVzZW50XHJcblx0XHRcdFx0Y29uc3QgY2xlYW5Qcm9wID0gcHJvcGVydHlOYW1lLnN0YXJ0c1dpdGgoJ25vdGUuJykgPyBwcm9wZXJ0eU5hbWUuc3Vic3RyaW5nKDUpIDogcHJvcGVydHlOYW1lO1xyXG5cdFx0XHRcdGNvbnN0IGZyb250bWF0dGVyVmFsdWUgPSBmcm9udG1hdHRlcltjbGVhblByb3BdO1xyXG5cdFx0XHRcdGlmIChmcm9udG1hdHRlclZhbHVlICE9IG51bGwpIHtcclxuXHRcdFx0XHRcdC8vIFJldHVybiBpbiBCYXNlcyBBUEkgZm9ybWF0OiB7IGRhdGE6IHZhbHVlIH1cclxuXHRcdFx0XHRcdHZhbHVlID0geyBkYXRhOiBmcm9udG1hdHRlclZhbHVlIH07XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fVxyXG5cdFxyXG5cdC8vIElmIGNhY2hlIGRpZG4ndCBoYXZlIGl0LCB1c2UgdGhlIGFzeW5jIG1ldGhvZFxyXG5cdGlmICghdmFsdWUpIHtcclxuXHRcdHZhbHVlID0gYXdhaXQgZ2V0Rmlyc3RCYXNlc1Byb3BlcnR5VmFsdWUoZW50cnksIHByb3BlcnR5TmFtZSwgYXBwKTtcclxuXHR9XHJcblx0aWYgKCF2YWx1ZSkgcmV0dXJuIG51bGw7XHJcblxyXG5cdC8vIFR5cGUgZ3VhcmQgZm9yIHZhbHVlXHJcblx0Y29uc3QgdmFsdWVPYmogPSB2YWx1ZSBhcyB7IGRhdGU/OiBEYXRlOyBkYXRhPzogdW5rbm93biB9IHwgbnVsbDtcclxuXHRpZiAoIXZhbHVlT2JqKSByZXR1cm4gbnVsbDtcclxuXHJcblx0Ly8gQ2hlY2sgaWYgaXQncyBhIGRhdGUvZGF0ZXRpbWUgdmFsdWVcclxuXHRpZiAoJ2RhdGUnIGluIHZhbHVlT2JqICYmIHZhbHVlT2JqLmRhdGUgaW5zdGFuY2VvZiBEYXRlKSB7XHJcblx0XHRyZXR1cm4gdmFsdWVPYmouZGF0ZS50b0xvY2FsZURhdGVTdHJpbmcoKTtcclxuXHR9XHJcblxyXG5cdC8vIEZvciBub24tZGF0ZSBwcm9wZXJ0aWVzLCBleHRyYWN0IC5kYXRhXHJcblx0Y29uc3QgZGF0YSA9IHZhbHVlT2JqLmRhdGE7XHJcblx0XHJcblx0Ly8gSU1QT1JUQU5UOiBSZXR1cm4gXCJcIiBmb3IgZW1wdHkgKHByb3BlcnR5IGV4aXN0cyBidXQgaXMgZW1wdHkpLCBudWxsIGZvciBtaXNzaW5nIChwcm9wZXJ0eSBkb2Vzbid0IGV4aXN0KVxyXG5cdC8vIFRoaXMgbWF0Y2hlcyBEeW5hbWljIFZpZXdzIGJlaGF2aW9yIGZvciBoaWRlIG1pc3NpbmcvZW1wdHkgcHJvcGVydGllc1xyXG5cdGlmIChkYXRhID09IG51bGwpIHtcclxuXHRcdHJldHVybiBudWxsOyAvLyBQcm9wZXJ0eSBkb2Vzbid0IGV4aXN0XHJcblx0fVxyXG5cdFxyXG5cdGlmIChkYXRhID09PSAnJykge1xyXG5cdFx0cmV0dXJuIFwiXCI7IC8vIFByb3BlcnR5IGV4aXN0cyBidXQgaXMgZW1wdHlcclxuXHR9XHJcblxyXG5cdC8vIEhhbmRsZSBhcnJheXMgKGUuZy4sIGFsaWFzZXMsIGxpc3RzKVxyXG5cdC8vIENoZWNrIGlmIGRhdGEgaXMgYWxyZWFkeSBhIHN0cmluZyB0aGF0IG1pZ2h0IGJlIGR1cGxpY2F0ZWRcclxuXHRpZiAodHlwZW9mIGRhdGEgPT09ICdzdHJpbmcnKSB7XHJcblx0XHRjb25zdCB0cmltbWVkID0gZGF0YS50cmltKCk7XHJcblx0XHRpZiAodHJpbW1lZC5sZW5ndGggPT09IDApIHtcclxuXHRcdFx0cmV0dXJuIFwiXCI7IC8vIEVtcHR5IHN0cmluZ1xyXG5cdFx0fVxyXG5cdFx0Ly8gUmVtb3ZlIGR1cGxpY2F0aW9uIGlmIHByZXNlbnQgKGhhbmRsZXMgY2FzZXMgd2hlcmUgQmFzZXMgcmV0dXJucyBkdXBsaWNhdGVkIHN0cmluZ3MpXHJcblx0XHRyZXR1cm4gcmVtb3ZlRHVwbGljYXRpb24odHJpbW1lZCk7XHJcblx0fVxyXG5cdFxyXG5cdGlmIChBcnJheS5pc0FycmF5KGRhdGEpKSB7XHJcblx0XHRpZiAoZGF0YS5sZW5ndGggPT09IDApIHtcclxuXHRcdFx0cmV0dXJuIFwiXCI7IC8vIEVtcHR5IGFycmF5XHJcblx0XHR9XHJcblx0XHQvLyBDb252ZXJ0IGFycmF5IGl0ZW1zIHRvIHN0cmluZ3MgYW5kIGpvaW4sIHJlbW92aW5nIGR1cGxpY2F0ZXNcclxuXHRcdGNvbnN0IHVuaXF1ZUl0ZW1zID0gbmV3IFNldDxzdHJpbmc+KCk7XHJcblx0XHRjb25zdCByZXN1bHQ6IHN0cmluZ1tdID0gW107XHJcblx0XHRcclxuXHRcdGZvciAoY29uc3QgaXRlbSBvZiBkYXRhKSB7XHJcblx0XHRcdGxldCBzdHI6IHN0cmluZztcclxuXHRcdFx0aWYgKGl0ZW0gJiYgdHlwZW9mIGl0ZW0gPT09ICdvYmplY3QnICYmICdkYXRhJyBpbiBpdGVtKSB7XHJcblx0XHRcdFx0Y29uc3QgaXRlbURhdGEgPSAoaXRlbSBhcyB7IGRhdGE6IHVua25vd24gfSkuZGF0YTtcclxuXHRcdFx0XHQvLyBIYW5kbGUgbmVzdGVkIGRhdGEgc3RydWN0dXJlcyAtIGlmIGRhdGEgaXRzZWxmIGlzIGFuIG9iamVjdCB3aXRoIGRhdGEsIGV4dHJhY3QgcmVjdXJzaXZlbHlcclxuXHRcdFx0XHRpZiAoaXRlbURhdGEgJiYgdHlwZW9mIGl0ZW1EYXRhID09PSAnb2JqZWN0JyAmJiAhQXJyYXkuaXNBcnJheShpdGVtRGF0YSkgJiYgJ2RhdGEnIGluIGl0ZW1EYXRhKSB7XHJcblx0XHRcdFx0XHRzdHIgPSBTdHJpbmcoKGl0ZW1EYXRhIGFzIHsgZGF0YTogdW5rbm93biB9KS5kYXRhKTtcclxuXHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0c3RyID0gU3RyaW5nKGl0ZW1EYXRhKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0gZWxzZSBpZiAoaXRlbSAmJiB0eXBlb2YgaXRlbSA9PT0gJ29iamVjdCcgJiYgaXRlbSAhPT0gbnVsbCkge1xyXG5cdFx0XHRcdC8vIElmIGl0ZW0gaXMgYW4gb2JqZWN0IGJ1dCBkb2Vzbid0IGhhdmUgJ2RhdGEnLCB0cnkgdG8gZXh0cmFjdCB2YWx1ZSBkaXJlY3RseVxyXG5cdFx0XHRcdC8vIFRoaXMgaGFuZGxlcyBjYXNlcyB3aGVyZSBCYXNlcyBtaWdodCByZXR1cm4ge3ZhbHVlOiBcIi4uLlwifSBvciBzaW1pbGFyXHJcblx0XHRcdFx0c3RyID0gU3RyaW5nKGl0ZW0pO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdHN0ciA9IFN0cmluZyhpdGVtKTtcclxuXHRcdFx0fVxyXG5cdFx0XHRcclxuXHRcdFx0Ly8gUmVtb3ZlIGR1cGxpY2F0aW9uIEJFRk9SRSBjaGVja2luZyB1bmlxdWVuZXNzIChoYW5kbGVzIGNhc2VzIHdoZXJlIEJhc2VzIHJldHVybnMgZHVwbGljYXRlZCBzdHJpbmdzKVxyXG5cdFx0XHRjb25zdCB0cmltbWVkID0gc3RyLnRyaW0oKTtcclxuXHRcdFx0aWYgKHRyaW1tZWQgJiYgdHJpbW1lZCAhPT0gJycpIHtcclxuXHRcdFx0XHRjb25zdCBkZWR1cGxpY2F0ZWQgPSByZW1vdmVEdXBsaWNhdGlvbih0cmltbWVkKTtcclxuXHRcdFx0XHRpZiAoZGVkdXBsaWNhdGVkICYmIGRlZHVwbGljYXRlZCAhPT0gJycgJiYgIXVuaXF1ZUl0ZW1zLmhhcyhkZWR1cGxpY2F0ZWQpKSB7XHJcblx0XHRcdFx0XHR1bmlxdWVJdGVtcy5hZGQoZGVkdXBsaWNhdGVkKTtcclxuXHRcdFx0XHRcdHJlc3VsdC5wdXNoKGRlZHVwbGljYXRlZCk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHRcclxuXHRcdGlmIChyZXN1bHQubGVuZ3RoID4gMCkge1xyXG5cdFx0XHRyZXR1cm4gcmVzdWx0LmpvaW4oZ2V0TGlzdFNlcGFyYXRvcigpKTtcclxuXHRcdH1cclxuXHRcdHJldHVybiBudWxsO1xyXG5cdH1cclxuXHJcblx0Ly8gQ29udmVydCB0byBzdHJpbmdcclxuXHRpZiAodHlwZW9mIGRhdGEgPT09ICdzdHJpbmcnKSB7XHJcblx0XHRsZXQgc3RyID0gZGF0YS50cmltKCk7XHJcblx0XHRpZiAoc3RyLmxlbmd0aCA9PT0gMCkge1xyXG5cdFx0XHRyZXR1cm4gbnVsbDtcclxuXHRcdH1cclxuXHRcdFxyXG5cdFx0Ly8gUmVtb3ZlIGFueSBkdXBsaWNhdGlvblxyXG5cdFx0cmV0dXJuIHJlbW92ZUR1cGxpY2F0aW9uKHN0cik7XHJcblx0fVxyXG5cdFxyXG5cdGlmICh0eXBlb2YgZGF0YSA9PT0gJ251bWJlcicgfHwgdHlwZW9mIGRhdGEgPT09ICdib29sZWFuJykge1xyXG5cdFx0cmV0dXJuIFN0cmluZyhkYXRhKTtcclxuXHR9XHJcblxyXG5cdHJldHVybiBudWxsO1xyXG59XHJcblxyXG4iLCAiLyoqXG4gKiBQcm9wZXJ0eSB1dGlsaXR5IGZ1bmN0aW9uc1xuICogUG9ydGVkIGZyb20gRHluYW1pYyBWaWV3c1xuICogVXBkYXRlZCB0byBzdXBwb3J0IE1EWCBmaWxlcyB2aWEgbWFudWFsIGZyb250bWF0dGVyIHBhcnNpbmdcbiAqL1xuXG5pbXBvcnQgdHlwZSB7IEFwcCwgQmFzZXNFbnRyeSB9IGZyb20gJ29ic2lkaWFuJztcbmltcG9ydCB7IFRGaWxlIH0gZnJvbSAnb2JzaWRpYW4nO1xuaW1wb3J0IHsgZ2V0RmlsZUZyb250bWF0dGVyIH0gZnJvbSAnLi9mcm9udG1hdHRlci1oZWxwZXInO1xuXG4vKipcbiAqIEdldCBmaXJzdCBub24tZW1wdHkgcHJvcGVydHkgdmFsdWUgZnJvbSBjb21tYS1zZXBhcmF0ZWQgbGlzdCAoQmFzZXMpXG4gKiBTdXBwb3J0cyBNRFggZmlsZXMgdmlhIG1hbnVhbCBmcm9udG1hdHRlciBwYXJzaW5nIHdoZW4gQmFzZXMgQVBJIGZhaWxzXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRGaXJzdEJhc2VzUHJvcGVydHlWYWx1ZShcblx0ZW50cnk6IEJhc2VzRW50cnksIFxuXHRwcm9wZXJ0eVN0cmluZzogc3RyaW5nLFxuXHRhcHA/OiBBcHBcbik6IFByb21pc2U8dW5rbm93bj4ge1xuXHRpZiAoIXByb3BlcnR5U3RyaW5nIHx8ICFwcm9wZXJ0eVN0cmluZy50cmltKCkpIHJldHVybiBudWxsO1xuXG5cdGNvbnN0IHByb3BlcnRpZXMgPSBwcm9wZXJ0eVN0cmluZy5zcGxpdCgnLCcpLm1hcChwID0+IHAudHJpbSgpKS5maWx0ZXIocCA9PiBwKTtcblxuXHRmb3IgKGNvbnN0IHByb3Agb2YgcHJvcGVydGllcykge1xuXHRcdGNvbnN0IHZhbHVlID0gZW50cnkuZ2V0VmFsdWUocHJvcCBhcyBgbm90ZS4ke3N0cmluZ31gIHwgYGZvcm11bGEuJHtzdHJpbmd9YCB8IGBmaWxlLiR7c3RyaW5nfWApO1xuXG5cdFx0Ly8gQ2hlY2sgaWYgcHJvcGVydHkgZXhpc3RzIGFuZCBoYXMgYSB2YWx1ZVxuXHRcdGNvbnN0IHZhbHVlT2JqID0gdmFsdWUgYXMgeyBkYXRlPzogRGF0ZTsgZGF0YT86IHVua25vd24gfSB8IG51bGw7XG5cdFx0Y29uc3QgcHJvcGVydHlFeGlzdHMgPSB2YWx1ZU9iaiAmJiAoXG5cdFx0XHQoJ2RhdGUnIGluIHZhbHVlT2JqICYmIHZhbHVlT2JqLmRhdGUgaW5zdGFuY2VvZiBEYXRlKSB8fFxuXHRcdFx0KCdkYXRhJyBpbiB2YWx1ZU9iaiAmJiB2YWx1ZU9iai5kYXRhICE9IG51bGwpXG5cdFx0KTtcblxuXHRcdGlmIChwcm9wZXJ0eUV4aXN0cykge1xuXHRcdFx0cmV0dXJuIHZhbHVlO1xuXHRcdH1cblxuXHRcdC8vIEZvciBNRFggZmlsZXMsIGZhbGxiYWNrIHRvIG1hbnVhbCBmcm9udG1hdHRlciBwYXJzaW5nIGlmIEJhc2VzIEFQSSByZXR1cm5lZCBudWxsXG5cdFx0aWYgKCFwcm9wZXJ0eUV4aXN0cyAmJiBhcHApIHtcblx0XHRcdGNvbnN0IGZpbGUgPSBhcHAudmF1bHQuZ2V0QWJzdHJhY3RGaWxlQnlQYXRoKGVudHJ5LmZpbGUucGF0aCk7XG5cdFx0XHRpZiAoZmlsZSBpbnN0YW5jZW9mIFRGaWxlICYmIGZpbGUuZXh0ZW5zaW9uID09PSAnbWR4Jykge1xuXHRcdFx0XHRjb25zdCBmcm9udG1hdHRlciA9IGF3YWl0IGdldEZpbGVGcm9udG1hdHRlcihhcHAsIGZpbGUpO1xuXHRcdFx0XHRpZiAoZnJvbnRtYXR0ZXIpIHtcblx0XHRcdFx0XHQvLyBTdHJpcCBcIm5vdGUuXCIgcHJlZml4IGlmIHByZXNlbnRcblx0XHRcdFx0XHRjb25zdCBjbGVhblByb3AgPSBwcm9wLnN0YXJ0c1dpdGgoJ25vdGUuJykgPyBwcm9wLnN1YnN0cmluZyg1KSA6IHByb3A7XG5cdFx0XHRcdFx0Y29uc3QgZnJvbnRtYXR0ZXJWYWx1ZSA9IGZyb250bWF0dGVyW2NsZWFuUHJvcF07XG5cdFx0XHRcdFx0XG5cdFx0XHRcdFx0aWYgKGZyb250bWF0dGVyVmFsdWUgIT0gbnVsbCkge1xuXHRcdFx0XHRcdFx0Ly8gUmV0dXJuIGluIEJhc2VzIEFQSSBmb3JtYXQ6IHsgZGF0YTogdmFsdWUgfVxuXHRcdFx0XHRcdFx0cmV0dXJuIHsgZGF0YTogZnJvbnRtYXR0ZXJWYWx1ZSB9O1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiBudWxsO1xufVxuXG4vKipcbiAqIEdldCBmaXJzdCBpbWFnZSB2YWx1ZSBmcm9tIHByb3BlcnR5IChCYXNlcylcbiAqIE9ubHkgYWNjZXB0cyB0ZXh0IGFuZCBsaXN0IHByb3BlcnR5IHR5cGVzIGNvbnRhaW5pbmcgaW1hZ2UgcGF0aHMvVVJMc1xuICogUmV0dXJucyBmaXJzdCBpbWFnZSBwYXRoL1VSTCBmb3VuZCwgb3IgZW1wdHkgYXJyYXkgaWYgbm9uZVxuICogU3VwcG9ydHMgTURYIGZpbGVzIHZpYSBtYW51YWwgZnJvbnRtYXR0ZXIgcGFyc2luZyB3aGVuIEJhc2VzIEFQSSBmYWlsc1xuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0QWxsQmFzZXNJbWFnZVByb3BlcnR5VmFsdWVzKFxuXHRlbnRyeTogQmFzZXNFbnRyeSwgXG5cdHByb3BlcnR5U3RyaW5nOiBzdHJpbmcsXG5cdGFwcD86IEFwcFxuKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuXHRpZiAoIXByb3BlcnR5U3RyaW5nIHx8ICFwcm9wZXJ0eVN0cmluZy50cmltKCkpIHJldHVybiBbXTtcblxuXHQvLyBVc2UgZmlyc3QgcHJvcGVydHkgb25seSAobm90IGNvbW1hLXNlcGFyYXRlZClcblx0Y29uc3QgcHJvcCA9IHByb3BlcnR5U3RyaW5nLnNwbGl0KCcsJylbMF0udHJpbSgpO1xuXHRpZiAoIXByb3ApIHJldHVybiBbXTtcblxuXHRjb25zdCB2YWx1ZSA9IGVudHJ5LmdldFZhbHVlKHByb3AgYXMgYG5vdGUuJHtzdHJpbmd9YCB8IGBmb3JtdWxhLiR7c3RyaW5nfWAgfCBgZmlsZS4ke3N0cmluZ31gKSBhcyB7IGRhdGE/OiB1bmtub3duOyBkYXRlPzogRGF0ZSB9IHwgbnVsbDtcblxuXHRsZXQgZGF0YTogdW5rbm93biA9IG51bGw7XG5cblx0Ly8gSWYgQmFzZXMgQVBJIHJldHVybmVkIGEgdmFsdWUsIHVzZSBpdFxuXHRpZiAodmFsdWUgJiYgJ2RhdGEnIGluIHZhbHVlKSB7XG5cdFx0ZGF0YSA9IHZhbHVlLmRhdGE7XG5cdH0gZWxzZSBpZiAoYXBwKSB7XG5cdFx0Ly8gRm9yIE1EWCBmaWxlcywgZmFsbGJhY2sgdG8gbWFudWFsIGZyb250bWF0dGVyIHBhcnNpbmdcblx0XHRjb25zdCBmaWxlID0gYXBwLnZhdWx0LmdldEFic3RyYWN0RmlsZUJ5UGF0aChlbnRyeS5maWxlLnBhdGgpO1xuXHRcdGlmIChmaWxlIGluc3RhbmNlb2YgVEZpbGUgJiYgZmlsZS5leHRlbnNpb24gPT09ICdtZHgnKSB7XG5cdFx0XHRjb25zdCBmcm9udG1hdHRlciA9IGF3YWl0IGdldEZpbGVGcm9udG1hdHRlcihhcHAsIGZpbGUpO1xuXHRcdFx0aWYgKGZyb250bWF0dGVyKSB7XG5cdFx0XHRcdC8vIFN0cmlwIFwibm90ZS5cIiBwcmVmaXggaWYgcHJlc2VudFxuXHRcdFx0XHRjb25zdCBjbGVhblByb3AgPSBwcm9wLnN0YXJ0c1dpdGgoJ25vdGUuJykgPyBwcm9wLnN1YnN0cmluZyg1KSA6IHByb3A7XG5cdFx0XHRcdGRhdGEgPSBmcm9udG1hdHRlcltjbGVhblByb3BdO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8vIFNraXAgaWYgcHJvcGVydHkgZG9lc24ndCBleGlzdFxuXHRpZiAoZGF0YSA9PSBudWxsKSByZXR1cm4gW107XG5cblx0Y29uc3QgaW1hZ2VzOiBzdHJpbmdbXSA9IFtdO1xuXG5cdGlmIChBcnJheS5pc0FycmF5KGRhdGEpKSB7XG5cdFx0Ly8gTGlzdCBwcm9wZXJ0eSAtIGdldCBhbGwgdmFsdWVzXG5cdFx0Zm9yIChjb25zdCBpdGVtIG9mIGRhdGEpIHtcblx0XHRcdGlmICh0eXBlb2YgaXRlbSA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIGl0ZW0gPT09ICdudW1iZXInKSB7XG5cdFx0XHRcdGNvbnN0IHN0ciA9IFN0cmluZyhpdGVtKTtcblx0XHRcdFx0aWYgKHN0ciAmJiBzdHIudHJpbSgpKSB7XG5cdFx0XHRcdFx0aW1hZ2VzLnB1c2goc3RyKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fSBlbHNlIGlmIChkYXRhICE9PSAnJykge1xuXHRcdC8vIFRleHQgcHJvcGVydHkgLSBzaW5nbGUgdmFsdWVcblx0XHRpZiAodHlwZW9mIGRhdGEgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiBkYXRhID09PSAnbnVtYmVyJykge1xuXHRcdFx0Y29uc3Qgc3RyID0gU3RyaW5nKGRhdGEpO1xuXHRcdFx0aWYgKHN0ci50cmltKCkpIHtcblx0XHRcdFx0aW1hZ2VzLnB1c2goc3RyKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gaW1hZ2VzO1xufVxuXG4vKipcbiAqIFJlc29sdmUgYSBCYXNlcyBwcm9wZXJ0eSB2YWx1ZSB0byBhIHN0cmluZ1xuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZUJhc2VzUHJvcGVydHkoXG5cdHByb3BlcnR5TmFtZTogc3RyaW5nLFxuXHRlbnRyeTogQmFzZXNFbnRyeSxcblx0Y2FyZDogeyBwYXRoOiBzdHJpbmc7IHByb3BlcnRpZXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IH1cbik6IHN0cmluZyB8IG51bGwge1xuXHRpZiAoIXByb3BlcnR5TmFtZSB8fCBwcm9wZXJ0eU5hbWUgPT09ICcnKSByZXR1cm4gbnVsbDtcblxuXHQvLyBIYW5kbGUgc3BlY2lhbCBwcm9wZXJ0aWVzXG5cdGlmIChwcm9wZXJ0eU5hbWUgPT09ICdmaWxlLnBhdGgnIHx8IHByb3BlcnR5TmFtZSA9PT0gJ3BhdGgnIHx8IHByb3BlcnR5TmFtZSA9PT0gJ2ZpbGUgcGF0aCcpIHtcblx0XHRyZXR1cm4gY2FyZC5wYXRoO1xuXHR9XG5cblx0aWYgKHByb3BlcnR5TmFtZSA9PT0gJ2ZpbGUudGFncycgfHwgcHJvcGVydHlOYW1lID09PSAnZmlsZSB0YWdzJykge1xuXHRcdC8vIFJldHVybiB0YWdzIGFzIGNvbW1hLXNlcGFyYXRlZCBzdHJpbmdcblx0XHRjb25zdCB0YWdzID0gY2FyZC5wcm9wZXJ0aWVzLnRhZ3M7XG5cdFx0aWYgKEFycmF5LmlzQXJyYXkodGFncykpIHtcblx0XHRcdHJldHVybiB0YWdzLmpvaW4oJywgJyk7XG5cdFx0fVxuXHRcdGlmICh0YWdzICYmIHR5cGVvZiB0YWdzID09PSAnb2JqZWN0JyAmJiB0YWdzICE9PSBudWxsICYmICFBcnJheS5pc0FycmF5KHRhZ3MpKSB7XG5cdFx0XHRyZXR1cm4gSlNPTi5zdHJpbmdpZnkodGFncyk7XG5cdFx0fVxuXHRcdGlmICh0YWdzICE9PSBudWxsICYmIHRhZ3MgIT09IHVuZGVmaW5lZCAmJiAodHlwZW9mIHRhZ3MgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiB0YWdzID09PSAnbnVtYmVyJyB8fCB0eXBlb2YgdGFncyA9PT0gJ2Jvb2xlYW4nKSkge1xuXHRcdFx0cmV0dXJuIFN0cmluZyh0YWdzKTtcblx0XHR9XG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblxuXHRpZiAocHJvcGVydHlOYW1lID09PSAndGFncycgfHwgcHJvcGVydHlOYW1lID09PSAnbm90ZS50YWdzJykge1xuXHRcdGNvbnN0IHRhZ3MgPSBjYXJkLnByb3BlcnRpZXMudGFncztcblx0XHRpZiAoQXJyYXkuaXNBcnJheSh0YWdzKSkge1xuXHRcdFx0cmV0dXJuIHRhZ3Muam9pbignLCAnKTtcblx0XHR9XG5cdFx0aWYgKHRhZ3MgJiYgdHlwZW9mIHRhZ3MgPT09ICdvYmplY3QnICYmIHRhZ3MgIT09IG51bGwgJiYgIUFycmF5LmlzQXJyYXkodGFncykpIHtcblx0XHRcdHJldHVybiBKU09OLnN0cmluZ2lmeSh0YWdzKTtcblx0XHR9XG5cdFx0aWYgKHRhZ3MgIT09IG51bGwgJiYgdGFncyAhPT0gdW5kZWZpbmVkICYmICh0eXBlb2YgdGFncyA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIHRhZ3MgPT09ICdudW1iZXInIHx8IHR5cGVvZiB0YWdzID09PSAnYm9vbGVhbicpKSB7XG5cdFx0XHRyZXR1cm4gU3RyaW5nKHRhZ3MpO1xuXHRcdH1cblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXG5cdC8vIEdldCB2YWx1ZSBmcm9tIEJhc2VzRW50cnlcblx0dHJ5IHtcblx0XHRjb25zdCB2YWx1ZSA9IGVudHJ5LmdldFZhbHVlKHByb3BlcnR5TmFtZSBhcyBgbm90ZS4ke3N0cmluZ31gIHwgYGZvcm11bGEuJHtzdHJpbmd9YCB8IGBmaWxlLiR7c3RyaW5nfWApIGFzIHsgZGF0YT86IHVua25vd247IGRhdGU/OiBEYXRlIH0gfCBudWxsO1xuXHRcdFxuXHRcdGlmICghdmFsdWUpIHJldHVybiBudWxsO1xuXG5cdFx0Ly8gSGFuZGxlIGRhdGUgdmFsdWVzXG5cdFx0aWYgKCdkYXRlJyBpbiB2YWx1ZSAmJiB2YWx1ZS5kYXRlIGluc3RhbmNlb2YgRGF0ZSkge1xuXHRcdFx0cmV0dXJuIHZhbHVlLmRhdGUudG9Mb2NhbGVEYXRlU3RyaW5nKCk7XG5cdFx0fVxuXG5cdFx0Ly8gSGFuZGxlIGRhdGEgdmFsdWVzXG5cdFx0aWYgKCdkYXRhJyBpbiB2YWx1ZSkge1xuXHRcdFx0Y29uc3QgZGF0YSA9IHZhbHVlLmRhdGE7XG5cdFx0XHRpZiAoQXJyYXkuaXNBcnJheShkYXRhKSkge1xuXHRcdFx0XHRyZXR1cm4gZGF0YS5tYXAoU3RyaW5nKS5qb2luKCcsICcpO1xuXHRcdFx0fVxuXHRcdGlmIChkYXRhICE9IG51bGwgJiYgZGF0YSAhPT0gJycpIHtcblx0XHRcdGlmICh0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgJiYgZGF0YSAhPT0gbnVsbCAmJiAhQXJyYXkuaXNBcnJheShkYXRhKSkge1xuXHRcdFx0XHRyZXR1cm4gSlNPTi5zdHJpbmdpZnkoZGF0YSk7XG5cdFx0XHR9XG5cdFx0XHRpZiAodHlwZW9mIGRhdGEgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiBkYXRhID09PSAnbnVtYmVyJyB8fCB0eXBlb2YgZGF0YSA9PT0gJ2Jvb2xlYW4nKSB7XG5cdFx0XHRcdHJldHVybiBTdHJpbmcoZGF0YSk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gSlNPTi5zdHJpbmdpZnkoZGF0YSk7XG5cdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBudWxsO1xuXHR9IGNhdGNoIHtcblx0XHQvLyBGYWxsYmFjayB0byBjYXJkIHByb3BlcnRpZXNcblx0XHRjb25zdCBwcm9wVmFsdWUgPSBjYXJkLnByb3BlcnRpZXNbcHJvcGVydHlOYW1lXTtcblx0XHRpZiAocHJvcFZhbHVlICE9PSB1bmRlZmluZWQgJiYgcHJvcFZhbHVlICE9PSBudWxsKSB7XG5cdFx0XHRpZiAoQXJyYXkuaXNBcnJheShwcm9wVmFsdWUpKSB7XG5cdFx0XHRcdHJldHVybiBwcm9wVmFsdWUubWFwKFN0cmluZykuam9pbignLCAnKTtcblx0XHRcdH1cblx0XHRcdGlmICh0eXBlb2YgcHJvcFZhbHVlID09PSAnYm9vbGVhbicpIHtcblx0XHRcdFx0cmV0dXJuIHByb3BWYWx1ZSA/ICdZZXMnIDogJ05vJztcblx0XHRcdH1cblx0XHRcdGlmICh0eXBlb2YgcHJvcFZhbHVlID09PSAnb2JqZWN0JyAmJiBwcm9wVmFsdWUgIT09IG51bGwpIHtcblx0XHRcdFx0cmV0dXJuIEpTT04uc3RyaW5naWZ5KHByb3BWYWx1ZSk7XG5cdFx0XHR9XG5cdFx0XHRpZiAodHlwZW9mIHByb3BWYWx1ZSA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIHByb3BWYWx1ZSA9PT0gJ251bWJlcicgfHwgdHlwZW9mIHByb3BWYWx1ZSA9PT0gJ2Jvb2xlYW4nKSB7XG5cdFx0XHRcdHJldHVybiBTdHJpbmcocHJvcFZhbHVlKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBKU09OLnN0cmluZ2lmeShwcm9wVmFsdWUpO1xuXHRcdH1cblx0XHRyZXR1cm4gbnVsbDtcblx0fVxufVxuXG4vKipcbiAqIENvbnZlcnQgcHJvcGVydHkgbmFtZSB0byByZWFkYWJsZSBsYWJlbFxuICogVXNlcyBCYXNlcyBjb25maWcuZ2V0RGlzcGxheU5hbWUoKSBtZXRob2QgKHNhbWUgYXMgRHluYW1pYyBWaWV3cylcbiAqIFxuICogQHBhcmFtIHByb3BlcnR5TmFtZSAtIFRoZSBwcm9wZXJ0eSBuYW1lIChlLmcuLCBcImZvcm11bGEuU2x1Z1wiKVxuICogQHBhcmFtIGFwcCAtIE9ic2lkaWFuIGFwcCBpbnN0YW5jZSAodW51c2VkLCBrZXB0IGZvciBjb21wYXRpYmlsaXR5KVxuICogQHBhcmFtIGJhc2VzQ29uZmlnIC0gQmFzZXMgY29uZmlnIG9iamVjdCB0aGF0IGhhcyBnZXREaXNwbGF5TmFtZSBtZXRob2RcbiAqIEBwYXJhbSBiYXNlc0NvbnRyb2xsZXIgLSBPcHRpb25hbCBCYXNlcyBjb250cm9sbGVyICh1bnVzZWQsIGtlcHQgZm9yIGNvbXBhdGliaWxpdHkpXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRQcm9wZXJ0eUxhYmVsKFxuXHRwcm9wZXJ0eU5hbWU6IHN0cmluZywgXG5cdGFwcD86IEFwcCwgXG5cdGJhc2VzQ29uZmlnPzogeyBnZXQ/OiAoa2V5OiBzdHJpbmcpID0+IHVua25vd24gfSxcblx0YmFzZXNDb250cm9sbGVyPzogeyBnZXRQcm9wZXJ0eURpc3BsYXlOYW1lPzogKG5hbWU6IHN0cmluZykgPT4gc3RyaW5nIH1cbik6IHN0cmluZyB7XG5cdGlmICghcHJvcGVydHlOYW1lIHx8IHByb3BlcnR5TmFtZSA9PT0gJycpIHJldHVybiAnJztcblxuXHQvLyBVc2UgQmFzZXMgY29uZmlnLmdldERpc3BsYXlOYW1lKCkgbWV0aG9kIChzYW1lIGFzIER5bmFtaWMgVmlld3MpXG5cdGlmIChiYXNlc0NvbmZpZykge1xuXHRcdGNvbnN0IGNvbmZpZ1dpdGhEaXNwbGF5TmFtZSA9IGJhc2VzQ29uZmlnIGFzIHsgZ2V0RGlzcGxheU5hbWU/OiAobmFtZTogc3RyaW5nKSA9PiBzdHJpbmcgfTtcblx0XHRpZiAodHlwZW9mIGNvbmZpZ1dpdGhEaXNwbGF5TmFtZS5nZXREaXNwbGF5TmFtZSA9PT0gJ2Z1bmN0aW9uJykge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0Y29uc3QgZGlzcGxheU5hbWUgPSBjb25maWdXaXRoRGlzcGxheU5hbWUuZ2V0RGlzcGxheU5hbWUocHJvcGVydHlOYW1lKTtcblx0XHRcdFx0aWYgKGRpc3BsYXlOYW1lICYmIHR5cGVvZiBkaXNwbGF5TmFtZSA9PT0gJ3N0cmluZycgJiYgZGlzcGxheU5hbWUudHJpbSgpICE9PSAnJykge1xuXHRcdFx0XHRcdHJldHVybiBkaXNwbGF5TmFtZTtcblx0XHRcdFx0fVxuXHRcdFx0fSBjYXRjaCB7XG5cdFx0XHRcdC8vIEZhbGwgdGhyb3VnaCB0byByZXR1cm4gcHJvcGVydHkgbmFtZVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8vIEZhbGxiYWNrOiByZXR1cm4gcHJvcGVydHkgbmFtZSBhcy1pcyAoc2FtZSBhcyBEeW5hbWljIFZpZXdzKVxuXHRyZXR1cm4gcHJvcGVydHlOYW1lO1xufVxuXG5cbiIsICIvKipcbiAqIFV0aWxpdHkgZnVuY3Rpb25zIHRvIHJlYWQgU3R5bGUgU2V0dGluZ3MgdmFsdWVzIGZyb20gQ1NTIHZhcmlhYmxlcyBhbmQgYm9keSBjbGFzc2VzXG4gKiBCYXNlZCBvbiBEeW5hbWljIFZpZXdzIHN0eWxlLXNldHRpbmdzLnRzXG4gKi9cblxuLyoqXG4gKiBSZWFkIGEgQ1NTIHZhcmlhYmxlIHZhbHVlIGZyb20gdGhlIGRvY3VtZW50IGJvZHlcbiAqL1xuZnVuY3Rpb24gZ2V0Q1NTVmFyaWFibGUobmFtZTogc3RyaW5nLCBkZWZhdWx0VmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XG5cdGNvbnN0IHZhbHVlID0gZ2V0Q29tcHV0ZWRTdHlsZShkb2N1bWVudC5ib2R5KS5nZXRQcm9wZXJ0eVZhbHVlKG5hbWUpLnRyaW0oKTtcblx0cmV0dXJuIHZhbHVlIHx8IGRlZmF1bHRWYWx1ZTtcbn1cblxuLyoqXG4gKiBQYXJzZSBhIENTUyB2YXJpYWJsZSBhcyBhIG51bWJlciAocmVtb3ZpbmcgdW5pdHMgbGlrZSAncHgnKVxuICovXG5mdW5jdGlvbiBnZXRDU1NWYXJpYWJsZUFzTnVtYmVyKG5hbWU6IHN0cmluZywgZGVmYXVsdFZhbHVlOiBudW1iZXIpOiBudW1iZXIge1xuXHRjb25zdCB2YWx1ZSA9IGdldENTU1ZhcmlhYmxlKG5hbWUsIFwiXCIpO1xuXHRpZiAoIXZhbHVlKSByZXR1cm4gZGVmYXVsdFZhbHVlO1xuXHRjb25zdCBwYXJzZWQgPSBwYXJzZUZsb2F0KHZhbHVlKTtcblx0cmV0dXJuIGlzTmFOKHBhcnNlZCkgPyBkZWZhdWx0VmFsdWUgOiBwYXJzZWQ7XG59XG5cbi8qKlxuICogQ2hlY2sgaWYgYm9keSBoYXMgYSBzcGVjaWZpYyBjbGFzc1xuICovXG5mdW5jdGlvbiBoYXNCb2R5Q2xhc3MoY2xhc3NOYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcblx0cmV0dXJuIGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LmNvbnRhaW5zKGNsYXNzTmFtZSk7XG59XG5cbi8qKlxuICogR2V0IG1pbmltdW0gZ3JpZCBjb2x1bW5zIGZyb20gQ1NTIHZhcmlhYmxlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRNaW5HcmlkQ29sdW1ucygpOiBudW1iZXIge1xuXHRyZXR1cm4gZ2V0Q1NTVmFyaWFibGVBc051bWJlcihcIi0tYmFzZXMtY21zLW1pbi1ncmlkLWNvbHVtbnNcIiwgMSk7XG59XG5cbi8qKlxuICogR2V0IGNhcmQgc3BhY2luZyBmcm9tIENTUyB2YXJpYWJsZVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q2FyZFNwYWNpbmcoKTogbnVtYmVyIHtcblx0cmV0dXJuIGdldENTU1ZhcmlhYmxlQXNOdW1iZXIoXCItLWJhc2VzLWNtcy1jYXJkLXNwYWNpbmdcIiwgOCk7XG59XG5cbi8qKlxuICogR2V0IGNhcmQgcGFkZGluZyBjb250YWluZXIgZnJvbSBDU1MgdmFyaWFibGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldENhcmRQYWRkaW5nQ29udGFpbmVyKCk6IG51bWJlciB7XG5cdHJldHVybiBnZXRDU1NWYXJpYWJsZUFzTnVtYmVyKFwiLS1iYXNlcy1jbXMtY2FyZC1wYWRkaW5nLWNvbnRhaW5lclwiLCAxMik7XG59XG5cbi8qKlxuICogR2V0IGNhcmQgZWxlbWVudCBzcGFjaW5nIGZyb20gQ1NTIHZhcmlhYmxlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRFbGVtZW50U3BhY2luZygpOiBudW1iZXIge1xuXHRyZXR1cm4gZ2V0Q1NTVmFyaWFibGVBc051bWJlcihcIi0tYmFzZXMtY21zLWVsZW1lbnQtc3BhY2luZ1wiLCA4KTtcbn1cblxuLyoqXG4gKiBHZXQgY2FyZCBwYWRkaW5nIGZyb20gQ1NTIHZhcmlhYmxlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRDYXJkUGFkZGluZygpOiBudW1iZXIge1xuXHRyZXR1cm4gZ2V0Q1NTVmFyaWFibGVBc051bWJlcihcIi0tYmFzZXMtY21zLWNhcmQtcGFkZGluZ1wiLCAxMik7XG59XG5cbi8qKlxuICogR2V0IGNhcmQgYm9yZGVyIHJhZGl1cyBmcm9tIENTUyB2YXJpYWJsZVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q2FyZEJvcmRlclJhZGl1cygpOiBudW1iZXIge1xuXHRyZXR1cm4gZ2V0Q1NTVmFyaWFibGVBc051bWJlcihcIi0tYmFzZXMtY21zLWNhcmQtYm9yZGVyLXJhZGl1c1wiLCA4KTtcbn1cblxuLyoqXG4gKiBDaGVjayBpZiBjYXJkIGJhY2tncm91bmQgaXMgZW5hYmxlZFxuICovXG5leHBvcnQgZnVuY3Rpb24gaGFzQ2FyZEJhY2tncm91bmQoKTogYm9vbGVhbiB7XG5cdHJldHVybiBoYXNCb2R5Q2xhc3MoXCJiYXNlcy1jbXMtY2FyZC1iYWNrZ3JvdW5kXCIpO1xufVxuXG5cbi8qKlxuICogR2V0IGxpc3Qgc2VwYXJhdG9yIGZyb20gQ1NTIHZhcmlhYmxlXG4gKiBSZXR1cm5zIHRoZSBzZXBhcmF0b3IgZm9yIGxpc3QtdHlwZSBwcm9wZXJ0aWVzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRMaXN0U2VwYXJhdG9yKCk6IHN0cmluZyB7XG5cdC8vIFJlYWQgd2l0aG91dCB0cmltIHRvIHByZXNlcnZlIHdoaXRlc3BhY2Vcblx0bGV0IHZhbHVlID0gZ2V0Q29tcHV0ZWRTdHlsZShkb2N1bWVudC5ib2R5KS5nZXRQcm9wZXJ0eVZhbHVlKFxuXHRcdFwiLS1iYXNlcy1jbXMtbGlzdC1zZXBhcmF0b3JcIixcblx0KTtcblxuXHQvLyBTdHJpcCBzdXJyb3VuZGluZyBxdW90ZXMgaWYgcHJlc2VudCAoU3R5bGUgU2V0dGluZ3Mgb3IgQ1NTIGRlZmF1bHQgYWRkcyB0aGVtKVxuXHRpZiAoXG5cdFx0KHZhbHVlLnN0YXJ0c1dpdGgoJ1wiJykgJiYgdmFsdWUuZW5kc1dpdGgoJ1wiJykpIHx8XG5cdFx0KHZhbHVlLnN0YXJ0c1dpdGgoXCInXCIpICYmIHZhbHVlLmVuZHNXaXRoKFwiJ1wiKSlcblx0KSB7XG5cdFx0dmFsdWUgPSB2YWx1ZS5zbGljZSgxLCAtMSk7XG5cdH1cblxuXHQvLyBGYWxsYmFjayB0byBkZWZhdWx0IGlmIGVtcHR5IChTdHlsZSBTZXR0aW5ncyBzaG93cyBwbGFjZWhvbGRlciBidXQgZG9lc24ndCBzZXQgdmFyaWFibGUpXG5cdHJldHVybiB2YWx1ZSB8fCBcIiwgXCI7XG59XG5cbi8qKlxuICogR2V0IGVtcHR5IHZhbHVlIG1hcmtlciBmcm9tIENTUyB2YXJpYWJsZVxuICogUmV0dXJucyB0aGUgc3ltYm9sIGZvciBlbXB0eSBwcm9wZXJ0eSB2YWx1ZXNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEVtcHR5VmFsdWVNYXJrZXIoKTogc3RyaW5nIHtcblx0Ly8gUmVhZCB3aXRob3V0IHRyaW0gdG8gcHJlc2VydmUgd2hpdGVzcGFjZVxuXHRsZXQgdmFsdWUgPSBnZXRDb21wdXRlZFN0eWxlKGRvY3VtZW50LmJvZHkpLmdldFByb3BlcnR5VmFsdWUoXG5cdFx0XCItLWJhc2VzLWNtcy1lbXB0eS12YWx1ZS1tYXJrZXJcIixcblx0KTtcblxuXHQvLyBTdHJpcCBzdXJyb3VuZGluZyBxdW90ZXMgaWYgcHJlc2VudCAoU3R5bGUgU2V0dGluZ3Mgb3IgQ1NTIGRlZmF1bHQgYWRkcyB0aGVtKVxuXHRpZiAoXG5cdFx0KHZhbHVlLnN0YXJ0c1dpdGgoJ1wiJykgJiYgdmFsdWUuZW5kc1dpdGgoJ1wiJykpIHx8XG5cdFx0KHZhbHVlLnN0YXJ0c1dpdGgoXCInXCIpICYmIHZhbHVlLmVuZHNXaXRoKFwiJ1wiKSlcblx0KSB7XG5cdFx0dmFsdWUgPSB2YWx1ZS5zbGljZSgxLCAtMSk7XG5cdH1cblxuXHQvLyBGYWxsYmFjayB0byBkZWZhdWx0IGlmIGVtcHR5IChTdHlsZSBTZXR0aW5ncyBzaG93cyBwbGFjZWhvbGRlciBidXQgZG9lc24ndCBzZXQgdmFyaWFibGUpXG5cdHJldHVybiB2YWx1ZSB8fCBcIlx1MjAxNFwiO1xufVxuXG4vKipcbiAqIENoZWNrIGlmIG1pc3NpbmcgcHJvcGVydGllcyBzaG91bGQgYmUgaGlkZGVuXG4gKiBSZXR1cm5zIHRydWUgaWYgcHJvcGVydGllcyB0aGF0IGRvbid0IGV4aXN0IG9uIGEgZmlsZSBzaG91bGQgbm90IGJlIGRpc3BsYXllZFxuICovXG5leHBvcnQgZnVuY3Rpb24gc2hvdWxkSGlkZU1pc3NpbmdQcm9wZXJ0aWVzKCk6IGJvb2xlYW4ge1xuXHRyZXR1cm4gaGFzQm9keUNsYXNzKFwiYmFzZXMtY21zLWhpZGUtbWlzc2luZy1wcm9wZXJ0aWVzXCIpO1xufVxuXG4vKipcbiAqIENoZWNrIGlmIGVtcHR5IHByb3BlcnRpZXMgc2hvdWxkIGJlIGhpZGRlblxuICogUmV0dXJucyB0cnVlIGlmIHByb3BlcnRpZXMgd2l0aCBlbXB0eSB2YWx1ZXMgc2hvdWxkIG5vdCBiZSBkaXNwbGF5ZWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNob3VsZEhpZGVFbXB0eVByb3BlcnRpZXMoKTogYm9vbGVhbiB7XG5cdC8vIENoZWNrIGJvdGggdGhlIGJvZHkgY2xhc3MgYW5kIGFsc28gY2hlY2sgaWYgdGhlIENTUyB2YXJpYWJsZSBpcyBzZXQgKGFzIGEgZmFsbGJhY2spXG5cdGNvbnN0IGhhc0NsYXNzID0gaGFzQm9keUNsYXNzKFwiYmFzZXMtY21zLWhpZGUtZW1wdHktcHJvcGVydGllc1wiKTtcblx0aWYgKGhhc0NsYXNzKSByZXR1cm4gdHJ1ZTtcblx0XG5cdC8vIEZhbGxiYWNrOiBjaGVjayBpZiB0aGUgc2V0dGluZyBpcyBlbmFibGVkIHZpYSBDU1MgdmFyaWFibGUgb3Igb3RoZXIgbWVhbnNcblx0Ly8gVGhpcyBlbnN1cmVzIHdlIGNhdGNoIHRoZSBzZXR0aW5nIGV2ZW4gaWYgdGhlIGNsYXNzIGlzbid0IGFwcGxpZWQgeWV0XG5cdHJldHVybiBmYWxzZTtcbn1cblxuLyoqXG4gKiBHZXQgdGFnIHN0eWxlIGZyb20gYm9keSBjbGFzc1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0VGFnU3R5bGUoKTogXCJwbGFpblwiIHwgXCJ0aGVtZVwiIHwgXCJtaW5pbWFsXCIge1xuXHRpZiAoaGFzQm9keUNsYXNzKFwiYmFzZXMtY21zLXRhZy1zdHlsZS1taW5pbWFsXCIpKSByZXR1cm4gXCJtaW5pbWFsXCI7XG5cdGlmIChoYXNCb2R5Q2xhc3MoXCJiYXNlcy1jbXMtdGFnLXN0eWxlLXRoZW1lXCIpKSByZXR1cm4gXCJ0aGVtZVwiO1xuXHRyZXR1cm4gXCJwbGFpblwiO1xufVxuXG4vKipcbiAqIENoZWNrIGlmIHRhZyBoYXNoICgjKSBwcmVmaXggc2hvdWxkIGJlIHNob3duXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzaG93VGFnSGFzaFByZWZpeCgpOiBib29sZWFuIHtcblx0cmV0dXJuIGhhc0JvZHlDbGFzcyhcImJhc2VzLWNtcy1zaG93LXRhZy1oYXNoXCIpO1xufVxuXG4vKipcbiAqIFR5cGUgZm9yIFN0eWxlIFNldHRpbmdzIGNvbG9yIGNhY2hlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3R5bGVTZXR0aW5nc0NvbG9yQ2FjaGUge1xuXHR0aXRsZUNvbG9yPzogeyBsaWdodD86IHN0cmluZzsgZGFyaz86IHN0cmluZyB9O1xuXHRzbmlwcGV0Q29sb3I/OiB7IGxpZ2h0Pzogc3RyaW5nOyBkYXJrPzogc3RyaW5nIH07XG5cdHRhZ3NDb2xvcj86IHsgbGlnaHQ/OiBzdHJpbmc7IGRhcms/OiBzdHJpbmcgfTtcblx0dGltZXN0YW1wQ29sb3I/OiB7IGxpZ2h0Pzogc3RyaW5nOyBkYXJrPzogc3RyaW5nIH07XG5cdG1ldGFkYXRhQ29sb3I/OiB7IGxpZ2h0Pzogc3RyaW5nOyBkYXJrPzogc3RyaW5nIH07XG59XG5cbi8qKlxuICogQXBwbHkgY3VzdG9tIGNvbG9ycyBmcm9tIFN0eWxlIFNldHRpbmdzIHRvIGEgY2FyZCBlbGVtZW50XG4gKiBVc2VkIGZvciBhbWJpZW50IGNhcmQgYmFja2dyb3VuZHMgdG8gYXBwbHkgdGhlbWVkIHRleHQgY29sb3JzXG4gKiBAcGFyYW0gY2FyZEVsIC0gQ2FyZCBlbGVtZW50IHRvIGFwcGx5IGNvbG9ycyB0b1xuICogQHBhcmFtIHRoZW1lIC0gJ2xpZ2h0JyBvciAnZGFyaycgdGhlbWUgYmFzZWQgb24gYW1iaWVudCBjb2xvclxuICogQHBhcmFtIGNhY2hlIC0gU3R5bGUgU2V0dGluZ3MgY29sb3IgY2FjaGUgd2l0aCBjdXN0b20gY29sb3JzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhcHBseUN1c3RvbUNvbG9ycyhcblx0Y2FyZEVsOiBIVE1MRWxlbWVudCxcblx0dGhlbWU6IFwibGlnaHRcIiB8IFwiZGFya1wiLFxuXHRjYWNoZTogU3R5bGVTZXR0aW5nc0NvbG9yQ2FjaGUsXG4pOiB2b2lkIHtcblx0aWYgKGNhY2hlLnRpdGxlQ29sb3I/Llt0aGVtZV0pIHtcblx0XHRjYXJkRWwuc3R5bGUuc2V0UHJvcGVydHkoXG5cdFx0XHRcIi0tYmFzZXMtY21zLXRpdGxlLWNvbG9yXCIsXG5cdFx0XHRjYWNoZS50aXRsZUNvbG9yW3RoZW1lXSB8fCBudWxsLFxuXHRcdCk7XG5cdH1cblx0aWYgKGNhY2hlLnNuaXBwZXRDb2xvcj8uW3RoZW1lXSkge1xuXHRcdGNhcmRFbC5zdHlsZS5zZXRQcm9wZXJ0eShcblx0XHRcdFwiLS1iYXNlcy1jbXMtc25pcHBldC1jb2xvclwiLFxuXHRcdFx0Y2FjaGUuc25pcHBldENvbG9yW3RoZW1lXSB8fCBudWxsLFxuXHRcdCk7XG5cdH1cblx0aWYgKGNhY2hlLnRhZ3NDb2xvcj8uW3RoZW1lXSkge1xuXHRcdGNhcmRFbC5zdHlsZS5zZXRQcm9wZXJ0eShcblx0XHRcdFwiLS1iYXNlcy1jbXMtdGFncy1jb2xvclwiLFxuXHRcdFx0Y2FjaGUudGFnc0NvbG9yW3RoZW1lXSB8fCBudWxsLFxuXHRcdCk7XG5cdH1cblx0aWYgKGNhY2hlLnRpbWVzdGFtcENvbG9yPy5bdGhlbWVdKSB7XG5cdFx0Y2FyZEVsLnN0eWxlLnNldFByb3BlcnR5KFxuXHRcdFx0XCItLWJhc2VzLWNtcy10aW1lc3RhbXAtY29sb3JcIixcblx0XHRcdGNhY2hlLnRpbWVzdGFtcENvbG9yW3RoZW1lXSB8fCBudWxsLFxuXHRcdCk7XG5cdH1cblx0aWYgKGNhY2hlLm1ldGFkYXRhQ29sb3I/Llt0aGVtZV0pIHtcblx0XHRjYXJkRWwuc3R5bGUuc2V0UHJvcGVydHkoXG5cdFx0XHRcIi0tYmFzZXMtY21zLW1ldGFkYXRhLWNvbG9yXCIsXG5cdFx0XHRjYWNoZS5tZXRhZGF0YUNvbG9yW3RoZW1lXSB8fCBudWxsLFxuXHRcdCk7XG5cdH1cbn1cblxuIiwgImltcG9ydCB7IEFwcCwgVEZpbGUgfSBmcm9tICdvYnNpZGlhbic7XG5cbi8qKlxuICogQ2hlY2sgaWYgYSBVUkwgaXMgYW4gZXh0ZXJuYWwgSFRUUC9IVFRQUyBVUkxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzRXh0ZXJuYWxVcmwodXJsOiBzdHJpbmcpOiBib29sZWFuIHtcblx0cmV0dXJuIC9eaHR0cHM/OlxcL1xcLy9pLnRlc3QodXJsKTtcbn1cblxuLyoqXG4gKiBDaGVjayBpZiBhIHBhdGggaGFzIGEgdmFsaWQgaW1hZ2UgZmlsZSBleHRlbnNpb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGhhc1ZhbGlkSW1hZ2VFeHRlbnNpb24ocGF0aDogc3RyaW5nKTogYm9vbGVhbiB7XG5cdHJldHVybiAvXFwuKGF2aWZ8Ym1wfGdpZnxqcGU/Z3xwbmd8c3ZnfHdlYnApJC9pLnRlc3QocGF0aCk7XG59XG5cbi8qKlxuICogVmFsaWRhdGUgaWYgYSBVUkwgcG9pbnRzIHRvIGEgdmFsaWQsIGxvYWRhYmxlIGltYWdlXG4gKiBOT1RFOiBUaGlzIGlzIHNsb3cgYW5kIHNob3VsZCBiZSBhdm9pZGVkIGZvciBwZXJmb3JtYW5jZS4gT25seSB1c2Ugd2hlbiBhYnNvbHV0ZWx5IG5lY2Vzc2FyeS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlSW1hZ2VVcmwodXJsOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcblx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG5cdFx0Y29uc3QgaW1nID0gbmV3IEltYWdlKCk7XG5cdFx0aW1nLm9ubG9hZCA9ICgpID0+IHJlc29sdmUodHJ1ZSk7XG5cdFx0aW1nLm9uZXJyb3IgPSAoKSA9PiByZXNvbHZlKGZhbHNlKTtcblx0XHRzZXRUaW1lb3V0KCgpID0+IHJlc29sdmUoZmFsc2UpLCA1MDAwKTtcblx0XHRpbWcuc3JjID0gdXJsO1xuXHR9KTtcbn1cblxuLyoqXG4gKiBTdHJpcCB3aWtpbGluayBzeW50YXggZnJvbSBpbWFnZSBwYXRoXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdHJpcFdpa2lsaW5rU3ludGF4KHBhdGg6IHN0cmluZyk6IHN0cmluZyB7XG5cdGNvbnN0IHdpa2lsaW5rTWF0Y2ggPSBwYXRoLm1hdGNoKC9eIT9cXFtcXFsoW15cXF18XSspKD86XFx8W15cXF1dKik/XFxdXFxdJC8pO1xuXHRyZXR1cm4gd2lraWxpbmtNYXRjaCA/IHdpa2lsaW5rTWF0Y2hbMV0udHJpbSgpIDogcGF0aDtcbn1cblxuLyoqXG4gKiBQcm9jZXNzIGFuZCB2YWxpZGF0ZSBpbWFnZSBwYXRocyBmcm9tIHByb3BlcnR5IHZhbHVlc1xuICogSGFuZGxlcyB3aWtpbGluayBzdHJpcHBpbmcsIFVSTCB2YWxpZGF0aW9uLCBhbmQgcGF0aCBzZXBhcmF0aW9uXG4gKiBCYXNlZCBvbiBEeW5hbWljIFZpZXdzJyBhcHByb2FjaCB3aXRoIHBhcmFsbGVsIHZhbGlkYXRpb24gZm9yIHBlcmZvcm1hbmNlXG4gKiBcbiAqIEBwYXJhbSBpbWFnZVBhdGhzIC0gUmF3IGltYWdlIHBhdGhzIGZyb20gcHJvcGVydGllcyAobWF5IGNvbnRhaW4gd2lraWxpbmtzKVxuICogQHJldHVybnMgUHJvbWlzZSByZXNvbHZpbmcgdG8gb2JqZWN0IHdpdGggdmFsaWRhdGVkIGludGVybmFsIHBhdGhzIGFuZCBleHRlcm5hbCBVUkxzXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwcm9jZXNzSW1hZ2VQYXRocyhcblx0aW1hZ2VQYXRoczogc3RyaW5nW11cbik6IFByb21pc2U8eyBpbnRlcm5hbFBhdGhzOiBzdHJpbmdbXTsgZXh0ZXJuYWxVcmxzOiBzdHJpbmdbXSB9PiB7XG5cdGNvbnN0IGludGVybmFsUGF0aHM6IHN0cmluZ1tdID0gW107XG5cdGNvbnN0IGV4dGVybmFsVXJsQ2FuZGlkYXRlczogc3RyaW5nW10gPSBbXTtcblxuXHQvLyBGaXJzdCBwYXNzOiBzZXBhcmF0ZSBpbnRlcm5hbCBwYXRocyBhbmQgZXh0ZXJuYWwgVVJMIGNhbmRpZGF0ZXNcblx0Zm9yIChjb25zdCBpbWdQYXRoIG9mIGltYWdlUGF0aHMpIHtcblx0XHQvLyBTdHJpcCB3aWtpbGluayBzeW50YXhcblx0XHRjb25zdCBjbGVhblBhdGggPSBzdHJpcFdpa2lsaW5rU3ludGF4KGltZ1BhdGgpO1xuXG5cdFx0aWYgKGNsZWFuUGF0aC5sZW5ndGggPT09IDApIGNvbnRpbnVlO1xuXG5cdFx0aWYgKGlzRXh0ZXJuYWxVcmwoY2xlYW5QYXRoKSkge1xuXHRcdFx0Ly8gRXh0ZXJuYWwgVVJMIC0gYWNjZXB0IGFsbCBleHRlcm5hbCBVUkxzIGFuZCB2YWxpZGF0ZSBieSBhY3R1YWxseSBsb2FkaW5nIHRoZW1cblx0XHRcdC8vIFRoaXMgaGFuZGxlcyBPcGVuIEdyYXBoIFVSTHMgYW5kIG90aGVyIGltYWdlIFVSTHMgdGhhdCBkb24ndCBoYXZlIGZpbGUgZXh0ZW5zaW9uc1xuXHRcdFx0ZXh0ZXJuYWxVcmxDYW5kaWRhdGVzLnB1c2goY2xlYW5QYXRoKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gSW50ZXJuYWwgcGF0aCAtIHZhbGlkYXRlIGV4dGVuc2lvblxuXHRcdFx0aWYgKGhhc1ZhbGlkSW1hZ2VFeHRlbnNpb24oY2xlYW5QYXRoKSkge1xuXHRcdFx0XHRpbnRlcm5hbFBhdGhzLnB1c2goY2xlYW5QYXRoKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvLyBTZWNvbmQgcGFzczogdmFsaWRhdGUgZXh0ZXJuYWwgVVJMcyBpbiBwYXJhbGxlbCAobXVjaCBmYXN0ZXIpXG5cdGNvbnN0IHZhbGlkYXRpb25Qcm9taXNlcyA9IGV4dGVybmFsVXJsQ2FuZGlkYXRlcy5tYXAodXJsID0+IFxuXHRcdHZhbGlkYXRlSW1hZ2VVcmwodXJsKS50aGVuKGlzVmFsaWQgPT4gaXNWYWxpZCA/IHVybCA6IG51bGwpXG5cdCk7XG5cdGNvbnN0IHZhbGlkYXRlZFVybHMgPSBhd2FpdCBQcm9taXNlLmFsbCh2YWxpZGF0aW9uUHJvbWlzZXMpO1xuXHRjb25zdCBleHRlcm5hbFVybHMgPSB2YWxpZGF0ZWRVcmxzLmZpbHRlcigodXJsKTogdXJsIGlzIHN0cmluZyA9PiB1cmwgIT09IG51bGwpO1xuXG5cdHJldHVybiB7IGludGVybmFsUGF0aHMsIGV4dGVybmFsVXJscyB9O1xufVxuXG4vKipcbiAqIENvbnZlcnQgaW50ZXJuYWwgaW1hZ2UgcGF0aHMgdG8gcmVzb3VyY2UgVVJMc1xuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZUludGVybmFsSW1hZ2VQYXRocyhcblx0aW50ZXJuYWxQYXRoczogc3RyaW5nW10sXG5cdHNvdXJjZVBhdGg6IHN0cmluZyxcblx0YXBwOiBBcHBcbik6IHN0cmluZ1tdIHtcblx0Y29uc3QgdmFsaWRJbWFnZUV4dGVuc2lvbnMgPSBbJ2F2aWYnLCAnYm1wJywgJ2dpZicsICdqcGVnJywgJ2pwZycsICdwbmcnLCAnc3ZnJywgJ3dlYnAnXTtcblx0Y29uc3QgcmVzb3VyY2VQYXRoczogc3RyaW5nW10gPSBbXTtcblxuXHRmb3IgKGNvbnN0IHByb3BQYXRoIG9mIGludGVybmFsUGF0aHMpIHtcblx0XHQvLyBUcnkgcmVzb2x2aW5nIHdpdGggbWV0YWRhdGEgY2FjaGUgZmlyc3QgKGhhbmRsZXMgcmVsYXRpdmUgcGF0aHMsIHdpa2lsaW5rcywgZXRjLilcblx0XHRsZXQgaW1hZ2VGaWxlOiBURmlsZSB8IG51bGwgPSBhcHAubWV0YWRhdGFDYWNoZS5nZXRGaXJzdExpbmtwYXRoRGVzdChwcm9wUGF0aCwgc291cmNlUGF0aCk7XG5cdFx0XG5cdFx0Ly8gSWYgbm90IGZvdW5kIGFuZCBwYXRoIHN0YXJ0cyB3aXRoIC4vLCB0cnkgcmVzb2x2aW5nIHJlbGF0aXZlIHRvIHNvdXJjZSBmaWxlJ3MgZGlyZWN0b3J5XG5cdFx0aWYgKCFpbWFnZUZpbGUgJiYgcHJvcFBhdGguc3RhcnRzV2l0aCgnLi8nKSkge1xuXHRcdFx0Y29uc3Qgc291cmNlRmlsZSA9IGFwcC52YXVsdC5nZXRBYnN0cmFjdEZpbGVCeVBhdGgoc291cmNlUGF0aCk7XG5cdFx0XHRpZiAoc291cmNlRmlsZSAmJiBzb3VyY2VGaWxlLnBhcmVudCkge1xuXHRcdFx0XHQvLyBSZW1vdmUgLi8gcHJlZml4IGFuZCByZXNvbHZlIHJlbGF0aXZlIHRvIHBhcmVudCBkaXJlY3Rvcnlcblx0XHRcdFx0Y29uc3QgcmVsYXRpdmVQYXRoID0gcHJvcFBhdGguc3Vic3RyaW5nKDIpOyAvLyBSZW1vdmUgLi9cblx0XHRcdFx0Y29uc3QgZnVsbFBhdGggPSBzb3VyY2VGaWxlLnBhcmVudC5wYXRoID8gYCR7c291cmNlRmlsZS5wYXJlbnQucGF0aH0vJHtyZWxhdGl2ZVBhdGh9YCA6IHJlbGF0aXZlUGF0aDtcblx0XHRcdFx0Y29uc3QgcmVzb2x2ZWRGaWxlID0gYXBwLnZhdWx0LmdldEFic3RyYWN0RmlsZUJ5UGF0aChmdWxsUGF0aCk7XG5cdFx0XHRcdGlmIChyZXNvbHZlZEZpbGUgaW5zdGFuY2VvZiBURmlsZSkge1xuXHRcdFx0XHRcdGltYWdlRmlsZSA9IHJlc29sdmVkRmlsZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHRcblx0XHQvLyBJZiBzdGlsbCBub3QgZm91bmQsIHRyeSBhcyBhYnNvbHV0ZSBwYXRoXG5cdFx0aWYgKCFpbWFnZUZpbGUpIHtcblx0XHRcdGNvbnN0IGFic29sdXRlRmlsZSA9IGFwcC52YXVsdC5nZXRBYnN0cmFjdEZpbGVCeVBhdGgocHJvcFBhdGgpO1xuXHRcdFx0aWYgKGFic29sdXRlRmlsZSBpbnN0YW5jZW9mIFRGaWxlKSB7XG5cdFx0XHRcdGltYWdlRmlsZSA9IGFic29sdXRlRmlsZTtcblx0XHRcdH1cblx0XHR9XG5cdFx0XG5cdFx0aWYgKGltYWdlRmlsZSAmJiB2YWxpZEltYWdlRXh0ZW5zaW9ucy5pbmNsdWRlcyhpbWFnZUZpbGUuZXh0ZW5zaW9uKSkge1xuXHRcdFx0Y29uc3QgcmVzb3VyY2VQYXRoID0gYXBwLnZhdWx0LmdldFJlc291cmNlUGF0aChpbWFnZUZpbGUpO1xuXHRcdFx0cmVzb3VyY2VQYXRocy5wdXNoKHJlc291cmNlUGF0aCk7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHJlc291cmNlUGF0aHM7XG59XG5cbi8qKlxuICogRXh0cmFjdCBpbWFnZSBVUkxzIGZyb20gZmlsZSBlbWJlZHNcbiAqIFZhbGlkYXRlcyBleHRlcm5hbCBVUkxzIGluIHBhcmFsbGVsIGZvciBiZXR0ZXIgcGVyZm9ybWFuY2VcbiAqIEFsc28gcGFyc2VzIGZpbGUgY29udGVudCBmb3IgZXh0ZXJuYWwgaW1hZ2VzIGluIG1hcmtkb3duIGFuZCBIVE1MXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBleHRyYWN0RW1iZWRJbWFnZXMoXG5cdGZpbGU6IFRGaWxlLFxuXHRhcHA6IEFwcFxuKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuXHRjb25zdCB2YWxpZEltYWdlRXh0ZW5zaW9ucyA9IFsnYXZpZicsICdibXAnLCAnZ2lmJywgJ2pwZWcnLCAnanBnJywgJ3BuZycsICdzdmcnLCAnd2VicCddO1xuXHRjb25zdCBtZXRhZGF0YSA9IGFwcC5tZXRhZGF0YUNhY2hlLmdldEZpbGVDYWNoZShmaWxlKTtcblxuXHRjb25zdCBib2R5UmVzb3VyY2VQYXRoczogc3RyaW5nW10gPSBbXTtcblx0Y29uc3QgYm9keUV4dGVybmFsVXJsQ2FuZGlkYXRlczogU2V0PHN0cmluZz4gPSBuZXcgU2V0KCk7XG5cblx0Ly8gRmlyc3QgcGFzczogY2hlY2sgbWV0YWRhdGEgZW1iZWRzIChmYXN0LCBmcm9tIGNhY2hlKVxuXHRpZiAobWV0YWRhdGE/LmVtYmVkcykge1xuXHRcdGZvciAoY29uc3QgZW1iZWQgb2YgbWV0YWRhdGEuZW1iZWRzKSB7XG5cdFx0XHRjb25zdCBlbWJlZExpbmsgPSBlbWJlZC5saW5rO1xuXHRcdFx0aWYgKGlzRXh0ZXJuYWxVcmwoZW1iZWRMaW5rKSkge1xuXHRcdFx0XHRpZiAoaGFzVmFsaWRJbWFnZUV4dGVuc2lvbihlbWJlZExpbmspIHx8ICFlbWJlZExpbmsuaW5jbHVkZXMoJy4nKSkge1xuXHRcdFx0XHRcdGJvZHlFeHRlcm5hbFVybENhbmRpZGF0ZXMuYWRkKGVtYmVkTGluayk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNvbnN0IHRhcmdldEZpbGUgPSBhcHAubWV0YWRhdGFDYWNoZS5nZXRGaXJzdExpbmtwYXRoRGVzdChlbWJlZExpbmssIGZpbGUucGF0aCk7XG5cdFx0XHRcdGlmICh0YXJnZXRGaWxlICYmIHZhbGlkSW1hZ2VFeHRlbnNpb25zLmluY2x1ZGVzKHRhcmdldEZpbGUuZXh0ZW5zaW9uKSkge1xuXHRcdFx0XHRcdGNvbnN0IHJlc291cmNlUGF0aCA9IGFwcC52YXVsdC5nZXRSZXNvdXJjZVBhdGgodGFyZ2V0RmlsZSk7XG5cdFx0XHRcdFx0Ym9keVJlc291cmNlUGF0aHMucHVzaChyZXNvdXJjZVBhdGgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Ly8gU2Vjb25kIHBhc3M6IHBhcnNlIGZpbGUgY29udGVudCBmb3IgZXh0ZXJuYWwgaW1hZ2VzIChtYXJrZG93biBhbmQgSFRNTClcblx0Ly8gVGhpcyBjYXRjaGVzIGV4dGVybmFsIGltYWdlcyB0aGF0IG1pZ2h0IG5vdCBiZSBpbiBtZXRhZGF0YS5lbWJlZHNcblx0Ly8gTm90ZTogRm9yIE1EWCBmaWxlcywgbWV0YWRhdGEgY2FjaGUgd29uJ3Qgd29yaywgc28gd2Ugc2tpcCBlbWJlZCBleHRyYWN0aW9uXG5cdGlmIChmaWxlLmV4dGVuc2lvbiA9PT0gJ21kJyB8fCBmaWxlLmV4dGVuc2lvbiA9PT0gJ21keCcpIHtcblx0XHR0cnkge1xuXHRcdFx0Y29uc3QgY29udGVudCA9IGF3YWl0IGFwcC52YXVsdC5jYWNoZWRSZWFkKGZpbGUpO1xuXHRcdFx0XG5cdFx0XHQvLyBFeHRyYWN0IG1hcmtkb3duIGltYWdlIHN5bnRheDogIVthbHRdKHVybCkgb3IgIVthbHRdKHVybCBcInRpdGxlXCIpXG5cdFx0XHRjb25zdCBtYXJrZG93bkltYWdlUmVnZXggPSAvIVxcWyhbXlxcXV0qKVxcXVxcKChodHRwcz86XFwvXFwvW15cXHMpXSspL2dpO1xuXHRcdFx0bGV0IG1hdGNoO1xuXHRcdFx0d2hpbGUgKChtYXRjaCA9IG1hcmtkb3duSW1hZ2VSZWdleC5leGVjKGNvbnRlbnQpKSAhPT0gbnVsbCkge1xuXHRcdFx0XHRjb25zdCB1cmwgPSBtYXRjaFsyXS50cmltKCk7XG5cdFx0XHRcdC8vIFJlbW92ZSB0cmFpbGluZyBxdW90ZXMsIHBhcmVudGhlc2VzLCBvciB3aGl0ZXNwYWNlIHRoYXQgbWlnaHQgYmUgcGFydCBvZiB0aXRsZVxuXHRcdFx0XHRjb25zdCBjbGVhblVybCA9IHVybC5yZXBsYWNlKC9bXCInKVxcc10rJC8sICcnKTtcblx0XHRcdFx0aWYgKGlzRXh0ZXJuYWxVcmwoY2xlYW5VcmwpICYmIChoYXNWYWxpZEltYWdlRXh0ZW5zaW9uKGNsZWFuVXJsKSB8fCAhY2xlYW5VcmwuaW5jbHVkZXMoJy4nKSkpIHtcblx0XHRcdFx0XHRib2R5RXh0ZXJuYWxVcmxDYW5kaWRhdGVzLmFkZChjbGVhblVybCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gRXh0cmFjdCBIVE1MIGltZyB0YWdzOiA8aW1nIHNyYz1cInVybFwiPiBvciA8aW1nIHNyYz0ndXJsJz4gb3IgPGltZyBzcmM9dXJsPlxuXHRcdFx0Y29uc3QgaHRtbEltZ1JlZ2V4ID0gLzxpbWdbXj5dK3NyY1xccyo9XFxzKltcIiddPyhodHRwcz86XFwvXFwvW15cXHNcIic8Pl0rKS9naTtcblx0XHRcdHdoaWxlICgobWF0Y2ggPSBodG1sSW1nUmVnZXguZXhlYyhjb250ZW50KSkgIT09IG51bGwpIHtcblx0XHRcdFx0Y29uc3QgdXJsID0gbWF0Y2hbMV0udHJpbSgpO1xuXHRcdFx0XHQvLyBSZW1vdmUgdHJhaWxpbmcgcXVvdGVzIG9yIHdoaXRlc3BhY2Vcblx0XHRcdFx0Y29uc3QgY2xlYW5VcmwgPSB1cmwucmVwbGFjZSgvW1wiJ1xccz5dKyQvLCAnJyk7XG5cdFx0XHRcdGlmIChpc0V4dGVybmFsVXJsKGNsZWFuVXJsKSAmJiAoaGFzVmFsaWRJbWFnZUV4dGVuc2lvbihjbGVhblVybCkgfHwgIWNsZWFuVXJsLmluY2x1ZGVzKCcuJykpKSB7XG5cdFx0XHRcdFx0Ym9keUV4dGVybmFsVXJsQ2FuZGlkYXRlcy5hZGQoY2xlYW5VcmwpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdC8vIElmIGZpbGUgcmVhZCBmYWlscywganVzdCBjb250aW51ZSB3aXRoIHdoYXQgd2UgZm91bmQgaW4gbWV0YWRhdGFcblx0XHRcdGNvbnNvbGUud2FybihgRmFpbGVkIHRvIHJlYWQgZmlsZSBjb250ZW50IGZvciBpbWFnZSBleHRyYWN0aW9uOiAke2ZpbGUucGF0aH1gLCBlcnJvcik7XG5cdFx0fVxuXHR9XG5cblx0Ly8gVGhpcmQgcGFzczogdmFsaWRhdGUgZXh0ZXJuYWwgVVJMcyBpbiBwYXJhbGxlbCAobXVjaCBmYXN0ZXIpXG5cdGNvbnN0IGV4dGVybmFsVXJsQXJyYXkgPSBBcnJheS5mcm9tKGJvZHlFeHRlcm5hbFVybENhbmRpZGF0ZXMpO1xuXHRjb25zdCB2YWxpZGF0aW9uUHJvbWlzZXMgPSBleHRlcm5hbFVybEFycmF5Lm1hcCh1cmwgPT4gXG5cdFx0dmFsaWRhdGVJbWFnZVVybCh1cmwpLnRoZW4oaXNWYWxpZCA9PiBpc1ZhbGlkID8gdXJsIDogbnVsbClcblx0KTtcblx0Y29uc3QgdmFsaWRhdGVkVXJscyA9IGF3YWl0IFByb21pc2UuYWxsKHZhbGlkYXRpb25Qcm9taXNlcyk7XG5cdGNvbnN0IGJvZHlFeHRlcm5hbFVybHMgPSB2YWxpZGF0ZWRVcmxzLmZpbHRlcigodXJsKTogdXJsIGlzIHN0cmluZyA9PiB1cmwgIT09IG51bGwpO1xuXG5cdHJldHVybiBbLi4uYm9keVJlc291cmNlUGF0aHMsIC4uLmJvZHlFeHRlcm5hbFVybHNdO1xufVxuXG4vKipcbiAqIENoZWNrIGlmIGEgVVJMIHBvaW50cyB0byBhIEdJRiBpbWFnZVxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNHaWZVcmwodXJsOiBzdHJpbmcpOiBib29sZWFuIHtcblx0Ly8gQ2hlY2sgZm9yIC5naWYgZXh0ZW5zaW9uIChjYXNlLWluc2Vuc2l0aXZlKVxuXHQvLyBNYXRjaCAuZ2lmIGF0IHRoZSBlbmQgb2YgdGhlIHBhdGgsIG9wdGlvbmFsbHkgZm9sbG93ZWQgYnkgcXVlcnkgc3RyaW5nIG9yIGZyYWdtZW50XG5cdHJldHVybiAvXFwuZ2lmKFxcP3wjfCQpL2kudGVzdCh1cmwpIHx8IC9cXC5naWYkL2kudGVzdCh1cmwpO1xufVxuXG4vKipcbiAqIENvbnZlcnQgYW4gYW5pbWF0ZWQgR0lGIHRvIGEgc3RhdGljIGltYWdlIChmaXJzdCBmcmFtZSlcbiAqIFJldHVybnMgYSBkYXRhIFVSTCBvZiB0aGUgZmlyc3QgZnJhbWUsIG9yIHRoZSBvcmlnaW5hbCBVUkwgaWYgY29udmVyc2lvbiBmYWlsc1xuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY29udmVydEdpZlRvU3RhdGljKFxuXHR1cmw6IHN0cmluZyxcblx0Zm9yY2VTdGF0aWM6IGJvb2xlYW5cbik6IFByb21pc2U8c3RyaW5nPiB7XG5cdC8vIElmIG5vdCBmb3JjaW5nIHN0YXRpYyBvciBub3QgYSBHSUYsIHJldHVybiBvcmlnaW5hbCBVUkxcblx0aWYgKCFmb3JjZVN0YXRpYyB8fCAhaXNHaWZVcmwodXJsKSkge1xuXHRcdHJldHVybiB1cmw7XG5cdH1cblxuXHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcblx0XHRjb25zdCBpbWcgPSBuZXcgSW1hZ2UoKTtcblx0XHRpbWcuY3Jvc3NPcmlnaW4gPSAnYW5vbnltb3VzJzsgLy8gSGFuZGxlIENPUlMgaWYgbmVlZGVkXG5cdFx0XG5cdFx0aW1nLm9ubG9hZCA9ICgpID0+IHtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdC8vIENyZWF0ZSBjYW52YXMgYW5kIGRyYXcgZmlyc3QgZnJhbWVcblx0XHRcdFx0Y29uc3QgY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XG5cdFx0XHRcdGNhbnZhcy53aWR0aCA9IGltZy53aWR0aDtcblx0XHRcdFx0Y2FudmFzLmhlaWdodCA9IGltZy5oZWlnaHQ7XG5cdFx0XHRcdGNvbnN0IGN0eCA9IGNhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xuXHRcdFx0XHRcblx0XHRcdFx0aWYgKGN0eCkge1xuXHRcdFx0XHRcdGN0eC5kcmF3SW1hZ2UoaW1nLCAwLCAwKTtcblx0XHRcdFx0XHQvLyBDb252ZXJ0IHRvIFBORyBkYXRhIFVSTFxuXHRcdFx0XHRcdGNvbnN0IGRhdGFVcmwgPSBjYW52YXMudG9EYXRhVVJMKCdpbWFnZS9wbmcnKTtcblx0XHRcdFx0XHRyZXNvbHZlKGRhdGFVcmwpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdC8vIENhbnZhcyBjb250ZXh0IG5vdCBhdmFpbGFibGUsIHJldHVybiBvcmlnaW5hbFxuXHRcdFx0XHRcdHJlc29sdmUodXJsKTtcblx0XHRcdFx0fVxuXHRcdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdFx0Y29uc29sZS53YXJuKCdGYWlsZWQgdG8gY29udmVydCBHSUYgdG8gc3RhdGljIGltYWdlOicsIGVycm9yKTtcblx0XHRcdFx0Ly8gT24gZXJyb3IsIHJldHVybiBvcmlnaW5hbCBVUkxcblx0XHRcdFx0cmVzb2x2ZSh1cmwpO1xuXHRcdFx0fVxuXHRcdH07XG5cdFx0XG5cdFx0aW1nLm9uZXJyb3IgPSAoKSA9PiB7XG5cdFx0XHQvLyBJZiBpbWFnZSBmYWlscyB0byBsb2FkLCByZXR1cm4gb3JpZ2luYWwgVVJMXG5cdFx0XHRyZXNvbHZlKHVybCk7XG5cdFx0fTtcblx0XHRcblx0XHQvLyBTZXQgdGltZW91dCB0byBwcmV2ZW50IGhhbmdpbmdcblx0XHRzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdHJlc29sdmUodXJsKTtcblx0XHR9LCA1MDAwKTtcblx0XHRcblx0XHRpbWcuc3JjID0gdXJsO1xuXHR9KTtcbn1cblxuIiwgIi8qKlxyXG4gKiBQcmV2aWV3IGFuZCBzbmlwcGV0IHV0aWxpdGllc1xyXG4gKiBFeHRyYWN0cyBhbmQgc2FuaXRpemVzIGNvbnRlbnQgZm9yIGNhcmQgcHJldmlld3NcclxuICovXHJcblxyXG5pbXBvcnQgeyBBcHAsIFRGaWxlIH0gZnJvbSAnb2JzaWRpYW4nO1xyXG5cclxuY29uc3QgbWFya2Rvd25QYXR0ZXJucyA9IFtcclxuXHQvYChbXmBdKylgL2csXHJcblx0L1xcKlxcKlxcKigoPzooPyFcXCpcXCpcXCopLikrKVxcKlxcKlxcKi9nLFxyXG5cdC9fX18oKD86KD8hX19fKS4pKylfX18vZyxcclxuXHQvXFwqXFwqKCg/Oig/IVxcKlxcKikuKSspXFwqXFwqL2csXHJcblx0L19fKCg/Oig/IV9fKS4pKylfXy9nLFxyXG5cdC9cXCooKD86KD8hXFwqKS4pKylcXCovZyxcclxuXHQvXygoPzooPyFfKS4pKylfL2csXHJcblx0L35+KCg/Oig/IX5+KS4pKyl+fi9nLFxyXG5cdC89PSgoPzooPyE9PSkuKSspPT0vZyxcclxuXHQvXFxbKFteXFxdXSspXFxdXFwoW14pXStcXCkvZyxcclxuXHQvIVxcW1xcW1teXFxdXStcXF1cXF0vZyxcclxuXHQvXFxbXFxbW15cXF18XStcXHxbXlxcXV0rXFxdXFxdL2csXHJcblx0L1xcW1xcW1teXFxdXStcXF1cXF0vZyxcclxuXHQvI1thLXpBLVowLTlfXFwtL10rL2csXHJcblx0L15bLSorXVxccypcXFtbIHhYXVxcXVxccysvZ20sXHJcblx0L14oXFxkK1xcLlxccyopXFxbWyB4WF1cXF1cXHMrL2dtLFxyXG5cdC9eKFxcZCtcXClcXHMqKVxcW1sgeFhdXFxdXFxzKy9nbSxcclxuXHQvXlstKitdXFxzKy9nbSxcclxuXHQvXiN7MSw2fVxccysuKyQvZ20sXHJcblx0L15cXHMqKD86Wy1fKl0pXFxzKig/OlstXypdKVxccyooPzpbLV8qXSlbXFxzXFwtXypdKiQvZ20sXHJcblx0L15cXHMqXFx8LipcXHwuKiQvZ20sXHJcblx0L1xcXlxcW1teXFxdXSo/XS9nLFxyXG5cdC9cXFtcXF5bXlxcXV0rXS9nLFxyXG5cdC9eXFxzKlxcW1xcXlteXFxdXStdOi4qJC9nbSxcclxuXHQvPChbYS16XVthLXowLTldKilcXGJbXj5dKj4oLio/KTxcXC9cXDE+L2dpLFxyXG5cdC88W14+XSs+L2dcclxuXTtcclxuXHJcbmZ1bmN0aW9uIHByb3RlY3RFc2NhcGVkQ2hhcnModGV4dDogc3RyaW5nKTogeyB0ZXh0OiBzdHJpbmc7IG1hcDogTWFwPHN0cmluZywgc3RyaW5nPiB9IHtcclxuXHRjb25zdCBtYXAgPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nPigpO1xyXG5cdGxldCBjb3VudGVyID0gMDtcclxuXHRjb25zdCByZXN1bHQgPSB0ZXh0LnJlcGxhY2UoL1xcXFwoLikvZywgKG1hdGNoOiBzdHJpbmcsIGNoYXI6IHN0cmluZykgPT4ge1xyXG5cdFx0Y29uc3QgcGxhY2Vob2xkZXIgPSBgXHUwMEE3XHUwMEE3RVNDQVBFRCR7Y291bnRlcn1cdTAwQTdcdTAwQTdgO1xyXG5cdFx0bWFwLnNldChwbGFjZWhvbGRlciwgY2hhcik7XHJcblx0XHRjb3VudGVyKys7XHJcblx0XHRyZXR1cm4gcGxhY2Vob2xkZXI7XHJcblx0fSk7XHJcblx0cmV0dXJuIHsgdGV4dDogcmVzdWx0LCBtYXAgfTtcclxufVxyXG5cclxuZnVuY3Rpb24gcmVzdG9yZUVzY2FwZWRDaGFycyh0ZXh0OiBzdHJpbmcsIG1hcDogTWFwPHN0cmluZywgc3RyaW5nPik6IHN0cmluZyB7XHJcblx0bGV0IHJlc3VsdCA9IHRleHQ7XHJcblx0bWFwLmZvckVhY2goKGNoYXIsIHBsYWNlaG9sZGVyKSA9PiB7XHJcblx0XHRyZXN1bHQgPSByZXN1bHQuc3BsaXQocGxhY2Vob2xkZXIpLmpvaW4oY2hhcik7XHJcblx0fSk7XHJcblx0cmV0dXJuIHJlc3VsdDtcclxufVxyXG5cclxuZnVuY3Rpb24gcmVtb3ZlQ29kZUJsb2Nrcyh0ZXh0OiBzdHJpbmcpOiBzdHJpbmcge1xyXG5cdGxldCByZXN1bHQgPSB0ZXh0O1xyXG5cdGxldCBjaGFuZ2VkID0gdHJ1ZTtcclxuXHR3aGlsZSAoY2hhbmdlZCkge1xyXG5cdFx0Y2hhbmdlZCA9IGZhbHNlO1xyXG5cdFx0Y29uc3Qgb3Blbk1hdGNoID0gcmVzdWx0Lm1hdGNoKC9eKFtgfl17Myx9KS9tKTtcclxuXHRcdGlmICghb3Blbk1hdGNoKSBicmVhaztcclxuXHRcdGNvbnN0IGZlbmNlQ2hhciA9IG9wZW5NYXRjaFsxXVswXTtcclxuXHRcdGNvbnN0IGZlbmNlTGVuZ3RoID0gb3Blbk1hdGNoWzFdLmxlbmd0aDtcclxuXHRcdGNvbnN0IG9wZW5JbmRleCA9IG9wZW5NYXRjaC5pbmRleCE7XHJcblx0XHRjb25zdCBlc2NhcGVkQ2hhciA9IGZlbmNlQ2hhci5yZXBsYWNlKC9bLiorP14ke30oKXxbXFxdXFxcXF0vZywgJ1xcXFwkJicpO1xyXG5cdFx0Y29uc3QgY2xvc2VQYXR0ZXJuID0gbmV3IFJlZ0V4cChgXiR7ZXNjYXBlZENoYXJ9eyR7ZmVuY2VMZW5ndGh9fVxcXFxzKiRgLCAnbScpO1xyXG5cdFx0Y29uc3QgYWZ0ZXJPcGVuID0gcmVzdWx0LnN1YnN0cmluZyhvcGVuSW5kZXggKyBvcGVuTWF0Y2hbMV0ubGVuZ3RoKTtcclxuXHRcdGNvbnN0IGNsb3NlTWF0Y2ggPSBhZnRlck9wZW4ubWF0Y2goY2xvc2VQYXR0ZXJuKTtcclxuXHRcdGlmIChjbG9zZU1hdGNoKSB7XHJcblx0XHRcdGNvbnN0IGNsb3NlSW5kZXggPSBvcGVuSW5kZXggKyBvcGVuTWF0Y2hbMV0ubGVuZ3RoICsgY2xvc2VNYXRjaC5pbmRleCE7XHJcblx0XHRcdGNvbnN0IGJsb2NrRW5kID0gY2xvc2VJbmRleCArIGNsb3NlTWF0Y2hbMF0ubGVuZ3RoO1xyXG5cdFx0XHRyZXN1bHQgPSByZXN1bHQuc3Vic3RyaW5nKDAsIG9wZW5JbmRleCkgKyByZXN1bHQuc3Vic3RyaW5nKGJsb2NrRW5kKTtcclxuXHRcdFx0Y2hhbmdlZCA9IHRydWU7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRjb25zdCBsaW5lRW5kID0gcmVzdWx0LmluZGV4T2YoJ1xcbicsIG9wZW5JbmRleCk7XHJcblx0XHRcdGlmIChsaW5lRW5kID09PSAtMSkge1xyXG5cdFx0XHRcdHJlc3VsdCA9IHJlc3VsdC5zdWJzdHJpbmcoMCwgb3BlbkluZGV4KTtcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRyZXN1bHQgPSByZXN1bHQuc3Vic3RyaW5nKDAsIG9wZW5JbmRleCkgKyByZXN1bHQuc3Vic3RyaW5nKGxpbmVFbmQgKyAxKTtcclxuXHRcdFx0fVxyXG5cdFx0XHRjaGFuZ2VkID0gdHJ1ZTtcclxuXHRcdH1cclxuXHR9XHJcblx0cmV0dXJuIHJlc3VsdDtcclxufVxyXG5cclxuZnVuY3Rpb24gc3RyaXBNYXJrZG93blN5bnRheCh0ZXh0OiBzdHJpbmcpOiBzdHJpbmcge1xyXG5cdGlmICghdGV4dCB8fCB0ZXh0LnRyaW0oKS5sZW5ndGggPT09IDApIHJldHVybiAnJztcclxuXHR0ZXh0ID0gdGV4dC5yZXBsYWNlKC9ePlxccypcXFshW1xcdy1dK1xcXVsrLV0/LiokL2dtLCAnJyk7XHJcblx0dGV4dCA9IHRleHQucmVwbGFjZSgvXj5cXHM/L2dtLCAnJyk7XHJcblx0Y29uc3QgeyB0ZXh0OiBwcm90ZWN0ZWRUZXh0LCBtYXA6IGVzY2FwZWRDaGFyc01hcCB9ID0gcHJvdGVjdEVzY2FwZWRDaGFycyh0ZXh0KTtcclxuXHRsZXQgcmVzdWx0ID0gcmVtb3ZlQ29kZUJsb2Nrcyhwcm90ZWN0ZWRUZXh0KTtcclxuXHRtYXJrZG93blBhdHRlcm5zLmZvckVhY2goKHBhdHRlcm4pID0+IHtcclxuXHRcdHJlc3VsdCA9IHJlc3VsdC5yZXBsYWNlKHBhdHRlcm4sIChtYXRjaDogc3RyaW5nLCAuLi5ncm91cHM6IHN0cmluZ1tdKSA9PiB7XHJcblx0XHRcdGlmIChtYXRjaC5tYXRjaCgvPFthLXpdW2EtejAtOV0qXFxiW14+XSo+Lio/PFxcLy9pKSkge1xyXG5cdFx0XHRcdHJldHVybiBncm91cHNbMV0gfHwgJyc7XHJcblx0XHRcdH1cclxuXHRcdFx0aWYgKGdyb3Vwcy5sZW5ndGggPiAwICYmIGdyb3Vwc1swXSAhPT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBncm91cHMubGVuZ3RoIC0gMjsgaSsrKSB7XHJcblx0XHRcdFx0XHRpZiAodHlwZW9mIGdyb3Vwc1tpXSA9PT0gJ3N0cmluZycpIHtcclxuXHRcdFx0XHRcdFx0cmV0dXJuIGdyb3Vwc1tpXTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdFx0cmV0dXJuICcnO1xyXG5cdFx0fSk7XHJcblx0fSk7XHJcblx0cmVzdWx0ID0gcmVzdG9yZUVzY2FwZWRDaGFycyhyZXN1bHQsIGVzY2FwZWRDaGFyc01hcCk7XHJcblx0cmV0dXJuIHJlc3VsdDtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHNhbml0aXplRm9yUHJldmlldyhcclxuXHRjb250ZW50OiBzdHJpbmcsXHJcblx0b21pdEZpcnN0TGluZTogYm9vbGVhbiA9IGZhbHNlLFxyXG5cdGZpbGVuYW1lPzogc3RyaW5nLFxyXG5cdHRpdGxlVmFsdWU/OiBzdHJpbmdcclxuKTogc3RyaW5nIHtcclxuXHRjb25zdCBjbGVhbmVkID0gY29udGVudC5yZXBsYWNlKC9eLS0tW1xcc1xcU10qPy0tLS8sIFwiXCIpLnRyaW0oKTtcclxuXHRsZXQgc3RyaXBwZWQgPSBzdHJpcE1hcmtkb3duU3ludGF4KGNsZWFuZWQpO1xyXG5cdGNvbnN0IGZpcnN0TGluZUVuZCA9IHN0cmlwcGVkLmluZGV4T2YoJ1xcbicpO1xyXG5cdGNvbnN0IGZpcnN0TGluZSA9IChmaXJzdExpbmVFbmQgIT09IC0xID8gc3RyaXBwZWQuc3Vic3RyaW5nKDAsIGZpcnN0TGluZUVuZCkgOiBzdHJpcHBlZCkudHJpbSgpO1xyXG5cdGlmIChvbWl0Rmlyc3RMaW5lIHx8XHJcblx0XHQoZmlsZW5hbWUgJiYgZmlyc3RMaW5lID09PSBmaWxlbmFtZSkgfHxcclxuXHRcdCh0aXRsZVZhbHVlICYmIGZpcnN0TGluZSA9PT0gdGl0bGVWYWx1ZSkpIHtcclxuXHRcdHN0cmlwcGVkID0gZmlyc3RMaW5lRW5kICE9PSAtMSA/IHN0cmlwcGVkLnN1YnN0cmluZyhmaXJzdExpbmVFbmQgKyAxKS50cmltKCkgOiAnJztcclxuXHR9XHJcblx0Y29uc3Qgbm9ybWFsaXplZCA9IHN0cmlwcGVkXHJcblx0XHQucmVwbGFjZSgvXFxeW2EtekEtWjAtOS1dKy9nLCAnJylcclxuXHRcdC5zcGxpdCgvXFxzKy8pXHJcblx0XHQuZmlsdGVyKHdvcmQgPT4gd29yZClcclxuXHRcdC5qb2luKCcgJylcclxuXHRcdC50cmltKClcclxuXHRcdC5yZXBsYWNlKC9cXC57Mix9L2csIG1hdGNoID0+IG1hdGNoLnJlcGxhY2UoL1xcLi9nLCAnXFx1MjAyNCcpKTtcclxuXHRjb25zdCB3YXNUcnVuY2F0ZWQgPSBub3JtYWxpemVkLmxlbmd0aCA+IDUwMDtcclxuXHRsZXQgcHJldmlldyA9IG5vcm1hbGl6ZWQuc3Vic3RyaW5nKDAsIDUwMCk7XHJcblx0aWYgKHdhc1RydW5jYXRlZCkge1xyXG5cdFx0cHJldmlldyArPSAnXHUyMDI2JztcclxuXHR9XHJcblx0cmV0dXJuIHByZXZpZXc7XHJcbn1cclxuXHJcbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBsb2FkRmlsZVByZXZpZXcoXHJcblx0ZmlsZTogVEZpbGUsXHJcblx0YXBwOiBBcHAsXHJcblx0cHJvcGVydHlWYWx1ZTogdW5rbm93bixcclxuXHRzZXR0aW5nczoge1xyXG5cdFx0ZmFsbGJhY2tUb0NvbnRlbnQ6IGJvb2xlYW47XHJcblx0XHRvbWl0Rmlyc3RMaW5lOiBib29sZWFuO1xyXG5cdFx0dHJ1bmNhdGVQcmV2aWV3UHJvcGVydHk/OiBib29sZWFuO1xyXG5cdH0sXHJcblx0ZmlsZU5hbWU/OiBzdHJpbmcsXHJcblx0dGl0bGVWYWx1ZT86IHN0cmluZ1xyXG4pOiBQcm9taXNlPHN0cmluZz4ge1xyXG5cdC8vIEhhbmRsZSBhcnJheXMgKGUuZy4sIGFsaWFzZXMsIHRhZ3MpIGJ5IGpvaW5pbmcgdGhlbVxyXG5cdGxldCByZXN1bHQ6IHN0cmluZyB8IG51bGwgPSBudWxsO1xyXG5cdFxyXG5cdGlmIChwcm9wZXJ0eVZhbHVlICE9IG51bGwpIHtcclxuXHRcdGlmIChBcnJheS5pc0FycmF5KHByb3BlcnR5VmFsdWUpKSB7XHJcblx0XHRcdC8vIEpvaW4gYXJyYXkgaXRlbXMgaW50byBhIHN0cmluZ1xyXG5cdFx0XHRjb25zdCBpdGVtcyA9IHByb3BlcnR5VmFsdWUubWFwKChpdGVtOiB1bmtub3duKSA9PiB7XHJcblx0XHRcdFx0aWYgKGl0ZW0gJiYgdHlwZW9mIGl0ZW0gPT09ICdvYmplY3QnICYmICdkYXRhJyBpbiBpdGVtKSB7XHJcblx0XHRcdFx0XHRyZXR1cm4gU3RyaW5nKChpdGVtIGFzIHsgZGF0YTogdW5rbm93biB9KS5kYXRhKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0cmV0dXJuIFN0cmluZyhpdGVtKTtcclxuXHRcdFx0fSkuZmlsdGVyKChzOiBzdHJpbmcpID0+IHMudHJpbSgpLmxlbmd0aCA+IDApO1xyXG5cdFx0XHRyZXN1bHQgPSBpdGVtcy5sZW5ndGggPiAwID8gaXRlbXMuam9pbignLCAnKSA6IG51bGw7XHJcblx0XHR9IGVsc2UgaWYgKHR5cGVvZiBwcm9wZXJ0eVZhbHVlID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgcHJvcGVydHlWYWx1ZSA9PT0gJ251bWJlcicpIHtcclxuXHRcdFx0Y29uc3Qgc3RyID0gU3RyaW5nKHByb3BlcnR5VmFsdWUpLnRyaW0oKTtcclxuXHRcdFx0cmVzdWx0ID0gc3RyLmxlbmd0aCA+IDAgPyBzdHIgOiBudWxsO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0aWYgKHJlc3VsdCkge1xyXG5cdFx0Ly8gVHJ1bmNhdGUgaWYgc2V0dGluZyBpcyBlbmFibGVkXHJcblx0XHRpZiAoc2V0dGluZ3MudHJ1bmNhdGVQcmV2aWV3UHJvcGVydHkpIHtcclxuXHRcdFx0Y29uc3Qgd2FzVHJ1bmNhdGVkID0gcmVzdWx0Lmxlbmd0aCA+IDUwMDtcclxuXHRcdFx0cmVzdWx0ID0gcmVzdWx0LnN1YnN0cmluZygwLCA1MDApO1xyXG5cdFx0XHRpZiAod2FzVHJ1bmNhdGVkKSB7XHJcblx0XHRcdFx0cmVzdWx0ICs9ICdcdTIwMjYnO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0aWYgKHNldHRpbmdzLmZhbGxiYWNrVG9Db250ZW50KSB7XHJcblx0XHRjb25zdCBjb250ZW50ID0gYXdhaXQgYXBwLnZhdWx0LmNhY2hlZFJlYWQoZmlsZSk7XHJcblx0XHRyZXR1cm4gc2FuaXRpemVGb3JQcmV2aWV3KFxyXG5cdFx0XHRjb250ZW50LFxyXG5cdFx0XHRzZXR0aW5ncy5vbWl0Rmlyc3RMaW5lLFxyXG5cdFx0XHRmaWxlTmFtZSxcclxuXHRcdFx0dGl0bGVWYWx1ZVxyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdHJldHVybiAnJztcclxufVxyXG5cclxuIiwgIi8qKlxuICogQ29udGVudCBsb2FkaW5nIHV0aWxpdGllc1xuICogSGFuZGxlcyBsb2FkaW5nIGltYWdlcyBhbmQgc25pcHBldHMgZm9yIGVudHJpZXNcbiAqIE9wdGltaXplZCBmb3IgcGVyZm9ybWFuY2Ugd2l0aCBwYXJhbGxlbCBsb2FkaW5nIGFuZCBjYWNoaW5nXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBBcHAsIFRGaWxlIH0gZnJvbSAnb2JzaWRpYW4nO1xuaW1wb3J0IHsgcHJvY2Vzc0ltYWdlUGF0aHMsIHJlc29sdmVJbnRlcm5hbEltYWdlUGF0aHMsIGV4dHJhY3RFbWJlZEltYWdlcyB9IGZyb20gJy4uL3V0aWxzL2ltYWdlJztcbmltcG9ydCB7IGxvYWRGaWxlUHJldmlldyB9IGZyb20gJy4uL3V0aWxzL3ByZXZpZXcnO1xuXG4vKipcbiAqIExvYWRzIGltYWdlcyBmb3IgYW4gZW50cnlcbiAqIEhhbmRsZXMgcHJvcGVydHkgaW1hZ2VzLCBmYWxsYmFjayB0byBlbWJlZHMsIGFuZCBjYWNoaW5nXG4gKiBCYXNlZCBvbiBEeW5hbWljIFZpZXdzJyBmYXN0IHBhcmFsbGVsIGxvYWRpbmcgYXBwcm9hY2hcbiAqXG4gKiBAcGFyYW0gcGF0aCAtIEZpbGUgcGF0aCBmb3IgdGhlIGVudHJ5XG4gKiBAcGFyYW0gZmlsZSAtIFRGaWxlIG9iamVjdFxuICogQHBhcmFtIGFwcCAtIE9ic2lkaWFuIGFwcCBpbnN0YW5jZVxuICogQHBhcmFtIGltYWdlUHJvcGVydHlWYWx1ZXMgLSBBcnJheSBvZiBpbWFnZSBwcm9wZXJ0eSB2YWx1ZXNcbiAqIEBwYXJhbSBmYWxsYmFja1RvRW1iZWRzIC0gV2hldGhlciB0byBleHRyYWN0IGVtYmVkZGVkIGltYWdlcyBpZiBubyBwcm9wZXJ0eSBpbWFnZXMgKCdhbHdheXMnIHwgJ2lmLWVtcHR5JyB8ICduZXZlcicgfCBib29sZWFuIGZvciBsZWdhY3kpXG4gKiBAcGFyYW0gaW1hZ2VDYWNoZSAtIENhY2hlIG9iamVjdCB0byBzdG9yZSBsb2FkZWQgaW1hZ2VzXG4gKiBAcGFyYW0gaGFzSW1hZ2VDYWNoZSAtIENhY2hlIG9iamVjdCB0byB0cmFjayBpbWFnZSBhdmFpbGFiaWxpdHlcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGxvYWRJbWFnZUZvckVudHJ5KFxuXHRwYXRoOiBzdHJpbmcsXG5cdGZpbGU6IFRGaWxlLFxuXHRhcHA6IEFwcCxcblx0aW1hZ2VQcm9wZXJ0eVZhbHVlczogdW5rbm93bltdLFxuXHRmYWxsYmFja1RvRW1iZWRzOiBib29sZWFuIHwgJ2Fsd2F5cycgfCAnaWYtZW1wdHknIHwgJ25ldmVyJyxcblx0aW1hZ2VDYWNoZTogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgc3RyaW5nW10+LFxuXHRoYXNJbWFnZUNhY2hlOiBSZWNvcmQ8c3RyaW5nLCBib29sZWFuPlxuKTogUHJvbWlzZTx2b2lkPiB7XG5cdC8vIENoZWNrIGlmIGltYWdlIHByb3BlcnR5IGhhcyBhbnkgdmFsdWVzIGF0IGFsbCAoZXZlbiBpZiB0aGV5IGZhaWwgdG8gcmVzb2x2ZSlcblx0Y29uc3QgaGFzUHJvcGVydHlWYWx1ZXMgPSBpbWFnZVByb3BlcnR5VmFsdWVzICYmIEFycmF5LmlzQXJyYXkoaW1hZ2VQcm9wZXJ0eVZhbHVlcykgJiYgaW1hZ2VQcm9wZXJ0eVZhbHVlcy5sZW5ndGggPiAwO1xuXHRcblx0Ly8gQ29udmVydCBmYWxsYmFja1RvRW1iZWRzIHRvIGJvb2xlYW4gZm9yIGxvZ2ljXG5cdGNvbnN0IHNob3VsZEZhbGxiYWNrID0gZmFsbGJhY2tUb0VtYmVkcyA9PT0gdHJ1ZSB8fCBmYWxsYmFja1RvRW1iZWRzID09PSAnYWx3YXlzJyB8fCBcblx0XHQoZmFsbGJhY2tUb0VtYmVkcyA9PT0gJ2lmLWVtcHR5JyAmJiAhaGFzUHJvcGVydHlWYWx1ZXMpO1xuXHRcblx0Ly8gSWYgZmFsbGJhY2sgaXMgZGlzYWJsZWQgYW5kIHdlIGhhdmUgY2FjaGVkIGltYWdlcywgY2xlYXIgdGhlbSB0byBmb3JjZSByZS1ldmFsdWF0aW9uXG5cdC8vIFRoaXMgZW5zdXJlcyBjYWNoZWQgZW1iZWQgaW1hZ2VzIGFyZSByZW1vdmVkIHdoZW4gc2V0dGluZyBpcyB0dXJuZWQgb2ZmXG5cdGlmICghc2hvdWxkRmFsbGJhY2sgJiYgcGF0aCBpbiBpbWFnZUNhY2hlKSB7XG5cdFx0ZGVsZXRlIGltYWdlQ2FjaGVbcGF0aF07XG5cdFx0ZGVsZXRlIGhhc0ltYWdlQ2FjaGVbcGF0aF07XG5cdH1cblx0XG5cdC8vIElmIGFscmVhZHkgaW4gY2FjaGUgYW5kIG5vIHByb3BlcnR5IHZhbHVlcywgc2tpcCAob25seSBpZiBmYWxsYmFjayBpcyBlbmFibGVkKVxuXHRpZiAocGF0aCBpbiBpbWFnZUNhY2hlICYmICFoYXNQcm9wZXJ0eVZhbHVlcyAmJiBzaG91bGRGYWxsYmFjaykge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdHRyeSB7XG5cdFx0Ly8gUHJvY2VzcyBhbmQgdmFsaWRhdGUgaW1hZ2UgcGF0aHMgdXNpbmcgc2hhcmVkIHV0aWxpdHlcblx0XHRjb25zdCB7IGludGVybmFsUGF0aHMsIGV4dGVybmFsVXJscyB9ID0gYXdhaXQgcHJvY2Vzc0ltYWdlUGF0aHMoaW1hZ2VQcm9wZXJ0eVZhbHVlcyBhcyBzdHJpbmdbXSk7XG5cblx0XHQvLyBDb252ZXJ0IGludGVybmFsIHBhdGhzIHRvIHJlc291cmNlIFVSTHMgdXNpbmcgc2hhcmVkIHV0aWxpdHlcblx0XHRsZXQgdmFsaWRJbWFnZXM6IHN0cmluZ1tdID0gW1xuXHRcdFx0Li4ucmVzb2x2ZUludGVybmFsSW1hZ2VQYXRocyhpbnRlcm5hbFBhdGhzLCBwYXRoLCBhcHApLFxuXHRcdFx0Li4uZXh0ZXJuYWxVcmxzICAvLyBFeHRlcm5hbCBVUkxzIGFscmVhZHkgdmFsaWRhdGVkIGJ5IHByb2Nlc3NJbWFnZVBhdGhzXG5cdFx0XTtcblxuXHRcdC8vIE9ubHkgZmFsbCBiYWNrIHRvIGVtYmVkIGltYWdlcyBpZjpcblx0XHQvLyAxLiBObyBwcm9wZXJ0eSB2YWx1ZXMgd2VyZSBzZXQgYXQgYWxsIChub3Qgd2hlbiB0aGV5IGV4aXN0IGJ1dCBmYWlsIHRvIHJlc29sdmUpXG5cdFx0Ly8gMi4gTm8gdmFsaWQgaW1hZ2VzIHdlcmUgZm91bmQgZnJvbSBwcm9wZXJ0eVxuXHRcdC8vIDMuIEZhbGxiYWNrIGlzIGVuYWJsZWRcblx0XHRpZiAodmFsaWRJbWFnZXMubGVuZ3RoID09PSAwICYmICFoYXNQcm9wZXJ0eVZhbHVlcyAmJiBzaG91bGRGYWxsYmFjaykge1xuXHRcdFx0dmFsaWRJbWFnZXMgPSBhd2FpdCBleHRyYWN0RW1iZWRJbWFnZXMoZmlsZSwgYXBwKTtcblx0XHR9XG5cblx0XHRpZiAodmFsaWRJbWFnZXMubGVuZ3RoID4gMCkge1xuXHRcdFx0Ly8gU3RvcmUgYXMgYXJyYXkgaWYgbXVsdGlwbGUsIHN0cmluZyBpZiBzaW5nbGVcblx0XHRcdC8vIFRoaXMgd2lsbCBvdmVyd3JpdGUgYW55IGNhY2hlZCBlbWJlZCBpbWFnZXMgaWYgcHJvcGVydHkgaW1hZ2VzIGFyZSBmb3VuZFxuXHRcdFx0aW1hZ2VDYWNoZVtwYXRoXSA9IHZhbGlkSW1hZ2VzLmxlbmd0aCA+IDEgPyB2YWxpZEltYWdlcyA6IHZhbGlkSW1hZ2VzWzBdO1xuXHRcdFx0aGFzSW1hZ2VDYWNoZVtwYXRoXSA9IHRydWU7XG5cdFx0fSBlbHNlIGlmIChoYXNQcm9wZXJ0eVZhbHVlcykge1xuXHRcdFx0Ly8gSWYgcHJvcGVydHkgdmFsdWVzIGV4aXN0IGJ1dCBmYWlsZWQgdG8gcmVzb2x2ZSwgbWFyayBhcyBhdHRlbXB0ZWRcblx0XHRcdC8vIFRoaXMgcHJldmVudHMgZW1iZWQgaW1hZ2VzIGZyb20gYmVpbmcgbG9hZGVkIGxhdGVyXG5cdFx0XHQvLyBBbHNvIGNsZWFyIGFueSBjYWNoZWQgZW1iZWQgaW1hZ2VzXG5cdFx0XHRkZWxldGUgaW1hZ2VDYWNoZVtwYXRoXTtcblx0XHRcdGhhc0ltYWdlQ2FjaGVbcGF0aF0gPSB0cnVlO1xuXHRcdH0gZWxzZSBpZiAoIXNob3VsZEZhbGxiYWNrKSB7XG5cdFx0XHQvLyBJZiBmYWxsYmFjayBpcyBkaXNhYmxlZCBhbmQgbm8gcHJvcGVydHkgaW1hZ2VzLCBjbGVhciBjYWNoZVxuXHRcdFx0ZGVsZXRlIGltYWdlQ2FjaGVbcGF0aF07XG5cdFx0XHRkZWxldGUgaGFzSW1hZ2VDYWNoZVtwYXRoXTtcblx0XHR9XG5cdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0Y29uc29sZS5lcnJvcihgRmFpbGVkIHRvIGxvYWQgaW1hZ2UgZm9yICR7cGF0aH06YCwgZXJyb3IpO1xuXHR9XG59XG5cbi8qKlxuICogTG9hZHMgaW1hZ2VzIGZvciBtdWx0aXBsZSBlbnRyaWVzIGluIHBhcmFsbGVsIGJhdGNoZXNcbiAqIFVzZXMgYmF0Y2hpbmcgdG8gYXZvaWQgb3ZlcndoZWxtaW5nIHRoZSBicm93c2VyIHdpdGggdG9vIG1hbnkgY29uY3VycmVudCByZXF1ZXN0c1xuICogQmFzZWQgb24gRHluYW1pYyBWaWV3cycgYXBwcm9hY2ggYnV0IHdpdGggYmF0Y2hpbmcgZm9yIGxhcmdlIGRhdGFzZXRzXG4gKlxuICogQHBhcmFtIGVudHJpZXMgLSBBcnJheSBvZiBlbnRyaWVzIHdpdGggcGF0aCwgZmlsZSwgYW5kIGltYWdlUHJvcGVydHlWYWx1ZXNcbiAqIEBwYXJhbSBmYWxsYmFja1RvRW1iZWRzIC0gV2hldGhlciB0byBleHRyYWN0IGVtYmVkZGVkIGltYWdlcyBpZiBubyBwcm9wZXJ0eSBpbWFnZXNcbiAqIEBwYXJhbSBhcHAgLSBPYnNpZGlhbiBhcHAgaW5zdGFuY2VcbiAqIEBwYXJhbSBpbWFnZUNhY2hlIC0gQ2FjaGUgb2JqZWN0IHRvIHN0b3JlIGxvYWRlZCBpbWFnZXNcbiAqIEBwYXJhbSBoYXNJbWFnZUNhY2hlIC0gQ2FjaGUgb2JqZWN0IHRvIHRyYWNrIGltYWdlIGF2YWlsYWJpbGl0eVxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbG9hZEltYWdlc0ZvckVudHJpZXMoXG5cdGVudHJpZXM6IEFycmF5PHtcblx0XHRwYXRoOiBzdHJpbmc7XG5cdFx0ZmlsZTogVEZpbGU7XG5cdFx0aW1hZ2VQcm9wZXJ0eVZhbHVlczogdW5rbm93bltdO1xuXHR9Pixcblx0ZmFsbGJhY2tUb0VtYmVkczogYm9vbGVhbiB8ICdhbHdheXMnIHwgJ2lmLWVtcHR5JyB8ICduZXZlcicsXG5cdGFwcDogQXBwLFxuXHRpbWFnZUNhY2hlOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCBzdHJpbmdbXT4sXG5cdGhhc0ltYWdlQ2FjaGU6IFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+XG4pOiBQcm9taXNlPHZvaWQ+IHtcblx0Ly8gRmlsdGVyIGVudHJpZXM6IG9ubHkgc2tpcCBpZiBjYWNoZWQgQU5EIG5vIHByb3BlcnR5IHZhbHVlcyBleGlzdFxuXHQvLyBJZiBwcm9wZXJ0eSB2YWx1ZXMgZXhpc3QsIHdlIE1VU1QgcmUtZXZhbHVhdGUgdG8gZW5zdXJlIHByb3BlcnR5IGltYWdlcyB0YWtlIHByaW9yaXR5XG5cdGNvbnN0IGVudHJpZXNUb1Byb2Nlc3MgPSBlbnRyaWVzLmZpbHRlcihlbnRyeSA9PiB7XG5cdFx0Y29uc3QgaGFzUHJvcGVydHlWYWx1ZXMgPSBlbnRyeS5pbWFnZVByb3BlcnR5VmFsdWVzICYmIEFycmF5LmlzQXJyYXkoZW50cnkuaW1hZ2VQcm9wZXJ0eVZhbHVlcykgJiYgZW50cnkuaW1hZ2VQcm9wZXJ0eVZhbHVlcy5sZW5ndGggPiAwO1xuXHRcdC8vIFByb2Nlc3MgaWY6IG5vdCBjYWNoZWQsIE9SIGhhcyBwcm9wZXJ0eSB2YWx1ZXMgKHRvIGVuc3VyZSBwcm9wZXJ0eSBpbWFnZXMgb3ZlcnJpZGUgY2FjaGVkIGVtYmVkcylcblx0XHRyZXR1cm4gIShlbnRyeS5wYXRoIGluIGltYWdlQ2FjaGUpIHx8IGhhc1Byb3BlcnR5VmFsdWVzO1xuXHR9KTtcblx0XG5cdC8vIEJhdGNoIHNpemU6IHByb2Nlc3MgNTAgaW1hZ2VzIGF0IGEgdGltZSB0byBhdm9pZCBvdmVyd2hlbG1pbmcgdGhlIGJyb3dzZXJcblx0Ly8gVGhpcyBiYWxhbmNlcyBwZXJmb3JtYW5jZSAocGFyYWxsZWwgbG9hZGluZykgd2l0aCBicm93c2VyIGxpbWl0c1xuXHRjb25zdCBCQVRDSF9TSVpFID0gNTA7XG5cdFxuXHQvLyBQcm9jZXNzIGluIGJhdGNoZXNcblx0Zm9yIChsZXQgaSA9IDA7IGkgPCBlbnRyaWVzVG9Qcm9jZXNzLmxlbmd0aDsgaSArPSBCQVRDSF9TSVpFKSB7XG5cdFx0Y29uc3QgYmF0Y2ggPSBlbnRyaWVzVG9Qcm9jZXNzLnNsaWNlKGksIGkgKyBCQVRDSF9TSVpFKTtcblx0XHRcblx0XHQvLyBMb2FkIGJhdGNoIGluIHBhcmFsbGVsXG5cdFx0YXdhaXQgUHJvbWlzZS5hbGwoXG5cdFx0XHRiYXRjaC5tYXAoYXN5bmMgKGVudHJ5KSA9PiB7XG5cdFx0XHRcdGF3YWl0IGxvYWRJbWFnZUZvckVudHJ5KFxuXHRcdFx0XHRcdGVudHJ5LnBhdGgsXG5cdFx0XHRcdFx0ZW50cnkuZmlsZSxcblx0XHRcdFx0XHRhcHAsXG5cdFx0XHRcdFx0ZW50cnkuaW1hZ2VQcm9wZXJ0eVZhbHVlcyxcblx0XHRcdFx0XHRmYWxsYmFja1RvRW1iZWRzLFxuXHRcdFx0XHRcdGltYWdlQ2FjaGUsXG5cdFx0XHRcdFx0aGFzSW1hZ2VDYWNoZVxuXHRcdFx0XHQpO1xuXHRcdFx0fSlcblx0XHQpO1xuXHR9XG59XG5cbi8qKlxuICogTG9hZHMgaW1hZ2VzIGZvciBtdWx0aXBsZSBlbnRyaWVzIHN5bmNocm9ub3VzbHkgKGZhc3QgcGF0aClcbiAqIFJlc29sdmVzIGltYWdlIGZpbGUgcmVmZXJlbmNlcyBpbW1lZGlhdGVseSBmb3IgaW5zdGFudCByZW5kZXJpbmdcbiAqIFVzZXMgcGFyYWxsZWwgbG9hZGluZyBsaWtlIER5bmFtaWMgVmlld3MgZm9yIGJldHRlciBwZXJmb3JtYW5jZVxuICogXG4gKiBAZGVwcmVjYXRlZCBVc2UgbG9hZEltYWdlc0ZvckVudHJpZXMgaW5zdGVhZCAtIGl0J3MgZmFzdGVyIHdpdGggcGFyYWxsZWwgbG9hZGluZ1xuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbG9hZEltYWdlc0ZvckVudHJpZXNTeW5jKFxuXHRlbnRyaWVzOiBBcnJheTx7XG5cdFx0cGF0aDogc3RyaW5nO1xuXHRcdGZpbGU6IFRGaWxlO1xuXHRcdGltYWdlUHJvcGVydHlWYWx1ZXM6IHVua25vd25bXTtcblx0fT4sXG5cdGZhbGxiYWNrVG9FbWJlZHM6IGJvb2xlYW4gfCAnYWx3YXlzJyB8ICdpZi1lbXB0eScgfCAnbmV2ZXInLFxuXHRhcHA6IEFwcCxcblx0aW1hZ2VDYWNoZTogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgc3RyaW5nW10+LFxuXHRoYXNJbWFnZUNhY2hlOiBSZWNvcmQ8c3RyaW5nLCBib29sZWFuPlxuKTogUHJvbWlzZTx2b2lkPiB7XG5cdC8vIFVzZSB0aGUgcGFyYWxsZWwgbG9hZGluZyBhcHByb2FjaCBmb3IgYmV0dGVyIHBlcmZvcm1hbmNlXG5cdGF3YWl0IGxvYWRJbWFnZXNGb3JFbnRyaWVzKGVudHJpZXMsIGZhbGxiYWNrVG9FbWJlZHMsIGFwcCwgaW1hZ2VDYWNoZSwgaGFzSW1hZ2VDYWNoZSk7XG59XG5cbi8qKlxuICogTG9hZHMgZW1iZWQgaW1hZ2VzIGFzeW5jaHJvbm91c2x5IChmYWxsYmFjayBvbmx5KVxuICogQ2FsbGVkIGluIGJhY2tncm91bmQgYWZ0ZXIgaW5pdGlhbCByZW5kZXIgZm9yIGVudHJpZXMgd2l0aG91dCBwcm9wZXJ0eSBpbWFnZXNcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGxvYWRFbWJlZEltYWdlc0ZvckVudHJpZXMoXG5cdGVudHJpZXM6IEFycmF5PHtcblx0XHRwYXRoOiBzdHJpbmc7XG5cdFx0ZmlsZTogVEZpbGU7XG5cdH0+LFxuXHRhcHA6IEFwcCxcblx0aW1hZ2VDYWNoZTogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgc3RyaW5nW10+LFxuXHRoYXNJbWFnZUNhY2hlOiBSZWNvcmQ8c3RyaW5nLCBib29sZWFuPlxuKTogUHJvbWlzZTx2b2lkPiB7XG5cdGF3YWl0IFByb21pc2UuYWxsKFxuXHRcdGVudHJpZXMubWFwKGFzeW5jIChlbnRyeSkgPT4ge1xuXHRcdFx0Ly8gT25seSBwcm9jZXNzIGVudHJpZXMgdGhhdCBkb24ndCBoYXZlIGltYWdlcyB5ZXRcblx0XHRcdGlmIChlbnRyeS5wYXRoIGluIGltYWdlQ2FjaGUgfHwgaGFzSW1hZ2VDYWNoZVtlbnRyeS5wYXRoXSkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdHRyeSB7XG5cdFx0XHRcdGNvbnN0IHZhbGlkSW1hZ2VzID0gYXdhaXQgZXh0cmFjdEVtYmVkSW1hZ2VzKGVudHJ5LmZpbGUsIGFwcCk7XG5cdFx0XHRcdGlmICh2YWxpZEltYWdlcy5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdFx0aW1hZ2VDYWNoZVtlbnRyeS5wYXRoXSA9IHZhbGlkSW1hZ2VzLmxlbmd0aCA+IDEgPyB2YWxpZEltYWdlcyA6IHZhbGlkSW1hZ2VzWzBdO1xuXHRcdFx0XHRcdGhhc0ltYWdlQ2FjaGVbZW50cnkucGF0aF0gPSB0cnVlO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGNhdGNoIChlcnJvcikge1xuXHRcdFx0XHRjb25zb2xlLmVycm9yKGBGYWlsZWQgdG8gbG9hZCBlbWJlZCBpbWFnZXMgZm9yICR7ZW50cnkucGF0aH06YCwgZXJyb3IpO1xuXHRcdFx0fVxuXHRcdH0pXG5cdCk7XG59XG5cbi8qKlxuICogTG9hZHMgc25pcHBldHMgZm9yIG11bHRpcGxlIGVudHJpZXMgaW4gcGFyYWxsZWxcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGxvYWRTbmlwcGV0c0ZvckVudHJpZXMoXG5cdGVudHJpZXM6IEFycmF5PHtcblx0XHRwYXRoOiBzdHJpbmc7XG5cdFx0ZmlsZTogVEZpbGU7XG5cdFx0ZGVzY3JpcHRpb25EYXRhOiB1bmtub3duO1xuXHRcdGZpbGVOYW1lPzogc3RyaW5nO1xuXHRcdHRpdGxlU3RyaW5nPzogc3RyaW5nO1xuXHR9Pixcblx0ZmFsbGJhY2tUb0NvbnRlbnQ6IGJvb2xlYW4sXG5cdG9taXRGaXJzdExpbmU6IGJvb2xlYW4sXG5cdGFwcDogQXBwLFxuXHRzbmlwcGV0Q2FjaGU6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4sXG5cdHRydW5jYXRlUHJldmlld1Byb3BlcnR5PzogYm9vbGVhblxuKTogUHJvbWlzZTx2b2lkPiB7XG5cdGF3YWl0IFByb21pc2UuYWxsKFxuXHRcdGVudHJpZXMubWFwKGFzeW5jIChlbnRyeSkgPT4ge1xuXHRcdFx0Ly8gU2tpcCBpZiBhbHJlYWR5IGluIGNhY2hlXG5cdFx0XHRpZiAoZW50cnkucGF0aCBpbiBzbmlwcGV0Q2FjaGUpIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHR0cnkge1xuXHRcdFx0XHRpZiAoZW50cnkuZmlsZS5leHRlbnNpb24gPT09ICdtZCcgfHwgZW50cnkuZmlsZS5leHRlbnNpb24gPT09ICdtZHgnKSB7XG5cdFx0XHRcdFx0c25pcHBldENhY2hlW2VudHJ5LnBhdGhdID0gYXdhaXQgbG9hZEZpbGVQcmV2aWV3KFxuXHRcdFx0XHRcdFx0ZW50cnkuZmlsZSxcblx0XHRcdFx0XHRcdGFwcCxcblx0XHRcdFx0XHRcdGVudHJ5LmRlc2NyaXB0aW9uRGF0YSxcblx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0ZmFsbGJhY2tUb0NvbnRlbnQsXG5cdFx0XHRcdFx0XHRcdG9taXRGaXJzdExpbmUsXG5cdFx0XHRcdFx0XHRcdHRydW5jYXRlUHJldmlld1Byb3BlcnR5XG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0ZW50cnkuZmlsZU5hbWUsXG5cdFx0XHRcdFx0XHRlbnRyeS50aXRsZVN0cmluZ1xuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0c25pcHBldENhY2hlW2VudHJ5LnBhdGhdID0gJyc7XG5cdFx0XHRcdH1cblx0XHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHRcdGNvbnNvbGUuZXJyb3IoYEZhaWxlZCB0byBsb2FkIHNuaXBwZXQgZm9yICR7ZW50cnkucGF0aH06YCwgZXJyb3IpO1xuXHRcdFx0XHRzbmlwcGV0Q2FjaGVbZW50cnkucGF0aF0gPSAnJztcblx0XHRcdH1cblx0XHR9KVxuXHQpO1xufVxuXG4iLCAiLyoqXHJcbiAqIFNoYXJlZCBDYXJkIFJlbmRlcmVyIGZvciBDTVMgVmlld3NcclxuICogQmFzZWQgb24gRHluYW1pYyBWaWV3cyBidXQgd2l0aCBDTVMtc3BlY2lmaWMgZmVhdHVyZXNcclxuICovXHJcblxyXG5pbXBvcnQgeyBBcHAsIEJhc2VzRW50cnksIFRGaWxlLCBNZW51IH0gZnJvbSAnb2JzaWRpYW4nO1xyXG5pbXBvcnQgeyBzZXRDc3NQcm9wcyB9IGZyb20gJy4uL3V0aWxzL2Nzcy1wcm9wcyc7XHJcbmltcG9ydCB0eXBlIEJhc2VzQ01TUGx1Z2luIGZyb20gJy4uL21haW4nO1xyXG5pbXBvcnQgdHlwZSB7IENhcmREYXRhIH0gZnJvbSAnLi4vc2hhcmVkL2RhdGEtdHJhbnNmb3JtJztcclxuaW1wb3J0IHR5cGUgeyBDTVNTZXR0aW5ncyB9IGZyb20gJy4uL3NoYXJlZC9kYXRhLXRyYW5zZm9ybSc7XHJcbmltcG9ydCB7IHJlbmRlckRyYWZ0U3RhdHVzQmFkZ2UgfSBmcm9tICcuLi91dGlscy9kcmFmdC1zdGF0dXMtYmFkZ2UnO1xyXG5pbXBvcnQgeyBzZXR1cFF1aWNrRWRpdEljb24gfSBmcm9tICcuLi91dGlscy9xdWljay1lZGl0LWljb24nO1xyXG5pbXBvcnQgeyBQcm9wZXJ0eVJlbmRlcmVyIH0gZnJvbSAnLi4vdXRpbHMvcHJvcGVydHktcmVuZGVyZXInO1xyXG5pbXBvcnQgeyBjb252ZXJ0R2lmVG9TdGF0aWMgfSBmcm9tICcuLi91dGlscy9pbWFnZSc7XHJcbmltcG9ydCB7IGdldFRhZ1N0eWxlLCBzaG93VGFnSGFzaFByZWZpeCB9IGZyb20gJy4uL3V0aWxzL3N0eWxlLXNldHRpbmdzJztcclxuaW1wb3J0IHsgZ2V0RmlsZUZyb250bWF0dGVyIH0gZnJvbSAnLi4vdXRpbHMvZnJvbnRtYXR0ZXItaGVscGVyJztcclxuXHJcbmV4cG9ydCBjbGFzcyBTaGFyZWRDYXJkUmVuZGVyZXIge1xyXG5cdHByb3RlY3RlZCBiYXNlc0NvbmZpZz86IHsgZ2V0PzogKGtleTogc3RyaW5nKSA9PiB1bmtub3duIH07XHJcblx0cHJvdGVjdGVkIGJhc2VzQ29udHJvbGxlcj86IHsgZ2V0UHJvcGVydHlEaXNwbGF5TmFtZT86IChuYW1lOiBzdHJpbmcpID0+IHN0cmluZyB9O1xyXG5cdHByaXZhdGUgcHJvcGVydHlSZW5kZXJlcjogUHJvcGVydHlSZW5kZXJlcjtcclxuXHRwcm90ZWN0ZWQgbWR4RnJvbnRtYXR0ZXJDYWNoZT86IFJlY29yZDxzdHJpbmcsIFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgbnVsbD47XHJcblxyXG5cdGNvbnN0cnVjdG9yKFxyXG5cdFx0cHJvdGVjdGVkIGFwcDogQXBwLFxyXG5cdFx0cHJvdGVjdGVkIHBsdWdpbjogQmFzZXNDTVNQbHVnaW4sXHJcblx0XHRwcm90ZWN0ZWQgcHJvcGVydHlPYnNlcnZlcnM6IFJlc2l6ZU9ic2VydmVyW10sXHJcblx0XHRwcm90ZWN0ZWQgdXBkYXRlTGF5b3V0UmVmOiB7IGN1cnJlbnQ6ICgoKSA9PiB2b2lkKSB8IG51bGwgfSxcclxuXHRcdGJhc2VzQ29uZmlnPzogeyBnZXQ/OiAoa2V5OiBzdHJpbmcpID0+IHVua25vd24gfSxcclxuXHRcdGJhc2VzQ29udHJvbGxlcj86IHVua25vd25cclxuXHQpIHtcclxuXHRcdHRoaXMuYmFzZXNDb25maWcgPSBiYXNlc0NvbmZpZztcclxuXHRcdHRoaXMuYmFzZXNDb250cm9sbGVyID0gYmFzZXNDb250cm9sbGVyIGFzIHsgZ2V0UHJvcGVydHlEaXNwbGF5TmFtZT86IChuYW1lOiBzdHJpbmcpID0+IHN0cmluZyB9O1xyXG5cdFx0dGhpcy5wcm9wZXJ0eVJlbmRlcmVyID0gbmV3IFByb3BlcnR5UmVuZGVyZXIoXHJcblx0XHRcdHRoaXMuYXBwLFxyXG5cdFx0XHQoKSA9PiB0aGlzLmJhc2VzQ29uZmlnLCAvLyBQYXNzIGEgZ2V0dGVyIGZ1bmN0aW9uIHNvIGl0IGFsd2F5cyBnZXRzIHRoZSBsYXRlc3QgY29uZmlnXHJcblx0XHRcdCgpID0+IHRoaXMuYmFzZXNDb250cm9sbGVyIC8vIFBhc3MgYSBnZXR0ZXIgZnVuY3Rpb24gc28gaXQgYWx3YXlzIGdldHMgdGhlIGxhdGVzdCBjb250cm9sbGVyXHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogU2V0IE1EWCBmcm9udG1hdHRlciBjYWNoZSBmb3Igc3luY2hyb25vdXMgYWNjZXNzIGR1cmluZyByZW5kZXJpbmdcclxuXHQgKi9cclxuXHRzZXRNZHhGcm9udG1hdHRlckNhY2hlKGNhY2hlOiBSZWNvcmQ8c3RyaW5nLCBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IG51bGw+KTogdm9pZCB7XHJcblx0XHR0aGlzLm1keEZyb250bWF0dGVyQ2FjaGUgPSBjYWNoZTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIFJlbmRlcnMgYSBjb21wbGV0ZSBjYXJkIHdpdGggQ01TIGZlYXR1cmVzXHJcblx0ICovXHJcblx0cmVuZGVyQ2FyZChcclxuXHRcdGNvbnRhaW5lcjogSFRNTEVsZW1lbnQsXHJcblx0XHRjYXJkOiBDYXJkRGF0YSxcclxuXHRcdGVudHJ5OiBCYXNlc0VudHJ5LFxyXG5cdFx0c2V0dGluZ3M6IENNU1NldHRpbmdzLFxyXG5cdFx0aG92ZXJQYXJlbnQ6IHVua25vd24sXHJcblx0XHRpc1NlbGVjdGVkOiBib29sZWFuLFxyXG5cdFx0b25TZWxlY3Q6IChwYXRoOiBzdHJpbmcsIHNlbGVjdGVkOiBib29sZWFuLCBzaGlmdEtleT86IGJvb2xlYW4pID0+IHZvaWQsXHJcblx0XHRvblByb3BlcnR5VG9nZ2xlPzogKHBhdGg6IHN0cmluZywgcHJvcGVydHk6IHN0cmluZywgdmFsdWU6IHVua25vd24pID0+IHZvaWQgfCBQcm9taXNlPHZvaWQ+LFxyXG5cdFx0dG9vbGJhckFjdGlvbnM/OiB7IGhhbmRsZURlbGV0ZTogKCkgPT4gUHJvbWlzZTx2b2lkPiB9XHJcblx0KTogdm9pZCB7XHJcblx0XHQvLyBDcmVhdGUgY2FyZCBlbGVtZW50XHJcblx0XHRjb25zdCBjYXJkRWwgPSBjb250YWluZXIuY3JlYXRlRGl2KCdjYXJkIGJhc2VzLWNtcy1jYXJkJyk7XHJcblxyXG5cdFx0Ly8gQ1JJVElDQUw6IEZvcmNlIGltbWVkaWF0ZSBsYXlvdXQgcmVmbG93IHRvIHByZXZlbnQgRm9sZGVyIE5vdGVzIHBsdWdpbiBpbnRlcmZlcmVuY2VcclxuXHRcdC8vIElubGluZSBzdHlsZXMgdHJpZ2dlciBsYXlvdXQgY2FsY3VsYXRpb24gYmVmb3JlIEZvbGRlciBOb3RlcycgTXV0YXRpb25PYnNlcnZlciBwcm9jZXNzZXMgdGhlIGVsZW1lbnRcclxuXHRcdHNldENzc1Byb3BzKGNhcmRFbCwge1xyXG5cdFx0XHRkaXNwbGF5OiAnYmxvY2snLFxyXG5cdFx0XHRwb3NpdGlvbjogJ3JlbGF0aXZlJ1xyXG5cdFx0fSk7XHJcblxyXG5cdFx0aWYgKHNldHRpbmdzLmltYWdlRm9ybWF0ID09PSAnY292ZXInKSB7XHJcblx0XHRcdGNhcmRFbC5jbGFzc0xpc3QuYWRkKCdpbWFnZS1mb3JtYXQtY292ZXInKTtcclxuXHRcdH0gZWxzZSBpZiAoc2V0dGluZ3MuaW1hZ2VGb3JtYXQgPT09ICd0aHVtYm5haWwnKSB7XHJcblx0XHRcdGNhcmRFbC5jbGFzc0xpc3QuYWRkKCdpbWFnZS1mb3JtYXQtdGh1bWJuYWlsJyk7XHJcblx0XHRcdC8vIEFkZCBwb3NpdGlvbiBjbGFzcyBmb3IgdGh1bWJuYWlsXHJcblx0XHRcdGNhcmRFbC5jbGFzc0xpc3QuYWRkKGB0aHVtYm5haWwtJHtzZXR0aW5ncy5pbWFnZVBvc2l0aW9ufWApO1xyXG5cdFx0fVxyXG5cdFx0Y2FyZEVsLnNldEF0dHJpYnV0ZSgnZGF0YS1wYXRoJywgY2FyZC5wYXRoKTtcclxuXHRcdGNhcmRFbC5zZXRBdHRyaWJ1dGUoJ2RhdGEtaHJlZicsIGNhcmQucGF0aCk7XHJcblx0XHRjYXJkRWwuYWRkQ2xhc3MoJ2Jhc2VzLWNtcy1jdXJzb3ItcG9pbnRlcicpO1xyXG5cclxuXHRcdC8vIFNlbGVjdGlvbiBjaGVja2JveFxyXG5cdFx0Y29uc3QgY2hlY2tib3hFbCA9IGNhcmRFbC5jcmVhdGVEaXYoJ2Jhc2VzLWNtcy1zZWxlY3QtY2hlY2tib3gnKTtcclxuXHRcdGNvbnN0IGNoZWNrYm94ID0gY2hlY2tib3hFbC5jcmVhdGVFbCgnaW5wdXQnLCB7IHR5cGU6ICdjaGVja2JveCcsIGNsczogJ3NlbGVjdGlvbi1jaGVja2JveCcgfSk7XHJcblx0XHRjaGVja2JveC5jaGVja2VkID0gaXNTZWxlY3RlZDtcclxuXHJcblx0XHQvLyBIYW5kbGUgY2xpY2sgb24gdGhlIGNoZWNrYm94IGNvbnRhaW5lciAodGhlIGV4cGFuZGVkIGhpdCBhcmVhKVxyXG5cdFx0Y2hlY2tib3hFbC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIChlKSA9PiB7XHJcblx0XHRcdGUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcblx0XHRcdGUuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XHJcblxyXG5cdFx0XHQvLyBUb2dnbGUgY2hlY2tib3ggc3RhdGUgKGlmIGNsaWNrIHdhc24ndCBkaXJlY3RseSBvbiB0aGUgY2hlY2tib3ggaXRzZWxmKVxyXG5cdFx0XHRpZiAoZS50YXJnZXQgIT09IGNoZWNrYm94KSB7XHJcblx0XHRcdFx0Y2hlY2tib3guY2hlY2tlZCA9ICFjaGVja2JveC5jaGVja2VkO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRvblNlbGVjdChjYXJkLnBhdGgsIGNoZWNrYm94LmNoZWNrZWQsIGUuc2hpZnRLZXkpO1xyXG5cdFx0fSk7XHJcblxyXG5cdFx0Ly8gRHJhZnQgc3RhdHVzIGJhZGdlIChwb3NpdGlvbmVkIGFic29sdXRlbHksIGFsaWduZWQgd2l0aCBjaGVja2JveClcclxuXHRcdGlmIChzZXR0aW5ncy5zaG93RHJhZnRTdGF0dXMpIHtcclxuXHRcdFx0cmVuZGVyRHJhZnRTdGF0dXNCYWRnZShjYXJkRWwsIGVudHJ5LCBjYXJkLnBhdGgsIHNldHRpbmdzLCBvblByb3BlcnR5VG9nZ2xlLCB0aGlzLmFwcCwgdGhpcy5tZHhGcm9udG1hdHRlckNhY2hlKTtcclxuXHRcdH1cclxuXHJcblx0XHQvLyBIYW5kbGUgY2FyZCBjbGljayB0byBvcGVuIGZpbGUgKGJ1dCBub3Qgd2hlbiBjbGlja2luZyBjaGVja2JveCBvciBwcm9wZXJ0eSBjaGVja2JveGVzKVxyXG5cdFx0Y2FyZEVsLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKGUpID0+IHtcclxuXHRcdFx0Y29uc3QgdGFyZ2V0ID0gZS50YXJnZXQgYXMgSFRNTEVsZW1lbnQ7XHJcblx0XHRcdC8vIENoZWNrIGlmIGNsaWNrIGlzIG9uIHF1aWNrIGVkaXQgaWNvbiBvciBhbnkgb2YgaXRzIGNoaWxkcmVuIChsaWtlIFNWRylcclxuXHRcdFx0Y29uc3QgcXVpY2tFZGl0SWNvbiA9IHRhcmdldC5jbG9zZXN0KCcuYmFzZXMtY21zLXF1aWNrLWVkaXQtaWNvbicpO1xyXG5cdFx0XHRpZiAocXVpY2tFZGl0SWNvbikge1xyXG5cdFx0XHRcdC8vIEV4cGxpY2l0bHkgcHJldmVudCBjYXJkIGNsaWNrIHdoZW4gaWNvbiBpcyBjbGlja2VkXHJcblx0XHRcdFx0ZS5zdG9wUHJvcGFnYXRpb24oKTtcclxuXHRcdFx0XHRlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xyXG5cdFx0XHRcdGUucHJldmVudERlZmF1bHQoKTtcclxuXHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdH1cclxuXHRcdFx0aWYgKFxyXG5cdFx0XHRcdGNoZWNrYm94RWwuY29udGFpbnModGFyZ2V0KSB8fFxyXG5cdFx0XHRcdHRhcmdldC50YWdOYW1lID09PSAnSU5QVVQnIHx8XHJcblx0XHRcdFx0dGFyZ2V0LmNsb3Nlc3QoJ2lucHV0JykgfHxcclxuXHRcdFx0XHR0YXJnZXQuY2xvc2VzdCgnLmJhc2VzLWNtcy1wcm9wZXJ0eScpIHx8XHJcblx0XHRcdFx0dGFyZ2V0LmNsb3Nlc3QoJy5jYXJkLXN0YXR1cy1iYWRnZScpXHJcblx0XHRcdCkge1xyXG5cdFx0XHRcdHJldHVybjtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Ly8gU2hpZnQrQ2xpY2s6IFRvZ2dsZSBzZWxlY3Rpb24gaW5zdGVhZCBvZiBvcGVuaW5nXHJcblx0XHRcdGlmIChlLnNoaWZ0S2V5KSB7XHJcblx0XHRcdFx0ZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG5cdFx0XHRcdGUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcblx0XHRcdFx0ZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcclxuXHJcblx0XHRcdFx0Ly8gVG9nZ2xlIHNlbGVjdGlvblxyXG5cdFx0XHRcdGNvbnN0IG5ld1NlbGVjdGVkU3RhdGUgPSAhY2hlY2tib3guY2hlY2tlZDtcclxuXHRcdFx0XHRvblNlbGVjdChjYXJkLnBhdGgsIG5ld1NlbGVjdGVkU3RhdGUsIHRydWUpO1xyXG5cdFx0XHRcdHJldHVybjtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Y29uc3QgbmV3TGVhZiA9IGUubWV0YUtleSB8fCBlLmN0cmxLZXk7XHJcblx0XHRcdHZvaWQgdGhpcy5hcHAud29ya3NwYWNlLm9wZW5MaW5rVGV4dChjYXJkLnBhdGgsICcnLCBuZXdMZWFmKTtcclxuXHRcdH0pO1xyXG5cclxuXHRcdC8vIEhhbmRsZSByaWdodC1jbGljayB0byBzaG93IGNvbnRleHQgbWVudVxyXG5cdFx0Ly8gVXNlIE9ic2lkaWFuJ3Mgc3RhbmRhcmQgZmlsZS1tZW51IGV2ZW50IHN1YnNjcmlwdGlvbiBwYXR0ZXJuXHJcblx0XHRjYXJkRWwuYWRkRXZlbnRMaXN0ZW5lcignY29udGV4dG1lbnUnLCAoZSkgPT4ge1xyXG5cdFx0XHRjb25zdCB0YXJnZXQgPSBlLnRhcmdldCBhcyBIVE1MRWxlbWVudDtcclxuXHRcdFx0Ly8gRG9uJ3Qgc2hvdyBjb250ZXh0IG1lbnUgZm9yIGNoZWNrYm94ZXMsIHByb3BlcnR5IGNoZWNrYm94ZXMsIHN0YXR1cyBiYWRnZXMsIG9yIHF1aWNrIGVkaXQgaWNvblxyXG5cdFx0XHRpZiAoXHJcblx0XHRcdFx0Y2hlY2tib3hFbC5jb250YWlucyh0YXJnZXQpIHx8XHJcblx0XHRcdFx0dGFyZ2V0LnRhZ05hbWUgPT09ICdJTlBVVCcgfHxcclxuXHRcdFx0XHR0YXJnZXQuY2xvc2VzdCgnaW5wdXQnKSB8fFxyXG5cdFx0XHRcdHRhcmdldC5jbG9zZXN0KCcuYmFzZXMtY21zLXByb3BlcnR5JykgfHxcclxuXHRcdFx0XHR0YXJnZXQuY2xvc2VzdCgnLmNhcmQtc3RhdHVzLWJhZGdlJykgfHxcclxuXHRcdFx0XHR0YXJnZXQuY2xvc2VzdCgnLmJhc2VzLWNtcy1xdWljay1lZGl0LWljb24nKVxyXG5cdFx0XHQpIHtcclxuXHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdC8vIEdldCB0aGUgZmlsZVxyXG5cdFx0XHRjb25zdCBmaWxlID0gdGhpcy5hcHAudmF1bHQuZ2V0QWJzdHJhY3RGaWxlQnlQYXRoKGNhcmQucGF0aCk7XHJcblx0XHRcdGlmIChmaWxlICYmIGZpbGUgaW5zdGFuY2VvZiBURmlsZSkge1xyXG5cdFx0XHRcdC8vIFByZXZlbnQgdGhlIGNhcmQgY2xpY2sgaGFuZGxlciBmcm9tIGZpcmluZ1xyXG5cdFx0XHRcdGUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcblx0XHRcdFx0Ly8gRG9uJ3QgcHJldmVudCBkZWZhdWx0IC0gT2JzaWRpYW4ncyBtZW51IHN5c3RlbSBuZWVkcyBkZWZhdWx0IGJlaGF2aW9yXHJcblxyXG5cdFx0XHRcdGNvbnN0IG1lbnUgPSBuZXcgTWVudSgpO1xyXG5cclxuXHRcdFx0XHQvLyBDaGVjayBjdXJyZW50IHNlbGVjdGlvbiBzdGF0ZSBkeW5hbWljYWxseSBieSBjaGVja2luZyB0aGUgY2hlY2tib3hcclxuXHRcdFx0XHRjb25zdCBjdXJyZW50bHlTZWxlY3RlZCA9IGNoZWNrYm94LmNoZWNrZWQ7XHJcblxyXG5cdFx0XHRcdC8vIEFkZCBTZWxlY3QvVW5zZWxlY3QgaXRlbVxyXG5cdFx0XHRcdGlmIChjdXJyZW50bHlTZWxlY3RlZCkge1xyXG5cdFx0XHRcdFx0bWVudS5hZGRJdGVtKChpdGVtKSA9PiB7XHJcblx0XHRcdFx0XHRcdGl0ZW0uc2V0VGl0bGUoJ1Vuc2VsZWN0Jyk7XHJcblx0XHRcdFx0XHRcdGl0ZW0uc2V0SWNvbignc3F1YXJlJyk7XHJcblx0XHRcdFx0XHRcdGl0ZW0ub25DbGljaygoKSA9PiB7XHJcblx0XHRcdFx0XHRcdFx0b25TZWxlY3QoY2FyZC5wYXRoLCBmYWxzZSwgZmFsc2UpO1xyXG5cdFx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRtZW51LmFkZEl0ZW0oKGl0ZW0pID0+IHtcclxuXHRcdFx0XHRcdFx0aXRlbS5zZXRUaXRsZSgnU2VsZWN0Jyk7XHJcblx0XHRcdFx0XHRcdGl0ZW0uc2V0SWNvbignY29weS1jaGVjaycpO1xyXG5cdFx0XHRcdFx0XHRpdGVtLm9uQ2xpY2soKCkgPT4ge1xyXG5cdFx0XHRcdFx0XHRcdG9uU2VsZWN0KGNhcmQucGF0aCwgdHJ1ZSwgZmFsc2UpO1xyXG5cdFx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0bWVudS5hZGRTZXBhcmF0b3IoKTtcclxuXHJcblx0XHRcdFx0Ly8gVHJpZ2dlciBmaWxlLW1lbnUgZXZlbnQgLSB0aGlzIGFsbG93cyBvdGhlciBwbHVnaW5zIHRvIGFkZCB0aGVpciBpdGVtc1xyXG5cdFx0XHRcdHRoaXMuYXBwLndvcmtzcGFjZS50cmlnZ2VyKCdmaWxlLW1lbnUnLCBtZW51LCBmaWxlLCAnYmFzZXMnKTtcclxuXHJcblx0XHRcdFx0Ly8gQWRkIERlbGV0ZSBhdCB0aGUgYm90dG9tIChhZnRlciBhbGwgZmlsZS1tZW51IHN1YnNjcmlwdGlvbnMgaGF2ZSBydW4pXHJcblx0XHRcdFx0Ly8gQWx3YXlzIHNob3cgRGVsZXRlIG9wdGlvbiAtIHRvb2xiYXJBY3Rpb25zIHNob3VsZCBhbHdheXMgYmUgcHJvdmlkZWRcclxuXHRcdFx0XHRtZW51LmFkZFNlcGFyYXRvcigpO1xyXG5cdFx0XHRcdG1lbnUuYWRkSXRlbSgoaXRlbSkgPT4ge1xyXG5cdFx0XHRcdFx0aXRlbS5zZXRUaXRsZSgnRGVsZXRlJyk7XHJcblx0XHRcdFx0XHRpdGVtLnNldEljb24oJ3RyYXNoLTInKTtcclxuXHRcdFx0XHRcdGl0ZW0ub25DbGljayhhc3luYyAoKSA9PiB7XHJcblx0XHRcdFx0XHRcdC8vIERlbGV0ZSBkaXJlY3RseSB3aXRob3V0IHNlbGVjdGluZ1xyXG5cdFx0XHRcdFx0XHRpZiAodG9vbGJhckFjdGlvbnMpIHtcclxuXHRcdFx0XHRcdFx0XHRhd2FpdCB0b29sYmFyQWN0aW9ucy5oYW5kbGVEZWxldGUoKTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0fSk7XHJcblxyXG5cdFx0XHRcdG1lbnUuc2hvd0F0TW91c2VFdmVudChlKTtcclxuXHJcblx0XHRcdFx0Ly8gU3R5bGUgRGVsZXRlIG1lbnUgaXRlbSBhcyBkZXN0cnVjdGl2ZSAocmVkL3dhcm5pbmcgY29sb3IpXHJcblx0XHRcdFx0c2V0VGltZW91dCgoKSA9PiB7XHJcblx0XHRcdFx0XHRjb25zdCBtZW51RWwgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcubWVudScpO1xyXG5cdFx0XHRcdFx0aWYgKCFtZW51RWwpIHJldHVybjtcclxuXHJcblx0XHRcdFx0XHRjb25zdCBtZW51SXRlbXMgPSBBcnJheS5mcm9tKG1lbnVFbC5xdWVyeVNlbGVjdG9yQWxsKCcubWVudS1pdGVtJykpO1xyXG5cdFx0XHRcdFx0Y29uc3QgZGVsZXRlSXRlbSA9IG1lbnVJdGVtcy5maW5kKGl0ZW0gPT4ge1xyXG5cdFx0XHRcdFx0XHRjb25zdCB0aXRsZSA9IGl0ZW0udGV4dENvbnRlbnQ/LnRyaW0oKTtcclxuXHRcdFx0XHRcdFx0cmV0dXJuIHRpdGxlID09PSAnRGVsZXRlJztcclxuXHRcdFx0XHRcdH0pO1xyXG5cclxuXHRcdFx0XHRcdGlmIChkZWxldGVJdGVtKSB7XHJcblx0XHRcdFx0XHRcdGRlbGV0ZUl0ZW0uYWRkQ2xhc3MoJ2lzLWRhbmdlcicpO1xyXG5cdFx0XHRcdFx0XHQvLyBTdHlsZSB0aGUgaWNvbiBhbmQgdGV4dCB3aXRoIGVycm9yIGNvbG9yXHJcblx0XHRcdFx0XHRcdGNvbnN0IGljb24gPSBkZWxldGVJdGVtLnF1ZXJ5U2VsZWN0b3IoJ3N2ZycpO1xyXG5cdFx0XHRcdFx0XHRpZiAoaWNvbikge1xyXG5cdFx0XHRcdFx0XHRcdHNldENzc1Byb3BzKGljb24sIHtcclxuXHRcdFx0XHRcdFx0XHRcdGNvbG9yOiAndmFyKC0tdGV4dC1lcnJvciknLFxyXG5cdFx0XHRcdFx0XHRcdFx0c3Ryb2tlOiAndmFyKC0tdGV4dC1lcnJvciknXHJcblx0XHRcdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0Y29uc3QgdGl0bGUgPSBkZWxldGVJdGVtLnF1ZXJ5U2VsZWN0b3IoJy5tZW51LWl0ZW0tdGl0bGUnKTtcclxuXHRcdFx0XHRcdFx0aWYgKHRpdGxlKSB7XHJcblx0XHRcdFx0XHRcdFx0c2V0Q3NzUHJvcHModGl0bGUgYXMgSFRNTEVsZW1lbnQsIHtcclxuXHRcdFx0XHRcdFx0XHRcdGNvbG9yOiAndmFyKC0tdGV4dC1lcnJvciknXHJcblx0XHRcdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9LCAwKTtcclxuXHRcdFx0fVxyXG5cdFx0fSk7XHJcblxyXG5cdFx0Ly8gVGl0bGUgLSBhbHdheXMgcmVuZGVyIChkZWZhdWx0cyB0byBmaWxlIG5hbWUgaWYgbm8gdGl0bGUgcHJvcGVydHkgaXMgc2V0KVxyXG5cdFx0Y29uc3QgdGl0bGVFbCA9IGNhcmRFbC5jcmVhdGVEaXYoJ2NhcmQtdGl0bGUnKTtcclxuXHRcdHRpdGxlRWwuYXBwZW5kVGV4dChjYXJkLnRpdGxlKTtcclxuXHJcblx0XHQvLyBRdWljayBlZGl0IGljb24gLSBhdHRhY2ggdG8gdGl0bGVFbFxyXG5cdFx0c2V0dXBRdWlja0VkaXRJY29uKHRoaXMuYXBwLCB0aGlzLnBsdWdpbiwgdGl0bGVFbCwgY2FyZEVsLCBjYXJkLnBhdGgsIHNldHRpbmdzKTtcclxuXHJcblx0XHQvLyBEYXRlIChiZWxvdyB0aXRsZSlcclxuXHRcdGlmIChzZXR0aW5ncy5zaG93RGF0ZSAmJiBzZXR0aW5ncy5kYXRlUHJvcGVydHkpIHtcclxuXHRcdFx0Ly8gVHJ5IHN5bmNocm9ub3VzIEJhc2VzIEFQSSBmaXJzdCAod29ya3MgZm9yIC5tZCBmaWxlcylcclxuXHRcdFx0bGV0IGRhdGVWYWx1ZSA9IGVudHJ5LmdldFZhbHVlKHNldHRpbmdzLmRhdGVQcm9wZXJ0eSBhcyBgbm90ZS4ke3N0cmluZ31gIHwgYGZvcm11bGEuJHtzdHJpbmd9YCB8IGBmaWxlLiR7c3RyaW5nfWApIGFzIHsgZGF0ZT86IERhdGU7IGRhdGE/OiB1bmtub3duOyBpY29uPzogc3RyaW5nIH0gfCBudWxsO1xyXG5cclxuXHRcdFx0Ly8gQ2hlY2sgaWYgd2UgYWN0dWFsbHkgaGF2ZSBhIHZhbGlkIGRhdGUgdmFsdWVcclxuXHRcdFx0Ly8gRm9yIE1EWCBmaWxlcywgQmFzZXMgQVBJIG1pZ2h0IHJldHVybiB7aWNvbjogJ2x1Y2lkZS1maWxlLXF1ZXN0aW9uJ30gd2hpY2ggaXMgdHJ1dGh5IGJ1dCBoYXMgbm8gZGF0ZVxyXG5cdFx0XHRjb25zdCBoYXNWYWxpZERhdGUgPSBkYXRlVmFsdWUgJiYgKFxyXG5cdFx0XHRcdCgnZGF0ZScgaW4gZGF0ZVZhbHVlICYmIGRhdGVWYWx1ZS5kYXRlIGluc3RhbmNlb2YgRGF0ZSkgfHxcclxuXHRcdFx0XHQoJ2RhdGEnIGluIGRhdGVWYWx1ZSAmJiBkYXRlVmFsdWUuZGF0YSAhPSBudWxsKVxyXG5cdFx0XHQpO1xyXG5cclxuXHRcdFx0Ly8gRm9yIE1EWCBmaWxlcywgZmFsbGJhY2sgdG8gbWFudWFsIGZyb250bWF0dGVyIHBhcnNpbmcgaWYgbm8gdmFsaWQgZGF0ZVxyXG5cdFx0XHRpZiAoIWhhc1ZhbGlkRGF0ZSkge1xyXG5cdFx0XHRcdGNvbnN0IGZpbGUgPSB0aGlzLmFwcC52YXVsdC5nZXRBYnN0cmFjdEZpbGVCeVBhdGgoZW50cnkuZmlsZS5wYXRoKTtcclxuXHJcblx0XHRcdFx0aWYgKGZpbGUgaW5zdGFuY2VvZiBURmlsZSAmJiBmaWxlLmV4dGVuc2lvbiA9PT0gJ21keCcpIHtcclxuXHRcdFx0XHRcdC8vIExvYWQgZGF0ZSBhc3luY2hyb25vdXNseSBmb3IgTURYIGZpbGVzXHJcblx0XHRcdFx0XHR2b2lkIChhc3luYyAoKSA9PiB7XHJcblx0XHRcdFx0XHRcdGNvbnN0IGZyb250bWF0dGVyID0gYXdhaXQgZ2V0RmlsZUZyb250bWF0dGVyKHRoaXMuYXBwLCBmaWxlKTtcclxuXHJcblx0XHRcdFx0XHRcdGlmIChmcm9udG1hdHRlcikge1xyXG5cdFx0XHRcdFx0XHRcdC8vIFN0cmlwIFwibm90ZS5cIiBwcmVmaXggaWYgcHJlc2VudFxyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IGNsZWFuUHJvcCA9IHNldHRpbmdzLmRhdGVQcm9wZXJ0eS5zdGFydHNXaXRoKCdub3RlLicpXHJcblx0XHRcdFx0XHRcdFx0XHQ/IHNldHRpbmdzLmRhdGVQcm9wZXJ0eS5zdWJzdHJpbmcoNSlcclxuXHRcdFx0XHRcdFx0XHRcdDogc2V0dGluZ3MuZGF0ZVByb3BlcnR5O1xyXG5cclxuXHRcdFx0XHRcdFx0XHRjb25zdCBmcm9udG1hdHRlclZhbHVlID0gZnJvbnRtYXR0ZXJbY2xlYW5Qcm9wXTtcclxuXHJcblx0XHRcdFx0XHRcdFx0aWYgKGZyb250bWF0dGVyVmFsdWUgIT0gbnVsbCkge1xyXG5cdFx0XHRcdFx0XHRcdFx0Ly8gUGFyc2UgZGF0ZSBmcm9tIGZyb250bWF0dGVyIHZhbHVlXHJcblx0XHRcdFx0XHRcdFx0XHRsZXQgZGF0ZTogRGF0ZSB8IG51bGwgPSBudWxsO1xyXG5cclxuXHRcdFx0XHRcdFx0XHRcdC8vIEhhbmRsZSBEYXRlIG9iamVjdHMgKGluY2x1ZGluZyB0aG9zZSBmcm9tIFlBTUwgcGFyc2luZylcclxuXHRcdFx0XHRcdFx0XHRcdGlmIChmcm9udG1hdHRlclZhbHVlIGluc3RhbmNlb2YgRGF0ZSkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRkYXRlID0gZnJvbnRtYXR0ZXJWYWx1ZTtcclxuXHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdC8vIEhhbmRsZSBkYXRlLWxpa2Ugb2JqZWN0cyAoWUFNTCBwYXJzZXJzIHNvbWV0aW1lcyByZXR1cm4gY3VzdG9tIERhdGUgb2JqZWN0cylcclxuXHRcdFx0XHRcdFx0XHRcdGVsc2UgaWYgKGZyb250bWF0dGVyVmFsdWUgJiYgdHlwZW9mIGZyb250bWF0dGVyVmFsdWUgPT09ICdvYmplY3QnICYmICdnZXRUaW1lJyBpbiBmcm9udG1hdHRlclZhbHVlKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdGNvbnN0IGRhdGVMaWtlID0gZnJvbnRtYXR0ZXJWYWx1ZSBhcyB7IGdldFRpbWU6ICgpID0+IG51bWJlciB9O1xyXG5cdFx0XHRcdFx0XHRcdFx0XHR0cnkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNvbnN0IHRpbWVzdGFtcCA9IGRhdGVMaWtlLmdldFRpbWUoKTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAodHlwZW9mIHRpbWVzdGFtcCA9PT0gJ251bWJlcicgJiYgIWlzTmFOKHRpbWVzdGFtcCkpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGRhdGUgPSBuZXcgRGF0ZSh0aW1lc3RhbXApO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdFx0fSBjYXRjaCB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gRmFsbCB0aHJvdWdoIHRvIHN0cmluZy9udW1iZXIgaGFuZGxpbmdcclxuXHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0Ly8gSGFuZGxlIHN0cmluZ3MgLSBlc3BlY2lhbGx5IElTTyBkYXRlIHN0cmluZ3MgbGlrZSBcIjIwMjUtMTItMjlcIlxyXG5cdFx0XHRcdFx0XHRcdFx0aWYgKCFkYXRlICYmIHR5cGVvZiBmcm9udG1hdHRlclZhbHVlID09PSAnc3RyaW5nJykge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRjb25zdCBkYXRlU3RyID0gZnJvbnRtYXR0ZXJWYWx1ZS50cmltKCk7XHJcblx0XHRcdFx0XHRcdFx0XHRcdC8vIFRyeSBwYXJzaW5nIGFzIElTTyBkYXRlIChZWVlZLU1NLUREKSAtIHRoaXMgaXMgd2hhdCBPYnNpZGlhbiB1c2VzXHJcblx0XHRcdFx0XHRcdFx0XHRcdC8vIEFkZCB0aW1lIGNvbXBvbmVudCB0byBhdm9pZCB0aW1lem9uZSBpc3N1ZXM6IFwiMjAyNS0xMi0yOVwiIC0+IFwiMjAyNS0xMi0yOVQwMDowMDowMFwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdGNvbnN0IGlzb0RhdGVTdHIgPSBkYXRlU3RyLmluY2x1ZGVzKCdUJykgPyBkYXRlU3RyIDogYCR7ZGF0ZVN0cn1UMDA6MDA6MDBgO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRjb25zdCBwYXJzZWREYXRlID0gbmV3IERhdGUoaXNvRGF0ZVN0cik7XHJcblx0XHRcdFx0XHRcdFx0XHRcdGlmICghaXNOYU4ocGFyc2VkRGF0ZS5nZXRUaW1lKCkpKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0ZGF0ZSA9IHBhcnNlZERhdGU7XHJcblx0XHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gRmFsbGJhY2sgdG8gZGlyZWN0IERhdGUgY29uc3RydWN0b3JcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRjb25zdCBmYWxsYmFja0RhdGUgPSBuZXcgRGF0ZShkYXRlU3RyKTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoIWlzTmFOKGZhbGxiYWNrRGF0ZS5nZXRUaW1lKCkpKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRkYXRlID0gZmFsbGJhY2tEYXRlO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0Ly8gSGFuZGxlIG51bWJlcnMgKHRpbWVzdGFtcHMpXHJcblx0XHRcdFx0XHRcdFx0XHRpZiAoIWRhdGUgJiYgdHlwZW9mIGZyb250bWF0dGVyVmFsdWUgPT09ICdudW1iZXInKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdGNvbnN0IHBhcnNlZERhdGUgPSBuZXcgRGF0ZShmcm9udG1hdHRlclZhbHVlKTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKCFpc05hTihwYXJzZWREYXRlLmdldFRpbWUoKSkpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRkYXRlID0gcGFyc2VkRGF0ZTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0XHRcdC8vIEFsd2F5cyB0cnkgdG8gcmVuZGVyIHRoZSBkYXRlLCBldmVuIGlmIGNhcmRFbCBtaWdodCBub3QgYmUgY29ubmVjdGVkIHlldFxyXG5cdFx0XHRcdFx0XHRcdFx0Ly8gVGhlIGRhdGUgZWxlbWVudCB3aWxsIGJlIGNyZWF0ZWQvdXBkYXRlZCB3aGVuIHRoZSBjYXJkIGlzIHJlbmRlcmVkXHJcblx0XHRcdFx0XHRcdFx0XHRpZiAoZGF0ZSkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBVc2UgcmVxdWVzdEFuaW1hdGlvbkZyYW1lIHRvIGVuc3VyZSBET00gaXMgcmVhZHlcclxuXHRcdFx0XHRcdFx0XHRcdFx0cmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoY2FyZEVsLmlzQ29ubmVjdGVkKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBGb3JtYXQgZGF0ZSBiYXNlZCBvbiBzZXR0aW5nc1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0bGV0IGRhdGVTdHJpbmc6IHN0cmluZztcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmIChzZXR0aW5ncy5kYXRlSW5jbHVkZVRpbWUpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gRm9ybWF0IGRhdGUgYW5kIHRpbWUgc2VwYXJhdGVseSwgdGhlbiBjb21iaW5lIChyZXNwZWN0cyB1c2VyJ3Mgc3lzdGVtIGxvY2FsZSlcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gVXNlIG9wdGlvbnMgdG8gZXhjbHVkZSBzZWNvbmRzIGFuZCBtYXRjaCB1c2VyJ3MgZXhwZWN0ZWQgZm9ybWF0XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNvbnN0IGRhdGVQYXJ0ID0gZGF0ZS50b0xvY2FsZURhdGVTdHJpbmcoKTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y29uc3QgdGltZVBhcnQgPSBkYXRlLnRvTG9jYWxlVGltZVN0cmluZyh1bmRlZmluZWQsIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRob3VyOiAnbnVtZXJpYycsXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0bWludXRlOiAnMi1kaWdpdCcsXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aG91cjEyOiB0cnVlXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRkYXRlU3RyaW5nID0gYCR7ZGF0ZVBhcnR9LCAke3RpbWVQYXJ0fWA7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBXaGVuIHRpbWUgaXMgbm90IGluY2x1ZGVkLCB1c2UgZGF0ZS1vbmx5IGZvcm1hdCAocmVzcGVjdHMgdXNlcidzIHN5c3RlbSBsb2NhbGUpXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGRhdGVTdHJpbmcgPSBkYXRlLnRvTG9jYWxlRGF0ZVN0cmluZygpO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vIEZpbmQgb3IgY3JlYXRlIGRhdGUgZWxlbWVudFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0bGV0IGRhdGVFbCA9IGNhcmRFbC5xdWVyeVNlbGVjdG9yKCcuY2FyZC1kYXRlJyk7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoIWRhdGVFbCkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBGaW5kIHRoZSB0aXRsZSBlbGVtZW50IHRvIGluc2VydCBkYXRlIGFmdGVyIGl0XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNvbnN0IHRpdGxlRWwgPSBjYXJkRWwucXVlcnlTZWxlY3RvcignLmNhcmQtdGl0bGUnKTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKHRpdGxlRWwgJiYgdGl0bGVFbC5wYXJlbnRFbGVtZW50KSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZGF0ZUVsID0gdGl0bGVFbC5wYXJlbnRFbGVtZW50LmNyZWF0ZURpdignY2FyZC1kYXRlJyk7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gSW5zZXJ0IGFmdGVyIHRpdGxlXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGl0bGVFbC5wYXJlbnRFbGVtZW50Lmluc2VydEJlZm9yZShkYXRlRWwsIHRpdGxlRWwubmV4dFNpYmxpbmcpO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGRhdGVFbCA9IGNhcmRFbC5jcmVhdGVEaXYoJ2NhcmQtZGF0ZScpO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRkYXRlRWwuc2V0VGV4dChkYXRlU3RyaW5nKTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fSkoKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGlmIChoYXNWYWxpZERhdGUgJiYgZGF0ZVZhbHVlKSB7XHJcblx0XHRcdFx0Y29uc3QgZGF0ZU9iaiA9IGRhdGVWYWx1ZSBhcyB7IGRhdGU/OiBEYXRlOyBkYXRhPzogdW5rbm93biB9IHwgbnVsbDtcclxuXHRcdFx0XHRsZXQgZGF0ZTogRGF0ZSB8IG51bGwgPSBudWxsO1xyXG5cclxuXHRcdFx0XHRpZiAoZGF0ZU9iaiAmJiAnZGF0ZScgaW4gZGF0ZU9iaiAmJiBkYXRlT2JqLmRhdGUgaW5zdGFuY2VvZiBEYXRlKSB7XHJcblx0XHRcdFx0XHRkYXRlID0gZGF0ZU9iai5kYXRlO1xyXG5cdFx0XHRcdH0gZWxzZSBpZiAoZGF0ZU9iaiAmJiAnZGF0YScgaW4gZGF0ZU9iaiAmJiBkYXRlT2JqLmRhdGEpIHtcclxuXHRcdFx0XHRcdGNvbnN0IGRhdGEgPSBkYXRlT2JqLmRhdGE7XHJcblx0XHRcdFx0XHRpZiAoZGF0YSBpbnN0YW5jZW9mIERhdGUpIHtcclxuXHRcdFx0XHRcdFx0ZGF0ZSA9IGRhdGE7XHJcblx0XHRcdFx0XHR9IGVsc2UgaWYgKHR5cGVvZiBkYXRhID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgZGF0YSA9PT0gJ251bWJlcicpIHtcclxuXHRcdFx0XHRcdFx0Y29uc3QgcGFyc2VkRGF0ZSA9IG5ldyBEYXRlKGRhdGEpO1xyXG5cdFx0XHRcdFx0XHRpZiAoIWlzTmFOKHBhcnNlZERhdGUuZ2V0VGltZSgpKSkge1xyXG5cdFx0XHRcdFx0XHRcdGRhdGUgPSBwYXJzZWREYXRlO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRpZiAoZGF0ZSkge1xyXG5cdFx0XHRcdFx0Ly8gRm9ybWF0IGRhdGUgYmFzZWQgb24gc2V0dGluZ3NcclxuXHRcdFx0XHRcdGxldCBkYXRlU3RyaW5nOiBzdHJpbmc7XHJcblx0XHRcdFx0XHRpZiAoc2V0dGluZ3MuZGF0ZUluY2x1ZGVUaW1lKSB7XHJcblx0XHRcdFx0XHRcdC8vIEZvcm1hdCBkYXRlIGFuZCB0aW1lIHNlcGFyYXRlbHksIHRoZW4gY29tYmluZSAocmVzcGVjdHMgdXNlcidzIHN5c3RlbSBsb2NhbGUpXHJcblx0XHRcdFx0XHRcdC8vIFVzZSBvcHRpb25zIHRvIGV4Y2x1ZGUgc2Vjb25kcyBhbmQgbWF0Y2ggdXNlcidzIGV4cGVjdGVkIGZvcm1hdFxyXG5cdFx0XHRcdFx0XHRjb25zdCBkYXRlUGFydCA9IGRhdGUudG9Mb2NhbGVEYXRlU3RyaW5nKCk7XHJcblx0XHRcdFx0XHRcdGNvbnN0IHRpbWVQYXJ0ID0gZGF0ZS50b0xvY2FsZVRpbWVTdHJpbmcodW5kZWZpbmVkLCB7XHJcblx0XHRcdFx0XHRcdFx0aG91cjogJ251bWVyaWMnLFxyXG5cdFx0XHRcdFx0XHRcdG1pbnV0ZTogJzItZGlnaXQnLFxyXG5cdFx0XHRcdFx0XHRcdGhvdXIxMjogdHJ1ZVxyXG5cdFx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdFx0ZGF0ZVN0cmluZyA9IGAke2RhdGVQYXJ0fSwgJHt0aW1lUGFydH1gO1xyXG5cdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0Ly8gV2hlbiB0aW1lIGlzIG5vdCBpbmNsdWRlZCwgdXNlIGRhdGUtb25seSBmb3JtYXQgKHJlc3BlY3RzIHVzZXIncyBzeXN0ZW0gbG9jYWxlKVxyXG5cdFx0XHRcdFx0XHRkYXRlU3RyaW5nID0gZGF0ZS50b0xvY2FsZURhdGVTdHJpbmcoKTtcclxuXHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRjb25zdCBkYXRlRWwgPSBjYXJkRWwuY3JlYXRlRGl2KCdjYXJkLWRhdGUnKTtcclxuXHRcdFx0XHRcdGRhdGVFbC5hcHBlbmRUZXh0KGRhdGVTdHJpbmcpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdC8vIFRvcCBwcm9wZXJ0eSBncm91cHMgKHJlbmRlcmVkIGJlZm9yZSBjb250ZW50KVxyXG5cdFx0dGhpcy5wcm9wZXJ0eVJlbmRlcmVyLnJlbmRlclByb3BlcnRpZXMoY2FyZEVsLCBjYXJkLCBlbnRyeSwgc2V0dGluZ3MsIG9uUHJvcGVydHlUb2dnbGUsICd0b3AnKTtcclxuXHJcblx0XHQvLyBDb250ZW50IGNvbnRhaW5lciAtIGFsd2F5cyBjcmVhdGUgaWYgc2hvd1RleHRQcmV2aWV3IGlzIGVuYWJsZWQsIG9yIGlmIHRoZXJlIGFyZSBvdGhlciBjb250ZW50IGVsZW1lbnRzXHJcblx0XHQvLyBGb3IgdGh1bWJuYWlsIGFuZCBjb3ZlciBmb3JtYXRzLCBhbHdheXMgY3JlYXRlIGNvbnRhaW5lclxyXG5cdFx0aWYgKHNldHRpbmdzLnNob3dUZXh0UHJldmlldyB8fFxyXG5cdFx0XHQoc2V0dGluZ3Muc2hvd1RhZ3MgJiYgY2FyZC5kaXNwbGF5VGFncyAmJiBjYXJkLmRpc3BsYXlUYWdzLmxlbmd0aCA+IDApIHx8XHJcblx0XHRcdChzZXR0aW5ncy5pbWFnZUZvcm1hdCA9PT0gJ3RodW1ibmFpbCcpIHx8XHJcblx0XHRcdChzZXR0aW5ncy5pbWFnZUZvcm1hdCA9PT0gJ2NvdmVyJykgfHxcclxuXHRcdFx0KHNldHRpbmdzLmltYWdlRm9ybWF0ICE9PSAnbm9uZScgJiYgKGNhcmQuaW1hZ2VVcmwgfHwgY2FyZC5oYXNJbWFnZUF2YWlsYWJsZSkpKSB7XHJcblx0XHRcdGNvbnN0IGNvbnRlbnRDb250YWluZXIgPSBjYXJkRWwuY3JlYXRlRGl2KCdjYXJkLWNvbnRlbnQnKTtcclxuXHJcblx0XHRcdC8vIEZvciB0aHVtYm5haWwgZm9ybWF0LCBjcmVhdGUgdGh1bWJuYWlsIEZJUlNUIChiZWZvcmUgdGV4dC13cmFwcGVyKSBmb3IgcHJvcGVyIHBvc2l0aW9uaW5nXHJcblx0XHRcdGlmIChzZXR0aW5ncy5pbWFnZUZvcm1hdCA9PT0gJ3RodW1ibmFpbCcgJiYgY2FyZC5pbWFnZVVybCkge1xyXG5cdFx0XHRcdGNvbnN0IHJhd1VybHMgPSBBcnJheS5pc0FycmF5KGNhcmQuaW1hZ2VVcmwpID8gY2FyZC5pbWFnZVVybCA6IFtjYXJkLmltYWdlVXJsXTtcclxuXHRcdFx0XHRjb25zdCBpbWFnZVVybHMgPSByYXdVcmxzLmZpbHRlcih1cmwgPT4gdXJsICYmIHR5cGVvZiB1cmwgPT09ICdzdHJpbmcnICYmIHVybC50cmltKCkubGVuZ3RoID4gMCk7XHJcblxyXG5cdFx0XHRcdGlmIChpbWFnZVVybHMubGVuZ3RoID4gMCkge1xyXG5cdFx0XHRcdFx0Y29uc3QgaW1hZ2VFbCA9IGNvbnRlbnRDb250YWluZXIuY3JlYXRlRGl2KCdjYXJkLXRodW1ibmFpbCcpO1xyXG5cdFx0XHRcdFx0Y29uc3QgaW1hZ2VFbWJlZENvbnRhaW5lciA9IGltYWdlRWwuY3JlYXRlRGl2KCdpbWFnZS1lbWJlZCcpO1xyXG5cdFx0XHRcdFx0Y29uc3Qgb3JpZ2luYWxVcmwgPSBpbWFnZVVybHNbMF07XHJcblxyXG5cdFx0XHRcdFx0Ly8gQ29udmVydCBHSUYgdG8gc3RhdGljIGlmIHNldHRpbmcgaXMgZW5hYmxlZFxyXG5cdFx0XHRcdFx0dm9pZCAoYXN5bmMgKCkgPT4ge1xyXG5cdFx0XHRcdFx0XHRjb25zdCBmaW5hbFVybCA9IGF3YWl0IGNvbnZlcnRHaWZUb1N0YXRpYyhvcmlnaW5hbFVybCwgdGhpcy5wbHVnaW4uc2V0dGluZ3MuZm9yY2VTdGF0aWNHaWZJbWFnZXMpO1xyXG5cdFx0XHRcdFx0XHRpbWFnZUVtYmVkQ29udGFpbmVyLnN0eWxlLmJhY2tncm91bmRJbWFnZSA9IGB1cmwoXCIke2ZpbmFsVXJsfVwiKWA7XHJcblx0XHRcdFx0XHR9KSgpO1xyXG5cclxuXHRcdFx0XHRcdC8vIFNldCBpbml0aWFsIGJhY2tncm91bmQgaW1hZ2UgKHdpbGwgYmUgdXBkYXRlZCBpZiBHSUYgY29udmVyc2lvbiBpcyBuZWVkZWQpXHJcblx0XHRcdFx0XHRpbWFnZUVtYmVkQ29udGFpbmVyLnN0eWxlLmJhY2tncm91bmRJbWFnZSA9IGB1cmwoXCIke29yaWdpbmFsVXJsfVwiKWA7XHJcblx0XHRcdFx0XHRzZXRDc3NQcm9wcyhpbWFnZUVtYmVkQ29udGFpbmVyLCB7XHJcblx0XHRcdFx0XHRcdGJhY2tncm91bmRTaXplOiAnY292ZXInLFxyXG5cdFx0XHRcdFx0XHRiYWNrZ3JvdW5kUG9zaXRpb246ICdjZW50ZXIgY2VudGVyJyxcclxuXHRcdFx0XHRcdFx0YmFja2dyb3VuZFJlcGVhdDogJ25vLXJlcGVhdCdcclxuXHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Ly8gRm9yIHRodW1ibmFpbCBmb3JtYXQsIGhhbmRsZSBwb3NpdGlvbmluZ1xyXG5cdFx0XHRpZiAoc2V0dGluZ3MuaW1hZ2VGb3JtYXQgPT09ICd0aHVtYm5haWwnKSB7XHJcblx0XHRcdFx0Ly8gQ3JlYXRlIHRleHQgd3JhcHBlclxyXG5cdFx0XHRcdGNvbnN0IHRleHRXcmFwcGVyID0gY29udGVudENvbnRhaW5lci5jcmVhdGVEaXYoJ2NhcmQtdGV4dC13cmFwcGVyJyk7XHJcblxyXG5cdFx0XHRcdC8vIFRleHQgcHJldmlldyAtIGFsd2F5cyBjcmVhdGUgaWYgc2hvd1RleHRQcmV2aWV3IGlzIGVuYWJsZWQsIGV2ZW4gaWYgc25pcHBldCBpc24ndCBsb2FkZWQgeWV0XHJcblx0XHRcdFx0aWYgKHNldHRpbmdzLnNob3dUZXh0UHJldmlldykge1xyXG5cdFx0XHRcdFx0Y29uc3QgdGV4dFByZXZpZXdFbCA9IHRleHRXcmFwcGVyLmNyZWF0ZURpdignY2FyZC10ZXh0LXByZXZpZXcnKTtcclxuXHRcdFx0XHRcdGlmIChjYXJkLnNuaXBwZXQpIHtcclxuXHRcdFx0XHRcdFx0dGV4dFByZXZpZXdFbC5zZXRUZXh0KGNhcmQuc25pcHBldCk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHQvLyBTdG9yZSByZWZlcmVuY2UgdG8gdXBkYXRlIGxhdGVyIHdoZW4gc25pcHBldCBsb2Fkc1xyXG5cdFx0XHRcdFx0KGNhcmRFbCBhcyB7IF9fdGV4dFByZXZpZXdFbD86IEhUTUxFbGVtZW50OyBfX2NhcmRQYXRoPzogc3RyaW5nIH0pLl9fdGV4dFByZXZpZXdFbCA9IHRleHRQcmV2aWV3RWw7XHJcblx0XHRcdFx0XHQoY2FyZEVsIGFzIHsgX190ZXh0UHJldmlld0VsPzogSFRNTEVsZW1lbnQ7IF9fY2FyZFBhdGg/OiBzdHJpbmcgfSkuX19jYXJkUGF0aCA9IGNhcmQucGF0aDtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdC8vIFRhZ3MgYXMgcGlsbHMgKHVuZGVyIHRleHQgcHJldmlldylcclxuXHRcdFx0XHRpZiAoc2V0dGluZ3Muc2hvd1RhZ3MgJiYgY2FyZC5kaXNwbGF5VGFncyAmJiBjYXJkLmRpc3BsYXlUYWdzLmxlbmd0aCA+IDApIHtcclxuXHRcdFx0XHRcdGNvbnN0IHRhZ3NDb250YWluZXIgPSB0ZXh0V3JhcHBlci5jcmVhdGVEaXYoJ2NhcmQtdGFncycpO1xyXG5cdFx0XHRcdFx0Y29uc3QgdGFnU3R5bGUgPSBnZXRUYWdTdHlsZSgpO1xyXG5cdFx0XHRcdFx0aWYgKHRhZ1N0eWxlICE9PSAncGxhaW4nKSB7XHJcblx0XHRcdFx0XHRcdHRhZ3NDb250YWluZXIuYWRkQ2xhc3MoYHRhZy1zdHlsZS0ke3RhZ1N0eWxlfWApO1xyXG5cdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdGNvbnN0IG1heFRhZ3MgPSBzZXR0aW5ncy5tYXhUYWdzVG9TaG93O1xyXG5cdFx0XHRcdFx0Y29uc3QgdGFnc1RvU2hvdyA9IGNhcmQuZGlzcGxheVRhZ3Muc2xpY2UoMCwgbWF4VGFncyk7XHJcblx0XHRcdFx0XHRjb25zdCByZW1haW5pbmdDb3VudCA9IGNhcmQuZGlzcGxheVRhZ3MubGVuZ3RoIC0gbWF4VGFncztcclxuXHJcblx0XHRcdFx0XHR0YWdzVG9TaG93LmZvckVhY2godGFnID0+IHtcclxuXHRcdFx0XHRcdFx0Y29uc3QgdGFnRWwgPSB0YWdzQ29udGFpbmVyLmNyZWF0ZVNwYW4oJ2NhcmQtdGFnJyk7XHJcblx0XHRcdFx0XHRcdHRhZ0VsLmFwcGVuZFRleHQoc2hvd1RhZ0hhc2hQcmVmaXgoKSA/IGAjJHt0YWd9YCA6IHRhZyk7XHJcblx0XHRcdFx0XHR9KTtcclxuXHJcblx0XHRcdFx0XHRpZiAocmVtYWluaW5nQ291bnQgPiAwKSB7XHJcblx0XHRcdFx0XHRcdGNvbnN0IG1vcmVFbCA9IHRhZ3NDb250YWluZXIuY3JlYXRlU3BhbignY2FyZC10YWctbW9yZScpO1xyXG5cdFx0XHRcdFx0XHRtb3JlRWwuYXBwZW5kVGV4dChgKyR7cmVtYWluaW5nQ291bnR9IG1vcmVgKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0Ly8gRm9yIGNvdmVyL25vLWltYWdlIGZvcm1hdCwgc3RhY2sgdmVydGljYWxseVxyXG5cdFx0XHRcdC8vIFRleHQgcHJldmlldyAtIGFsd2F5cyBjcmVhdGUgaWYgc2hvd1RleHRQcmV2aWV3IGlzIGVuYWJsZWQsIGV2ZW4gaWYgc25pcHBldCBpc24ndCBsb2FkZWQgeWV0XHJcblx0XHRcdFx0aWYgKHNldHRpbmdzLnNob3dUZXh0UHJldmlldykge1xyXG5cdFx0XHRcdFx0Y29uc3QgdGV4dFByZXZpZXdFbCA9IGNvbnRlbnRDb250YWluZXIuY3JlYXRlRGl2KCdjYXJkLXRleHQtcHJldmlldycpO1xyXG5cdFx0XHRcdFx0aWYgKGNhcmQuc25pcHBldCkge1xyXG5cdFx0XHRcdFx0XHR0ZXh0UHJldmlld0VsLnNldFRleHQoY2FyZC5zbmlwcGV0KTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdC8vIFN0b3JlIHJlZmVyZW5jZSB0byB1cGRhdGUgbGF0ZXIgd2hlbiBzbmlwcGV0IGxvYWRzXHJcblx0XHRcdFx0XHQoY2FyZEVsIGFzIHsgX190ZXh0UHJldmlld0VsPzogSFRNTEVsZW1lbnQ7IF9fY2FyZFBhdGg/OiBzdHJpbmcgfSkuX190ZXh0UHJldmlld0VsID0gdGV4dFByZXZpZXdFbDtcclxuXHRcdFx0XHRcdChjYXJkRWwgYXMgeyBfX3RleHRQcmV2aWV3RWw/OiBIVE1MRWxlbWVudDsgX19jYXJkUGF0aD86IHN0cmluZyB9KS5fX2NhcmRQYXRoID0gY2FyZC5wYXRoO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0Ly8gVGFncyBhcyBwaWxscyAodW5kZXIgdGV4dCBwcmV2aWV3KVxyXG5cdFx0XHRcdGlmIChzZXR0aW5ncy5zaG93VGFncyAmJiBjYXJkLmRpc3BsYXlUYWdzICYmIGNhcmQuZGlzcGxheVRhZ3MubGVuZ3RoID4gMCkge1xyXG5cdFx0XHRcdFx0Y29uc3QgdGFnc0NvbnRhaW5lciA9IGNvbnRlbnRDb250YWluZXIuY3JlYXRlRGl2KCdjYXJkLXRhZ3MnKTtcclxuXHRcdFx0XHRcdGNvbnN0IHRhZ1N0eWxlID0gZ2V0VGFnU3R5bGUoKTtcclxuXHRcdFx0XHRcdGlmICh0YWdTdHlsZSAhPT0gJ3BsYWluJykge1xyXG5cdFx0XHRcdFx0XHR0YWdzQ29udGFpbmVyLmFkZENsYXNzKGB0YWctc3R5bGUtJHt0YWdTdHlsZX1gKTtcclxuXHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRjb25zdCBtYXhUYWdzID0gc2V0dGluZ3MubWF4VGFnc1RvU2hvdztcclxuXHRcdFx0XHRcdGNvbnN0IHRhZ3NUb1Nob3cgPSBjYXJkLmRpc3BsYXlUYWdzLnNsaWNlKDAsIG1heFRhZ3MpO1xyXG5cdFx0XHRcdFx0Y29uc3QgcmVtYWluaW5nQ291bnQgPSBjYXJkLmRpc3BsYXlUYWdzLmxlbmd0aCAtIG1heFRhZ3M7XHJcblxyXG5cdFx0XHRcdFx0dGFnc1RvU2hvdy5mb3JFYWNoKHRhZyA9PiB7XHJcblx0XHRcdFx0XHRcdGNvbnN0IHRhZ0VsID0gdGFnc0NvbnRhaW5lci5jcmVhdGVTcGFuKCdjYXJkLXRhZycpO1xyXG5cdFx0XHRcdFx0XHR0YWdFbC5hcHBlbmRUZXh0KHNob3dUYWdIYXNoUHJlZml4KCkgPyBgIyR7dGFnfWAgOiB0YWcpO1xyXG5cdFx0XHRcdFx0fSk7XHJcblxyXG5cdFx0XHRcdFx0aWYgKHJlbWFpbmluZ0NvdW50ID4gMCkge1xyXG5cdFx0XHRcdFx0XHRjb25zdCBtb3JlRWwgPSB0YWdzQ29udGFpbmVyLmNyZWF0ZVNwYW4oJ2NhcmQtdGFnLW1vcmUnKTtcclxuXHRcdFx0XHRcdFx0bW9yZUVsLmFwcGVuZFRleHQoYCske3JlbWFpbmluZ0NvdW50fSBtb3JlYCk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHQvLyBDb3ZlciBpbWFnZVxyXG5cdFx0XHRpZiAoc2V0dGluZ3MuaW1hZ2VGb3JtYXQgPT09ICdjb3ZlcicpIHtcclxuXHRcdFx0XHRpZiAoY2FyZC5pbWFnZVVybCkge1xyXG5cdFx0XHRcdFx0Y29uc3QgcmF3VXJscyA9IEFycmF5LmlzQXJyYXkoY2FyZC5pbWFnZVVybCkgPyBjYXJkLmltYWdlVXJsIDogW2NhcmQuaW1hZ2VVcmxdO1xyXG5cdFx0XHRcdFx0Y29uc3QgaW1hZ2VVcmxzID0gcmF3VXJscy5maWx0ZXIodXJsID0+IHVybCAmJiB0eXBlb2YgdXJsID09PSAnc3RyaW5nJyAmJiB1cmwudHJpbSgpLmxlbmd0aCA+IDApO1xyXG5cclxuXHRcdFx0XHRcdGlmIChpbWFnZVVybHMubGVuZ3RoID4gMCkge1xyXG5cdFx0XHRcdFx0XHRjb25zdCBpbWFnZUVsID0gY29udGVudENvbnRhaW5lci5jcmVhdGVEaXYoJ2NhcmQtY292ZXInKTtcclxuXHRcdFx0XHRcdFx0Y29uc3QgaW1hZ2VFbWJlZENvbnRhaW5lciA9IGltYWdlRWwuY3JlYXRlRGl2KCdpbWFnZS1lbWJlZCcpO1xyXG5cdFx0XHRcdFx0XHRjb25zdCBvcmlnaW5hbFVybCA9IGltYWdlVXJsc1swXTtcclxuXHJcblx0XHRcdFx0XHRcdC8vIENvbnZlcnQgR0lGIHRvIHN0YXRpYyBpZiBzZXR0aW5nIGlzIGVuYWJsZWRcclxuXHRcdFx0XHRcdFx0dm9pZCAoYXN5bmMgKCkgPT4ge1xyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IGZpbmFsVXJsID0gYXdhaXQgY29udmVydEdpZlRvU3RhdGljKG9yaWdpbmFsVXJsLCB0aGlzLnBsdWdpbi5zZXR0aW5ncy5mb3JjZVN0YXRpY0dpZkltYWdlcyk7XHJcblx0XHRcdFx0XHRcdFx0aW1hZ2VFbWJlZENvbnRhaW5lci5zdHlsZS5iYWNrZ3JvdW5kSW1hZ2UgPSBgdXJsKFwiJHtmaW5hbFVybH1cIilgO1xyXG5cdFx0XHRcdFx0XHR9KSgpO1xyXG5cclxuXHRcdFx0XHRcdFx0Ly8gU2V0IGluaXRpYWwgYmFja2dyb3VuZCBpbWFnZSAod2lsbCBiZSB1cGRhdGVkIGlmIEdJRiBjb252ZXJzaW9uIGlzIG5lZWRlZClcclxuXHRcdFx0XHRcdFx0aW1hZ2VFbWJlZENvbnRhaW5lci5zdHlsZS5iYWNrZ3JvdW5kSW1hZ2UgPSBgdXJsKFwiJHtvcmlnaW5hbFVybH1cIilgO1xyXG5cdFx0XHRcdFx0XHRzZXRDc3NQcm9wcyhpbWFnZUVtYmVkQ29udGFpbmVyLCB7XHJcblx0XHRcdFx0XHRcdFx0YmFja2dyb3VuZFNpemU6ICdjb3ZlcicsXHJcblx0XHRcdFx0XHRcdFx0YmFja2dyb3VuZFBvc2l0aW9uOiAnY2VudGVyIGNlbnRlcicsXHJcblx0XHRcdFx0XHRcdFx0YmFja2dyb3VuZFJlcGVhdDogJ25vLXJlcGVhdCdcclxuXHRcdFx0XHRcdFx0fSk7XHJcblxyXG5cclxuXHRcdFx0XHRcdFx0Ly8gQm90dG9tIHByb3BlcnRpZXMgLSBNVVNUIGJlIGNhbGxlZCBiZWZvcmUgcmV0dXJuaW5nIChmb3IgaW1hZ2VzKVxyXG5cdFx0XHRcdFx0XHR0aGlzLnByb3BlcnR5UmVuZGVyZXIucmVuZGVyUHJvcGVydGllcyhjYXJkRWwsIGNhcmQsIGVudHJ5LCBzZXR0aW5ncywgb25Qcm9wZXJ0eVRvZ2dsZSwgJ2JvdHRvbScpO1xyXG5cclxuXHRcdFx0XHRcdFx0Ly8gSW1hZ2VzIGFyZSBzZXQgdmlhIGJhY2tncm91bmQtaW1hZ2UsIG5vIHJldHVybiB2YWx1ZSBuZWVkZWRcclxuXHRcdFx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0Ly8gRm9yIGNvdmVyIGZvcm1hdCwgcmVuZGVyIHBsYWNlaG9sZGVyIGlmIGltYWdlIGlzIGV4cGVjdGVkIGJ1dCBub3QgbG9hZGVkIHlldCwgb3IgYWx3YXlzXHJcblx0XHRcdFx0aWYgKGNhcmQuaGFzSW1hZ2VBdmFpbGFibGUgJiYgIWNhcmQuaW1hZ2VVcmwpIHtcclxuXHRcdFx0XHRcdGNvbnN0IHBsYWNlaG9sZGVyRWwgPSBjb250ZW50Q29udGFpbmVyLmNyZWF0ZURpdignY2FyZC1jb3Zlci1wbGFjZWhvbGRlcicpO1xyXG5cdFx0XHRcdH0gZWxzZSBpZiAoIWNhcmQuaW1hZ2VVcmwpIHtcclxuXHRcdFx0XHRcdC8vIE5vIGltYWdlIGFuZCBub3QgZXhwZWN0ZWQgLSBjcmVhdGUgcGxhY2Vob2xkZXIgYW55d2F5IGZvciBjb3ZlciBmb3JtYXRcclxuXHRcdFx0XHRcdGNvbnN0IHBsYWNlaG9sZGVyRWwgPSBjb250ZW50Q29udGFpbmVyLmNyZWF0ZURpdignY2FyZC1jb3Zlci1wbGFjZWhvbGRlcicpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHJcblx0XHQvLyBCb3R0b20gcHJvcGVydGllcyAoZm9yIGNhcmRzIHdpdGhvdXQgaW1hZ2VzKVxyXG5cdFx0dGhpcy5wcm9wZXJ0eVJlbmRlcmVyLnJlbmRlclByb3BlcnRpZXMoY2FyZEVsLCBjYXJkLCBlbnRyeSwgc2V0dGluZ3MsIG9uUHJvcGVydHlUb2dnbGUsICdib3R0b20nKTtcclxuXHJcblx0XHRyZXR1cm47IC8vIE5vIGltYWdlIGZvciB0aGlzIGNhcmRcclxuXHR9XHJcbn1cclxuXHJcbiIsICJpbXBvcnQgeyBBcHAsIEJhc2VzRW50cnksIFRGaWxlIH0gZnJvbSAnb2JzaWRpYW4nO1xyXG5pbXBvcnQgdHlwZSB7IENNU1NldHRpbmdzIH0gZnJvbSAnLi4vc2hhcmVkL2RhdGEtdHJhbnNmb3JtJztcclxuaW1wb3J0IHsgZ2V0RmlsZUZyb250bWF0dGVyIH0gZnJvbSAnLi9mcm9udG1hdHRlci1oZWxwZXInO1xyXG5cclxuLyoqXHJcbiAqIENhbGN1bGF0ZSBkcmFmdCBzdGF0dXMgZnJvbSBlbnRyeSBhbmQgc2V0dGluZ3NcclxuICogU3VwcG9ydHMgYm90aCAubWQgZmlsZXMgKHZpYSBCYXNlcyBBUEkpIGFuZCAubWR4IGZpbGVzICh2aWEgbWFudWFsIGZyb250bWF0dGVyIHBhcnNpbmcpXHJcbiAqIFVzZXMgY2FjaGVkIGZyb250bWF0dGVyIHdoZW4gYXZhaWxhYmxlIHRvIGF2b2lkIGFzeW5jIGxvYWRpbmdcclxuICovXHJcbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjYWxjdWxhdGVEcmFmdFN0YXR1c0FzeW5jKFxyXG5cdGVudHJ5OiBCYXNlc0VudHJ5LFxyXG5cdHNldHRpbmdzOiBDTVNTZXR0aW5ncyxcclxuXHRhcHA6IEFwcCxcclxuXHRtZHhGcm9udG1hdHRlckNhY2hlPzogUmVjb3JkPHN0cmluZywgUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCBudWxsPlxyXG4pOiBQcm9taXNlPHsgYm9vbGVhblZhbHVlOiBib29sZWFuIHwgbnVsbDsgaXNEcmFmdDogYm9vbGVhbiB9PiB7XHJcblx0bGV0IGJvb2xlYW5WYWx1ZTogYm9vbGVhbiB8IG51bGwgPSBudWxsO1xyXG5cdGxldCBpc0RyYWZ0ID0gZmFsc2U7XHJcblx0XHJcblx0Ly8gQ2hlY2sgaWYgdXNpbmcgZmlsZW5hbWUgcHJlZml4IG1vZGUgLSB0aGlzIGFsd2F5cyBwcm92aWRlcyBhIHZhbHVlXHJcblx0aWYgKHNldHRpbmdzLmRyYWZ0U3RhdHVzVXNlRmlsZW5hbWVQcmVmaXggJiYgZW50cnkuZmlsZSAmJiBlbnRyeS5maWxlLm5hbWUpIHtcclxuXHRcdGNvbnN0IGZpbGVOYW1lID0gZW50cnkuZmlsZS5uYW1lO1xyXG5cdFx0Y29uc3Qgc3RhcnRzV2l0aFVuZGVyc2NvcmUgPSBmaWxlTmFtZS5zdGFydHNXaXRoKCdfJyk7XHJcblx0XHRib29sZWFuVmFsdWUgPSBzdGFydHNXaXRoVW5kZXJzY29yZTtcclxuXHRcdGlzRHJhZnQgPSBzZXR0aW5ncy5kcmFmdFN0YXR1c1JldmVyc2UgPyAhYm9vbGVhblZhbHVlIDogYm9vbGVhblZhbHVlO1xyXG5cdH0gZWxzZSBpZiAoc2V0dGluZ3MuZHJhZnRTdGF0dXNQcm9wZXJ0eSkge1xyXG5cdFx0Ly8gVHJ5IHN5bmNocm9ub3VzIEJhc2VzIEFQSSBmaXJzdCAod29ya3MgZm9yIC5tZCBmaWxlcylcclxuXHRcdGNvbnN0IGRyYWZ0VmFsdWUgPSBlbnRyeS5nZXRWYWx1ZShzZXR0aW5ncy5kcmFmdFN0YXR1c1Byb3BlcnR5IGFzIGBub3RlLiR7c3RyaW5nfWAgfCBgZm9ybXVsYS4ke3N0cmluZ31gIHwgYGZpbGUuJHtzdHJpbmd9YCkgYXMgeyBkYXRhPzogdW5rbm93biB9IHwgbnVsbDtcclxuXHRcdGlmIChkcmFmdFZhbHVlICYmICdkYXRhJyBpbiBkcmFmdFZhbHVlICYmIHR5cGVvZiBkcmFmdFZhbHVlLmRhdGEgPT09ICdib29sZWFuJykge1xyXG5cdFx0XHRib29sZWFuVmFsdWUgPSBkcmFmdFZhbHVlLmRhdGE7XHJcblx0XHRcdGlzRHJhZnQgPSBzZXR0aW5ncy5kcmFmdFN0YXR1c1JldmVyc2UgPyAhYm9vbGVhblZhbHVlIDogYm9vbGVhblZhbHVlO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0Ly8gRm9yIE1EWCBmaWxlcywgdXNlIGNhY2hlZCBmcm9udG1hdHRlciBpZiBhdmFpbGFibGUsIG90aGVyd2lzZSBmYWxsYmFjayB0byBhc3luYyBsb2FkaW5nXHJcblx0XHRcdGNvbnN0IGZpbGUgPSBhcHAudmF1bHQuZ2V0QWJzdHJhY3RGaWxlQnlQYXRoKGVudHJ5LmZpbGUucGF0aCk7XHJcblx0XHRcdGlmIChmaWxlIGluc3RhbmNlb2YgVEZpbGUgJiYgZmlsZS5leHRlbnNpb24gPT09ICdtZHgnKSB7XHJcblx0XHRcdFx0Ly8gQ2hlY2sgY2FjaGUgZmlyc3RcclxuXHRcdFx0XHRsZXQgZnJvbnRtYXR0ZXI6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgbnVsbCA9IG51bGw7XHJcblx0XHRcdFx0aWYgKG1keEZyb250bWF0dGVyQ2FjaGUpIHtcclxuXHRcdFx0XHRcdGZyb250bWF0dGVyID0gbWR4RnJvbnRtYXR0ZXJDYWNoZVtlbnRyeS5maWxlLnBhdGhdID8/IG51bGw7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdFxyXG5cdFx0XHRcdC8vIElmIG5vdCBpbiBjYWNoZSwgbG9hZCBhc3luY2hyb25vdXNseVxyXG5cdFx0XHRcdGlmIChmcm9udG1hdHRlciA9PT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdFx0XHRmcm9udG1hdHRlciA9IGF3YWl0IGdldEZpbGVGcm9udG1hdHRlcihhcHAsIGZpbGUpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRcclxuXHRcdFx0XHRpZiAoZnJvbnRtYXR0ZXIpIHtcclxuXHRcdFx0XHRcdC8vIFN0cmlwIFwibm90ZS5cIiBwcmVmaXggaWYgcHJlc2VudFxyXG5cdFx0XHRcdFx0Y29uc3QgY2xlYW5Qcm9wID0gc2V0dGluZ3MuZHJhZnRTdGF0dXNQcm9wZXJ0eS5zdGFydHNXaXRoKCdub3RlLicpIFxyXG5cdFx0XHRcdFx0XHQ/IHNldHRpbmdzLmRyYWZ0U3RhdHVzUHJvcGVydHkuc3Vic3RyaW5nKDUpIFxyXG5cdFx0XHRcdFx0XHQ6IHNldHRpbmdzLmRyYWZ0U3RhdHVzUHJvcGVydHk7XHJcblx0XHRcdFx0XHRjb25zdCBmcm9udG1hdHRlclZhbHVlID0gZnJvbnRtYXR0ZXJbY2xlYW5Qcm9wXTtcclxuXHRcdFx0XHRcdFxyXG5cdFx0XHRcdFx0Ly8gSGFuZGxlIGJvb2xlYW4gdmFsdWVzIChZQU1MIHBhcnNlciByZXR1cm5zIGJvb2xlYW5zIGRpcmVjdGx5KVxyXG5cdFx0XHRcdFx0aWYgKHR5cGVvZiBmcm9udG1hdHRlclZhbHVlID09PSAnYm9vbGVhbicpIHtcclxuXHRcdFx0XHRcdFx0Ym9vbGVhblZhbHVlID0gZnJvbnRtYXR0ZXJWYWx1ZTtcclxuXHRcdFx0XHRcdFx0aXNEcmFmdCA9IHNldHRpbmdzLmRyYWZ0U3RhdHVzUmV2ZXJzZSA/ICFib29sZWFuVmFsdWUgOiBib29sZWFuVmFsdWU7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fVxyXG5cdFxyXG5cdHJldHVybiB7IGJvb2xlYW5WYWx1ZSwgaXNEcmFmdCB9O1xyXG59XHJcblxyXG4vKipcclxuICogQ2FsY3VsYXRlIGRyYWZ0IHN0YXR1cyBmcm9tIGVudHJ5IGFuZCBzZXR0aW5ncyAoc3luY2hyb25vdXMgdmVyc2lvbiBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkpXHJcbiAqIE5vdGU6IFRoaXMgb25seSB3b3JrcyBmb3IgLm1kIGZpbGVzLiBGb3IgTURYIGZpbGVzLCB1c2UgY2FsY3VsYXRlRHJhZnRTdGF0dXNBc3luYyBpbnN0ZWFkLlxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGNhbGN1bGF0ZURyYWZ0U3RhdHVzKFxyXG5cdGVudHJ5OiBCYXNlc0VudHJ5LFxyXG5cdHNldHRpbmdzOiBDTVNTZXR0aW5nc1xyXG4pOiB7IGJvb2xlYW5WYWx1ZTogYm9vbGVhbiB8IG51bGw7IGlzRHJhZnQ6IGJvb2xlYW4gfSB7XHJcblx0bGV0IGJvb2xlYW5WYWx1ZTogYm9vbGVhbiB8IG51bGwgPSBudWxsO1xyXG5cdGxldCBpc0RyYWZ0ID0gZmFsc2U7XHJcblx0XHJcblx0Ly8gQ2hlY2sgaWYgdXNpbmcgZmlsZW5hbWUgcHJlZml4IG1vZGUgLSB0aGlzIGFsd2F5cyBwcm92aWRlcyBhIHZhbHVlXHJcblx0aWYgKHNldHRpbmdzLmRyYWZ0U3RhdHVzVXNlRmlsZW5hbWVQcmVmaXggJiYgZW50cnkuZmlsZSAmJiBlbnRyeS5maWxlLm5hbWUpIHtcclxuXHRcdGNvbnN0IGZpbGVOYW1lID0gZW50cnkuZmlsZS5uYW1lO1xyXG5cdFx0Y29uc3Qgc3RhcnRzV2l0aFVuZGVyc2NvcmUgPSBmaWxlTmFtZS5zdGFydHNXaXRoKCdfJyk7XHJcblx0XHRib29sZWFuVmFsdWUgPSBzdGFydHNXaXRoVW5kZXJzY29yZTtcclxuXHRcdGlzRHJhZnQgPSBzZXR0aW5ncy5kcmFmdFN0YXR1c1JldmVyc2UgPyAhYm9vbGVhblZhbHVlIDogYm9vbGVhblZhbHVlO1xyXG5cdH0gZWxzZSBpZiAoc2V0dGluZ3MuZHJhZnRTdGF0dXNQcm9wZXJ0eSkge1xyXG5cdFx0Ly8gVXNlIHByb3BlcnR5LWJhc2VkIGRldGVjdGlvbiAoc3luY2hyb25vdXMgQmFzZXMgQVBJIC0gd29ya3MgZm9yIC5tZCBmaWxlcyBvbmx5KVxyXG5cdFx0Y29uc3QgZHJhZnRWYWx1ZSA9IGVudHJ5LmdldFZhbHVlKHNldHRpbmdzLmRyYWZ0U3RhdHVzUHJvcGVydHkgYXMgYG5vdGUuJHtzdHJpbmd9YCB8IGBmb3JtdWxhLiR7c3RyaW5nfWAgfCBgZmlsZS4ke3N0cmluZ31gKSBhcyB7IGRhdGE/OiB1bmtub3duIH0gfCBudWxsO1xyXG5cdFx0aWYgKGRyYWZ0VmFsdWUgJiYgJ2RhdGEnIGluIGRyYWZ0VmFsdWUgJiYgdHlwZW9mIGRyYWZ0VmFsdWUuZGF0YSA9PT0gJ2Jvb2xlYW4nKSB7XHJcblx0XHRcdGJvb2xlYW5WYWx1ZSA9IGRyYWZ0VmFsdWUuZGF0YTtcclxuXHRcdFx0aXNEcmFmdCA9IHNldHRpbmdzLmRyYWZ0U3RhdHVzUmV2ZXJzZSA/ICFib29sZWFuVmFsdWUgOiBib29sZWFuVmFsdWU7XHJcblx0XHR9XHJcblx0fVxyXG5cdFxyXG5cdHJldHVybiB7IGJvb2xlYW5WYWx1ZSwgaXNEcmFmdCB9O1xyXG59XHJcblxyXG4vKipcclxuICogUmVuZGVyIGRyYWZ0IHN0YXR1cyBiYWRnZSBvbiBhIGNvbnRhaW5lciBlbGVtZW50XHJcbiAqIFN1cHBvcnRzIGJvdGggLm1kIGZpbGVzIChzeW5jaHJvbm91cykgYW5kIC5tZHggZmlsZXMgKHVzZXMgY2FjaGUgd2hlbiBhdmFpbGFibGUpXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gcmVuZGVyRHJhZnRTdGF0dXNCYWRnZShcclxuXHRjb250YWluZXI6IEhUTUxFbGVtZW50LFxyXG5cdGVudHJ5OiBCYXNlc0VudHJ5LFxyXG5cdGNhcmRQYXRoOiBzdHJpbmcsXHJcblx0c2V0dGluZ3M6IENNU1NldHRpbmdzLFxyXG5cdG9uUHJvcGVydHlUb2dnbGU/OiAocGF0aDogc3RyaW5nLCBwcm9wZXJ0eTogc3RyaW5nLCB2YWx1ZTogdW5rbm93bikgPT4gdm9pZCB8IFByb21pc2U8dm9pZD4sXHJcblx0YXBwPzogQXBwLFxyXG5cdG1keEZyb250bWF0dGVyQ2FjaGU/OiBSZWNvcmQ8c3RyaW5nLCBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IG51bGw+XHJcbik6IHZvaWQge1xyXG5cdGlmICghc2V0dGluZ3Muc2hvd0RyYWZ0U3RhdHVzKSB7XHJcblx0XHRyZXR1cm47XHJcblx0fVxyXG5cdFxyXG5cdC8vIFRyeSBzeW5jaHJvbm91cyBmaXJzdCAod29ya3MgZm9yIC5tZCBmaWxlcylcclxuXHRjb25zdCB7IGJvb2xlYW5WYWx1ZTogc3luY1ZhbHVlLCBpc0RyYWZ0OiBzeW5jSXNEcmFmdCB9ID0gY2FsY3VsYXRlRHJhZnRTdGF0dXMoZW50cnksIHNldHRpbmdzKTtcclxuXHRcclxuXHRpZiAoc3luY1ZhbHVlICE9PSBudWxsKSB7XHJcblx0XHQvLyBTeW5jaHJvbm91cyByZXN1bHQgYXZhaWxhYmxlIChmcm9tIEJhc2VzIEFQSSBvciBmaWxlbmFtZSBwcmVmaXgpXHJcblx0XHRyZW5kZXJCYWRnZShjb250YWluZXIsIHN5bmNWYWx1ZSwgc3luY0lzRHJhZnQsIG9uUHJvcGVydHlUb2dnbGUsIGNhcmRQYXRoKTtcclxuXHR9IGVsc2UgaWYgKGFwcCkge1xyXG5cdFx0Ly8gRm9yIE1EWCBmaWxlcywgY2hlY2sgY2FjaGUgZmlyc3QgdG8gcmVuZGVyIHN5bmNocm9ub3VzbHlcclxuXHRcdGNvbnN0IGZpbGUgPSBhcHAudmF1bHQuZ2V0QWJzdHJhY3RGaWxlQnlQYXRoKGVudHJ5LmZpbGUucGF0aCk7XHJcblx0XHRpZiAoZmlsZSBpbnN0YW5jZW9mIFRGaWxlICYmIGZpbGUuZXh0ZW5zaW9uID09PSAnbWR4JyAmJiBtZHhGcm9udG1hdHRlckNhY2hlKSB7XHJcblx0XHRcdGNvbnN0IGZyb250bWF0dGVyID0gbWR4RnJvbnRtYXR0ZXJDYWNoZVtlbnRyeS5maWxlLnBhdGhdO1xyXG5cdFx0XHRpZiAoZnJvbnRtYXR0ZXIgJiYgc2V0dGluZ3MuZHJhZnRTdGF0dXNQcm9wZXJ0eSkge1xyXG5cdFx0XHRcdC8vIFN0cmlwIFwibm90ZS5cIiBwcmVmaXggaWYgcHJlc2VudFxyXG5cdFx0XHRcdGNvbnN0IGNsZWFuUHJvcCA9IHNldHRpbmdzLmRyYWZ0U3RhdHVzUHJvcGVydHkuc3RhcnRzV2l0aCgnbm90ZS4nKSBcclxuXHRcdFx0XHRcdD8gc2V0dGluZ3MuZHJhZnRTdGF0dXNQcm9wZXJ0eS5zdWJzdHJpbmcoNSkgXHJcblx0XHRcdFx0XHQ6IHNldHRpbmdzLmRyYWZ0U3RhdHVzUHJvcGVydHk7XHJcblx0XHRcdFx0Y29uc3QgZnJvbnRtYXR0ZXJWYWx1ZSA9IGZyb250bWF0dGVyW2NsZWFuUHJvcF07XHJcblx0XHRcdFx0XHJcblx0XHRcdFx0Ly8gSGFuZGxlIGJvb2xlYW4gdmFsdWVzIHN5bmNocm9ub3VzbHlcclxuXHRcdFx0XHRpZiAodHlwZW9mIGZyb250bWF0dGVyVmFsdWUgPT09ICdib29sZWFuJykge1xyXG5cdFx0XHRcdFx0Y29uc3QgYm9vbGVhblZhbHVlID0gZnJvbnRtYXR0ZXJWYWx1ZTtcclxuXHRcdFx0XHRcdGNvbnN0IGlzRHJhZnQgPSBzZXR0aW5ncy5kcmFmdFN0YXR1c1JldmVyc2UgPyAhYm9vbGVhblZhbHVlIDogYm9vbGVhblZhbHVlO1xyXG5cdFx0XHRcdFx0cmVuZGVyQmFkZ2UoY29udGFpbmVyLCBib29sZWFuVmFsdWUsIGlzRHJhZnQsIG9uUHJvcGVydHlUb2dnbGUsIGNhcmRQYXRoKTtcclxuXHRcdFx0XHRcdHJldHVybjtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdFxyXG5cdFx0Ly8gTm8gc3luY2hyb25vdXMgcmVzdWx0IC0gdHJ5IGFzeW5jIGZvciBNRFggZmlsZXMgKGZhbGxiYWNrIGlmIGNhY2hlIG1pc3MpXHJcblx0XHR2b2lkIChhc3luYyAoKSA9PiB7XHJcblx0XHRcdGNvbnN0IHsgYm9vbGVhblZhbHVlLCBpc0RyYWZ0IH0gPSBhd2FpdCBjYWxjdWxhdGVEcmFmdFN0YXR1c0FzeW5jKGVudHJ5LCBzZXR0aW5ncywgYXBwLCBtZHhGcm9udG1hdHRlckNhY2hlKTtcclxuXHRcdFx0aWYgKGJvb2xlYW5WYWx1ZSAhPT0gbnVsbCAmJiBjb250YWluZXIuaXNDb25uZWN0ZWQpIHtcclxuXHRcdFx0XHRyZW5kZXJCYWRnZShjb250YWluZXIsIGJvb2xlYW5WYWx1ZSwgaXNEcmFmdCwgb25Qcm9wZXJ0eVRvZ2dsZSwgY2FyZFBhdGgpO1xyXG5cdFx0XHR9XHJcblx0XHR9KSgpO1xyXG5cdH1cclxufVxyXG5cclxuLyoqXHJcbiAqIEhlbHBlciBmdW5jdGlvbiB0byByZW5kZXIgdGhlIGJhZGdlIGVsZW1lbnRcclxuICovXHJcbmZ1bmN0aW9uIHJlbmRlckJhZGdlKFxyXG5cdGNvbnRhaW5lcjogSFRNTEVsZW1lbnQsXHJcblx0Ym9vbGVhblZhbHVlOiBib29sZWFuLFxyXG5cdGlzRHJhZnQ6IGJvb2xlYW4sXHJcblx0b25Qcm9wZXJ0eVRvZ2dsZTogKChwYXRoOiBzdHJpbmcsIHByb3BlcnR5OiBzdHJpbmcsIHZhbHVlOiB1bmtub3duKSA9PiB2b2lkIHwgUHJvbWlzZTx2b2lkPikgfCB1bmRlZmluZWQsXHJcblx0Y2FyZFBhdGg6IHN0cmluZ1xyXG4pOiB2b2lkIHtcclxuXHQvLyBDaGVjayBpZiBiYWRnZSBhbHJlYWR5IGV4aXN0cyB0byBhdm9pZCBkdXBsaWNhdGVzXHJcblx0aWYgKGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKCcuY2FyZC1zdGF0dXMtYmFkZ2UnKSkge1xyXG5cdFx0cmV0dXJuO1xyXG5cdH1cclxuXHRcclxuXHRjb25zdCBzdGF0dXNCYWRnZSA9IGNvbnRhaW5lci5jcmVhdGVEaXYoJ2NhcmQtc3RhdHVzLWJhZGdlJyk7XHJcblx0aWYgKGlzRHJhZnQpIHtcclxuXHRcdHN0YXR1c0JhZGdlLmFkZENsYXNzKCdzdGF0dXMtZHJhZnQnKTtcclxuXHRcdHN0YXR1c0JhZGdlLmFwcGVuZFRleHQoJ0RyYWZ0Jyk7XHJcblx0fSBlbHNlIHtcclxuXHRcdHN0YXR1c0JhZGdlLmFkZENsYXNzKCdzdGF0dXMtcHVibGlzaGVkJyk7XHJcblx0XHRzdGF0dXNCYWRnZS5hcHBlbmRUZXh0KCdQdWJsaXNoZWQnKTtcclxuXHR9XHJcblx0XHJcblx0aWYgKG9uUHJvcGVydHlUb2dnbGUpIHtcclxuXHRcdHN0YXR1c0JhZGdlLmFkZENsYXNzKCdiYXNlcy1jbXMtY3Vyc29yLXBvaW50ZXInKTtcclxuXHRcdHN0YXR1c0JhZGdlLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKGUpID0+IHtcclxuXHRcdFx0ZS5zdG9wUHJvcGFnYXRpb24oKTtcclxuXHRcdFx0Y29uc3QgbmV3VmFsdWUgPSAhYm9vbGVhblZhbHVlO1xyXG5cdFx0XHR2b2lkIG9uUHJvcGVydHlUb2dnbGUoY2FyZFBhdGgsICdkcmFmdCcsIG5ld1ZhbHVlKTtcclxuXHRcdH0pO1xyXG5cdH1cclxufVxyXG5cclxuXHJcbiIsICJpbXBvcnQgeyBBcHAsIFRGaWxlLCBzZXRJY29uLCBNb2RhbCwgVGV4dENvbXBvbmVudCwgTm90aWNlIH0gZnJvbSAnb2JzaWRpYW4nO1xuaW1wb3J0IHsgc2V0Q3NzUHJvcHMgfSBmcm9tICcuL2Nzcy1wcm9wcyc7XG5pbXBvcnQgdHlwZSBCYXNlc0NNU1BsdWdpbiBmcm9tICcuLi9tYWluJztcbmltcG9ydCB0eXBlIHsgQ01TU2V0dGluZ3MgfSBmcm9tICcuLi9zaGFyZWQvZGF0YS10cmFuc2Zvcm0nO1xuXG4vKipcbiAqIFNob3cgcmVuYW1lIGRpYWxvZyBmb3IgYSBmaWxlIHdpdGhvdXQgb3BlbmluZyBpdFxuICogU2ltaWxhciB0byBob3cgQXN0cm8gQ29tcG9zZXIncyByZW5hbWVDb250ZW50QnlQYXRoIHdvcmtzXG4gKi9cbmZ1bmN0aW9uIHNob3dSZW5hbWVEaWFsb2coYXBwOiBBcHAsIGZpbGU6IFRGaWxlKTogdm9pZCB7XG5cdGNvbnN0IG1vZGFsID0gbmV3IE1vZGFsKGFwcCk7XG5cdG1vZGFsLnRpdGxlRWwuc2V0VGV4dCgnUmVuYW1lIGZpbGUnKTtcblxuXHRjb25zdCBpbnB1dENvbnRhaW5lciA9IG1vZGFsLmNvbnRlbnRFbC5jcmVhdGVEaXYoKTtcblx0Ly8gTWFrZSBpbnB1dCBjb250YWluZXIgZnVsbCB3aWR0aFxuXHRzZXRDc3NQcm9wcyhpbnB1dENvbnRhaW5lciwge1xuXHRcdHdpZHRoOiAnMTAwJSdcblx0fSk7XG5cdGNvbnN0IGlucHV0ID0gbmV3IFRleHRDb21wb25lbnQoaW5wdXRDb250YWluZXIpO1xuXHRpbnB1dC5zZXRWYWx1ZShmaWxlLmJhc2VuYW1lKTtcblx0Ly8gTWFrZSBpbnB1dCBmaWVsZCBmdWxsIHdpZHRoIHRvIG1hdGNoIE9ic2lkaWFuJ3MgbmF0aXZlIGRpYWxvZ1xuXHRzZXRDc3NQcm9wcyhpbnB1dC5pbnB1dEVsLCB7XG5cdFx0d2lkdGg6ICcxMDAlJyxcblx0XHRib3hTaXppbmc6ICdib3JkZXItYm94J1xuXHR9KTtcblx0aW5wdXQuaW5wdXRFbC5mb2N1cygpO1xuXHRpbnB1dC5pbnB1dEVsLnNlbGVjdCgpO1xuXG5cdGNvbnN0IGJ1dHRvbkNvbnRhaW5lciA9IG1vZGFsLmNvbnRlbnRFbC5jcmVhdGVEaXYoeyBjbHM6ICdtb2RhbC1idXR0b24tY29udGFpbmVyJyB9KTtcblx0Y29uc3QgY2FuY2VsQnV0dG9uID0gYnV0dG9uQ29udGFpbmVyLmNyZWF0ZUVsKCdidXR0b24nLCB7IHRleHQ6ICdDYW5jZWwnIH0pO1xuXHRjYW5jZWxCdXR0b24uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiBtb2RhbC5jbG9zZSgpKTtcblxuXHRjb25zdCByZW5hbWVCdXR0b24gPSBidXR0b25Db250YWluZXIuY3JlYXRlRWwoJ2J1dHRvbicsIHtcblx0XHR0ZXh0OiAnUmVuYW1lJyxcblx0XHRjbHM6ICdtb2QtY3RhJ1xuXHR9KTtcblxuXHRjb25zdCBoYW5kbGVSZW5hbWUgPSBhc3luYyAoKSA9PiB7XG5cdFx0Y29uc3QgbmV3TmFtZSA9IGlucHV0LmdldFZhbHVlKCkudHJpbSgpO1xuXHRcdGlmICghbmV3TmFtZSB8fCBuZXdOYW1lID09PSBmaWxlLmJhc2VuYW1lKSB7XG5cdFx0XHRtb2RhbC5jbG9zZSgpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIENvbnN0cnVjdCBuZXcgcGF0aCB3aXRoIGV4dGVuc2lvblxuXHRcdGNvbnN0IHBhdGhQYXJ0cyA9IGZpbGUucGF0aC5zcGxpdCgnLycpO1xuXHRcdHBhdGhQYXJ0c1twYXRoUGFydHMubGVuZ3RoIC0gMV0gPSBuZXdOYW1lICsgKGZpbGUuZXh0ZW5zaW9uID8gYC4ke2ZpbGUuZXh0ZW5zaW9ufWAgOiAnJyk7XG5cdFx0Y29uc3QgbmV3UGF0aCA9IHBhdGhQYXJ0cy5qb2luKCcvJyk7XG5cblx0XHR0cnkge1xuXHRcdFx0YXdhaXQgYXBwLmZpbGVNYW5hZ2VyLnJlbmFtZUZpbGUoZmlsZSwgbmV3UGF0aCk7XG5cdFx0XHRtb2RhbC5jbG9zZSgpO1xuXHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHQvLyBFcnJvciBoYW5kbGluZyAtIHRoZSByZW5hbWUgbWlnaHQgZmFpbCBpZiBmaWxlIGFscmVhZHkgZXhpc3RzLCBldGMuXG5cdFx0XHRjb25zb2xlLmVycm9yKCdbQmFzZXMgQ01TXSBFcnJvciByZW5hbWluZyBmaWxlOicsIGVycm9yKTtcblx0XHRcdG1vZGFsLmNsb3NlKCk7XG5cdFx0fVxuXHR9O1xuXG5cdHJlbmFtZUJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHtcblx0XHR2b2lkIGhhbmRsZVJlbmFtZSgpO1xuXHR9KTtcblxuXHRpbnB1dC5pbnB1dEVsLmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCAoZSkgPT4ge1xuXHRcdGlmIChlLmtleSA9PT0gJ0VudGVyJykge1xuXHRcdFx0ZS5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0dm9pZCBoYW5kbGVSZW5hbWUoKTtcblx0XHR9IGVsc2UgaWYgKGUua2V5ID09PSAnRXNjYXBlJykge1xuXHRcdFx0ZS5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0bW9kYWwuY2xvc2UoKTtcblx0XHR9XG5cdH0pO1xuXG5cdG1vZGFsLm9wZW4oKTtcbn1cblxuLyoqXG4gKiBDaGVjayBpZiBhIGNvbW1hbmQgaXMgT2JzaWRpYW4ncyBkZWZhdWx0IFwiUmVuYW1lIGZpbGVcIiBjb21tYW5kXG4gKi9cbmZ1bmN0aW9uIGlzT2JzaWRpYW5SZW5hbWVDb21tYW5kKGNvbW1hbmRJZDogc3RyaW5nKTogYm9vbGVhbiB7XG5cdC8vIE9ic2lkaWFuJ3MgcmVuYW1lIGZpbGUgY29tbWFuZCBJRHMgKG1heSB2YXJ5IGJ5IHZlcnNpb24pXG5cdGNvbnN0IGxvd2VySWQgPSBjb21tYW5kSWQudG9Mb3dlckNhc2UoKTtcblx0cmV0dXJuIGNvbW1hbmRJZCA9PT0gJ2ZpbGUtZXhwbG9yZXI6cmVuYW1lLWZpbGUnIHx8XG5cdFx0Y29tbWFuZElkID09PSAncmVuYW1lLWZpbGUnIHx8XG5cdFx0Y29tbWFuZElkID09PSAnZmlsZTpyZW5hbWUtZmlsZScgfHxcblx0XHQobG93ZXJJZC5pbmNsdWRlcygncmVuYW1lJykgJiYgbG93ZXJJZC5pbmNsdWRlcygnZmlsZScpICYmICFsb3dlcklkLmluY2x1ZGVzKCc6JykpO1xufVxuXG4vKipcbiAqIENoZWNrIGlmIGEgY29tbWFuZCBpcyBrbm93biB0byBub3Qgd29yayB3ZWxsIHdpdGhvdXQgdGhlIGZpbGUgYmVpbmcgcHJvcGVybHkgb3BlbmVkXG4gKiBUaGVzZSBjb21tYW5kcyB0eXBpY2FsbHkgbmVlZCBlZGl0b3IgY29udGV4dCBvciBzcGVjaWZpYyBVSSBzdGF0ZSB0aGF0IGNhbid0IGJlIGZha2VkXG4gKi9cbmZ1bmN0aW9uIGlzUHJvYmxlbWF0aWNDb21tYW5kKGNvbW1hbmRJZDogc3RyaW5nLCBjb21tYW5kTmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XG5cdGNvbnN0IGxvd2VySWQgPSBjb21tYW5kSWQudG9Mb3dlckNhc2UoKTtcblx0Y29uc3QgbG93ZXJOYW1lID0gY29tbWFuZE5hbWUudG9Mb3dlckNhc2UoKTtcblxuXHQvLyBDb21tYW5kcyB0aGF0IG5lZWQgZWRpdG9yIGNvbnRleHQgYW5kIHR5cGljYWxseSBkb24ndCB3b3JrIHdlbGwgcHJvZ3JhbW1hdGljYWxseVxuXHRjb25zdCBwcm9ibGVtYXRpY1BhdHRlcm5zID0gW1xuXHRcdCdhZGQgdGFnJyxcblx0XHQnYWRkLXRhZycsXG5cdFx0J2luc2VydC10ZW1wbGF0ZScsXG5cdFx0J2luc2VydC10ZW1wbGF0ZScsXG5cdFx0J2VkaXRvcjonLFxuXHRcdCdtYXJrZG93bjonLFxuXHRdO1xuXG5cdHJldHVybiBwcm9ibGVtYXRpY1BhdHRlcm5zLnNvbWUocGF0dGVybiA9PlxuXHRcdGxvd2VySWQuaW5jbHVkZXMocGF0dGVybikgfHwgbG93ZXJOYW1lLmluY2x1ZGVzKHBhdHRlcm4pXG5cdCk7XG59XG5cbi8qKlxuICogU2V0dXAgcXVpY2sgZWRpdCBpY29uIG9uIHRpdGxlIGVsZW1lbnQgKG9yIGNhcmQgaWYgdGl0bGUgaXMgaGlkZGVuKVxuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0dXBRdWlja0VkaXRJY29uKFxuXHRhcHA6IEFwcCxcblx0cGx1Z2luOiBCYXNlc0NNU1BsdWdpbixcblx0dGl0bGVFbDogSFRNTEVsZW1lbnQsXG5cdGNhcmRFbDogSFRNTEVsZW1lbnQsXG5cdGNhcmRQYXRoOiBzdHJpbmcsXG5cdHNldHRpbmdzOiBDTVNTZXR0aW5nc1xuKTogdm9pZCB7XG5cdC8vIFF1aWNrIGVkaXQgaWNvbiAob25seSBpZiBlbmFibGVkLCBjb21tYW5kIGlzIHNldCwgYW5kIG5vdCBoaWRkZW4gaW4gdGhpcyB2aWV3KVxuXHRpZiAoIXBsdWdpbi5zZXR0aW5ncy5lbmFibGVRdWlja0VkaXQgfHxcblx0XHQhcGx1Z2luLnNldHRpbmdzLnF1aWNrRWRpdENvbW1hbmQgfHxcblx0XHRwbHVnaW4uc2V0dGluZ3MucXVpY2tFZGl0Q29tbWFuZCA9PT0gJycgfHxcblx0XHRzZXR0aW5ncy5oaWRlUXVpY2tFZGl0SWNvbikge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdC8vIEF0dGFjaCB0byB0aXRsZUVsICh0aXRsZSBpcyBhbHdheXMgc2hvd24gbm93KVxuXHRjb25zdCBxdWlja0VkaXRJY29uID0gdGl0bGVFbC5jcmVhdGVTcGFuKCdiYXNlcy1jbXMtcXVpY2stZWRpdC1pY29uJyk7XG5cdHF1aWNrRWRpdEljb24uYWRkQ2xhc3MoJ2Jhc2VzLWNtcy1jdXJzb3ItZGVmYXVsdCcpO1xuXHRzZXRJY29uKHF1aWNrRWRpdEljb24sIHBsdWdpbi5zZXR0aW5ncy5xdWlja0VkaXRJY29uIHx8ICdwZW5jaWwtbGluZScpO1xuXG5cdC8vIFByZXZlbnQgdGl0bGUgZnJvbSBiZWluZyBjbGlja2FibGUgd2hlbiBjbGlja2luZyBpY29uXG5cdHRpdGxlRWwuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoZSkgPT4ge1xuXHRcdGlmIChxdWlja0VkaXRJY29uLmNvbnRhaW5zKGUudGFyZ2V0IGFzIE5vZGUpKSB7XG5cdFx0XHRlLnN0b3BQcm9wYWdhdGlvbigpO1xuXHRcdFx0ZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcblx0XHR9XG5cdH0sIHRydWUpO1xuXG5cdC8vIEV4ZWN1dGUgY29tbWFuZCB3aGVuIGljb24gaXMgY2xpY2tlZFxuXHQvLyBSZWdpc3RlciB3aXRoIGNhcHR1cmUgcGhhc2UgQkVGT1JFIGNhcmQgY2xpY2sgaGFuZGxlciBjYW4gc2VlIGl0XG5cdGNhcmRFbC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIChlKSA9PiB7XG5cdFx0dm9pZCAoYXN5bmMgKCkgPT4ge1xuXHRcdFx0Y29uc3QgdGFyZ2V0ID0gZS50YXJnZXQgYXMgSFRNTEVsZW1lbnQ7XG5cdFx0XHRpZiAoIXF1aWNrRWRpdEljb24uY29udGFpbnModGFyZ2V0KSAmJiAhdGFyZ2V0LmNsb3Nlc3QoJy5iYXNlcy1jbXMtcXVpY2stZWRpdC1pY29uJykpIHtcblx0XHRcdFx0cmV0dXJuOyAvLyBOb3QgY2xpY2tpbmcgb24gaWNvblxuXHRcdFx0fVxuXG5cdFx0XHRlLnN0b3BQcm9wYWdhdGlvbigpO1xuXHRcdFx0ZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcblx0XHRcdGUucHJldmVudERlZmF1bHQoKTtcblxuXHRcdFx0Ly8gVHJ5IHRvIGV4ZWN1dGUgY29tbWFuZCB3aXRob3V0IG9wZW5pbmcgZmlsZSBmaXJzdFxuXHRcdFx0Ly8gRm9yIGNvbW1hbmRzIHRoYXQgbmVlZCBmaWxlIGNvbnRleHQsIHRyeSB0byBjYWxsIGhlbHBlciBmdW5jdGlvbnMgZGlyZWN0bHkgaWYgYXZhaWxhYmxlXG5cdFx0XHRjb25zdCBmaWxlID0gYXBwLnZhdWx0LmdldEFic3RyYWN0RmlsZUJ5UGF0aChjYXJkUGF0aCk7XG5cdFx0XHRpZiAoZmlsZSBpbnN0YW5jZW9mIFRGaWxlKSB7XG5cdFx0XHRcdGNvbnN0IGNvbW1hbmRJZCA9IHBsdWdpbi5zZXR0aW5ncy5xdWlja0VkaXRDb21tYW5kO1xuXG5cdFx0XHRcdC8vIEZJUlNUOiBDaGVjayBpZiB0aGlzIGlzIE9ic2lkaWFuJ3MgXCJSZW5hbWUgZmlsZVwiIGNvbW1hbmRcblx0XHRcdFx0Ly8gU2hvdyByZW5hbWUgZGlhbG9nIHdpdGhvdXQgb3BlbmluZyB0aGUgZmlsZSwgc2ltaWxhciB0byBBc3RybyBDb21wb3NlclxuXHRcdFx0XHRjb25zdCBjb21tYW5kUmVnaXN0cnkgPSAoYXBwIGFzIHsgY29tbWFuZHM/OiB7IGNvbW1hbmRzPzogUmVjb3JkPHN0cmluZywgeyBuYW1lPzogc3RyaW5nIH0+IH0gfSkuY29tbWFuZHM7XG5cdFx0XHRcdGNvbnN0IGNvbW1hbmQgPSBjb21tYW5kUmVnaXN0cnk/LmNvbW1hbmRzPy5bY29tbWFuZElkXTtcblx0XHRcdFx0Y29uc3QgY29tbWFuZE5hbWUgPSBjb21tYW5kPy5uYW1lIHx8ICcnO1xuXHRcdFx0XHRjb25zdCBsb3dlckNvbW1hbmROYW1lID0gY29tbWFuZE5hbWUudG9Mb3dlckNhc2UoKTtcblxuXHRcdFx0XHQvLyBDaGVjayBpZiB0aGlzIGlzIGEgcmVuYW1lIGZpbGUgY29tbWFuZCBieSBJRCBvciBuYW1lXG5cdFx0XHRcdGlmIChpc09ic2lkaWFuUmVuYW1lQ29tbWFuZChjb21tYW5kSWQpIHx8XG5cdFx0XHRcdFx0KGxvd2VyQ29tbWFuZE5hbWUuaW5jbHVkZXMoJ3JlbmFtZScpICYmIGxvd2VyQ29tbWFuZE5hbWUuaW5jbHVkZXMoJ2ZpbGUnKSkpIHtcblx0XHRcdFx0XHRzaG93UmVuYW1lRGlhbG9nKGFwcCwgZmlsZSk7XG5cdFx0XHRcdFx0cmV0dXJuOyAvLyBTdWNjZXNzLCBleGl0IGVhcmx5IC0gZG8gTk9UIG9wZW4gdGhlIGZpbGVcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIENoZWNrIGlmIHRoaXMgaXMgYSBrbm93biBwcm9ibGVtYXRpYyBjb21tYW5kIHRoYXQgd29uJ3Qgd29yayB3ZWxsXG5cdFx0XHRcdGlmIChpc1Byb2JsZW1hdGljQ29tbWFuZChjb21tYW5kSWQsIGNvbW1hbmROYW1lKSkge1xuXHRcdFx0XHRcdGlmIChwbHVnaW4uc2V0dGluZ3MucXVpY2tFZGl0T3BlbkZpbGUpIHtcblx0XHRcdFx0XHRcdC8vIFVzZXIgaGFzIGVuYWJsZWQgdGhlIHNldHRpbmcsIHNvIHRyeSB0byBvcGVuIGFuZCBleGVjdXRlIGFueXdheVxuXHRcdFx0XHRcdFx0Ly8gRmFsbCB0aHJvdWdoIHRvIHRoZSBmaWxlIG9wZW5pbmcgbG9naWMgYmVsb3dcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0bmV3IE5vdGljZShgVGhlIFwiJHtjb21tYW5kTmFtZX1cIiBjb21tYW5kIHJlcXVpcmVzIHRoZSBmaWxlIHRvIGJlIG9wZW4gaW4gYW4gZWRpdG9yLiBFbmFibGUgXCJBdHRlbXB0IHRvIG9wZW4gZmlsZSBhbmQgZXhlY3V0ZSBxdWljayBlZGl0IGNvbW1hbmRcIiBpbiBzZXR0aW5ncyB0byB0cnkgYW55d2F5LmAsIDUwMDApO1xuXHRcdFx0XHRcdFx0cmV0dXJuOyAvLyBEb24ndCB0cnkgdG8gZXhlY3V0ZSAtIGl0IHdvbid0IHdvcmsgcHJvcGVybHlcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBUcnkgdG8gZmluZCBhbmQgY2FsbCBhIGhlbHBlciBmdW5jdGlvbiBmcm9tIHRoZSBwbHVnaW4gdGhhdCByZWdpc3RlcmVkIHRoaXMgY29tbWFuZFxuXHRcdFx0XHQvLyBQYXR0ZXJuOiBMb29rIGZvciBbY29tbWFuZElkXUJ5UGF0aCBtZXRob2Qgb24gdGhlIHNvdXJjZSBwbHVnaW5cblx0XHRcdFx0bGV0IGhlbHBlckNhbGxlZCA9IGZhbHNlO1xuXHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdC8vIEV4dHJhY3QgcGx1Z2luIElEIGZyb20gY29tbWFuZCBJRCBpZiBpdCBoYXMgdGhlIGZvcm1hdCBcInBsdWdpbi1pZDpjb21tYW5kLWlkXCJcblx0XHRcdFx0XHQvLyBPdGhlcndpc2UsIHRyeSB0byBnZXQgaXQgZnJvbSB0aGUgY29tbWFuZCByZWdpc3RyeVxuXHRcdFx0XHRcdGxldCBwbHVnaW5JZDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG5cdFx0XHRcdFx0bGV0IGJhc2VDb21tYW5kSWQgPSBjb21tYW5kSWQ7XG5cblx0XHRcdFx0XHRpZiAoY29tbWFuZElkLmluY2x1ZGVzKCc6JykpIHtcblx0XHRcdFx0XHRcdGNvbnN0IHBhcnRzID0gY29tbWFuZElkLnNwbGl0KCc6Jyk7XG5cdFx0XHRcdFx0XHRwbHVnaW5JZCA9IHBhcnRzWzBdO1xuXHRcdFx0XHRcdFx0YmFzZUNvbW1hbmRJZCA9IHBhcnRzLnNsaWNlKDEpLmpvaW4oJzonKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0Ly8gVHJ5IHRvIGdldCBwbHVnaW4gZnJvbSBjb21tYW5kIHJlZ2lzdHJ5XG5cdFx0XHRcdFx0XHRjb25zdCBhcHBXaXRoQ29tbWFuZHMgPSBhcHAgYXMgeyBjb21tYW5kcz86IHsgY29tbWFuZHM/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB9IH07XG5cdFx0XHRcdFx0XHRjb25zdCBjb21tYW5kUmVnaXN0cnkgPSBhcHBXaXRoQ29tbWFuZHMuY29tbWFuZHM7XG5cdFx0XHRcdFx0XHRjb25zdCBjb21tYW5kID0gY29tbWFuZFJlZ2lzdHJ5Py5jb21tYW5kcz8uW2NvbW1hbmRJZF0gYXMgeyBwbHVnaW4/OiB7IG1hbmlmZXN0PzogeyBpZD86IHN0cmluZyB9OyBwbHVnaW5JZD86IHN0cmluZyB9OyBzb3VyY2VQbHVnaW4/OiB7IG1hbmlmZXN0PzogeyBpZD86IHN0cmluZyB9OyBwbHVnaW5JZD86IHN0cmluZyB9IH0gfCB1bmRlZmluZWQ7XG5cdFx0XHRcdFx0XHRpZiAoY29tbWFuZCkge1xuXHRcdFx0XHRcdFx0XHQvLyBUcnkgbXVsdGlwbGUgd2F5cyB0byBnZXQgdGhlIHBsdWdpblxuXHRcdFx0XHRcdFx0XHRjb25zdCBzb3VyY2VQbHVnaW4gPSBjb21tYW5kLnBsdWdpbiB8fCBjb21tYW5kLnNvdXJjZVBsdWdpbjtcblx0XHRcdFx0XHRcdFx0aWYgKHNvdXJjZVBsdWdpbikge1xuXHRcdFx0XHRcdFx0XHRcdC8vIFRyeSB0byBnZXQgcGx1Z2luIElEIGZyb20gcGx1Z2luIGluc3RhbmNlXG5cdFx0XHRcdFx0XHRcdFx0cGx1Z2luSWQgPSBzb3VyY2VQbHVnaW4ubWFuaWZlc3Q/LmlkIHx8IHNvdXJjZVBsdWdpbi5wbHVnaW5JZCB8fCBudWxsO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ly8gSWYgd2UgaGF2ZSBhIHBsdWdpbiBJRCwgdHJ5IHRvIGdldCB0aGUgcGx1Z2luIGluc3RhbmNlXG5cdFx0XHRcdFx0aWYgKHBsdWdpbklkKSB7XG5cdFx0XHRcdFx0XHRjb25zdCBwbHVnaW5zID0gKGFwcCBhcyB7IHBsdWdpbnM/OiB7IHBsdWdpbnM/OiBSZWNvcmQ8c3RyaW5nLCBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4gfSB9KS5wbHVnaW5zO1xuXHRcdFx0XHRcdFx0Y29uc3Qgc291cmNlUGx1Z2luID0gcGx1Z2lucz8ucGx1Z2lucz8uW3BsdWdpbklkXTtcblxuXHRcdFx0XHRcdFx0aWYgKHNvdXJjZVBsdWdpbikge1xuXHRcdFx0XHRcdFx0XHQvLyBDb252ZXJ0IGNvbW1hbmQgSUQgdG8gY2FtZWxDYXNlIG1ldGhvZCBuYW1lXG5cdFx0XHRcdFx0XHRcdC8vIGUuZy4sIFwicmVuYW1lLWNvbnRlbnRcIiAtPiBcInJlbmFtZUNvbnRlbnRCeVBhdGhcIlxuXHRcdFx0XHRcdFx0XHRjb25zdCBtZXRob2ROYW1lID0gYmFzZUNvbW1hbmRJZFxuXHRcdFx0XHRcdFx0XHRcdC5zcGxpdCgnLScpXG5cdFx0XHRcdFx0XHRcdFx0Lm1hcCgocGFydCwgaW5kZXgpID0+XG5cdFx0XHRcdFx0XHRcdFx0XHRpbmRleCA9PT0gMCA/IHBhcnQgOiBwYXJ0LmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgcGFydC5zbGljZSgxKVxuXHRcdFx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHRcdFx0XHQuam9pbignJykgKyAnQnlQYXRoJztcblxuXHRcdFx0XHRcdFx0XHQvLyBDaGVjayBpZiB0aGUgcGx1Z2luIGV4cG9zZXMgdGhpcyBoZWxwZXIgZnVuY3Rpb25cblx0XHRcdFx0XHRcdFx0aWYgKHNvdXJjZVBsdWdpbiAmJiB0eXBlb2Ygc291cmNlUGx1Z2luW21ldGhvZE5hbWVdID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0XHRcdFx0XHRcdFx0Ly8gQ2FsbCB0aGUgaGVscGVyIGZ1bmN0aW9uIGRpcmVjdGx5IC0gbm8gbmVlZCB0byBvcGVuIGZpbGUhXG5cdFx0XHRcdFx0XHRcdFx0YXdhaXQgKHNvdXJjZVBsdWdpblttZXRob2ROYW1lXSBhcyAocGF0aDogc3RyaW5nKSA9PiBQcm9taXNlPHZvaWQ+KShjYXJkUGF0aCk7XG5cdFx0XHRcdFx0XHRcdFx0aGVscGVyQ2FsbGVkID0gdHJ1ZTtcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm47IC8vIFN1Y2Nlc3MsIGV4aXQgZWFybHlcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBjYXRjaCB7XG5cdFx0XHRcdFx0Ly8gRmFsbCB0aHJvdWdoIHRvIHRyeSByZWd1bGFyIGNvbW1hbmQgZXhlY3V0aW9uXG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBGb3Igb3RoZXIgY29tbWFuZHMgb3IgaWYgaGVscGVyIG5vdCBhdmFpbGFibGUsIGNoZWNrIGlmIHVzZXIgd2FudHMgdG8gdHJ5IG9wZW5pbmcgdGhlIGZpbGVcblx0XHRcdFx0aWYgKCFoZWxwZXJDYWxsZWQpIHtcblx0XHRcdFx0XHQvLyBPbmx5IGF0dGVtcHQgdG8gb3BlbiBmaWxlIGFuZCBleGVjdXRlIGlmIHRoZSBzZXR0aW5nIGlzIGVuYWJsZWRcblx0XHRcdFx0XHRpZiAoIXBsdWdpbi5zZXR0aW5ncy5xdWlja0VkaXRPcGVuRmlsZSkge1xuXHRcdFx0XHRcdFx0Ly8gRmFsc2UgcG9zaXRpdmU6IEFscmVhZHkgaW4gc2VudGVuY2UgY2FzZTsgcXVvdGVkIHRleHQgaXMgYSBzZXR0aW5nIG5hbWUgcmVmZXJlbmNlXG5cdFx0XHRcdFx0XHRuZXcgTm90aWNlKGBUaGlzIGNvbW1hbmQgZG9lc24ndCBoYXZlIHNwZWNpYWwgaGFuZGxpbmcuIEVuYWJsZSBcIkF0dGVtcHQgdG8gb3BlbiBmaWxlIGFuZCBleGVjdXRlIHF1aWNrIGVkaXQgY29tbWFuZFwiIGluIHNldHRpbmdzIHRvIHRyeSBleGVjdXRpbmcgaXQuYCwgNTAwMCk7XG5cdFx0XHRcdFx0XHRyZXR1cm47IC8vIERvbid0IHRyeSB0byBleGVjdXRlXG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ly8gVXNlciBoYXMgZW5hYmxlZCB0aGUgc2V0dGluZywgc28gdHJ5IHRvIG9wZW4gdGhlIGZpbGUgZmlyc3Rcblx0XHRcdFx0XHQvLyBhbmQgbWFrZSBpdCBhY3RpdmUgc28gY29tbWFuZHMgbGlrZSBcIlJlbmFtZSBmaWxlXCIgdGFyZ2V0IHRoZSBjb3JyZWN0IGZpbGVcblx0XHRcdFx0XHQvLyBBbHdheXMgb3BlbiB0aGUgZmlsZSBmaXJzdCBhbmQgbWFrZSBpdCBhY3RpdmUgYmVmb3JlIGV4ZWN1dGluZyB0aGUgY29tbWFuZFxuXHRcdFx0XHRcdC8vIFRoaXMgZW5zdXJlcyBjb21tYW5kcyB0aGF0IHVzZSBnZXRBY3RpdmVGaWxlKCkgdGFyZ2V0IHRoZSBjb3JyZWN0IGZpbGVcblx0XHRcdFx0XHRjb25zdCBsZWFmID0gYXBwLndvcmtzcGFjZS5nZXRMZWFmKGZhbHNlKTtcblx0XHRcdFx0XHRhd2FpdCBsZWFmLm9wZW5GaWxlKGZpbGUpO1xuXG5cdFx0XHRcdFx0Ly8gQ1JJVElDQUw6IFNldCB0aGlzIGxlYWYgYXMgYWN0aXZlIHNvIGNvbW1hbmRzIHRhcmdldCB0aGUgY29ycmVjdCBmaWxlXG5cdFx0XHRcdFx0Ly8gQ29tbWFuZHMgbGlrZSBcIlJlbmFtZSBmaWxlXCIgdXNlIGdldEFjdGl2ZUZpbGUoKSB0byBkZXRlcm1pbmUgd2hpY2ggZmlsZSB0byBvcGVyYXRlIG9uXG5cdFx0XHRcdFx0YXBwLndvcmtzcGFjZS5zZXRBY3RpdmVMZWFmKGxlYWYsIHsgZm9jdXM6IHRydWUgfSk7XG5cblx0XHRcdFx0XHQvLyBXYWl0IGZvciB0aGUgZWRpdG9yIHRvIGJlIHJlYWR5IGFuZCB0aGUgZmlsZSB0byBiZSBhY3RpdmVcblx0XHRcdFx0XHQvLyBVc2UgbXVsdGlwbGUgY2hlY2tzIHRvIGVuc3VyZSB0aGUgd29ya3NwYWNlIHN0YXRlIGhhcyBmdWxseSB1cGRhdGVkXG5cdFx0XHRcdFx0bGV0IGF0dGVtcHRzID0gMDtcblx0XHRcdFx0XHRjb25zdCBtYXhBdHRlbXB0cyA9IDMwOyAvLyBNYXhpbXVtIDEuNSBzZWNvbmRzIG9mIHdhaXRpbmcgKDMwICogNTBtcylcblx0XHRcdFx0XHRjb25zdCBleGVjdXRlQ29tbWFuZCA9ICgpID0+IHtcblx0XHRcdFx0XHRcdC8vIEZpbmFsIGNoZWNrIHJpZ2h0IGJlZm9yZSBleGVjdXRpbmdcblx0XHRcdFx0XHRcdGNvbnN0IGZpbmFsQWN0aXZlRmlsZSA9IGFwcC53b3Jrc3BhY2UuZ2V0QWN0aXZlRmlsZSgpO1xuXHRcdFx0XHRcdFx0aWYgKGZpbmFsQWN0aXZlRmlsZSA9PT0gZmlsZSkge1xuXHRcdFx0XHRcdFx0XHQvLyBGaWxlIGlzIGNvbmZpcm1lZCBhY3RpdmUsIGV4ZWN1dGUgdGhlIGNvbW1hbmRcblx0XHRcdFx0XHRcdFx0dm9pZCAoYXN5bmMgKCkgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRhd2FpdCAoYXBwIGFzIHsgY29tbWFuZHM/OiB7IGV4ZWN1dGVDb21tYW5kQnlJZD86IChpZDogc3RyaW5nKSA9PiBQcm9taXNlPHZvaWQ+IH0gfSkuY29tbWFuZHM/LmV4ZWN1dGVDb21tYW5kQnlJZD8uKHBsdWdpbi5zZXR0aW5ncy5xdWlja0VkaXRDb21tYW5kKTtcblx0XHRcdFx0XHRcdFx0XHR9IGNhdGNoIHtcblx0XHRcdFx0XHRcdFx0XHRcdC8vIENvbW1hbmQgZXhlY3V0aW9uIGZhaWxlZFxuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fSkoKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9O1xuXG5cdFx0XHRcdFx0Y29uc3QgY2hlY2tFZGl0b3JSZWFkeSA9ICgpID0+IHtcblx0XHRcdFx0XHRcdGNvbnN0IHZpZXcgPSBsZWFmLnZpZXc7XG5cdFx0XHRcdFx0XHRjb25zdCB2aWV3V2l0aEVkaXRvciA9IHZpZXcgYXMgeyBlZGl0b3I/OiB1bmtub3duIH07XG5cdFx0XHRcdFx0XHRjb25zdCBhY3RpdmVGaWxlID0gYXBwLndvcmtzcGFjZS5nZXRBY3RpdmVGaWxlKCk7XG5cblx0XHRcdFx0XHRcdC8vIENoZWNrIHRoYXQgYm90aCB0aGUgZWRpdG9yIGlzIHJlYWR5IEFORCB0aGUgZmlsZSBpcyBhY3RpdmVcblx0XHRcdFx0XHRcdGlmICh2aWV3ICYmICdlZGl0b3InIGluIHZpZXcgJiYgdmlld1dpdGhFZGl0b3IuZWRpdG9yICYmIGFjdGl2ZUZpbGUgPT09IGZpbGUpIHtcblx0XHRcdFx0XHRcdFx0Ly8gRWRpdG9yIGlzIHJlYWR5IGFuZCBmaWxlIGlzIGFjdGl2ZVxuXHRcdFx0XHRcdFx0XHQvLyBXYWl0IGEgYml0IG1vcmUgdG8gZW5zdXJlIHdvcmtzcGFjZSBzdGF0ZSBpcyBmdWxseSBwcm9wYWdhdGVkXG5cdFx0XHRcdFx0XHRcdC8vIFVzZSBtdWx0aXBsZSBhbmltYXRpb24gZnJhbWVzIGFuZCB0aW1lb3V0cyB0byBlbnN1cmUgZXZlcnl0aGluZyBpcyBzZXR0bGVkXG5cdFx0XHRcdFx0XHRcdHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0cmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcblx0XHRcdFx0XHRcdFx0XHRcdHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRleGVjdXRlQ29tbWFuZCgpO1xuXHRcdFx0XHRcdFx0XHRcdFx0fSwgMjAwKTtcblx0XHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHR9IGVsc2UgaWYgKGF0dGVtcHRzIDwgbWF4QXR0ZW1wdHMpIHtcblx0XHRcdFx0XHRcdFx0Ly8gRWRpdG9yIG5vdCByZWFkeSB5ZXQgb3IgZmlsZSBub3QgYWN0aXZlLCBjaGVjayBhZ2FpblxuXHRcdFx0XHRcdFx0XHRhdHRlbXB0cysrO1xuXHRcdFx0XHRcdFx0XHRzZXRUaW1lb3V0KGNoZWNrRWRpdG9yUmVhZHksIDUwKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9O1xuXG5cdFx0XHRcdFx0Ly8gU3RhcnQgY2hlY2tpbmcgZm9yIGVkaXRvciByZWFkaW5lc3Ncblx0XHRcdFx0XHRjaGVja0VkaXRvclJlYWR5KCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KSgpO1xuXHR9LCB0cnVlKTsgLy8gQ2FwdHVyZSBwaGFzZSAtIHJ1bnMgQkVGT1JFIHRoZSByZWd1bGFyIGNhcmQgY2xpY2sgaGFuZGxlclxuXG5cdC8vIEFsc28gYWRkIGEgbW91c2Vkb3duIGhhbmRsZXIgdG8gY2F0Y2ggaXQgZXZlbiBlYXJsaWVyXG5cdHF1aWNrRWRpdEljb24uYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgKGUpID0+IHtcblx0XHRlLnN0b3BQcm9wYWdhdGlvbigpO1xuXHRcdGUuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG5cdFx0ZS5wcmV2ZW50RGVmYXVsdCgpO1xuXHR9LCB0cnVlKTtcbn1cblxuIiwgIi8qKlxyXG4gKiBQcm9wZXJ0eSBSZW5kZXJlclxyXG4gKiBIYW5kbGVzIHJlbmRlcmluZyBwcm9wZXJ0eSBmaWVsZHMgYW5kIGNvbnRlbnQgZm9yIGNhcmRzXHJcbiAqL1xyXG5cclxuaW1wb3J0IHsgQXBwLCBCYXNlc0VudHJ5LCBURmlsZSB9IGZyb20gJ29ic2lkaWFuJztcclxuaW1wb3J0IHR5cGUgeyBDYXJkRGF0YSwgQ01TU2V0dGluZ3MgfSBmcm9tICcuLi9zaGFyZWQvZGF0YS10cmFuc2Zvcm0nO1xyXG5pbXBvcnQgeyBnZXRQcm9wZXJ0eUxhYmVsIH0gZnJvbSAnLi9wcm9wZXJ0eSc7XHJcbmltcG9ydCB7XHJcblx0c2hvdWxkSGlkZU1pc3NpbmdQcm9wZXJ0aWVzLFxyXG5cdHNob3VsZEhpZGVFbXB0eVByb3BlcnRpZXMsXHJcblx0Z2V0RW1wdHlWYWx1ZU1hcmtlcixcclxuXHRnZXRUYWdTdHlsZSxcclxuXHRzaG93VGFnSGFzaFByZWZpeFxyXG59IGZyb20gJy4vc3R5bGUtc2V0dGluZ3MnO1xyXG5cclxuZXhwb3J0IGNsYXNzIFByb3BlcnR5UmVuZGVyZXIge1xyXG5cdGNvbnN0cnVjdG9yKFxyXG5cdFx0cHJpdmF0ZSBhcHA6IEFwcCxcclxuXHRcdHByaXZhdGUgZ2V0QmFzZXNDb25maWc/OiAoKSA9PiB7IGdldD86IChrZXk6IHN0cmluZykgPT4gdW5rbm93biB9IHwgdW5kZWZpbmVkLFxyXG5cdFx0cHJpdmF0ZSBnZXRCYXNlc0NvbnRyb2xsZXI/OiAoKSA9PiB7IGdldFByb3BlcnR5RGlzcGxheU5hbWU/OiAobmFtZTogc3RyaW5nKSA9PiBzdHJpbmcgfSB8IHVuZGVmaW5lZFxyXG5cdCkgeyB9XHJcblxyXG5cdC8qKlxyXG5cdCAqIFJlbmRlcnMgcHJvcGVydHkgZmllbGRzIGZvciBhIGNhcmRcclxuXHQgKiBAcGFyYW0gcG9zaXRpb24gLSAndG9wJyB0byByZW5kZXIgb25seSB0b3AtcG9zaXRpb25lZCBncm91cHMsICdib3R0b20nIHRvIHJlbmRlciBvbmx5IGJvdHRvbS1wb3NpdGlvbmVkIGdyb3VwcywgdW5kZWZpbmVkIHRvIHJlbmRlciBhbGxcclxuXHQgKi9cclxuXHRyZW5kZXJQcm9wZXJ0aWVzKFxyXG5cdFx0Y2FyZEVsOiBIVE1MRWxlbWVudCxcclxuXHRcdGNhcmQ6IENhcmREYXRhLFxyXG5cdFx0ZW50cnk6IEJhc2VzRW50cnksXHJcblx0XHRzZXR0aW5nczogQ01TU2V0dGluZ3MsXHJcblx0XHRvblByb3BlcnR5VG9nZ2xlPzogKHBhdGg6IHN0cmluZywgcHJvcGVydHk6IHN0cmluZywgdmFsdWU6IHVua25vd24pID0+IHZvaWQgfCBQcm9taXNlPHZvaWQ+LFxyXG5cdFx0cG9zaXRpb24/OiAndG9wJyB8ICdib3R0b20nXHJcblx0KTogdm9pZCB7XHJcblx0XHRjb25zdCBwcm9wcyA9IFtcclxuXHRcdFx0c2V0dGluZ3MucHJvcGVydHlEaXNwbGF5MSxcclxuXHRcdFx0c2V0dGluZ3MucHJvcGVydHlEaXNwbGF5MixcclxuXHRcdFx0c2V0dGluZ3MucHJvcGVydHlEaXNwbGF5MyxcclxuXHRcdFx0c2V0dGluZ3MucHJvcGVydHlEaXNwbGF5NCxcclxuXHRcdFx0c2V0dGluZ3MucHJvcGVydHlEaXNwbGF5NSxcclxuXHRcdFx0c2V0dGluZ3MucHJvcGVydHlEaXNwbGF5NixcclxuXHRcdFx0c2V0dGluZ3MucHJvcGVydHlEaXNwbGF5NyxcclxuXHRcdFx0c2V0dGluZ3MucHJvcGVydHlEaXNwbGF5OCxcclxuXHRcdFx0c2V0dGluZ3MucHJvcGVydHlEaXNwbGF5OSxcclxuXHRcdFx0c2V0dGluZ3MucHJvcGVydHlEaXNwbGF5MTAsXHJcblx0XHRcdHNldHRpbmdzLnByb3BlcnR5RGlzcGxheTExLFxyXG5cdFx0XHRzZXR0aW5ncy5wcm9wZXJ0eURpc3BsYXkxMixcclxuXHRcdFx0c2V0dGluZ3MucHJvcGVydHlEaXNwbGF5MTMsXHJcblx0XHRcdHNldHRpbmdzLnByb3BlcnR5RGlzcGxheTE0XHJcblx0XHRdO1xyXG5cclxuXHRcdC8vIERldGVjdCBkdXBsaWNhdGVzXHJcblx0XHRjb25zdCBzZWVuID0gbmV3IFNldDxzdHJpbmc+KCk7XHJcblx0XHRjb25zdCBlZmZlY3RpdmVQcm9wcyA9IHByb3BzLm1hcChwcm9wID0+IHtcclxuXHRcdFx0aWYgKCFwcm9wIHx8IHByb3AgPT09ICcnKSByZXR1cm4gJyc7XHJcblx0XHRcdGlmIChzZWVuLmhhcyhwcm9wKSkgcmV0dXJuICcnO1xyXG5cdFx0XHRzZWVuLmFkZChwcm9wKTtcclxuXHRcdFx0cmV0dXJuIHByb3A7XHJcblx0XHR9KTtcclxuXHJcblx0XHQvLyBSZXNvbHZlIHByb3BlcnR5IHZhbHVlc1xyXG5cdFx0Ly8gVXNlIGNhcmREYXRhIHByb3BlcnRpZXMgdGhhdCB3ZXJlIGFscmVhZHkgcmVzb2x2ZWQgZHVyaW5nIHRyYW5zZm9ybWF0aW9uXHJcblx0XHQvLyBGb3IgTURYIGZpbGVzLCBwcm9wZXJ0aWVzIGFyZSByZXNvbHZlZCBhc3luYyBkdXJpbmcgdHJhbnNmb3JtQmFzZXNFbnRyaWVzXHJcblx0XHRjb25zdCB2YWx1ZXMgPSBlZmZlY3RpdmVQcm9wcy5tYXAoKHByb3AsIGluZGV4KSA9PiB7XHJcblx0XHRcdGlmICghcHJvcCkgcmV0dXJuIG51bGw7XHJcblx0XHRcdC8vIFVzZSBwcmUtcmVzb2x2ZWQgcHJvcGVydGllcyBmcm9tIGNhcmREYXRhIChwcm9wZXJ0eTEsIHByb3BlcnR5MiwgZXRjLilcclxuXHRcdFx0Y29uc3QgY2FyZFByb3BlcnR5ID0gYHByb3BlcnR5JHtpbmRleCArIDF9YCBhcyBrZXlvZiBDYXJkRGF0YTtcclxuXHRcdFx0Y29uc3QgY2FyZFZhbHVlID0gY2FyZFtjYXJkUHJvcGVydHldO1xyXG5cdFx0XHRpZiAoY2FyZFZhbHVlICE9PSB1bmRlZmluZWQgJiYgY2FyZFZhbHVlICE9PSBudWxsKSB7XHJcblx0XHRcdFx0cmV0dXJuIGNhcmRWYWx1ZSBhcyBzdHJpbmcgfCBudWxsO1xyXG5cdFx0XHR9XHJcblx0XHRcdC8vIEZhbGxiYWNrOiBGb3IgLm1kIGZpbGVzLCB0cnkgc3luY2hyb25vdXMgcmVzb2x1dGlvbiB2aWEgQmFzZXMgQVBJXHJcblx0XHRcdC8vIEZvciBNRFggZmlsZXMsIHByb3BlcnRpZXMgc2hvdWxkIGFscmVhZHkgYmUgaW4gY2FyZERhdGEgZnJvbSBhc3luYyB0cmFuc2Zvcm1hdGlvblxyXG5cdFx0XHR0cnkge1xyXG5cdFx0XHRcdGNvbnN0IHZhbHVlID0gZW50cnkuZ2V0VmFsdWUocHJvcCBhcyBgbm90ZS4ke3N0cmluZ31gIHwgYGZvcm11bGEuJHtzdHJpbmd9YCB8IGBmaWxlLiR7c3RyaW5nfWApIGFzIHsgZGF0YT86IHVua25vd247IGRhdGU/OiBEYXRlIH0gfCBudWxsO1xyXG5cdFx0XHRcdGlmICghdmFsdWUpIHJldHVybiBudWxsO1xyXG5cdFx0XHRcdGlmICgnZGF0ZScgaW4gdmFsdWUgJiYgdmFsdWUuZGF0ZSBpbnN0YW5jZW9mIERhdGUpIHtcclxuXHRcdFx0XHRcdHJldHVybiB2YWx1ZS5kYXRlLnRvTG9jYWxlRGF0ZVN0cmluZygpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRpZiAoJ2RhdGEnIGluIHZhbHVlICYmIHZhbHVlLmRhdGEgIT0gbnVsbCkge1xyXG5cdFx0XHRcdFx0Y29uc3QgZGF0YSA9IHZhbHVlLmRhdGE7XHJcblx0XHRcdFx0XHRpZiAoQXJyYXkuaXNBcnJheShkYXRhKSkge1xyXG5cdFx0XHRcdFx0XHRyZXR1cm4gZGF0YS5tYXAoaXRlbSA9PiB7XHJcblx0XHRcdFx0XHRcdFx0aWYgKGl0ZW0gJiYgdHlwZW9mIGl0ZW0gPT09ICdvYmplY3QnICYmIGl0ZW0gIT09IG51bGwgJiYgIUFycmF5LmlzQXJyYXkoaXRlbSkpIHtcclxuXHRcdFx0XHRcdFx0XHRcdHJldHVybiBKU09OLnN0cmluZ2lmeShpdGVtKTtcclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0cmV0dXJuIFN0cmluZyhpdGVtKTtcclxuXHRcdFx0XHRcdFx0fSkuam9pbignLCAnKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdGlmIChkYXRhICYmIHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyAmJiBkYXRhICE9PSBudWxsICYmICFBcnJheS5pc0FycmF5KGRhdGEpKSB7XHJcblx0XHRcdFx0XHRcdHJldHVybiBKU09OLnN0cmluZ2lmeShkYXRhKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdGlmICh0eXBlb2YgZGF0YSA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIGRhdGEgPT09ICdudW1iZXInIHx8IHR5cGVvZiBkYXRhID09PSAnYm9vbGVhbicpIHtcclxuXHRcdFx0XHRcdFx0cmV0dXJuIFN0cmluZyhkYXRhKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdC8vIEZhbGxiYWNrIGZvciBvdGhlciB0eXBlc1xyXG5cdFx0XHRcdFx0cmV0dXJuIGRhdGEgPyBKU09OLnN0cmluZ2lmeShkYXRhKSA6ICcnO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSBjYXRjaCB7XHJcblx0XHRcdFx0Ly8gSWdub3JlIGVycm9ycyAtIHByb3BlcnR5IGRvZXNuJ3QgZXhpc3Qgb3IgY2FuJ3QgYmUgcmVzb2x2ZWRcclxuXHRcdFx0fVxyXG5cdFx0XHRyZXR1cm4gbnVsbDtcclxuXHRcdH0pO1xyXG5cclxuXHRcdC8vIERlZmluZSBwcm9wZXJ0eSBncm91cHNcclxuXHRcdGNvbnN0IHByb3BlcnR5R3JvdXBzID0gW1xyXG5cdFx0XHR7XHJcblx0XHRcdFx0cHJvcHM6IFtlZmZlY3RpdmVQcm9wc1swXSwgZWZmZWN0aXZlUHJvcHNbMV1dLFxyXG5cdFx0XHRcdHZhbHVlczogW3ZhbHVlc1swXSwgdmFsdWVzWzFdXSxcclxuXHRcdFx0XHRzaWRlQnlTaWRlOiBzZXR0aW5ncy5wcm9wZXJ0eUxheW91dDEyU2lkZUJ5U2lkZSxcclxuXHRcdFx0XHRwb3NpdGlvbjogc2V0dGluZ3MucHJvcGVydHlHcm91cDFQb3NpdGlvblxyXG5cdFx0XHR9LFxyXG5cdFx0XHR7XHJcblx0XHRcdFx0cHJvcHM6IFtlZmZlY3RpdmVQcm9wc1syXSwgZWZmZWN0aXZlUHJvcHNbM11dLFxyXG5cdFx0XHRcdHZhbHVlczogW3ZhbHVlc1syXSwgdmFsdWVzWzNdXSxcclxuXHRcdFx0XHRzaWRlQnlTaWRlOiBzZXR0aW5ncy5wcm9wZXJ0eUxheW91dDM0U2lkZUJ5U2lkZSxcclxuXHRcdFx0XHRwb3NpdGlvbjogc2V0dGluZ3MucHJvcGVydHlHcm91cDJQb3NpdGlvblxyXG5cdFx0XHR9LFxyXG5cdFx0XHR7XHJcblx0XHRcdFx0cHJvcHM6IFtlZmZlY3RpdmVQcm9wc1s0XSwgZWZmZWN0aXZlUHJvcHNbNV1dLFxyXG5cdFx0XHRcdHZhbHVlczogW3ZhbHVlc1s0XSwgdmFsdWVzWzVdXSxcclxuXHRcdFx0XHRzaWRlQnlTaWRlOiBzZXR0aW5ncy5wcm9wZXJ0eUxheW91dDU2U2lkZUJ5U2lkZSxcclxuXHRcdFx0XHRwb3NpdGlvbjogc2V0dGluZ3MucHJvcGVydHlHcm91cDNQb3NpdGlvblxyXG5cdFx0XHR9LFxyXG5cdFx0XHR7XHJcblx0XHRcdFx0cHJvcHM6IFtlZmZlY3RpdmVQcm9wc1s2XSwgZWZmZWN0aXZlUHJvcHNbN11dLFxyXG5cdFx0XHRcdHZhbHVlczogW3ZhbHVlc1s2XSwgdmFsdWVzWzddXSxcclxuXHRcdFx0XHRzaWRlQnlTaWRlOiBzZXR0aW5ncy5wcm9wZXJ0eUxheW91dDc4U2lkZUJ5U2lkZSxcclxuXHRcdFx0XHRwb3NpdGlvbjogc2V0dGluZ3MucHJvcGVydHlHcm91cDRQb3NpdGlvblxyXG5cdFx0XHR9LFxyXG5cdFx0XHR7XHJcblx0XHRcdFx0cHJvcHM6IFtlZmZlY3RpdmVQcm9wc1s4XSwgZWZmZWN0aXZlUHJvcHNbOV1dLFxyXG5cdFx0XHRcdHZhbHVlczogW3ZhbHVlc1s4XSwgdmFsdWVzWzldXSxcclxuXHRcdFx0XHRzaWRlQnlTaWRlOiBzZXR0aW5ncy5wcm9wZXJ0eUxheW91dDkxMFNpZGVCeVNpZGUsXHJcblx0XHRcdFx0cG9zaXRpb246IHNldHRpbmdzLnByb3BlcnR5R3JvdXA1UG9zaXRpb25cclxuXHRcdFx0fSxcclxuXHRcdFx0e1xyXG5cdFx0XHRcdHByb3BzOiBbZWZmZWN0aXZlUHJvcHNbMTBdLCBlZmZlY3RpdmVQcm9wc1sxMV1dLFxyXG5cdFx0XHRcdHZhbHVlczogW3ZhbHVlc1sxMF0sIHZhbHVlc1sxMV1dLFxyXG5cdFx0XHRcdHNpZGVCeVNpZGU6IHNldHRpbmdzLnByb3BlcnR5TGF5b3V0MTExMlNpZGVCeVNpZGUsXHJcblx0XHRcdFx0cG9zaXRpb246IHNldHRpbmdzLnByb3BlcnR5R3JvdXA2UG9zaXRpb25cclxuXHRcdFx0fSxcclxuXHRcdFx0e1xyXG5cdFx0XHRcdHByb3BzOiBbZWZmZWN0aXZlUHJvcHNbMTJdLCBlZmZlY3RpdmVQcm9wc1sxM11dLFxyXG5cdFx0XHRcdHZhbHVlczogW3ZhbHVlc1sxMl0sIHZhbHVlc1sxM11dLFxyXG5cdFx0XHRcdHNpZGVCeVNpZGU6IHNldHRpbmdzLnByb3BlcnR5TGF5b3V0MTMxNFNpZGVCeVNpZGUsXHJcblx0XHRcdFx0cG9zaXRpb246IHNldHRpbmdzLnByb3BlcnR5R3JvdXA3UG9zaXRpb25cclxuXHRcdFx0fVxyXG5cdFx0XTtcclxuXHJcblx0XHQvLyBTZXBhcmF0ZSBncm91cHMgYnkgcG9zaXRpb25cclxuXHRcdGNvbnN0IHRvcEdyb3VwczogdHlwZW9mIHByb3BlcnR5R3JvdXBzID0gW107XHJcblx0XHRjb25zdCBib3R0b21Hcm91cHM6IHR5cGVvZiBwcm9wZXJ0eUdyb3VwcyA9IFtdO1xyXG5cclxuXHRcdHByb3BlcnR5R3JvdXBzLmZvckVhY2goKGdyb3VwLCBpbmRleCkgPT4ge1xyXG5cdFx0XHRjb25zdCBoYXNDb250ZW50ID0gZ3JvdXAucHJvcHNbMF0gIT09ICcnIHx8IGdyb3VwLnByb3BzWzFdICE9PSAnJztcclxuXHRcdFx0aWYgKGhhc0NvbnRlbnQpIHtcclxuXHRcdFx0XHRpZiAoZ3JvdXAucG9zaXRpb24gPT09ICd0b3AnKSB7XHJcblx0XHRcdFx0XHR0b3BHcm91cHMucHVzaChncm91cCk7XHJcblx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdGJvdHRvbUdyb3Vwcy5wdXNoKGdyb3VwKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH0pO1xyXG5cclxuXHRcdC8vIEhlbHBlciBmdW5jdGlvbiB0byBjaGVjayBpZiBwcm9wZXJ0eSBzaG91bGQgYmUgaGlkZGVuXHJcblx0XHRjb25zdCBzaG91bGRIaWRlUHJvcGVydHkgPSAocHJvcE5hbWU6IHN0cmluZywgcHJvcFZhbHVlOiBzdHJpbmcgfCBudWxsKTogYm9vbGVhbiA9PiB7XHJcblx0XHRcdGlmICghcHJvcE5hbWUgfHwgcHJvcE5hbWUgPT09ICcnKSByZXR1cm4gdHJ1ZTtcclxuXHJcblx0XHRcdGNvbnN0IGlzRW1wdHlWYWx1ZSA9IHByb3BWYWx1ZSA9PT0gbnVsbCB8fFxyXG5cdFx0XHRcdHByb3BWYWx1ZSA9PT0gJycgfHxcclxuXHRcdFx0XHQodHlwZW9mIHByb3BWYWx1ZSA9PT0gJ3N0cmluZycgJiYgcHJvcFZhbHVlLnRyaW0oKSA9PT0gJycpO1xyXG5cclxuXHRcdFx0Ly8gQ2hlY2sgaWYgcHJvcGVydHkgZXhpc3RzIGluIGZyb250bWF0dGVyXHJcblx0XHRcdGxldCBwcm9wZXJ0eUV4aXN0cyA9IGZhbHNlO1xyXG5cdFx0XHR0cnkge1xyXG5cdFx0XHRcdC8vIEdldCBmaWxlIGZyb20gdmF1bHQgdG8gZW5zdXJlIGl0J3MgYSBwcm9wZXIgVEZpbGUgKGxpa2Ugb3RoZXIgcGFydHMgb2YgdGhlIGNvZGViYXNlKVxyXG5cdFx0XHRcdGNvbnN0IGZpbGVQYXRoID0gZW50cnk/LmZpbGU/LnBhdGg7XHJcblx0XHRcdFx0aWYgKGZpbGVQYXRoICYmIHRoaXMuYXBwPy52YXVsdCAmJiB0aGlzLmFwcD8ubWV0YWRhdGFDYWNoZSkge1xyXG5cdFx0XHRcdFx0Y29uc3QgZmlsZSA9IHRoaXMuYXBwLnZhdWx0LmdldEFic3RyYWN0RmlsZUJ5UGF0aChmaWxlUGF0aCk7XHJcblx0XHRcdFx0XHRpZiAoZmlsZSBpbnN0YW5jZW9mIFRGaWxlKSB7XHJcblx0XHRcdFx0XHRcdC8vIEZvciBNRFggZmlsZXMsIG1ldGFkYXRhIGNhY2hlIHdvbid0IHdvcmssIHNvIHNraXAgdGhpcyBjaGVja1xyXG5cdFx0XHRcdFx0XHQvLyBUaGUgQmFzZXMgQVBJIHNob3VsZCBoYW5kbGUgcHJvcGVydHkgZXhpc3RlbmNlIGZvciBNRFggZmlsZXNcclxuXHRcdFx0XHRcdFx0aWYgKGZpbGUuZXh0ZW5zaW9uID09PSAnbWR4Jykge1xyXG5cdFx0XHRcdFx0XHRcdC8vIEZvciBNRFgsIGFzc3VtZSBwcm9wZXJ0eSBleGlzdHMgaWYgQmFzZXMgQVBJIHJldHVybmVkIGEgdmFsdWVcclxuXHRcdFx0XHRcdFx0XHRwcm9wZXJ0eUV4aXN0cyA9ICFpc0VtcHR5VmFsdWU7XHJcblx0XHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdFx0Y29uc3QgbWV0YWRhdGEgPSB0aGlzLmFwcC5tZXRhZGF0YUNhY2hlLmdldEZpbGVDYWNoZShmaWxlKTtcclxuXHRcdFx0XHRcdFx0XHRpZiAobWV0YWRhdGEgJiYgbWV0YWRhdGEuZnJvbnRtYXR0ZXIpIHtcclxuXHRcdFx0XHRcdFx0XHRcdGNvbnN0IHByb3BlcnR5TmFtZXMgPSBwcm9wTmFtZS5zcGxpdCgnLCcpLm1hcChwID0+IHAudHJpbSgpKS5maWx0ZXIocCA9PiBwKTtcclxuXHRcdFx0XHRcdFx0XHRcdGZvciAoY29uc3QgcHJvcCBvZiBwcm9wZXJ0eU5hbWVzKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdGNvbnN0IHByb3BLZXkgPSBwcm9wLnJlcGxhY2UoL14obm90ZXxmb3JtdWxhfGZpbGUpXFwuLywgJycpO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAocHJvcEtleSBpbiBtZXRhZGF0YS5mcm9udG1hdHRlcikge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHByb3BlcnR5RXhpc3RzID0gdHJ1ZTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSBjYXRjaCB7XHJcblx0XHRcdFx0Ly8gU2lsZW50bHkgaWdub3JlIGVycm9ycyB3aGVuIGNoZWNraW5nIHByb3BlcnR5IGV4aXN0ZW5jZVxyXG5cdFx0XHRcdC8vIFRoaXMgY2FuIGhhcHBlbiBpZiBtZXRhZGF0YUNhY2hlIGlzbid0IHJlYWR5IHlldFxyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHQvLyBIaWRlIG1pc3NpbmcgcHJvcGVydGllc1xyXG5cdFx0XHRpZiAoc2hvdWxkSGlkZU1pc3NpbmdQcm9wZXJ0aWVzKCkgJiYgIXByb3BlcnR5RXhpc3RzKSB7XHJcblx0XHRcdFx0cmV0dXJuIHRydWU7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdC8vIEhpZGUgZW1wdHkgcHJvcGVydGllc1xyXG5cdFx0XHRpZiAoc2hvdWxkSGlkZUVtcHR5UHJvcGVydGllcygpICYmIHByb3BlcnR5RXhpc3RzICYmIGlzRW1wdHlWYWx1ZSkge1xyXG5cdFx0XHRcdHJldHVybiB0cnVlO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHQvLyBBbHNvIGhpZGUgaWYgZW1wdHkgYW5kIGhpZGUgZW1wdHkgaXMgZW5hYmxlZCAoZmFsbGJhY2sgZm9yIGZvcm11bGEgcHJvcGVydGllcylcclxuXHRcdFx0aWYgKHNob3VsZEhpZGVFbXB0eVByb3BlcnRpZXMoKSAmJiBpc0VtcHR5VmFsdWUpIHtcclxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0fTtcclxuXHJcblx0XHQvLyBSZW5kZXIgdG9wIGdyb3VwcyAob25seSBpZiBwb3NpdGlvbiBpcyAndG9wJyBvciB1bmRlZmluZWQpXHJcblx0XHRpZiAoKHBvc2l0aW9uID09PSAndG9wJyB8fCBwb3NpdGlvbiA9PT0gdW5kZWZpbmVkKSAmJiB0b3BHcm91cHMubGVuZ3RoID4gMCkge1xyXG5cdFx0XHRjb25zdCB0b3BNZXRhRWwgPSBjYXJkRWwuY3JlYXRlRGl2KCdjYXJkLXByb3BlcnRpZXMgcHJvcGVydGllcy10b3AnKTtcclxuXHRcdFx0dG9wR3JvdXBzLmZvckVhY2goKGdyb3VwLCBncm91cEluZGV4KSA9PiB7XHJcblx0XHRcdFx0Ly8gQ2hlY2sgaWYgZWl0aGVyIHByb3BlcnR5IHNob3VsZCBiZSByZW5kZXJlZFxyXG5cdFx0XHRcdGNvbnN0IHByb3AxU2hvdWxkUmVuZGVyID0gZ3JvdXAucHJvcHNbMF0gJiYgIXNob3VsZEhpZGVQcm9wZXJ0eShncm91cC5wcm9wc1swXSwgZ3JvdXAudmFsdWVzWzBdKTtcclxuXHRcdFx0XHRjb25zdCBwcm9wMlNob3VsZFJlbmRlciA9IGdyb3VwLnByb3BzWzFdICYmICFzaG91bGRIaWRlUHJvcGVydHkoZ3JvdXAucHJvcHNbMV0sIGdyb3VwLnZhbHVlc1sxXSk7XHJcblxyXG5cdFx0XHRcdGlmICghcHJvcDFTaG91bGRSZW5kZXIgJiYgIXByb3AyU2hvdWxkUmVuZGVyKSB7XHJcblx0XHRcdFx0XHRyZXR1cm47IC8vIFNraXAgdGhpcyBncm91cCBlbnRpcmVseSBpZiBib3RoIHByb3BlcnRpZXMgYXJlIGhpZGRlblxyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0Y29uc3Qgcm93RWwgPSB0b3BNZXRhRWwuY3JlYXRlRGl2KGBwcm9wZXJ0eS1yb3cgcHJvcGVydHktcm93LWdyb3VwLSR7Z3JvdXBJbmRleCArIDF9YCk7XHJcblx0XHRcdFx0aWYgKGdyb3VwLnNpZGVCeVNpZGUpIHtcclxuXHRcdFx0XHRcdHJvd0VsLmFkZENsYXNzKCdwcm9wZXJ0eS1yb3ctc2lkZS1ieS1zaWRlJyk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGNvbnN0IGZpZWxkMUVsID0gcm93RWwuY3JlYXRlRGl2KCdwcm9wZXJ0eS1maWVsZCBwcm9wZXJ0eS1maWVsZC0xJyk7XHJcblx0XHRcdFx0aWYgKHByb3AxU2hvdWxkUmVuZGVyKSB7XHJcblx0XHRcdFx0XHR0aGlzLnJlbmRlclByb3BlcnR5Q29udGVudChmaWVsZDFFbCwgZ3JvdXAucHJvcHNbMF0sIGdyb3VwLnZhbHVlc1swXSwgY2FyZCwgZW50cnksIHNldHRpbmdzLCBvblByb3BlcnR5VG9nZ2xlKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0Y29uc3QgZmllbGQyRWwgPSByb3dFbC5jcmVhdGVEaXYoJ3Byb3BlcnR5LWZpZWxkIHByb3BlcnR5LWZpZWxkLTInKTtcclxuXHRcdFx0XHRpZiAocHJvcDJTaG91bGRSZW5kZXIpIHtcclxuXHRcdFx0XHRcdHRoaXMucmVuZGVyUHJvcGVydHlDb250ZW50KGZpZWxkMkVsLCBncm91cC5wcm9wc1sxXSwgZ3JvdXAudmFsdWVzWzFdLCBjYXJkLCBlbnRyeSwgc2V0dGluZ3MsIG9uUHJvcGVydHlUb2dnbGUpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSk7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gUmVuZGVyIGJvdHRvbSBncm91cHMgKG9ubHkgaWYgcG9zaXRpb24gaXMgJ2JvdHRvbScgb3IgdW5kZWZpbmVkKVxyXG5cdFx0aWYgKChwb3NpdGlvbiA9PT0gJ2JvdHRvbScgfHwgcG9zaXRpb24gPT09IHVuZGVmaW5lZCkgJiYgYm90dG9tR3JvdXBzLmxlbmd0aCA+IDApIHtcclxuXHRcdFx0Y29uc3QgYm90dG9tTWV0YUVsID0gY2FyZEVsLmNyZWF0ZURpdignY2FyZC1wcm9wZXJ0aWVzIHByb3BlcnRpZXMtYm90dG9tJyk7XHJcblx0XHRcdGJvdHRvbUdyb3Vwcy5mb3JFYWNoKChncm91cCwgZ3JvdXBJbmRleCkgPT4ge1xyXG5cdFx0XHRcdC8vIENoZWNrIGlmIGVpdGhlciBwcm9wZXJ0eSBzaG91bGQgYmUgcmVuZGVyZWRcclxuXHRcdFx0XHRjb25zdCBwcm9wMVNob3VsZFJlbmRlciA9IGdyb3VwLnByb3BzWzBdICYmICFzaG91bGRIaWRlUHJvcGVydHkoZ3JvdXAucHJvcHNbMF0sIGdyb3VwLnZhbHVlc1swXSk7XHJcblx0XHRcdFx0Y29uc3QgcHJvcDJTaG91bGRSZW5kZXIgPSBncm91cC5wcm9wc1sxXSAmJiAhc2hvdWxkSGlkZVByb3BlcnR5KGdyb3VwLnByb3BzWzFdLCBncm91cC52YWx1ZXNbMV0pO1xyXG5cclxuXHRcdFx0XHRpZiAoIXByb3AxU2hvdWxkUmVuZGVyICYmICFwcm9wMlNob3VsZFJlbmRlcikge1xyXG5cdFx0XHRcdFx0cmV0dXJuOyAvLyBTa2lwIHRoaXMgZ3JvdXAgZW50aXJlbHkgaWYgYm90aCBwcm9wZXJ0aWVzIGFyZSBoaWRkZW5cclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdGNvbnN0IHJvd0VsID0gYm90dG9tTWV0YUVsLmNyZWF0ZURpdihgcHJvcGVydHktcm93IHByb3BlcnR5LXJvdy1ncm91cC0ke2dyb3VwSW5kZXggKyAxfWApO1xyXG5cdFx0XHRcdGlmIChncm91cC5zaWRlQnlTaWRlKSB7XHJcblx0XHRcdFx0XHRyb3dFbC5hZGRDbGFzcygncHJvcGVydHktcm93LXNpZGUtYnktc2lkZScpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRjb25zdCBmaWVsZDFFbCA9IHJvd0VsLmNyZWF0ZURpdigncHJvcGVydHktZmllbGQgcHJvcGVydHktZmllbGQtMScpO1xyXG5cdFx0XHRcdGlmIChwcm9wMVNob3VsZFJlbmRlcikge1xyXG5cdFx0XHRcdFx0dGhpcy5yZW5kZXJQcm9wZXJ0eUNvbnRlbnQoZmllbGQxRWwsIGdyb3VwLnByb3BzWzBdLCBncm91cC52YWx1ZXNbMF0sIGNhcmQsIGVudHJ5LCBzZXR0aW5ncywgb25Qcm9wZXJ0eVRvZ2dsZSk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGNvbnN0IGZpZWxkMkVsID0gcm93RWwuY3JlYXRlRGl2KCdwcm9wZXJ0eS1maWVsZCBwcm9wZXJ0eS1maWVsZC0yJyk7XHJcblx0XHRcdFx0aWYgKHByb3AyU2hvdWxkUmVuZGVyKSB7XHJcblx0XHRcdFx0XHR0aGlzLnJlbmRlclByb3BlcnR5Q29udGVudChmaWVsZDJFbCwgZ3JvdXAucHJvcHNbMV0sIGdyb3VwLnZhbHVlc1sxXSwgY2FyZCwgZW50cnksIHNldHRpbmdzLCBvblByb3BlcnR5VG9nZ2xlKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0pO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogUmVuZGVycyBpbmRpdmlkdWFsIHByb3BlcnR5IGNvbnRlbnRcclxuXHQgKi9cclxuXHRwdWJsaWMgcmVuZGVyUHJvcGVydHlDb250ZW50KFxyXG5cdFx0Y29udGFpbmVyOiBIVE1MRWxlbWVudCxcclxuXHRcdHByb3BlcnR5TmFtZTogc3RyaW5nLFxyXG5cdFx0cmVzb2x2ZWRWYWx1ZTogc3RyaW5nIHwgbnVsbCxcclxuXHRcdGNhcmQ6IENhcmREYXRhLFxyXG5cdFx0ZW50cnk6IEJhc2VzRW50cnksXHJcblx0XHRzZXR0aW5nczogQ01TU2V0dGluZ3MsXHJcblx0XHRvblByb3BlcnR5VG9nZ2xlPzogKHBhdGg6IHN0cmluZywgcHJvcGVydHk6IHN0cmluZywgdmFsdWU6IHVua25vd24pID0+IHZvaWQgfCBQcm9taXNlPHZvaWQ+XHJcblx0KTogdm9pZCB7XHJcblx0XHRpZiAocHJvcGVydHlOYW1lID09PSAnJykgcmV0dXJuO1xyXG5cclxuXHRcdC8vIE1hdGNoIER5bmFtaWMgVmlld3MgYmVoYXZpb3I6XHJcblx0XHQvLyAtIHJlc29sdmVkVmFsdWUgPT09IG51bGwgbWVhbnMgcHJvcGVydHkgZG9lc24ndCBleGlzdCAobWlzc2luZylcclxuXHRcdC8vIC0gcmVzb2x2ZWRWYWx1ZSA9PT0gXCJcIiBtZWFucyBwcm9wZXJ0eSBleGlzdHMgYnV0IGlzIGVtcHR5XHJcblx0XHQvLyBUaGlzIG1hdGNoZXMgaG93IHJlc29sdmVCYXNlc1Byb3BlcnR5IHdvcmtzXHJcblxyXG5cdFx0Ly8gSGlkZSBtaXNzaW5nIHByb3BlcnRpZXMgaWYgdG9nZ2xlIGVuYWJsZWQgKHJlc29sdmVkVmFsdWUgaXMgbnVsbCBmb3IgbWlzc2luZyBwcm9wZXJ0aWVzKVxyXG5cdFx0aWYgKHJlc29sdmVkVmFsdWUgPT09IG51bGwgJiYgc2hvdWxkSGlkZU1pc3NpbmdQcm9wZXJ0aWVzKCkpIHtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8vIEhpZGUgZW1wdHkgcHJvcGVydGllcyBpZiB0b2dnbGUgZW5hYmxlZCAocmVzb2x2ZWRWYWx1ZSBpcyAnJyBmb3IgZW1wdHkgcHJvcGVydGllcylcclxuXHRcdGlmIChyZXNvbHZlZFZhbHVlID09PSBcIlwiICYmIHNob3VsZEhpZGVFbXB0eVByb3BlcnRpZXMoKSkge1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gSWYgbm8gdmFsdWUgYW5kIGxhYmVscyBhcmUgaGlkZGVuLCByZW5kZXIgbm90aGluZ1xyXG5cdFx0aWYgKCFyZXNvbHZlZFZhbHVlICYmIHNldHRpbmdzLnByb3BlcnR5TGFiZWxzID09PSAnaGlkZScpIHtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8vIEVhcmx5IHJldHVybiBmb3IgZW1wdHkgc3BlY2lhbCBwcm9wZXJ0aWVzIHdoZW4gbGFiZWxzIGFyZSBoaWRkZW5cclxuXHRcdGlmIChzZXR0aW5ncy5wcm9wZXJ0eUxhYmVscyA9PT0gJ2hpZGUnKSB7XHJcblx0XHRcdGlmICgocHJvcGVydHlOYW1lID09PSAndGFncycgfHwgcHJvcGVydHlOYW1lID09PSAnbm90ZS50YWdzJykgJiYgY2FyZC55YW1sVGFncy5sZW5ndGggPT09IDApIHtcclxuXHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdH1cclxuXHRcdFx0aWYgKChwcm9wZXJ0eU5hbWUgPT09ICdmaWxlLnRhZ3MnIHx8IHByb3BlcnR5TmFtZSA9PT0gJ2ZpbGUgdGFncycpICYmIGNhcmQudGFncy5sZW5ndGggPT09IDApIHtcclxuXHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHQvLyBHZXQgcHJvcGVydHkgbGFiZWwgZnJvbSBCYXNlcyBpZiBhdmFpbGFibGVcclxuXHRcdGNvbnN0IGJhc2VzQ29uZmlnID0gdGhpcy5nZXRCYXNlc0NvbmZpZyA/IHRoaXMuZ2V0QmFzZXNDb25maWcoKSA6IHVuZGVmaW5lZDtcclxuXHRcdGNvbnN0IGJhc2VzQ29udHJvbGxlciA9IHRoaXMuZ2V0QmFzZXNDb250cm9sbGVyID8gdGhpcy5nZXRCYXNlc0NvbnRyb2xsZXIoKSA6IHVuZGVmaW5lZDtcclxuXHRcdGNvbnN0IHByb3BlcnR5TGFiZWwgPSBnZXRQcm9wZXJ0eUxhYmVsKHByb3BlcnR5TmFtZSwgdGhpcy5hcHAsIGJhc2VzQ29uZmlnLCBiYXNlc0NvbnRyb2xsZXIpO1xyXG5cdFx0Ly8gQ2hlY2sgaWYgd2UgZ290IGEgY3VzdG9tIGRpc3BsYXkgbmFtZSAoZGlmZmVyZW50IGZyb20gcHJvcGVydHkgbmFtZSlcclxuXHRcdGNvbnN0IGlzQ3VzdG9tTGFiZWwgPSBwcm9wZXJ0eUxhYmVsLnRvTG93ZXJDYXNlKCkgIT09IHByb3BlcnR5TmFtZS50b0xvd2VyQ2FzZSgpO1xyXG5cclxuXHRcdC8vIFJlbmRlciBsYWJlbCBpZiBwcm9wZXJ0eSBsYWJlbHMgYXJlIGVuYWJsZWRcclxuXHRcdGlmIChzZXR0aW5ncy5wcm9wZXJ0eUxhYmVscyA9PT0gJ2Fib3ZlJykge1xyXG5cdFx0XHRjb25zdCBsYWJlbEVsID0gY29udGFpbmVyLmNyZWF0ZURpdigncHJvcGVydHktbGFiZWwnKTtcclxuXHRcdFx0aWYgKGlzQ3VzdG9tTGFiZWwpIHtcclxuXHRcdFx0XHRsYWJlbEVsLmFkZENsYXNzKCdwcm9wZXJ0eS1sYWJlbC1jdXN0b20nKTtcclxuXHRcdFx0fVxyXG5cdFx0XHRsYWJlbEVsLnRleHRDb250ZW50ID0gcHJvcGVydHlMYWJlbDtcclxuXHRcdH1cclxuXHJcblx0XHQvLyBVbml2ZXJzYWwgd3JhcHBlciBmb3IgYWxsIGNvbnRlbnQgdHlwZXNcclxuXHRcdGNvbnN0IG1ldGFDb250ZW50ID0gY29udGFpbmVyLmNyZWF0ZURpdigncHJvcGVydHktY29udGVudCcpO1xyXG5cclxuXHRcdC8vIEFkZCBjbGFzcyBmb3IgaW5saW5lIGxhYmVscyB0byBlbmFibGUgcHJvcGVyIENTUyBzdHlsaW5nXHJcblx0XHRpZiAoc2V0dGluZ3MucHJvcGVydHlMYWJlbHMgPT09ICdpbmxpbmUnKSB7XHJcblx0XHRcdG1ldGFDb250ZW50LmFkZENsYXNzKCdwcm9wZXJ0eS1jb250ZW50LWlubGluZScpO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8vIEFkZCBpbmxpbmUgbGFiZWwgaWYgZW5hYmxlZCAoaW5zaWRlIG1ldGFDb250ZW50KVxyXG5cdFx0aWYgKHNldHRpbmdzLnByb3BlcnR5TGFiZWxzID09PSAnaW5saW5lJykge1xyXG5cdFx0XHRjb25zdCBsYWJlbFNwYW4gPSBtZXRhQ29udGVudC5jcmVhdGVTcGFuKCdwcm9wZXJ0eS1sYWJlbC1pbmxpbmUnKTtcclxuXHRcdFx0bGFiZWxTcGFuLnRleHRDb250ZW50ID0gcHJvcGVydHlMYWJlbCArICc6ICc7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gSWYgbm8gdmFsdWUgYnV0IGxhYmVscyBhcmUgZW5hYmxlZCwgc2hvdyBwbGFjZWhvbGRlclxyXG5cdFx0aWYgKCFyZXNvbHZlZFZhbHVlKSB7XHJcblx0XHRcdGNvbnN0IGVtcHR5TWFya2VyID0gbWV0YUNvbnRlbnQuY3JlYXRlU3BhbigncHJvcGVydHktZW1wdHktbWFya2VyJyk7XHJcblx0XHRcdGVtcHR5TWFya2VyLnRleHRDb250ZW50ID0gZ2V0RW1wdHlWYWx1ZU1hcmtlcigpO1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gSGFuZGxlIHRpbWVzdGFtcCBwcm9wZXJ0aWVzIC0gcmVuZGVyIGFzLWlzIHdpdGhvdXQgU3R5bGUgU2V0dGluZ3MgbG9naWNcclxuXHRcdGNvbnN0IGlzS25vd25UaW1lc3RhbXBQcm9wZXJ0eSA9IHByb3BlcnR5TmFtZSA9PT0gJ2ZpbGUubXRpbWUnIHx8IHByb3BlcnR5TmFtZSA9PT0gJ2ZpbGUuY3RpbWUnIHx8XHJcblx0XHRcdHByb3BlcnR5TmFtZSA9PT0gJ21vZGlmaWVkIHRpbWUnIHx8IHByb3BlcnR5TmFtZSA9PT0gJ2NyZWF0ZWQgdGltZSc7XHJcblxyXG5cdFx0aWYgKGlzS25vd25UaW1lc3RhbXBQcm9wZXJ0eSkge1xyXG5cdFx0XHRjb25zdCB0aW1lc3RhbXBXcmFwcGVyID0gbWV0YUNvbnRlbnQuY3JlYXRlU3BhbigpO1xyXG5cdFx0XHR0aW1lc3RhbXBXcmFwcGVyLmFwcGVuZFRleHQocmVzb2x2ZWRWYWx1ZSk7XHJcblx0XHR9IGVsc2UgaWYgKChwcm9wZXJ0eU5hbWUgPT09ICd0YWdzJyB8fCBwcm9wZXJ0eU5hbWUgPT09ICdub3RlLnRhZ3MnKSAmJiBjYXJkLnlhbWxUYWdzLmxlbmd0aCA+IDApIHtcclxuXHRcdFx0Ly8gWUFNTCB0YWdzIG9ubHlcclxuXHRcdFx0Y29uc3QgdGFnc1dyYXBwZXIgPSBtZXRhQ29udGVudC5jcmVhdGVEaXYoJ3RhZ3Mtd3JhcHBlcicpO1xyXG5cdFx0XHRjb25zdCB0YWdTdHlsZSA9IGdldFRhZ1N0eWxlKCk7XHJcblx0XHRcdGlmICh0YWdTdHlsZSAhPT0gJ3BsYWluJykge1xyXG5cdFx0XHRcdHRhZ3NXcmFwcGVyLmFkZENsYXNzKGB0YWctc3R5bGUtJHt0YWdTdHlsZX1gKTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Y2FyZC55YW1sVGFncy5mb3JFYWNoKHRhZyA9PiB7XHJcblx0XHRcdFx0Y29uc3QgdGFnRWwgPSB0YWdzV3JhcHBlci5jcmVhdGVFbCgnYScsIHtcclxuXHRcdFx0XHRcdGNsczogJ3RhZycsXHJcblx0XHRcdFx0XHR0ZXh0OiBzaG93VGFnSGFzaFByZWZpeCgpID8gYCMke3RhZ31gIDogdGFnLFxyXG5cdFx0XHRcdFx0aHJlZjogJyMnXHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdFx0dGFnRWwuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoZSkgPT4ge1xyXG5cdFx0XHRcdFx0ZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG5cdFx0XHRcdFx0Y29uc3Qgc2VhcmNoUGx1Z2luID0gKHRoaXMuYXBwIGFzIHsgaW50ZXJuYWxQbHVnaW5zPzogeyBwbHVnaW5zPzogUmVjb3JkPHN0cmluZywgeyBpbnN0YW5jZT86IHsgb3Blbkdsb2JhbFNlYXJjaD86IChxdWVyeTogc3RyaW5nKSA9PiB2b2lkIH0gfT4gfSB9KS5pbnRlcm5hbFBsdWdpbnM/LnBsdWdpbnM/LltcImdsb2JhbC1zZWFyY2hcIl07XHJcblx0XHRcdFx0XHRpZiAoc2VhcmNoUGx1Z2luPy5pbnN0YW5jZT8ub3Blbkdsb2JhbFNlYXJjaCkge1xyXG5cdFx0XHRcdFx0XHRzZWFyY2hQbHVnaW4uaW5zdGFuY2Uub3Blbkdsb2JhbFNlYXJjaChcInRhZzpcIiArIHRhZyk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdH0pO1xyXG5cdFx0fSBlbHNlIGlmICgocHJvcGVydHlOYW1lID09PSAnZmlsZS50YWdzJyB8fCBwcm9wZXJ0eU5hbWUgPT09ICdmaWxlIHRhZ3MnKSAmJiBjYXJkLnRhZ3MubGVuZ3RoID4gMCkge1xyXG5cdFx0XHQvLyB0YWdzIGluIFlBTUwgKyBub3RlIGJvZHlcclxuXHRcdFx0Y29uc3QgdGFnc1dyYXBwZXIgPSBtZXRhQ29udGVudC5jcmVhdGVEaXYoJ3RhZ3Mtd3JhcHBlcicpO1xyXG5cdFx0XHRjb25zdCB0YWdTdHlsZSA9IGdldFRhZ1N0eWxlKCk7XHJcblx0XHRcdGlmICh0YWdTdHlsZSAhPT0gJ3BsYWluJykge1xyXG5cdFx0XHRcdHRhZ3NXcmFwcGVyLmFkZENsYXNzKGB0YWctc3R5bGUtJHt0YWdTdHlsZX1gKTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Y2FyZC50YWdzLmZvckVhY2godGFnID0+IHtcclxuXHRcdFx0XHRjb25zdCB0YWdFbCA9IHRhZ3NXcmFwcGVyLmNyZWF0ZUVsKCdhJywge1xyXG5cdFx0XHRcdFx0Y2xzOiAndGFnJyxcclxuXHRcdFx0XHRcdHRleHQ6IHNob3dUYWdIYXNoUHJlZml4KCkgPyBgIyR7dGFnfWAgOiB0YWcsXHJcblx0XHRcdFx0XHRocmVmOiAnIydcclxuXHRcdFx0XHR9KTtcclxuXHRcdFx0XHR0YWdFbC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIChlKSA9PiB7XHJcblx0XHRcdFx0XHRlLnByZXZlbnREZWZhdWx0KCk7XHJcblx0XHRcdFx0XHRjb25zdCBzZWFyY2hQbHVnaW4gPSAodGhpcy5hcHAgYXMgeyBpbnRlcm5hbFBsdWdpbnM/OiB7IHBsdWdpbnM/OiBSZWNvcmQ8c3RyaW5nLCB7IGluc3RhbmNlPzogeyBvcGVuR2xvYmFsU2VhcmNoPzogKHF1ZXJ5OiBzdHJpbmcpID0+IHZvaWQgfSB9PiB9IH0pLmludGVybmFsUGx1Z2lucz8ucGx1Z2lucz8uW1wiZ2xvYmFsLXNlYXJjaFwiXTtcclxuXHRcdFx0XHRcdGlmIChzZWFyY2hQbHVnaW4/Lmluc3RhbmNlPy5vcGVuR2xvYmFsU2VhcmNoKSB7XHJcblx0XHRcdFx0XHRcdHNlYXJjaFBsdWdpbi5pbnN0YW5jZS5vcGVuR2xvYmFsU2VhcmNoKFwidGFnOlwiICsgdGFnKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9KTtcclxuXHRcdFx0fSk7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHQvLyBDaGVjayBpZiB0aGlzIGlzIGEgY2hlY2tib3ggcHJvcGVydHlcclxuXHRcdFx0Ly8gR3VhcmQ6IGVuc3VyZSBhcHAgYW5kIG1ldGFkYXRhQ2FjaGUgZXhpc3RcclxuXHRcdFx0aWYgKCF0aGlzLmFwcCB8fCAhdGhpcy5hcHAubWV0YWRhdGFDYWNoZSkge1xyXG5cdFx0XHRcdC8vIEZhbGxiYWNrIHRvIHJlZ3VsYXIgcHJvcGVydHkgcmVuZGVyaW5nXHJcblx0XHRcdFx0Y29uc3QgdGV4dFdyYXBwZXIgPSBtZXRhQ29udGVudC5jcmVhdGVEaXYoJ3RleHQtd3JhcHBlcicpO1xyXG5cdFx0XHRcdHRoaXMucmVuZGVyUHJvcGVydHlWYWx1ZVdpdGhMaW5rcyh0ZXh0V3JhcHBlciwgcmVzb2x2ZWRWYWx1ZSwgY2FyZC5wYXRoLCBwcm9wZXJ0eU5hbWUpO1xyXG5cdFx0XHRcdHJldHVybjtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Ly8gVHJ5IHRvIGdldCBwcm9wZXJ0eSBpbmZvIC0gd3JhcCBpbiB0cnktY2F0Y2ggYXMgZ2V0QWxsUHJvcGVydHlJbmZvcyBtaWdodCBmYWlsXHJcblx0XHRcdC8vIFRoaXMgaXMgb3B0aW9uYWwgLSB3ZSBjYW4gZGV0ZWN0IGNoZWNrYm94ZXMgZnJvbSBlbnRyeSB2YWx1ZSBhbG9uZVxyXG5cdFx0XHRsZXQgcHJvcEluZm86IHsgd2lkZ2V0Pzogc3RyaW5nIH0gfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XHJcblx0XHRcdHRyeSB7XHJcblx0XHRcdFx0Y29uc3QgbWV0YWRhdGFDYWNoZSA9IHRoaXMuYXBwLm1ldGFkYXRhQ2FjaGUgYXMgdW5rbm93biBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcclxuXHRcdFx0XHRjb25zdCBnZXRBbGxQcm9wZXJ0eUluZm9zID0gbWV0YWRhdGFDYWNoZS5nZXRBbGxQcm9wZXJ0eUluZm9zIGFzICgoKSA9PiBSZWNvcmQ8c3RyaW5nLCB7IHdpZGdldD86IHN0cmluZyB9PikgfCB1bmRlZmluZWQ7XHJcblx0XHRcdFx0aWYgKHR5cGVvZiBnZXRBbGxQcm9wZXJ0eUluZm9zID09PSAnZnVuY3Rpb24nKSB7XHJcblx0XHRcdFx0XHRjb25zdCBwcm9wZXJ0eUluZm9zID0gZ2V0QWxsUHJvcGVydHlJbmZvcygpIGFzIFJlY29yZDxzdHJpbmcsIHsgd2lkZ2V0Pzogc3RyaW5nIH0+O1xyXG5cdFx0XHRcdFx0cHJvcEluZm8gPSBwcm9wZXJ0eUluZm9zW3Byb3BlcnR5TmFtZS50b0xvd2VyQ2FzZSgpXTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0gY2F0Y2gge1xyXG5cdFx0XHRcdC8vIFNpbGVudGx5IGZhaWwgLSBnZXRBbGxQcm9wZXJ0eUluZm9zIG1heSBub3QgYmUgYXZhaWxhYmxlIG9yIG1heSBmYWlsXHJcblx0XHRcdFx0Ly8gV2UgY2FuIHN0aWxsIGRldGVjdCBjaGVja2JveGVzIGZyb20gZW50cnkgdmFsdWVcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Ly8gVHJ5IHRvIGdldCB2YWx1ZSBmcm9tIGVudHJ5IHRvIGNoZWNrIGlmIGl0J3MgYm9vbGVhblxyXG5cdFx0XHQvLyBHdWFyZDogZW5zdXJlIGVudHJ5IGV4aXN0cyBhbmQgaGFzIGdldFZhbHVlIG1ldGhvZFxyXG5cdFx0XHRsZXQgZW50cnlWYWx1ZTogeyBkYXRhPzogdW5rbm93biB9IHwgbnVsbCA9IG51bGw7XHJcblx0XHRcdHRyeSB7XHJcblx0XHRcdFx0aWYgKGVudHJ5ICYmIHR5cGVvZiBlbnRyeS5nZXRWYWx1ZSA9PT0gJ2Z1bmN0aW9uJykge1xyXG5cdFx0XHRcdFx0ZW50cnlWYWx1ZSA9IGVudHJ5LmdldFZhbHVlKHByb3BlcnR5TmFtZSBhcyBgbm90ZS4ke3N0cmluZ31gIHwgYGZvcm11bGEuJHtzdHJpbmd9YCB8IGBmaWxlLiR7c3RyaW5nfWApIGFzIHsgZGF0YT86IHVua25vd24gfSB8IG51bGw7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9IGNhdGNoIHtcclxuXHRcdFx0XHQvLyBTaWxlbnRseSBmYWlsIC0gZW50cnkgbWlnaHQgbm90IGhhdmUgdGhpcyBwcm9wZXJ0eVxyXG5cdFx0XHR9XHJcblx0XHRcdGNvbnN0IGlzQ2hlY2tib3ggPSBwcm9wSW5mbz8ud2lkZ2V0ID09PSAnY2hlY2tib3gnIHx8XHJcblx0XHRcdFx0KGVudHJ5VmFsdWUgJiYgJ2RhdGEnIGluIGVudHJ5VmFsdWUgJiYgdHlwZW9mIGVudHJ5VmFsdWUuZGF0YSA9PT0gJ2Jvb2xlYW4nKTtcclxuXHJcblx0XHRcdGlmIChpc0NoZWNrYm94ICYmIG9uUHJvcGVydHlUb2dnbGUpIHtcclxuXHRcdFx0XHQvLyBSZW5kZXIgYXMgbmF0aXZlIE9ic2lkaWFuIGNoZWNrYm94IC0gc2ltcGxlIGlucHV0IGNoZWNrYm94XHJcblx0XHRcdFx0Y29uc3QgY2hlY2tib3ggPSBtZXRhQ29udGVudC5jcmVhdGVFbCgnaW5wdXQnLCB7IHR5cGU6ICdjaGVja2JveCcgfSk7XHJcblx0XHRcdFx0Y2hlY2tib3guY2hlY2tlZCA9IGVudHJ5VmFsdWUgJiYgJ2RhdGEnIGluIGVudHJ5VmFsdWUgPyBCb29sZWFuKGVudHJ5VmFsdWUuZGF0YSkgOiBmYWxzZTtcclxuXHJcblx0XHRcdFx0Ly8gVXNlIHRoZSBwcm9wZXJ0eSBsYWJlbCAod2hpY2ggdXNlcyBnZXREaXNwbGF5TmFtZSkgaW5zdGVhZCBvZiByYXcgcHJvcGVydHkgbmFtZVxyXG5cdFx0XHRcdG1ldGFDb250ZW50LmNyZWF0ZVNwYW4oeyB0ZXh0OiBwcm9wZXJ0eUxhYmVsIH0pO1xyXG5cclxuXHRcdFx0XHRjaGVja2JveC5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCAoZSkgPT4ge1xyXG5cdFx0XHRcdFx0ZS5zdG9wUHJvcGFnYXRpb24oKTtcclxuXHRcdFx0XHRcdGNvbnN0IGNoZWNrZWQgPSBjaGVja2JveC5jaGVja2VkO1xyXG5cdFx0XHRcdFx0dm9pZCAoYXN5bmMgKCkgPT4ge1xyXG5cdFx0XHRcdFx0XHR0cnkge1xyXG5cdFx0XHRcdFx0XHRcdC8vIFN0cmlwIFwibm90ZS5cIiBwcmVmaXggYmVmb3JlIHRvZ2dsaW5nXHJcblx0XHRcdFx0XHRcdFx0Y29uc3QgY2xlYW5Qcm9wZXJ0eSA9IHByb3BlcnR5TmFtZS5zdGFydHNXaXRoKCdub3RlLicpID8gcHJvcGVydHlOYW1lLnN1YnN0cmluZyg1KSA6IHByb3BlcnR5TmFtZTtcclxuXHRcdFx0XHRcdFx0XHRhd2FpdCBvblByb3BlcnR5VG9nZ2xlKGNhcmQucGF0aCwgY2xlYW5Qcm9wZXJ0eSwgY2hlY2tlZCk7XHJcblx0XHRcdFx0XHRcdH0gY2F0Y2gge1xyXG5cdFx0XHRcdFx0XHRcdC8vIFJldmVydCBjaGVja2JveCBvbiBlcnJvclxyXG5cdFx0XHRcdFx0XHRcdGNoZWNrYm94LmNoZWNrZWQgPSAhY2hlY2tlZDtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fSkoKTtcclxuXHRcdFx0XHR9KTtcclxuXHRcdFx0XHRjaGVja2JveC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIChlKSA9PiB7XHJcblx0XHRcdFx0XHRlLnN0b3BQcm9wYWdhdGlvbigpO1xyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdC8vIEdlbmVyaWMgcHJvcGVydHkgLSBwYXJzZSBhbmQgcmVuZGVyIGxpbmtzXHJcblx0XHRcdFx0Y29uc3QgdGV4dFdyYXBwZXIgPSBtZXRhQ29udGVudC5jcmVhdGVEaXYoJ3RleHQtd3JhcHBlcicpO1xyXG5cdFx0XHRcdHRoaXMucmVuZGVyUHJvcGVydHlWYWx1ZVdpdGhMaW5rcyh0ZXh0V3JhcHBlciwgcmVzb2x2ZWRWYWx1ZSwgY2FyZC5wYXRoLCBwcm9wZXJ0eU5hbWUpO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gUmVtb3ZlIG1ldGFDb250ZW50IHdyYXBwZXIgaWYgaXQgZW5kZWQgdXAgZW1wdHlcclxuXHRcdGlmICghbWV0YUNvbnRlbnQudGV4dENvbnRlbnQgfHwgbWV0YUNvbnRlbnQudGV4dENvbnRlbnQudHJpbSgpLmxlbmd0aCA9PT0gMCkge1xyXG5cdFx0XHRtZXRhQ29udGVudC5yZW1vdmUoKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIFJlbmRlcnMgcHJvcGVydHkgdmFsdWUgd2l0aCBjbGlja2FibGUgbGlua3NcclxuXHQgKiBEZXRlY3RzIHdpa2lsaW5rcyBbWy4uLl1dLCBtYXJrZG93biBsaW5rcyBbLi4uXSguLi4pLCBhbmQgVVJMc1xyXG5cdCAqIEZvciBpbWFnZSBwcm9wZXJ0aWVzLCBhbHNvIG1ha2VzIGZpbGUgcGF0aHMgY2xpY2thYmxlIChsaWtlIE9ic2lkaWFuIGRvZXMpXHJcblx0ICovXHJcblx0cHJpdmF0ZSByZW5kZXJQcm9wZXJ0eVZhbHVlV2l0aExpbmtzKGNvbnRhaW5lcjogSFRNTEVsZW1lbnQsIHZhbHVlOiBzdHJpbmcgfCBudWxsLCBzb3VyY2VQYXRoOiBzdHJpbmcsIHByb3BlcnR5TmFtZT86IHN0cmluZyk6IHZvaWQge1xyXG5cdFx0aWYgKCF2YWx1ZSkge1xyXG5cdFx0XHRjb250YWluZXIuYXBwZW5kVGV4dChnZXRFbXB0eVZhbHVlTWFya2VyKCkpO1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblxyXG5cdFx0Y29uc3QgdHJpbW1lZFZhbHVlID0gdmFsdWUudHJpbSgpO1xyXG5cclxuXHRcdC8vIENoZWNrIGlmIGVudGlyZSB2YWx1ZSBpcyBhIFVSTCAoaHR0cC9odHRwcykgLSBtYWtlIGl0IGNsaWNrYWJsZVxyXG5cdFx0aWYgKCh0cmltbWVkVmFsdWUuc3RhcnRzV2l0aCgnaHR0cDovLycpIHx8IHRyaW1tZWRWYWx1ZS5zdGFydHNXaXRoKCdodHRwczovLycpKSAmJiAhdHJpbW1lZFZhbHVlLmluY2x1ZGVzKCcgJykpIHtcclxuXHRcdFx0Y29uc3QgbGlua0VsID0gY29udGFpbmVyLmNyZWF0ZUVsKCdhJywge1xyXG5cdFx0XHRcdGNsczogJ2V4dGVybmFsLWxpbmsnLFxyXG5cdFx0XHRcdGhyZWY6IHRyaW1tZWRWYWx1ZVxyXG5cdFx0XHR9KTtcclxuXHRcdFx0bGlua0VsLnRleHRDb250ZW50ID0gdHJpbW1lZFZhbHVlO1xyXG5cdFx0XHRsaW5rRWwuc2V0QXR0cigndGFyZ2V0JywgJ19ibGFuaycpO1xyXG5cdFx0XHRsaW5rRWwuc2V0QXR0cigncmVsJywgJ25vb3BlbmVyJyk7XHJcblx0XHRcdGxpbmtFbC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIChlKSA9PiB7XHJcblx0XHRcdFx0ZS5zdG9wUHJvcGFnYXRpb24oKTtcclxuXHRcdFx0fSk7XHJcblx0XHRcdHJldHVybjtcclxuXHRcdH1cclxuXHJcblx0XHQvLyBGb3IgaW1hZ2UgcHJvcGVydGllcywgbWFrZSBmaWxlIHBhdGhzIGNsaWNrYWJsZSAobGlrZSBPYnNpZGlhbiBkb2VzIGluIHByb3BlcnR5IGVkaXRvcilcclxuXHRcdGNvbnN0IGlzSW1hZ2VQcm9wZXJ0eSA9IHByb3BlcnR5TmFtZSAmJiAoXHJcblx0XHRcdHByb3BlcnR5TmFtZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKCdpbWFnZScpIHx8XHJcblx0XHRcdHByb3BlcnR5TmFtZS50b0xvd2VyQ2FzZSgpID09PSAnY292ZXInIHx8XHJcblx0XHRcdHByb3BlcnR5TmFtZS50b0xvd2VyQ2FzZSgpID09PSAndGh1bWJuYWlsJ1xyXG5cdFx0KTtcclxuXHJcblx0XHRpZiAoaXNJbWFnZVByb3BlcnR5ICYmICF0cmltbWVkVmFsdWUuaW5jbHVkZXMoJyAnKSAmJlxyXG5cdFx0XHQhdHJpbW1lZFZhbHVlLnN0YXJ0c1dpdGgoJ2h0dHA6Ly8nKSAmJlxyXG5cdFx0XHQhdHJpbW1lZFZhbHVlLnN0YXJ0c1dpdGgoJ2h0dHBzOi8vJykgJiZcclxuXHRcdFx0KHRyaW1tZWRWYWx1ZS5pbmNsdWRlcygnLycpIHx8IHRyaW1tZWRWYWx1ZS5pbmNsdWRlcygnXFxcXCcpIHx8XHJcblx0XHRcdFx0dHJpbW1lZFZhbHVlLm1hdGNoKC9cXC4ocG5nfGpwZ3xqcGVnfGdpZnxzdmd8d2VicHxtcDR8bW92fGF2aSkkL2kpKSkge1xyXG5cdFx0XHQvLyBNYWtlIGl0IGNsaWNrYWJsZSBhcyBhbiBpbnRlcm5hbCBsaW5rIChsaWtlIE9ic2lkaWFuIGRvZXMgZm9yIGltYWdlIHByb3BlcnRpZXMpXHJcblx0XHRcdGNvbnN0IGxpbmtFbCA9IGNvbnRhaW5lci5jcmVhdGVFbCgnYScsIHtcclxuXHRcdFx0XHRjbHM6ICdpbnRlcm5hbC1saW5rJyxcclxuXHRcdFx0XHRocmVmOiB0cmltbWVkVmFsdWVcclxuXHRcdFx0fSk7XHJcblx0XHRcdGxpbmtFbC50ZXh0Q29udGVudCA9IHRyaW1tZWRWYWx1ZTtcclxuXHRcdFx0bGlua0VsLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKGU6IE1vdXNlRXZlbnQpID0+IHtcclxuXHRcdFx0XHRlLnN0b3BQcm9wYWdhdGlvbigpO1xyXG5cdFx0XHRcdGUucHJldmVudERlZmF1bHQoKTtcclxuXHRcdFx0XHRjb25zdCBuZXdMZWFmID0gZS5tZXRhS2V5IHx8IGUuY3RybEtleTtcclxuXHRcdFx0XHR2b2lkIHRoaXMuYXBwLndvcmtzcGFjZS5vcGVuTGlua1RleHQodHJpbW1lZFZhbHVlLCBzb3VyY2VQYXRoLCBuZXdMZWFmKTtcclxuXHRcdFx0fSk7XHJcblx0XHRcdHJldHVybjtcclxuXHRcdH1cclxuXHJcblx0XHQvLyBQYXJzZSBmb3Igd2lraWxpbmtzIFtbLi4uXV0gYW5kIG1hcmtkb3duIGxpbmtzIFsuLi5dKC4uLilcclxuXHRcdGNvbnN0IHdpa2lsaW5rUmVnZXggPSAvXFxbXFxbKFteXFxdXSspXFxdXFxdL2c7XHJcblx0XHRjb25zdCBtYXJrZG93bkxpbmtSZWdleCA9IC9cXFsoW15cXF1dKylcXF1cXCgoW14pXSspXFwpL2c7XHJcblxyXG5cdFx0Y29uc3QgbWF0Y2hlczogQXJyYXk8eyBpbmRleDogbnVtYmVyOyB0eXBlOiAnd2lraWxpbmsnIHwgJ21hcmtkb3duJzsgbWF0Y2g6IFJlZ0V4cE1hdGNoQXJyYXkgfT4gPSBbXTtcclxuXHJcblx0XHQvLyBGaW5kIHdpa2lsaW5rc1xyXG5cdFx0Zm9yIChjb25zdCBtIG9mIHZhbHVlLm1hdGNoQWxsKHdpa2lsaW5rUmVnZXgpKSB7XHJcblx0XHRcdGlmIChtLmluZGV4ICE9PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0XHRtYXRjaGVzLnB1c2goeyBpbmRleDogbS5pbmRleCwgdHlwZTogJ3dpa2lsaW5rJywgbWF0Y2g6IG0gfSk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHQvLyBGaW5kIG1hcmtkb3duIGxpbmtzXHJcblx0XHRmb3IgKGNvbnN0IG0gb2YgdmFsdWUubWF0Y2hBbGwobWFya2Rvd25MaW5rUmVnZXgpKSB7XHJcblx0XHRcdGlmIChtLmluZGV4ICE9PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0XHRtYXRjaGVzLnB1c2goeyBpbmRleDogbS5pbmRleCwgdHlwZTogJ21hcmtkb3duJywgbWF0Y2g6IG0gfSk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHQvLyBTb3J0IGJ5IGluZGV4XHJcblx0XHRtYXRjaGVzLnNvcnQoKGEsIGIpID0+IGEuaW5kZXggLSBiLmluZGV4KTtcclxuXHJcblx0XHRsZXQgbGFzdEluZGV4ID0gMDtcclxuXHJcblx0XHQvLyBSZW5kZXIgdGV4dCBhbmQgbGlua3NcclxuXHRcdGZvciAoY29uc3QgeyBpbmRleCwgdHlwZSwgbWF0Y2ggfSBvZiBtYXRjaGVzKSB7XHJcblx0XHRcdC8vIEFkZCB0ZXh0IGJlZm9yZSB0aGUgbGlua1xyXG5cdFx0XHRpZiAoaW5kZXggPiBsYXN0SW5kZXgpIHtcclxuXHRcdFx0XHRjb250YWluZXIuYXBwZW5kVGV4dCh2YWx1ZS5zdWJzdHJpbmcobGFzdEluZGV4LCBpbmRleCkpO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRpZiAodHlwZSA9PT0gJ3dpa2lsaW5rJykge1xyXG5cdFx0XHRcdGNvbnN0IGxpbmtDb250ZW50ID0gbWF0Y2hbMV07XHJcblx0XHRcdFx0Y29uc3QgcGFydHMgPSBsaW5rQ29udGVudC5zcGxpdCgnfCcpO1xyXG5cdFx0XHRcdGNvbnN0IGxpbmtQYXRoID0gcGFydHNbMF0udHJpbSgpO1xyXG5cdFx0XHRcdGNvbnN0IGRpc3BsYXlUZXh0ID0gcGFydHMubGVuZ3RoID4gMSA/IHBhcnRzWzFdLnRyaW0oKSA6IGxpbmtQYXRoO1xyXG5cclxuXHRcdFx0XHRjb25zdCBsaW5rRWwgPSBjb250YWluZXIuY3JlYXRlRWwoJ2EnLCB7XHJcblx0XHRcdFx0XHRjbHM6ICdpbnRlcm5hbC1saW5rJyxcclxuXHRcdFx0XHRcdGhyZWY6IGxpbmtQYXRoXHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdFx0bGlua0VsLnRleHRDb250ZW50ID0gZGlzcGxheVRleHQ7XHJcblxyXG5cdFx0XHRcdGxpbmtFbC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIChlOiBNb3VzZUV2ZW50KSA9PiB7XHJcblx0XHRcdFx0XHRlLnN0b3BQcm9wYWdhdGlvbigpO1xyXG5cdFx0XHRcdFx0ZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG5cdFx0XHRcdFx0Y29uc3QgbmV3TGVhZiA9IGUubWV0YUtleSB8fCBlLmN0cmxLZXk7XHJcblx0XHRcdFx0XHR2b2lkIHRoaXMuYXBwLndvcmtzcGFjZS5vcGVuTGlua1RleHQobGlua1BhdGgsIHNvdXJjZVBhdGgsIG5ld0xlYWYpO1xyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHR9IGVsc2UgaWYgKHR5cGUgPT09ICdtYXJrZG93bicpIHtcclxuXHRcdFx0XHRjb25zdCBsaW5rVGV4dCA9IG1hdGNoWzFdO1xyXG5cdFx0XHRcdGNvbnN0IGxpbmtVcmwgPSBtYXRjaFsyXTtcclxuXHJcblx0XHRcdFx0aWYgKGxpbmtVcmwuc3RhcnRzV2l0aCgnaHR0cDovLycpIHx8IGxpbmtVcmwuc3RhcnRzV2l0aCgnaHR0cHM6Ly8nKSkge1xyXG5cdFx0XHRcdFx0Ly8gRXh0ZXJuYWwgbGlua1xyXG5cdFx0XHRcdFx0Y29uc3QgbGlua0VsID0gY29udGFpbmVyLmNyZWF0ZUVsKCdhJywge1xyXG5cdFx0XHRcdFx0XHRjbHM6ICdleHRlcm5hbC1saW5rJyxcclxuXHRcdFx0XHRcdFx0aHJlZjogbGlua1VybFxyXG5cdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHRsaW5rRWwudGV4dENvbnRlbnQgPSBsaW5rVGV4dDtcclxuXHRcdFx0XHRcdGxpbmtFbC5zZXRBdHRyKCd0YXJnZXQnLCAnX2JsYW5rJyk7XHJcblx0XHRcdFx0XHRsaW5rRWwuc2V0QXR0cigncmVsJywgJ25vb3BlbmVyJyk7XHJcblx0XHRcdFx0XHRsaW5rRWwuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoZSkgPT4ge1xyXG5cdFx0XHRcdFx0XHRlLnN0b3BQcm9wYWdhdGlvbigpO1xyXG5cdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdC8vIEludGVybmFsIGxpbmsgKGZpbGUgcGF0aCBvciB3aWtpbGluayBpbiBtYXJrZG93biBmb3JtYXQpXHJcblx0XHRcdFx0XHRjb25zdCBsaW5rRWwgPSBjb250YWluZXIuY3JlYXRlRWwoJ2EnLCB7XHJcblx0XHRcdFx0XHRcdGNsczogJ2ludGVybmFsLWxpbmsnLFxyXG5cdFx0XHRcdFx0XHRocmVmOiBsaW5rVXJsXHJcblx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdGxpbmtFbC50ZXh0Q29udGVudCA9IGxpbmtUZXh0O1xyXG5cclxuXHRcdFx0XHRcdGxpbmtFbC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIChlOiBNb3VzZUV2ZW50KSA9PiB7XHJcblx0XHRcdFx0XHRcdGUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcblx0XHRcdFx0XHRcdGUucHJldmVudERlZmF1bHQoKTtcclxuXHRcdFx0XHRcdFx0Y29uc3QgbmV3TGVhZiA9IGUubWV0YUtleSB8fCBlLmN0cmxLZXk7XHJcblx0XHRcdFx0XHRcdHZvaWQgdGhpcy5hcHAud29ya3NwYWNlLm9wZW5MaW5rVGV4dChsaW5rVXJsLCBzb3VyY2VQYXRoLCBuZXdMZWFmKTtcclxuXHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0bGFzdEluZGV4ID0gaW5kZXggKyBtYXRjaFswXS5sZW5ndGg7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gQWRkIHJlbWFpbmluZyB0ZXh0XHJcblx0XHRpZiAobGFzdEluZGV4IDwgdmFsdWUubGVuZ3RoKSB7XHJcblx0XHRcdGNvbnRhaW5lci5hcHBlbmRUZXh0KHZhbHVlLnN1YnN0cmluZyhsYXN0SW5kZXgpKTtcclxuXHRcdH0gZWxzZSBpZiAobWF0Y2hlcy5sZW5ndGggPT09IDApIHtcclxuXHRcdFx0Ly8gTm8gbGlua3MgZm91bmQsIGp1c3QgYWRkIHRoZSB0ZXh0IGFzIHBsYWluIHRleHRcclxuXHRcdFx0Y29udGFpbmVyLmFwcGVuZFRleHQodmFsdWUpO1xyXG5cdFx0fVxyXG5cdH1cclxufVxyXG5cclxuXHJcbiIsICIvKipcbiAqIEJ1bGsgT3BlcmF0aW9ucyBUb29sYmFyXG4gKiBUb29sYmFyIHRoYXQgYXBwZWFycyB3aGVuIGl0ZW1zIGFyZSBzZWxlY3RlZFxuICovXG5cbmltcG9ydCB7IEFwcCwgc2V0SWNvbiB9IGZyb20gJ29ic2lkaWFuJztcbmltcG9ydCB0eXBlIEJhc2VzQ01TUGx1Z2luIGZyb20gJy4uL21haW4nO1xuaW1wb3J0IHR5cGUgeyBDTVNTZXR0aW5ncyB9IGZyb20gJy4uL3NoYXJlZC9kYXRhLXRyYW5zZm9ybSc7XG5pbXBvcnQgeyBUb29sYmFyQWN0aW9ucyB9IGZyb20gJy4uL3V0aWxzL3Rvb2xiYXItYWN0aW9ucyc7XG5cbmV4cG9ydCBjbGFzcyBCdWxrVG9vbGJhciB7XG5cdHByaXZhdGUgdG9vbGJhckVsOiBIVE1MRWxlbWVudCB8IG51bGwgPSBudWxsO1xuXHRwcml2YXRlIGNvdW50RWw6IEhUTUxFbGVtZW50IHwgbnVsbCA9IG51bGw7XG5cdHByaXZhdGUgc2VsZWN0QWxsQ2FsbGJhY2s/OiAoKSA9PiB2b2lkO1xuXHRwcml2YXRlIHJlc2l6ZU9ic2VydmVyOiBSZXNpemVPYnNlcnZlciB8IG51bGwgPSBudWxsO1xuXHRwcml2YXRlIHNldHRpbmdzPzogQ01TU2V0dGluZ3M7XG5cdHByaXZhdGUgYWN0aW9uczogVG9vbGJhckFjdGlvbnM7XG5cdHByaXZhdGUgdGltZW91dElkczogbnVtYmVyW10gPSBbXTtcblxuXHRjb25zdHJ1Y3Rvcihcblx0XHRwcml2YXRlIGFwcDogQXBwLFxuXHRcdHByaXZhdGUgcGx1Z2luOiBCYXNlc0NNU1BsdWdpbixcblx0XHRwcml2YXRlIGNvbnRhaW5lcjogSFRNTEVsZW1lbnQsXG5cdFx0cHJpdmF0ZSBnZXRTZWxlY3RlZEZpbGVzOiAoKSA9PiBzdHJpbmdbXSxcblx0XHRwcml2YXRlIGNsZWFyU2VsZWN0aW9uOiAoKSA9PiB2b2lkLFxuXHRcdHByaXZhdGUgcmVmcmVzaFZpZXc6ICgpID0+IHZvaWQsXG5cdFx0c2VsZWN0QWxsQ2FsbGJhY2s/OiAoKSA9PiB2b2lkLFxuXHRcdHNldHRpbmdzPzogQ01TU2V0dGluZ3Ncblx0KSB7XG5cdFx0dGhpcy5zZWxlY3RBbGxDYWxsYmFjayA9IHNlbGVjdEFsbENhbGxiYWNrO1xuXHRcdHRoaXMuc2V0dGluZ3MgPSBzZXR0aW5ncztcblx0XHR0aGlzLmFjdGlvbnMgPSBuZXcgVG9vbGJhckFjdGlvbnMoXG5cdFx0XHR0aGlzLmFwcCxcblx0XHRcdHRoaXMucGx1Z2luLFxuXHRcdFx0dGhpcy5nZXRTZWxlY3RlZEZpbGVzLFxuXHRcdFx0dGhpcy5jbGVhclNlbGVjdGlvbixcblx0XHRcdHRoaXMucmVmcmVzaFZpZXcsXG5cdFx0XHQoKSA9PiB0aGlzLnNob3coKVxuXHRcdCk7XG5cdFx0dGhpcy5jcmVhdGVUb29sYmFyKCk7XG5cdH1cblxuXHQvKipcblx0ICogVXBkYXRlIHNldHRpbmdzIChjYWxsZWQgd2hlbiB2aWV3IHNldHRpbmdzIGNoYW5nZSlcblx0ICovXG5cdHVwZGF0ZVNldHRpbmdzKHNldHRpbmdzOiBDTVNTZXR0aW5ncyk6IHZvaWQge1xuXHRcdHRoaXMuc2V0dGluZ3MgPSBzZXR0aW5ncztcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXQgdG9vbGJhciBhY3Rpb25zIChmb3IgdXNlIGluIGNvbnRleHQgbWVudXMpXG5cdCAqL1xuXHRnZXRBY3Rpb25zKCk6IFRvb2xiYXJBY3Rpb25zIHtcblx0XHRyZXR1cm4gdGhpcy5hY3Rpb25zO1xuXHR9XG5cblx0cHJpdmF0ZSBjcmVhdGVUb29sYmFyKCk6IHZvaWQge1xuXHRcdC8vIENyZWF0ZSB0b29sYmFyIGVsZW1lbnQgbWF0Y2hpbmcgQmFzZXMgc3RydWN0dXJlXG5cdFx0dGhpcy50b29sYmFyRWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcblx0XHR0aGlzLnRvb2xiYXJFbC5jbGFzc05hbWUgPSAnYmFzZXMtdG9vbGJhciBiYXNlcy1jbXMtYnVsay10b29sYmFyIGJhc2VzLWNtcy1idWxrLXRvb2xiYXItaGlkZGVuJztcblx0XHQvLyBTdG9yZSByZWZlcmVuY2UgdG8gdGhpcyBpbnN0YW5jZSBvbiB0aGUgZWxlbWVudCBmb3IgY2xlYW51cCBjaGVja3Ncblx0XHQodGhpcy50b29sYmFyRWwgYXMgdW5rbm93biBhcyB7IF9fYnVsa1Rvb2xiYXJJbnN0YW5jZT86IEJ1bGtUb29sYmFyIH0pLl9fYnVsa1Rvb2xiYXJJbnN0YW5jZSA9IHRoaXM7XG5cblx0XHQvLyBDcmVhdGUgdGhlIHRvb2xiYXIgY29udGVudFxuXHRcdHRoaXMuY3JlYXRlVG9vbGJhckNvbnRlbnQoKTtcblxuXHRcdC8vIFRyeSB0byBmaW5kIGFuZCBwb3NpdGlvbiB0aGUgdG9vbGJhciAtIHVzZSBhIHNtYWxsIGRlbGF5IHRvIGVuc3VyZSBET00gaXMgcmVhZHlcblx0XHR0aGlzLnBvc2l0aW9uVG9vbGJhcigpO1xuXG5cdFx0Ly8gQWxzbyB0cnkgcG9zaXRpb25pbmcgYWZ0ZXIgYSBzaG9ydCBkZWxheSBpbiBjYXNlIERPTSBpc24ndCByZWFkeSB5ZXRcblx0XHRjb25zdCB0aW1lb3V0SWQgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB0aGlzLnBvc2l0aW9uVG9vbGJhcigpLCAxMDApO1xuXHRcdHRoaXMudGltZW91dElkcy5wdXNoKHRpbWVvdXRJZCk7XG5cdH1cblxuXHRwcml2YXRlIHBvc2l0aW9uVG9vbGJhcigpOiB2b2lkIHtcblx0XHRpZiAoIXRoaXMudG9vbGJhckVsKSByZXR1cm47XG5cblx0XHQvLyBIZWxwZXIgdG8gc2FmZWx5IGluc2VydCBiZWZvcmUgYSByZWZlcmVuY2Ugbm9kZVxuXHRcdGNvbnN0IHNhZmVJbnNlcnRCZWZvcmUgPSAocGFyZW50OiBIVE1MRWxlbWVudCwgbmV3Tm9kZTogSFRNTEVsZW1lbnQsIHJlZk5vZGU6IE5vZGUgfCBudWxsKSA9PiB7XG5cdFx0XHRpZiAoIXBhcmVudCB8fCAhbmV3Tm9kZSkgcmV0dXJuIGZhbHNlO1xuXG5cdFx0XHQvLyBJZiB3ZSdyZSBhbHJlYWR5IHRoZXJlLCBkb24ndCBkbyBhbnl0aGluZ1xuXHRcdFx0aWYgKG5ld05vZGUucGFyZW50RWxlbWVudCA9PT0gcGFyZW50ICYmIChyZWZOb2RlID09PSBudWxsID8gIW5ld05vZGUubmV4dFNpYmxpbmcgOiBuZXdOb2RlLm5leHRTaWJsaW5nID09PSByZWZOb2RlKSkge1xuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH1cblxuXHRcdFx0dHJ5IHtcblx0XHRcdFx0aWYgKHJlZk5vZGUgJiYgIXBhcmVudC5jb250YWlucyhyZWZOb2RlKSkge1xuXHRcdFx0XHRcdC8vIFJlZmVyZW5jZSBub2RlIGlzIG5vdCBhIGNoaWxkLCBmYWxsYmFjayB0byBhcHBlbmRpbmdcblx0XHRcdFx0XHRwYXJlbnQuYXBwZW5kQ2hpbGQobmV3Tm9kZSk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0cGFyZW50Lmluc2VydEJlZm9yZShuZXdOb2RlLCByZWZOb2RlKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0Y29uc29sZS53YXJuKCdbQmFzZXMgQ01TXSBGYWlsZWQgdG8gaW5zZXJ0IHRvb2xiYXI6JywgZSk7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH1cblx0XHR9O1xuXG5cdFx0Ly8gMS4gVHJ5IHRvIGZpbmQgdGhlIGJhc2VzLWhlYWRlciBpbiB0aGUgdmljaW5pdHlcblx0XHQvLyBJdCdzIHVzdWFsbHkgYSBzaWJsaW5nIG9mIHRoZSBiYXNlcy12aWV3IHdoaWNoIGNvbnRhaW5zIG91ciBjb250YWluZXJcblx0XHRjb25zdCBiYXNlc0hlYWRlciA9IHRoaXMuY29udGFpbmVyLmNsb3Nlc3QoJy52aWV3LWNvbnRlbnQnKT8ucXVlcnlTZWxlY3RvcignLmJhc2VzLWhlYWRlcicpIHx8XG5cdFx0XHR0aGlzLmNvbnRhaW5lci5wYXJlbnRFbGVtZW50Py5xdWVyeVNlbGVjdG9yKCcuYmFzZXMtaGVhZGVyJyk7XG5cblx0XHRpZiAoYmFzZXNIZWFkZXIgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCAmJiBiYXNlc0hlYWRlci5wYXJlbnRFbGVtZW50KSB7XG5cdFx0XHQvLyBJbnNlcnQgcmlnaHQgYWZ0ZXIgdGhlIGhlYWRlclxuXHRcdFx0aWYgKHNhZmVJbnNlcnRCZWZvcmUoYmFzZXNIZWFkZXIucGFyZW50RWxlbWVudCwgdGhpcy50b29sYmFyRWwsIGJhc2VzSGVhZGVyLm5leHRTaWJsaW5nKSkgcmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIDIuIEZhbGxiYWNrOiBJbnNlcnQgZGlyZWN0bHkgYmVmb3JlIG91ciBjb250YWluZXIgaW4gaXRzIGltbWVkaWF0ZSBwYXJlbnRcblx0XHQvLyBUaGlzIGhhbmRsZXMgY2FzZXMgd2hlcmUgYmFzZXMtaGVhZGVyIGlzIG1pc3Npbmcgb3Igd2UgYXJlIGluIGEgdW5pcXVlIGxheW91dFxuXHRcdGNvbnN0IHBhcmVudCA9IHRoaXMuY29udGFpbmVyLnBhcmVudEVsZW1lbnQ7XG5cdFx0aWYgKHBhcmVudCkge1xuXHRcdFx0c2FmZUluc2VydEJlZm9yZShwYXJlbnQsIHRoaXMudG9vbGJhckVsLCB0aGlzLmNvbnRhaW5lcik7XG5cdFx0fVxuXHR9XG5cblx0cHJpdmF0ZSBjcmVhdGVUb29sYmFyQ29udGVudCgpOiB2b2lkIHtcblx0XHRpZiAoIXRoaXMudG9vbGJhckVsKSByZXR1cm47XG5cblx0XHQvLyBMZWZ0IHNpZGUgY29udGFpbmVyIChTZWxlY3QgYWxsLCBDbGVhciBzZWxlY3Rpb24sIENvdW50KVxuXHRcdGNvbnN0IGxlZnRDb250YWluZXIgPSB0aGlzLnRvb2xiYXJFbC5jcmVhdGVEaXYoJ2Jhc2VzLWNtcy1idWxrLXRvb2xiYXItbGVmdCcpO1xuXG5cdFx0Ly8gSGVscGVyIGZ1bmN0aW9uIHRvIGNyZWF0ZSBCYXNlcy1zdHlsZSBpY29uK3RleHQgYnV0dG9uXG5cdFx0Y29uc3QgY3JlYXRlQmFzZXNCdXR0b24gPSAoaWNvbk5hbWU6IHN0cmluZywgdGV4dDogc3RyaW5nLCBvbkNsaWNrOiAoKSA9PiB2b2lkLCBjb250YWluZXI6IEhUTUxFbGVtZW50LCBpc0Rlc3RydWN0aXZlID0gZmFsc2UpOiBIVE1MRWxlbWVudCA9PiB7XG5cdFx0XHRjb25zdCB0b29sYmFySXRlbSA9IGNvbnRhaW5lci5jcmVhdGVEaXYoJ2Jhc2VzLXRvb2xiYXItaXRlbScpO1xuXHRcdFx0Y29uc3QgYnV0dG9uID0gdG9vbGJhckl0ZW0uY3JlYXRlRGl2KCd0ZXh0LWljb24tYnV0dG9uJyk7XG5cdFx0XHRpZiAoaXNEZXN0cnVjdGl2ZSkge1xuXHRcdFx0XHRidXR0b24uYWRkQ2xhc3MoJ2Rlc3RydWN0aXZlJyk7XG5cdFx0XHR9XG5cdFx0XHRidXR0b24uc2V0QXR0cmlidXRlKCd0YWJpbmRleCcsICcwJyk7XG5cblx0XHRcdGNvbnN0IGljb25FbCA9IGJ1dHRvbi5jcmVhdGVTcGFuKCd0ZXh0LWJ1dHRvbi1pY29uJyk7XG5cdFx0XHRzZXRJY29uKGljb25FbCwgaWNvbk5hbWUpO1xuXG5cdFx0XHRjb25zdCB0ZXh0RWwgPSBidXR0b24uY3JlYXRlU3BhbigndGV4dC1idXR0b24tbGFiZWwnKTtcblx0XHRcdHRleHRFbC5zZXRUZXh0KHRleHQpO1xuXG5cdFx0XHRidXR0b24uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBvbkNsaWNrKTtcblx0XHRcdHJldHVybiBidXR0b247XG5cdFx0fTtcblxuXHRcdC8vIExlZnQgc2lkZTogU2VsZWN0IGFsbFxuXHRcdGlmICh0aGlzLnBsdWdpbi5zZXR0aW5ncy5zaG93VG9vbGJhclNlbGVjdEFsbCkge1xuXHRcdFx0Y3JlYXRlQmFzZXNCdXR0b24oJ2NvcHktY2hlY2snLCAnU2VsZWN0IGFsbCcsICgpID0+IHRoaXMuaGFuZGxlU2VsZWN0QWxsKCksIGxlZnRDb250YWluZXIpO1xuXHRcdH1cblxuXHRcdC8vIExlZnQgc2lkZTogQ2xlYXJcblx0XHRpZiAodGhpcy5wbHVnaW4uc2V0dGluZ3Muc2hvd1Rvb2xiYXJDbGVhcikge1xuXHRcdFx0Y3JlYXRlQmFzZXNCdXR0b24oJ3NxdWFyZS14JywgJ0NsZWFyJywgKCkgPT4gdGhpcy5jbGVhclNlbGVjdGlvbigpLCBsZWZ0Q29udGFpbmVyKTtcblx0XHR9XG5cblx0XHQvLyBMZWZ0IHNpZGU6IFNlbGVjdGVkIGNvdW50IChub3QgYSBidXR0b24sIGp1c3QgdGV4dClcblx0XHRjb25zdCBjb3VudEl0ZW0gPSBsZWZ0Q29udGFpbmVyLmNyZWF0ZURpdignYmFzZXMtdG9vbGJhci1pdGVtIGJhc2VzLWNtcy1zZWxlY3RlZC1jb3VudCcpO1xuXHRcdHRoaXMuY291bnRFbCA9IGNvdW50SXRlbS5jcmVhdGVTcGFuKCd0ZXh0LWJ1dHRvbi1sYWJlbCcpO1xuXHRcdHRoaXMuY291bnRFbC5zZXRUZXh0KCcwIHNlbGVjdGVkJyk7XG5cblx0XHQvLyBSaWdodCBzaWRlIGNvbnRhaW5lciAoYWxsIGFjdGlvbiBidXR0b25zKVxuXHRcdGNvbnN0IHJpZ2h0Q29udGFpbmVyID0gdGhpcy50b29sYmFyRWwuY3JlYXRlRGl2KCdiYXNlcy1jbXMtYnVsay10b29sYmFyLXJpZ2h0Jyk7XG5cblx0XHQvLyBSaWdodCBzaWRlOiBQdWJsaXNoXG5cdFx0aWYgKHRoaXMucGx1Z2luLnNldHRpbmdzLnNob3dUb29sYmFyUHVibGlzaCkge1xuXHRcdFx0Y3JlYXRlQmFzZXNCdXR0b24oJ2Jvb2stY2hlY2snLCAnUHVibGlzaCcsICgpID0+IHtcblx0XHRcdFx0dm9pZCB0aGlzLmFjdGlvbnMuaGFuZGxlUHVibGlzaCh0aGlzLnNldHRpbmdzKTtcblx0XHRcdH0sIHJpZ2h0Q29udGFpbmVyKTtcblx0XHR9XG5cblx0XHQvLyBSaWdodCBzaWRlOiBEcmFmdFxuXHRcdGlmICh0aGlzLnBsdWdpbi5zZXR0aW5ncy5zaG93VG9vbGJhckRyYWZ0KSB7XG5cdFx0XHRjcmVhdGVCYXNlc0J1dHRvbignYm9vay1kYXNoZWQnLCAnRHJhZnQnLCAoKSA9PiB7XG5cdFx0XHRcdHZvaWQgdGhpcy5hY3Rpb25zLmhhbmRsZVNldERyYWZ0KHRoaXMuc2V0dGluZ3MpO1xuXHRcdFx0fSwgcmlnaHRDb250YWluZXIpO1xuXHRcdH1cblxuXHRcdC8vIFJpZ2h0IHNpZGU6IFRhZ3Ncblx0XHRpZiAodGhpcy5wbHVnaW4uc2V0dGluZ3Muc2hvd1Rvb2xiYXJUYWdzKSB7XG5cdFx0XHRjcmVhdGVCYXNlc0J1dHRvbigndGFncycsICdUYWdzJywgKCkgPT4gdGhpcy5hY3Rpb25zLmhhbmRsZU1hbmFnZVRhZ3MoKSwgcmlnaHRDb250YWluZXIpO1xuXHRcdH1cblxuXHRcdC8vIFJpZ2h0IHNpZGU6IFNldFxuXHRcdGlmICh0aGlzLnBsdWdpbi5zZXR0aW5ncy5zaG93VG9vbGJhclNldCkge1xuXHRcdFx0Y3JlYXRlQmFzZXNCdXR0b24oJ2xpc3QtY2hlY2snLCAnU2V0JywgKCkgPT4gdGhpcy5hY3Rpb25zLmhhbmRsZVNldFByb3BlcnR5KCksIHJpZ2h0Q29udGFpbmVyKTtcblx0XHR9XG5cblx0XHQvLyBSaWdodCBzaWRlOiBSZW1vdmVcblx0XHRpZiAodGhpcy5wbHVnaW4uc2V0dGluZ3Muc2hvd1Rvb2xiYXJSZW1vdmUpIHtcblx0XHRcdGNyZWF0ZUJhc2VzQnV0dG9uKCdsaXN0LXgnLCAnUmVtb3ZlJywgKCkgPT4gdGhpcy5hY3Rpb25zLmhhbmRsZVJlbW92ZVByb3BlcnR5KCksIHJpZ2h0Q29udGFpbmVyKTtcblx0XHR9XG5cblx0XHQvLyBSaWdodCBzaWRlOiBEZWxldGVcblx0XHRpZiAodGhpcy5wbHVnaW4uc2V0dGluZ3Muc2hvd1Rvb2xiYXJEZWxldGUpIHtcblx0XHRcdGNyZWF0ZUJhc2VzQnV0dG9uKCd0cmFzaC0yJywgJ0RlbGV0ZScsICgpID0+IHtcblx0XHRcdFx0dm9pZCB0aGlzLmFjdGlvbnMuaGFuZGxlRGVsZXRlKCk7XG5cdFx0XHR9LCByaWdodENvbnRhaW5lciwgdHJ1ZSk7XG5cdFx0fVxuXG5cdFx0Ly8gU2V0IHVwIHJlc3BvbnNpdmUgYmVoYXZpb3IgLSBkZXRlY3QgY29sbGFwc2VkIHN0YXRlXG5cdFx0dGhpcy5zZXR1cFJlc3BvbnNpdmVCZWhhdmlvcigpO1xuXHR9XG5cblx0cHJpdmF0ZSBzZXR1cFJlc3BvbnNpdmVCZWhhdmlvcigpOiB2b2lkIHtcblx0XHRpZiAoIXRoaXMudG9vbGJhckVsKSByZXR1cm47XG5cblx0XHQvLyBDaGVjayBpbml0aWFsIHN0YXRlIGFmdGVyIGEgc2hvcnQgZGVsYXkgdG8gZW5zdXJlIHRvb2xiYXIgaXMgcmVuZGVyZWRcblx0XHRjb25zdCB0aW1lb3V0SWQxID0gd2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0dGhpcy51cGRhdGVDb2xsYXBzZWRTdGF0ZSgpO1xuXHRcdH0sIDEwMCk7XG5cdFx0dGhpcy50aW1lb3V0SWRzLnB1c2godGltZW91dElkMSk7XG5cblx0XHQvLyBPYnNlcnZlIHRvb2xiYXIgd2lkdGggY2hhbmdlcyAobW9yZSBhY2N1cmF0ZSB0aGFuIGNvbnRhaW5lcilcblx0XHRpZiAodGhpcy50b29sYmFyRWwpIHtcblx0XHRcdHRoaXMucmVzaXplT2JzZXJ2ZXIgPSBuZXcgUmVzaXplT2JzZXJ2ZXIoKCkgPT4ge1xuXHRcdFx0XHR0aGlzLnVwZGF0ZUNvbGxhcHNlZFN0YXRlKCk7XG5cdFx0XHR9KTtcblx0XHRcdHRoaXMucmVzaXplT2JzZXJ2ZXIub2JzZXJ2ZSh0aGlzLnRvb2xiYXJFbCk7XG5cdFx0fVxuXG5cdFx0Ly8gQWxzbyBvYnNlcnZlIGNvbnRhaW5lciBhcyBmYWxsYmFja1xuXHRcdGNvbnN0IGNvbnRhaW5lciA9IHRoaXMuY29udGFpbmVyO1xuXHRcdGlmIChjb250YWluZXIpIHtcblx0XHRcdC8vIFVzZSBhIHNlcGFyYXRlIG9ic2VydmVyIGZvciBjb250YWluZXIgdG8gY2F0Y2ggd2luZG93IHJlc2l6ZVxuXHRcdFx0Y29uc3QgY29udGFpbmVyT2JzZXJ2ZXIgPSBuZXcgUmVzaXplT2JzZXJ2ZXIoKCkgPT4ge1xuXHRcdFx0XHQvLyBTbWFsbCBkZWxheSB0byBsZXQgdG9vbGJhciByZXNpemUgZmlyc3Rcblx0XHRcdFx0Y29uc3QgdGltZW91dElkID0gd2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0XHRcdHRoaXMudXBkYXRlQ29sbGFwc2VkU3RhdGUoKTtcblx0XHRcdFx0fSwgMTApO1xuXHRcdFx0XHR0aGlzLnRpbWVvdXRJZHMucHVzaCh0aW1lb3V0SWQpO1xuXHRcdFx0fSk7XG5cdFx0XHRjb250YWluZXJPYnNlcnZlci5vYnNlcnZlKGNvbnRhaW5lcik7XG5cblx0XHRcdC8vIFN0b3JlIGZvciBjbGVhbnVwXG5cdFx0XHQodGhpcyBhcyB1bmtub3duIGFzIHsgY29udGFpbmVyT2JzZXJ2ZXI/OiBSZXNpemVPYnNlcnZlciB9KS5jb250YWluZXJPYnNlcnZlciA9IGNvbnRhaW5lck9ic2VydmVyO1xuXHRcdH1cblx0fVxuXG5cdHByaXZhdGUgdXBkYXRlQ29sbGFwc2VkU3RhdGUoKTogdm9pZCB7XG5cdFx0aWYgKCF0aGlzLnRvb2xiYXJFbCkgcmV0dXJuO1xuXG5cdFx0Ly8gQ2FsY3VsYXRlIHRocmVzaG9sZCBkeW5hbWljYWxseSBiYXNlZCBvbiBudW1iZXIgb2YgdmlzaWJsZSBidXR0b25zXG5cdFx0Ly8gU3RhbmRhcmQgQmFzZXMgYnV0dG9ucyB3aXRoIHRleHQgbmVlZCBsZXNzIHRoYW4gMTAwcHggb24gYXZlcmFnZVxuXHRcdGNvbnN0IHZpc2libGVCdXR0b25zID0gdGhpcy50b29sYmFyRWwucXVlcnlTZWxlY3RvckFsbCgnLnRleHQtaWNvbi1idXR0b24nKTtcblx0XHRjb25zdCBidXR0b25Db3VudCA9IHZpc2libGVCdXR0b25zLmxlbmd0aDtcblxuXHRcdC8vIEJhc2Ugd2lkdGggZm9yIGNvdW50IHRleHQgKHR5cGljYWxseSB+MTAwcHgpICsgc2lkZSBwYWRkaW5nXG5cdFx0Y29uc3QgYmFzZVdpZHRoID0gMTQwO1xuXHRcdGNvbnN0IHBlckJ1dHRvbldpZHRoID0gNzU7IC8vIE1vcmUgY29tcGFjdCB0aHJlc2hvbGQgdG8ga2VlcCB0ZXh0IGxvbmdlclxuXHRcdGNvbnN0IGR5bmFtaWNUaHJlc2hvbGQgPSBiYXNlV2lkdGggKyAoYnV0dG9uQ291bnQgKiBwZXJCdXR0b25XaWR0aCk7XG5cblx0XHRjb25zdCB0b29sYmFyV2lkdGggPSB0aGlzLnRvb2xiYXJFbC5vZmZzZXRXaWR0aDtcblxuXHRcdC8vIElmIHdpZHRoIGlzIDAgKGhpZGRlbiksIGJ1dCB3ZSBoYXZlIGEgY2FjaGVkIHdpZHRoIGZyb20gYSBwYXJlbnQsIHVzZSBpdFxuXHRcdC8vIE90aGVyd2lzZSByZXR1cm4gdG8gYXZvaWQgcHJlbWF0dXJlIGNvbGxhcHNpbmcgZHVyaW5nIHRyYW5zaXRpb25zXG5cdFx0aWYgKHRvb2xiYXJXaWR0aCA9PT0gMCkge1xuXHRcdFx0Y29uc3QgY29udGFpbmVyV2lkdGggPSB0aGlzLmNvbnRhaW5lci5vZmZzZXRXaWR0aDtcblx0XHRcdGlmIChjb250YWluZXJXaWR0aCA+IDAgJiYgY29udGFpbmVyV2lkdGggPCBkeW5hbWljVGhyZXNob2xkKSB7XG5cdFx0XHRcdHRoaXMudG9vbGJhckVsLmFkZENsYXNzKCdjb2xsYXBzZWQnKTtcblx0XHRcdH1cblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRjb25zdCBpc0NvbGxhcHNlZCA9IHRvb2xiYXJXaWR0aCA8IGR5bmFtaWNUaHJlc2hvbGQ7XG5cblx0XHRpZiAoaXNDb2xsYXBzZWQpIHtcblx0XHRcdHRoaXMudG9vbGJhckVsLmFkZENsYXNzKCdjb2xsYXBzZWQnKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy50b29sYmFyRWwucmVtb3ZlQ2xhc3MoJ2NvbGxhcHNlZCcpO1xuXHRcdH1cblx0fVxuXG5cdHVwZGF0ZUNvdW50KGNvdW50OiBudW1iZXIpOiB2b2lkIHtcblx0XHRpZiAodGhpcy5jb3VudEVsKSB7XG5cdFx0XHR0aGlzLmNvdW50RWwuc2V0VGV4dChgJHtjb3VudH0gc2VsZWN0ZWRgKTtcblx0XHR9XG5cdFx0Ly8gQ291bnQgY2hhbmdlIG1pZ2h0IGFmZmVjdCB3aWR0aC90aHJlc2hvbGRcblx0XHR0aGlzLnVwZGF0ZUNvbGxhcHNlZFN0YXRlKCk7XG5cdH1cblxuXHRwcml2YXRlIGhhbmRsZVNlbGVjdEFsbCgpOiB2b2lkIHtcblx0XHRpZiAodGhpcy5zZWxlY3RBbGxDYWxsYmFjaykge1xuXHRcdFx0dGhpcy5zZWxlY3RBbGxDYWxsYmFjaygpO1xuXHRcdH1cblx0fVxuXG5cdHNob3coKTogdm9pZCB7XG5cdFx0aWYgKCF0aGlzLnRvb2xiYXJFbCkge1xuXHRcdFx0Y29uc29sZS53YXJuKCdbQmFzZXMgQ01TXSBUb29sYmFyIGVsZW1lbnQgbm90IGZvdW5kLCByZWNyZWF0aW5nLi4uJyk7XG5cdFx0XHR0aGlzLmNyZWF0ZVRvb2xiYXIoKTtcblx0XHR9XG5cblx0XHRpZiAodGhpcy50b29sYmFyRWwpIHtcblx0XHRcdC8vIE1ha2Ugc3VyZSBpdCdzIHBvc2l0aW9uZWQgY29ycmVjdGx5IGZpcnN0XG5cdFx0XHR0aGlzLnBvc2l0aW9uVG9vbGJhcigpO1xuXG5cdFx0XHQvLyBFbnN1cmUgaXQncyBpbiB0aGUgRE9NXG5cdFx0XHRpZiAoIXRoaXMudG9vbGJhckVsLnBhcmVudEVsZW1lbnQpIHtcblx0XHRcdFx0Y29uc29sZS53YXJuKCdbQmFzZXMgQ01TXSBUb29sYmFyIG5vdCBpbiBET00sIHJlcG9zaXRpb25pbmcuLi4nKTtcblx0XHRcdFx0dGhpcy5wb3NpdGlvblRvb2xiYXIoKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gU2hvdyBpdCB3aXRoIGZsZXggZGlzcGxheVxuXHRcdFx0dGhpcy50b29sYmFyRWwucmVtb3ZlQ2xhc3MoJ2Jhc2VzLWNtcy1idWxrLXRvb2xiYXItaGlkZGVuJyk7XG5cdFx0XHR0aGlzLnRvb2xiYXJFbC5hZGRDbGFzcygnYmFzZXMtY21zLWJ1bGstdG9vbGJhci12aXNpYmxlJyk7XG5cblx0XHRcdC8vIEZvcmNlIHJlZmxvdyB0byBlbnN1cmUgdHJhbnNpdGlvbiB3b3Jrc1xuXHRcdFx0dm9pZCB0aGlzLnRvb2xiYXJFbC5vZmZzZXRIZWlnaHQ7XG5cblx0XHRcdC8vIEFuaW1hdGUgaW4gLSB1c2Ugc2V0VGltZW91dCBpbnN0ZWFkIG9mIHJlcXVlc3RBbmltYXRpb25GcmFtZSBmb3IgbW9yZSByZWxpYWJpbGl0eVxuXHRcdFx0Y29uc3QgdGltZW91dElkID0gd2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0XHRpZiAodGhpcy50b29sYmFyRWwpIHtcblx0XHRcdFx0XHR0aGlzLnRvb2xiYXJFbC5yZW1vdmVDbGFzcygnYmFzZXMtY21zLWJ1bGstdG9vbGJhci1hbmltYXRpbmctb3V0Jyk7XG5cdFx0XHRcdFx0dGhpcy50b29sYmFyRWwuYWRkQ2xhc3MoJ2Jhc2VzLWNtcy1idWxrLXRvb2xiYXItYW5pbWF0aW5nLWluJyk7XG5cdFx0XHRcdH1cblx0XHRcdH0sIDEwKTtcblx0XHRcdHRoaXMudGltZW91dElkcy5wdXNoKHRpbWVvdXRJZCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNvbnNvbGUuZXJyb3IoJ1tCYXNlcyBDTVNdIEZhaWxlZCB0byBzaG93IHRvb2xiYXIgLSBlbGVtZW50IGlzIG51bGwnKTtcblx0XHR9XG5cdH1cblxuXHRoaWRlKCk6IHZvaWQge1xuXHRcdGlmICh0aGlzLnRvb2xiYXJFbCkge1xuXHRcdFx0Ly8gQW5pbWF0ZSBvdXRcblx0XHRcdHRoaXMudG9vbGJhckVsLnJlbW92ZUNsYXNzKCdiYXNlcy1jbXMtYnVsay10b29sYmFyLWFuaW1hdGluZy1pbicpO1xuXHRcdFx0dGhpcy50b29sYmFyRWwuYWRkQ2xhc3MoJ2Jhc2VzLWNtcy1idWxrLXRvb2xiYXItYW5pbWF0aW5nLW91dCcpO1xuXHRcdFx0Ly8gV2FpdCBmb3IgdHJhbnNpdGlvbiB0byBjb21wbGV0ZSBiZWZvcmUgaGlkaW5nXG5cdFx0XHRjb25zdCB0aW1lb3V0SWQgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRcdGlmICh0aGlzLnRvb2xiYXJFbCkge1xuXHRcdFx0XHRcdHRoaXMudG9vbGJhckVsLnJlbW92ZUNsYXNzKCdiYXNlcy1jbXMtYnVsay10b29sYmFyLXZpc2libGUnKTtcblx0XHRcdFx0XHR0aGlzLnRvb2xiYXJFbC5hZGRDbGFzcygnYmFzZXMtY21zLWJ1bGstdG9vbGJhci1oaWRkZW4nKTtcblx0XHRcdFx0fVxuXHRcdFx0fSwgMjAwKTtcblx0XHRcdHRoaXMudGltZW91dElkcy5wdXNoKHRpbWVvdXRJZCk7XG5cdFx0fVxuXHR9XG5cblxuXHQvKipcblx0ICogUmVjcmVhdGUgdGhlIHRvb2xiYXIgd2l0aCB1cGRhdGVkIHNldHRpbmdzXG5cdCAqIFByZXNlcnZlcyB2aXNpYmlsaXR5IHN0YXRlIGFuZCBjb3VudFxuXHQgKi9cblx0cmVjcmVhdGUoKTogdm9pZCB7XG5cdFx0Y29uc3Qgd2FzVmlzaWJsZSA9IHRoaXMudG9vbGJhckVsICYmICF0aGlzLnRvb2xiYXJFbC5oYXNDbGFzcygnYmFzZXMtY21zLWJ1bGstdG9vbGJhci1oaWRkZW4nKTtcblx0XHRsZXQgY3VycmVudENvdW50ID0gMDtcblxuXHRcdC8vIEdldCBjdXJyZW50IGNvdW50IGJlZm9yZSBkZXN0cm95aW5nXG5cdFx0aWYgKHRoaXMuY291bnRFbCAmJiB0aGlzLmNvdW50RWwudGV4dENvbnRlbnQpIHtcblx0XHRcdGNvbnN0IG1hdGNoID0gdGhpcy5jb3VudEVsLnRleHRDb250ZW50Lm1hdGNoKC9cXGQrLyk7XG5cdFx0XHRpZiAobWF0Y2gpIHtcblx0XHRcdFx0Y3VycmVudENvdW50ID0gcGFyc2VJbnQobWF0Y2hbMF0sIDEwKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBEZXN0cm95IGV4aXN0aW5nIHRvb2xiYXJcblx0XHR0aGlzLmRlc3Ryb3koKTtcblxuXHRcdC8vIFJlY3JlYXRlIHRvb2xiYXJcblx0XHR0aGlzLmNyZWF0ZVRvb2xiYXIoKTtcblxuXHRcdC8vIFJlc3RvcmUgdmlzaWJpbGl0eSBhbmQgY291bnQgaWYgaXQgd2FzIHZpc2libGVcblx0XHRpZiAod2FzVmlzaWJsZSAmJiB0aGlzLnRvb2xiYXJFbCAmJiBjdXJyZW50Q291bnQgPiAwKSB7XG5cdFx0XHR0aGlzLnVwZGF0ZUNvdW50KGN1cnJlbnRDb3VudCk7XG5cdFx0XHR0aGlzLnNob3coKTtcblx0XHR9XG5cdH1cblxuXHRkZXN0cm95KCk6IHZvaWQge1xuXHRcdC8vIENsZWFyIGFsbCB0aW1lb3V0c1xuXHRcdHRoaXMudGltZW91dElkcy5mb3JFYWNoKGlkID0+IHdpbmRvdy5jbGVhclRpbWVvdXQoaWQpKTtcblx0XHR0aGlzLnRpbWVvdXRJZHMgPSBbXTtcblxuXHRcdGlmICh0aGlzLnJlc2l6ZU9ic2VydmVyKSB7XG5cdFx0XHR0aGlzLnJlc2l6ZU9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcblx0XHRcdHRoaXMucmVzaXplT2JzZXJ2ZXIgPSBudWxsO1xuXHRcdH1cblx0XHQvLyBDbGVhbiB1cCBjb250YWluZXIgb2JzZXJ2ZXIgaWYgaXQgZXhpc3RzXG5cdFx0Y29uc3QgY29udGFpbmVyT2JzZXJ2ZXIgPSAodGhpcyBhcyB1bmtub3duIGFzIHsgY29udGFpbmVyT2JzZXJ2ZXI/OiBSZXNpemVPYnNlcnZlciB9KS5jb250YWluZXJPYnNlcnZlcjtcblx0XHRpZiAoY29udGFpbmVyT2JzZXJ2ZXIpIHtcblx0XHRcdGNvbnRhaW5lck9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcblx0XHRcdCh0aGlzIGFzIHVua25vd24gYXMgeyBjb250YWluZXJPYnNlcnZlcj86IFJlc2l6ZU9ic2VydmVyIH0pLmNvbnRhaW5lck9ic2VydmVyID0gdW5kZWZpbmVkO1xuXHRcdH1cblx0XHRpZiAodGhpcy50b29sYmFyRWwpIHtcblx0XHRcdHRoaXMudG9vbGJhckVsLnJlbW92ZSgpO1xuXHRcdFx0dGhpcy50b29sYmFyRWwgPSBudWxsO1xuXHRcdH1cblx0fVxufVxuXG4iLCAiLyoqXHJcbiAqIEJ1bGsgb3BlcmF0aW9uIGhhbmRsZXJzXHJcbiAqIFVwZGF0ZWQgdG8gc3VwcG9ydCBNRFggZmlsZXMgdmlhIHVuaWZpZWQgZnJvbnRtYXR0ZXIgaGVscGVyXHJcbiAqL1xyXG5cclxuaW1wb3J0IHsgQXBwLCBURmlsZSwgTm90aWNlIH0gZnJvbSAnb2JzaWRpYW4nO1xyXG5pbXBvcnQgeyBhZGRQcm9wZXJ0aWVzLCByZW1vdmVQcm9wZXJ0aWVzIH0gZnJvbSAnLi9mcm9udG1hdHRlcic7XHJcbmltcG9ydCB7IE5ld1Byb3BEYXRhIH0gZnJvbSAnLi9mcm9udG1hdHRlcic7XHJcbmltcG9ydCB0eXBlIHsgQ01TU2V0dGluZ3MgfSBmcm9tICcuLi9zaGFyZWQvZGF0YS10cmFuc2Zvcm0nO1xyXG5pbXBvcnQgeyBnZXRGaWxlRnJvbnRtYXR0ZXIsIHByb2Nlc3NGaWxlRnJvbnRNYXR0ZXIgfSBmcm9tICcuL2Zyb250bWF0dGVyLWhlbHBlcic7XHJcblxyXG5leHBvcnQgY2xhc3MgQnVsa09wZXJhdGlvbnMge1xyXG5cdGNvbnN0cnVjdG9yKHByaXZhdGUgYXBwOiBBcHApIHt9XHJcblxyXG5cdC8qKlxyXG5cdCAqIFNldCBkcmFmdCBzdGF0dXMgZm9yIG11bHRpcGxlIGZpbGVzXHJcblx0ICogUmVzcGVjdHMgZmlsZW5hbWUgcHJlZml4IG1vZGUgYW5kIHJldmVyc2UgbG9naWMgc2V0dGluZ3NcclxuXHQgKi9cclxuXHRhc3luYyBzZXREcmFmdChmaWxlczogc3RyaW5nW10sIGRyYWZ0OiBib29sZWFuLCBzZXR0aW5ncz86IENNU1NldHRpbmdzKTogUHJvbWlzZTx2b2lkPiB7XHJcblx0XHRhd2FpdCB0aGlzLmJhdGNoUHJvY2Vzc0ZpbGVzKGZpbGVzLCBhc3luYyAoZmlsZSkgPT4ge1xyXG5cdFx0XHQvLyBJZiBzZXR0aW5ncyBwcm92aWRlZCwgdXNlIHRoZSBzYW1lIGxvZ2ljIGFzIGhhbmRsZVByb3BlcnR5VG9nZ2xlXHJcblx0XHRcdGlmIChzZXR0aW5ncykge1xyXG5cdFx0XHRcdC8vIENoZWNrIGlmIHVzaW5nIGZpbGVuYW1lIHByZWZpeCBtb2RlXHJcblx0XHRcdFx0aWYgKHNldHRpbmdzLmRyYWZ0U3RhdHVzVXNlRmlsZW5hbWVQcmVmaXgpIHtcclxuXHRcdFx0XHRcdC8vIEFsd2F5cyB1c2UgZmlsZW5hbWUtYmFzZWQgZGV0ZWN0aW9uIHdoZW4gdGhpcyBzZXR0aW5nIGlzIGVuYWJsZWRcclxuXHRcdFx0XHRcdGNvbnN0IGZpbGVOYW1lID0gZmlsZS5iYXNlbmFtZTsgLy8gYmFzZW5hbWUgZXhjbHVkZXMgZXh0ZW5zaW9uXHJcblx0XHRcdFx0XHRjb25zdCBzdGFydHNXaXRoVW5kZXJzY29yZSA9IGZpbGVOYW1lLnN0YXJ0c1dpdGgoJ18nKTtcclxuXHRcdFx0XHRcdGNvbnN0IGN1cnJlbnRQYXRoID0gZmlsZS5wYXRoO1xyXG5cdFx0XHRcdFx0Y29uc3QgcGF0aFBhcnRzID0gY3VycmVudFBhdGguc3BsaXQoJy8nKTtcclxuXHRcdFx0XHRcdFxyXG5cdFx0XHRcdFx0Ly8gQXBwbHkgcmV2ZXJzZSBsb2dpYyBpZiBlbmFibGVkXHJcblx0XHRcdFx0XHRsZXQgdGFyZ2V0VmFsdWUgPSBkcmFmdDtcclxuXHRcdFx0XHRcdGlmIChzZXR0aW5ncy5kcmFmdFN0YXR1c1JldmVyc2UpIHtcclxuXHRcdFx0XHRcdFx0dGFyZ2V0VmFsdWUgPSAhZHJhZnQ7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcclxuXHRcdFx0XHRcdC8vIFRvZ2dsZSBiYXNlZCBvbiBkZXNpcmVkIHN0YXRlOiBpZiB0YXJnZXRWYWx1ZSBpcyB0cnVlIChkcmFmdCksIGVuc3VyZSB1bmRlcnNjb3JlOyBpZiBmYWxzZSAocHVibGlzaGVkKSwgcmVtb3ZlIGl0XHJcblx0XHRcdFx0XHRpZiAodGFyZ2V0VmFsdWUgPT09IHRydWUpIHtcclxuXHRcdFx0XHRcdFx0Ly8gU2V0dGluZyB0byBkcmFmdCAtIGFkZCB1bmRlcnNjb3JlIGlmIG5vdCBwcmVzZW50XHJcblx0XHRcdFx0XHRcdGlmICghc3RhcnRzV2l0aFVuZGVyc2NvcmUpIHtcclxuXHRcdFx0XHRcdFx0XHRjb25zdCBuZXdOYW1lID0gYF8ke2ZpbGVOYW1lfSR7ZmlsZS5leHRlbnNpb24gPyBgLiR7ZmlsZS5leHRlbnNpb259YCA6ICcnfWA7XHJcblx0XHRcdFx0XHRcdFx0cGF0aFBhcnRzW3BhdGhQYXJ0cy5sZW5ndGggLSAxXSA9IG5ld05hbWU7XHJcblx0XHRcdFx0XHRcdFx0Y29uc3QgbmV3UGF0aCA9IHBhdGhQYXJ0cy5qb2luKCcvJyk7XHJcblx0XHRcdFx0XHRcdFx0YXdhaXQgdGhpcy5hcHAuZmlsZU1hbmFnZXIucmVuYW1lRmlsZShmaWxlLCBuZXdQYXRoKTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0Ly8gU2V0dGluZyB0byBwdWJsaXNoZWQgLSByZW1vdmUgdW5kZXJzY29yZSBpZiBwcmVzZW50XHJcblx0XHRcdFx0XHRcdGlmIChzdGFydHNXaXRoVW5kZXJzY29yZSkge1xyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IG5ld05hbWUgPSBmaWxlTmFtZS5zdWJzdHJpbmcoMSkgKyAoZmlsZS5leHRlbnNpb24gPyBgLiR7ZmlsZS5leHRlbnNpb259YCA6ICcnKTtcclxuXHRcdFx0XHRcdFx0XHRwYXRoUGFydHNbcGF0aFBhcnRzLmxlbmd0aCAtIDFdID0gbmV3TmFtZTtcclxuXHRcdFx0XHRcdFx0XHRjb25zdCBuZXdQYXRoID0gcGF0aFBhcnRzLmpvaW4oJy8nKTtcclxuXHRcdFx0XHRcdFx0XHRhd2FpdCB0aGlzLmFwcC5maWxlTWFuYWdlci5yZW5hbWVGaWxlKGZpbGUsIG5ld1BhdGgpO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdC8vIFVzZSBwcm9wZXJ0eS1iYXNlZCBkZXRlY3Rpb24gKGZyb250bWF0dGVyKVxyXG5cdFx0XHRcdFx0Y29uc3QgY2xlYW5Db25maWdQcm9wZXJ0eSA9IHNldHRpbmdzLmRyYWZ0U3RhdHVzUHJvcGVydHkgJiYgc2V0dGluZ3MuZHJhZnRTdGF0dXNQcm9wZXJ0eS50cmltKClcclxuXHRcdFx0XHRcdFx0PyAoc2V0dGluZ3MuZHJhZnRTdGF0dXNQcm9wZXJ0eS5zdGFydHNXaXRoKCdub3RlLicpIFxyXG5cdFx0XHRcdFx0XHRcdD8gc2V0dGluZ3MuZHJhZnRTdGF0dXNQcm9wZXJ0eS5zdWJzdHJpbmcoNSkgXHJcblx0XHRcdFx0XHRcdFx0OiBzZXR0aW5ncy5kcmFmdFN0YXR1c1Byb3BlcnR5KVxyXG5cdFx0XHRcdFx0XHQ6ICdkcmFmdCc7XHJcblx0XHRcdFx0XHRcclxuXHRcdFx0XHRcdC8vIEFwcGx5IHJldmVyc2UgbG9naWMgaWYgZW5hYmxlZFxyXG5cdFx0XHRcdFx0bGV0IHRhcmdldFZhbHVlID0gZHJhZnQ7XHJcblx0XHRcdFx0XHRpZiAoc2V0dGluZ3MuZHJhZnRTdGF0dXNSZXZlcnNlKSB7XHJcblx0XHRcdFx0XHRcdHRhcmdldFZhbHVlID0gIWRyYWZ0O1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHJcblx0XHRcdFx0XHRhd2FpdCBwcm9jZXNzRmlsZUZyb250TWF0dGVyKHRoaXMuYXBwLCBmaWxlLCAoZnJvbnRtYXR0ZXIpID0+IHtcclxuXHRcdFx0XHRcdFx0ZnJvbnRtYXR0ZXJbY2xlYW5Db25maWdQcm9wZXJ0eV0gPSB0YXJnZXRWYWx1ZTtcclxuXHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHQvLyBGYWxsYmFjazogdXNlIGRlZmF1bHQgYmVoYXZpb3IgKHNldCBkcmFmdCBwcm9wZXJ0eSlcclxuXHRcdFx0XHRhd2FpdCBwcm9jZXNzRmlsZUZyb250TWF0dGVyKHRoaXMuYXBwLCBmaWxlLCAoZnJvbnRtYXR0ZXIpID0+IHtcclxuXHRcdFx0XHRcdGZyb250bWF0dGVyLmRyYWZ0ID0gZHJhZnQ7XHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdH1cclxuXHRcdH0pO1xyXG5cclxuXHRcdG5ldyBOb3RpY2UoYFNldCAke2ZpbGVzLmxlbmd0aH0gZmlsZSR7ZmlsZXMubGVuZ3RoICE9PSAxID8gJ3MnIDogJyd9IHRvICR7ZHJhZnQgPyAnZHJhZnQnIDogJ3B1Ymxpc2hlZCd9YCk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBBZGQgdGFncyB0byBtdWx0aXBsZSBmaWxlc1xyXG5cdCAqL1xyXG5cdGFzeW5jIGFkZFRhZ3MoZmlsZXM6IHN0cmluZ1tdLCB0YWdzOiBzdHJpbmdbXSk6IFByb21pc2U8dm9pZD4ge1xyXG5cdFx0Y29uc3QgcHJvcHMgPSBuZXcgTWFwPHN0cmluZywgTmV3UHJvcERhdGE+KCk7XHJcblx0XHRwcm9wcy5zZXQoJ3RhZ3MnLCB7XHJcblx0XHRcdHR5cGU6ICd0YWdzJyxcclxuXHRcdFx0ZGF0YTogdGFncyxcclxuXHRcdFx0b3ZlcndyaXRlOiBmYWxzZSxcclxuXHRcdFx0ZGVsaW1pdGVyOiAnLCcsXHJcblx0XHR9KTtcclxuXHJcblx0XHRhd2FpdCB0aGlzLmJhdGNoUHJvY2Vzc0ZpbGVzKGZpbGVzLCBhc3luYyAoZmlsZSkgPT4ge1xyXG5cdFx0XHRhd2FpdCBhZGRQcm9wZXJ0aWVzKHRoaXMuYXBwLCBmaWxlLCBwcm9wcywgZmFsc2UpO1xyXG5cdFx0fSk7XHJcblxyXG5cdFx0bmV3IE5vdGljZShgQWRkZWQgdGFncyB0byAke2ZpbGVzLmxlbmd0aH0gZmlsZSR7ZmlsZXMubGVuZ3RoICE9PSAxID8gJ3MnIDogJyd9YCk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBSZW1vdmUgdGFncyBmcm9tIG11bHRpcGxlIGZpbGVzXHJcblx0ICovXHJcblx0YXN5bmMgcmVtb3ZlVGFncyhmaWxlczogc3RyaW5nW10sIHRhZ3NUb1JlbW92ZTogc3RyaW5nW10pOiBQcm9taXNlPHZvaWQ+IHtcclxuXHRcdGF3YWl0IHRoaXMuYmF0Y2hQcm9jZXNzRmlsZXMoZmlsZXMsIGFzeW5jIChmaWxlKSA9PiB7XHJcblx0XHRcdGNvbnN0IGZyb250bWF0dGVyID0gYXdhaXQgZ2V0RmlsZUZyb250bWF0dGVyKHRoaXMuYXBwLCBmaWxlKTtcclxuXHRcdFx0XHJcblx0XHRcdGlmIChmcm9udG1hdHRlcj8udGFncykge1xyXG5cdFx0XHRcdGNvbnN0IGZtVGFncyA9IGZyb250bWF0dGVyLnRhZ3MgYXMgc3RyaW5nIHwgc3RyaW5nW107XHJcblx0XHRcdFx0Y29uc3QgY3VycmVudFRhZ3MgPSBBcnJheS5pc0FycmF5KGZtVGFncykgXHJcblx0XHRcdFx0XHQ/IGZtVGFncyBcclxuXHRcdFx0XHRcdDogW2ZtVGFnc107XHJcblx0XHRcdFx0XHJcblx0XHRcdFx0Y29uc3QgdXBkYXRlZFRhZ3MgPSBjdXJyZW50VGFncy5maWx0ZXIoKHRhZzogc3RyaW5nKSA9PiBcclxuXHRcdFx0XHRcdCF0YWdzVG9SZW1vdmUuaW5jbHVkZXModGFnKVxyXG5cdFx0XHRcdCk7XHJcblxyXG5cdFx0XHRcdGF3YWl0IHByb2Nlc3NGaWxlRnJvbnRNYXR0ZXIodGhpcy5hcHAsIGZpbGUsIChmbSkgPT4ge1xyXG5cdFx0XHRcdFx0aWYgKHVwZGF0ZWRUYWdzLmxlbmd0aCA+IDApIHtcclxuXHRcdFx0XHRcdFx0Zm0udGFncyA9IHVwZGF0ZWRUYWdzO1xyXG5cdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0Zm0udGFncyA9IHVuZGVmaW5lZDtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9KTtcclxuXHRcdFx0fVxyXG5cdFx0fSk7XHJcblxyXG5cdFx0bmV3IE5vdGljZShgUmVtb3ZlZCB0YWdzIGZyb20gJHtmaWxlcy5sZW5ndGh9IGZpbGUke2ZpbGVzLmxlbmd0aCAhPT0gMSA/ICdzJyA6ICcnfWApO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogU2V0IGEgcHJvcGVydHkgdmFsdWUgZm9yIG11bHRpcGxlIGZpbGVzXHJcblx0ICovXHJcblx0YXN5bmMgc2V0UHJvcGVydHkoZmlsZXM6IHN0cmluZ1tdLCBwcm9wZXJ0eTogc3RyaW5nLCB2YWx1ZTogdW5rbm93biwgcHJvcGVydHlUeXBlOiBzdHJpbmcgPSAndGV4dCcpOiBQcm9taXNlPHZvaWQ+IHtcclxuXHRcdC8vIFN0cmlwIFwibm90ZS5cIiBwcmVmaXggaWYgcHJlc2VudCAoQmFzZXMgdXNlcyBcIm5vdGUucHJvcGVydHlcIiBidXQgZnJvbnRtYXR0ZXIgdXNlcyBqdXN0IFwicHJvcGVydHlcIilcclxuXHRcdGNvbnN0IGNsZWFuUHJvcGVydHkgPSBwcm9wZXJ0eS5zdGFydHNXaXRoKCdub3RlLicpID8gcHJvcGVydHkuc3Vic3RyaW5nKDUpIDogcHJvcGVydHk7XHJcblx0XHRcclxuXHRcdGNvbnN0IHByb3BzID0gbmV3IE1hcDxzdHJpbmcsIE5ld1Byb3BEYXRhPigpO1xyXG5cdFx0cHJvcHMuc2V0KGNsZWFuUHJvcGVydHksIHtcclxuXHRcdFx0dHlwZTogcHJvcGVydHlUeXBlLFxyXG5cdFx0XHRkYXRhOiB2YWx1ZSBhcyBzdHJpbmcgfCBzdHJpbmdbXSB8IG51bGwsXHJcblx0XHRcdG92ZXJ3cml0ZTogdHJ1ZSxcclxuXHRcdFx0ZGVsaW1pdGVyOiAnLCcsXHJcblx0XHR9KTtcclxuXHJcblx0XHRhd2FpdCB0aGlzLmJhdGNoUHJvY2Vzc0ZpbGVzKGZpbGVzLCBhc3luYyAoZmlsZSkgPT4ge1xyXG5cdFx0XHRhd2FpdCBhZGRQcm9wZXJ0aWVzKHRoaXMuYXBwLCBmaWxlLCBwcm9wcywgdHJ1ZSk7XHJcblx0XHR9KTtcclxuXHJcblx0XHRuZXcgTm90aWNlKGBTZXQgJHtjbGVhblByb3BlcnR5fSBvbiAke2ZpbGVzLmxlbmd0aH0gZmlsZSR7ZmlsZXMubGVuZ3RoICE9PSAxID8gJ3MnIDogJyd9YCk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBSZW1vdmUgYSBwcm9wZXJ0eSBmcm9tIG11bHRpcGxlIGZpbGVzXHJcblx0ICovXHJcblx0YXN5bmMgcmVtb3ZlUHJvcGVydHkoZmlsZXM6IHN0cmluZ1tdLCBwcm9wZXJ0eTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XHJcblx0XHQvLyBTdHJpcCBcIm5vdGUuXCIgcHJlZml4IGlmIHByZXNlbnRcclxuXHRcdGNvbnN0IGNsZWFuUHJvcGVydHkgPSBwcm9wZXJ0eS5zdGFydHNXaXRoKCdub3RlLicpID8gcHJvcGVydHkuc3Vic3RyaW5nKDUpIDogcHJvcGVydHk7XHJcblx0XHRcclxuXHRcdGF3YWl0IHRoaXMuYmF0Y2hQcm9jZXNzRmlsZXMoZmlsZXMsIGFzeW5jIChmaWxlKSA9PiB7XHJcblx0XHRcdGF3YWl0IHJlbW92ZVByb3BlcnRpZXModGhpcy5hcHAsIGZpbGUsIFtjbGVhblByb3BlcnR5XSk7XHJcblx0XHR9KTtcclxuXHJcblx0XHRuZXcgTm90aWNlKGBSZW1vdmVkICR7Y2xlYW5Qcm9wZXJ0eX0gZnJvbSAke2ZpbGVzLmxlbmd0aH0gZmlsZSR7ZmlsZXMubGVuZ3RoICE9PSAxID8gJ3MnIDogJyd9YCk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBCYXRjaCBwcm9jZXNzIGZpbGVzIHdpdGggcHJvZ3Jlc3MgaW5kaWNhdGlvblxyXG5cdCAqL1xyXG5cdHByaXZhdGUgYXN5bmMgYmF0Y2hQcm9jZXNzRmlsZXMoXHJcblx0XHRmaWxlczogc3RyaW5nW10sXHJcblx0XHRwcm9jZXNzb3I6IChmaWxlOiBURmlsZSkgPT4gUHJvbWlzZTx2b2lkPlxyXG5cdCk6IFByb21pc2U8dm9pZD4ge1xyXG5cdFx0bGV0IHByb2Nlc3NlZCA9IDA7XHJcblx0XHRjb25zdCB0b3RhbCA9IGZpbGVzLmxlbmd0aDtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGZpbGVQYXRoIG9mIGZpbGVzKSB7XHJcblx0XHRcdGNvbnN0IGZpbGUgPSB0aGlzLmFwcC52YXVsdC5nZXRBYnN0cmFjdEZpbGVCeVBhdGgoZmlsZVBhdGgpO1xyXG5cdFx0XHRpZiAoZmlsZSBpbnN0YW5jZW9mIFRGaWxlKSB7XHJcblx0XHRcdFx0dHJ5IHtcclxuXHRcdFx0XHRcdGF3YWl0IHByb2Nlc3NvcihmaWxlKTtcclxuXHRcdFx0XHRcdHByb2Nlc3NlZCsrO1xyXG5cdFx0XHRcdH0gY2F0Y2ggKGVycm9yKSB7XHJcblx0XHRcdFx0XHRjb25zb2xlLmVycm9yKGBFcnJvciBwcm9jZXNzaW5nICR7ZmlsZVBhdGh9OmAsIGVycm9yKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHRpZiAocHJvY2Vzc2VkIDwgdG90YWwpIHtcclxuXHRcdFx0bmV3IE5vdGljZShgUHJvY2Vzc2VkICR7cHJvY2Vzc2VkfSBvZiAke3RvdGFsfSBmaWxlc2ApO1xyXG5cdFx0fVxyXG5cdH1cclxufVxyXG5cclxuXHJcbiIsICIvKipcclxuICogRnJvbnRtYXR0ZXIgbWFuaXB1bGF0aW9uIHV0aWxpdGllc1xyXG4gKiBQb3J0ZWQgZnJvbSBNdWx0aS1Qcm9wZXJ0aWVzIHBsdWdpblxyXG4gKiBVcGRhdGVkIHRvIHN1cHBvcnQgTURYIGZpbGVzIHZpYSB1bmlmaWVkIGZyb250bWF0dGVyIGhlbHBlclxyXG4gKi9cclxuXHJcbmltcG9ydCB7IEFwcCwgVEZpbGUgfSBmcm9tICdvYnNpZGlhbic7XHJcbmltcG9ydCB7IHByb2Nlc3NGaWxlRnJvbnRNYXR0ZXIgfSBmcm9tICcuL2Zyb250bWF0dGVyLWhlbHBlcic7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIE5ld1Byb3BEYXRhIHtcclxuXHR0eXBlOiBzdHJpbmc7XHJcblx0ZGF0YTogc3RyaW5nIHwgc3RyaW5nW10gfCBudWxsO1xyXG5cdG92ZXJ3cml0ZTogYm9vbGVhbjtcclxuXHRkZWxpbWl0ZXI6IHN0cmluZztcclxufVxyXG5cclxuLyoqXHJcbiAqIEFkZCBwcm9wZXJ0aWVzIGZyb20gYSBNYXAgdG8gYSBub3RlLlxyXG4gKiBXb3JrcyBmb3IgYm90aCAubWQgYW5kIC5tZHggZmlsZXMuXHJcbiAqL1xyXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYWRkUHJvcGVydGllcyhcclxuXHRhcHA6IEFwcCxcclxuXHRmaWxlOiBURmlsZSxcclxuXHRwcm9wczogTWFwPHN0cmluZywgTmV3UHJvcERhdGE+LFxyXG5cdG92ZXJ3cml0ZTogYm9vbGVhblxyXG4pOiBQcm9taXNlPHZvaWQ+IHtcclxuXHRhd2FpdCBwcm9jZXNzRmlsZUZyb250TWF0dGVyKGFwcCwgZmlsZSwgKGZyb250bWF0dGVyKSA9PiB7XHJcblx0XHRmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBwcm9wcykge1xyXG5cdFx0XHQvLyBUYWdzIHNob3VsZCBhbHdheXMgYmUgYSBMaXN0LCBldmVuIGlmIHRoZXJlIGlzIGp1c3Qgb25lIHRhZy5cclxuXHRcdFx0aWYgKFxyXG5cdFx0XHRcdGtleSA9PT0gJ3RhZ3MnICYmXHJcblx0XHRcdFx0IU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChmcm9udG1hdHRlciwgJ3RhZ3MnKSAmJlxyXG5cdFx0XHRcdCFBcnJheS5pc0FycmF5KHZhbHVlLmRhdGEpXHJcblx0XHRcdCkge1xyXG5cdFx0XHRcdGZyb250bWF0dGVyW2tleV0gPSBbdmFsdWUuZGF0YV07XHJcblx0XHRcdFx0Y29udGludWU7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGlmICghZnJvbnRtYXR0ZXJba2V5XSB8fCBvdmVyd3JpdGUpIHtcclxuXHRcdFx0XHRmcm9udG1hdHRlcltrZXldID0gdmFsdWUuZGF0YTtcclxuXHRcdFx0XHRjb250aW51ZTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Ly8gQ29tcGFyZSB0eXBlcyB0byBzZWUgaWYgdGhleSBjYW4gYmUgYXBwZW5kZWQuXHJcblx0XHRcdGNvbnN0IHR5cGUxID0gdmFsdWUudHlwZTtcclxuXHRcdFx0Y29uc3QgZXhpc3RpbmdWYWx1ZSA9IGZyb250bWF0dGVyW2tleV07XHJcblx0XHRcdGNvbnN0IHR5cGUyID0gQXJyYXkuaXNBcnJheShleGlzdGluZ1ZhbHVlKSA/ICdsaXN0JyA6IHR5cGVvZiBleGlzdGluZ1ZhbHVlID09PSAnbnVtYmVyJyA/ICdudW1iZXInIDogdHlwZW9mIGV4aXN0aW5nVmFsdWUgPT09ICdib29sZWFuJyA/ICdjaGVja2JveCcgOiAndGV4dCc7XHJcblxyXG5cdFx0XHRpZiAoY2FuQmVBcHBlbmRlZCh0eXBlMSwgdHlwZTIpKSB7XHJcblx0XHRcdFx0aWYgKGZyb250bWF0dGVyW2tleV0gPT09IHZhbHVlLmRhdGEpIGNvbnRpbnVlOyAvLyBMZWF2ZSBpZGVudGljYWwgdmFsdWVzIGFsb25lLlxyXG5cdFx0XHRcdGlmICghdmFsdWUuZGF0YSkgY29udGludWU7IC8vIERvIG5vdCBtZXJnZSBlbXB0eSB2YWx1ZXMuXHJcblxyXG5cdFx0XHRcdGNvbnN0IGFyciA9IG1lcmdlSW50b0FycmF5cyhmcm9udG1hdHRlcltrZXldIGFzIHN0cmluZyB8IHN0cmluZ1tdLCB2YWx1ZS5kYXRhKTtcclxuXHRcdFx0XHRmcm9udG1hdHRlcltrZXldID0gYXJyO1xyXG5cdFx0XHRcdGNvbnRpbnVlO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdGZyb250bWF0dGVyW2tleV0gPSB2YWx1ZS5kYXRhO1xyXG5cdFx0XHRcdGNvbnRpbnVlO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fSk7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBSZW1vdmUgcHJvcGVydGllcyBmcm9tIGEgbm90ZS5cclxuICogV29ya3MgZm9yIGJvdGggLm1kIGFuZCAubWR4IGZpbGVzLlxyXG4gKi9cclxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlbW92ZVByb3BlcnRpZXMoYXBwOiBBcHAsIGZpbGU6IFRGaWxlLCBwcm9wczogc3RyaW5nW10pOiBQcm9taXNlPHZvaWQ+IHtcclxuXHRhd2FpdCBwcm9jZXNzRmlsZUZyb250TWF0dGVyKGFwcCwgZmlsZSwgKGZyb250bWF0dGVyKSA9PiB7XHJcblx0XHRmb3IgKGNvbnN0IHByb3Agb2YgcHJvcHMpIHtcclxuXHRcdFx0ZnJvbnRtYXR0ZXJbcHJvcF0gPSB1bmRlZmluZWQ7IC8vIFwiSGFja3lcIiB3b3JrYXJvdW5kLCBjb21tZW50ZWQgY29kZSB3aWxsIHdvcmsgaW4gbGF0ZXIgdmVyc2lvbi5cIlxyXG5cdFx0fVxyXG5cdH0pO1xyXG59XHJcblxyXG4vKipcclxuICogQ2hlY2sgaWYgdHdvIHR5cGVzIGNhbiBiZSBhcHBlbmRlZCB0byBlYWNoIG90aGVyLlxyXG4gKi9cclxuZnVuY3Rpb24gY2FuQmVBcHBlbmRlZChzdHIxOiBzdHJpbmcsIHN0cjI6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG5cdGNvbnN0IGFyciA9IFsnbnVtYmVyJywgJ2RhdGUnLCAnZGF0ZXRpbWUnLCAnY2hlY2tib3gnXTsgLy8gVGhlc2UgdmFsdWVzIHNob3VsZCBub3QgYmUgYXBwZW5kZWQuXHJcblx0aWYgKGFyci5pbmNsdWRlcyhzdHIxKSB8fCBhcnIuaW5jbHVkZXMoc3RyMikpIHJldHVybiBmYWxzZTtcclxuXHRyZXR1cm4gdHJ1ZTtcclxufVxyXG5cclxuLyoqXHJcbiAqIENvbnZlcnQgc3RyaW5ncyBhbmQgYXJyYXlzIGludG8gc2luZ2xlIGFycmF5LlxyXG4gKi9cclxuZnVuY3Rpb24gbWVyZ2VJbnRvQXJyYXlzKC4uLmFyZ3M6IChzdHJpbmcgfCBzdHJpbmdbXSlbXSk6IHN0cmluZ1tdIHtcclxuXHRjb25zdCBhcnJheXMgPSBhcmdzLm1hcCgoYXJnKSA9PiAoQXJyYXkuaXNBcnJheShhcmcpID8gYXJnIDogW2FyZ10pKTtcclxuXHJcblx0Ly8gRmxhdHRlbiB0aGUgYXJyYXlcclxuXHRjb25zdCBmbGF0dGVuZWQgPSBhcnJheXMuZmxhdCgpO1xyXG5cclxuXHQvLyBSZW1vdmUgZHVwbGljYXRlcyB1c2luZyBTZXQgYW5kIHNwcmVhZCBpdCBpbnRvIGFuIGFycmF5XHJcblx0Y29uc3QgdW5pcXVlID0gWy4uLm5ldyBTZXQoZmxhdHRlbmVkKV07XHJcblxyXG5cdHJldHVybiB1bmlxdWU7XHJcbn1cclxuXHJcblxyXG4iLCAiLyoqXHJcbiAqIE1hbmFnZSBUYWdzIE1vZGFsXHJcbiAqIE1vZGFsIGZvciBhZGRpbmcvcmVtb3ZpbmcgdGFncyBmcm9tIHNlbGVjdGVkIGZpbGVzXHJcbiAqL1xyXG5cclxuaW1wb3J0IHsgTW9kYWwsIEFwcCwgU2V0dGluZywgVEZpbGUgfSBmcm9tICdvYnNpZGlhbic7XHJcbmltcG9ydCB7IEJ1bGtPcGVyYXRpb25zIH0gZnJvbSAnLi4vdXRpbHMvYnVsay1vcGVyYXRpb25zJztcclxuaW1wb3J0IHsgZ2V0RmlsZUZyb250bWF0dGVyIH0gZnJvbSAnLi4vdXRpbHMvZnJvbnRtYXR0ZXItaGVscGVyJztcclxuXHJcbmV4cG9ydCBjbGFzcyBNYW5hZ2VUYWdzTW9kYWwgZXh0ZW5kcyBNb2RhbCB7XHJcblx0cHJpdmF0ZSBmaWxlczogc3RyaW5nW107XHJcblx0cHJpdmF0ZSB0YWdzVG9BZGQ6IHN0cmluZyA9ICcnO1xyXG5cdHByaXZhdGUgdGFnc1RvUmVtb3ZlOiBTZXQ8c3RyaW5nPiA9IG5ldyBTZXQoKTtcclxuXHRwcml2YXRlIGJ1bGtPcHM6IEJ1bGtPcGVyYXRpb25zO1xyXG5cclxuXHRjb25zdHJ1Y3RvcihhcHA6IEFwcCwgZmlsZXM6IHN0cmluZ1tdKSB7XHJcblx0XHRzdXBlcihhcHApO1xyXG5cdFx0dGhpcy5maWxlcyA9IGZpbGVzO1xyXG5cdFx0dGhpcy5idWxrT3BzID0gbmV3IEJ1bGtPcGVyYXRpb25zKGFwcCk7XHJcblx0fVxyXG5cclxuXHRvbk9wZW4oKTogdm9pZCB7XHJcblx0XHRjb25zdCB7IGNvbnRlbnRFbCB9ID0gdGhpcztcclxuXHJcblx0XHRjb250ZW50RWwuZW1wdHkoKTtcclxuXHRcdG5ldyBTZXR0aW5nKGNvbnRlbnRFbCkuc2V0TmFtZSgnTWFuYWdlIHRhZ3MnKS5zZXRIZWFkaW5nKCk7XHJcblx0XHRjb250ZW50RWwuY3JlYXRlRWwoJ3AnLCB7IHRleHQ6IGBNYW5hZ2luZyB0YWdzIGZvciAke3RoaXMuZmlsZXMubGVuZ3RofSBmaWxlJHt0aGlzLmZpbGVzLmxlbmd0aCAhPT0gMSA/ICdzJyA6ICcnfWAgfSk7XHJcblxyXG5cdFx0Ly8gQWRkIHRhZ3MgaW5wdXRcclxuXHRcdG5ldyBTZXR0aW5nKGNvbnRlbnRFbClcclxuXHRcdFx0LnNldE5hbWUoJ0FkZCB0YWdzJylcclxuXHRcdFx0LnNldERlc2MoJ0VudGVyIHRhZ3MgdG8gYWRkIChjb21tYS1zZXBhcmF0ZWQpLicpXHJcblx0XHRcdC5hZGRUZXh0KHRleHQgPT4ge1xyXG5cdFx0XHRcdHRleHRcclxuXHRcdFx0XHRcdC8vIEZhbHNlIHBvc2l0aXZlOiBQbGFjZWhvbGRlciB0ZXh0IHdpdGggY29kZSBleGFtcGxlcywgbm90IFVJIHRleHRcclxuXHRcdFx0XHRcdC5zZXRQbGFjZWhvbGRlcigndGFnMSwgdGFnMiwgdGFnMycpXHJcblx0XHRcdFx0XHQub25DaGFuZ2UodmFsdWUgPT4ge1xyXG5cdFx0XHRcdFx0XHR0aGlzLnRhZ3NUb0FkZCA9IHZhbHVlO1xyXG5cdFx0XHRcdFx0fSk7XHJcblx0XHRcdH0pO1xyXG5cclxuXHRcdC8vIFJlbW92ZSB0YWdzIHNlY3Rpb25cclxuXHRcdGNvbnRlbnRFbC5jcmVhdGVFbCgnaDMnLCB7IHRleHQ6ICdSZW1vdmUgdGFncycgfSk7IC8vIEtlZXAgaDMgZm9yIHNlY3Rpb24gaGVhZGluZ1xyXG5cdFx0Y29uc3QgcmVtb3ZlQ29udGFpbmVyID0gY29udGVudEVsLmNyZWF0ZURpdigpO1xyXG5cclxuXHRcdC8vIEdldCBhbGwgdW5pcXVlIHRhZ3MgZnJvbSBzZWxlY3RlZCBmaWxlc1xyXG5cdFx0Y29uc3QgYWxsVGFncyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xyXG5cdFx0Zm9yIChjb25zdCBmaWxlUGF0aCBvZiB0aGlzLmZpbGVzKSB7XHJcblx0XHRcdGNvbnN0IGZpbGUgPSB0aGlzLmFwcC52YXVsdC5nZXRBYnN0cmFjdEZpbGVCeVBhdGgoZmlsZVBhdGgpO1xyXG5cdFx0XHRpZiAoZmlsZSBpbnN0YW5jZW9mIFRGaWxlKSB7XHJcblx0XHRcdFx0Ly8gRm9yIE1EWCBmaWxlcywgd2UnbGwgbG9hZCB0YWdzIGFzeW5jaHJvbm91c2x5XHJcblx0XHRcdFx0aWYgKGZpbGUuZXh0ZW5zaW9uID09PSAnbWR4Jykge1xyXG5cdFx0XHRcdFx0dm9pZCAoYXN5bmMgKCkgPT4ge1xyXG5cdFx0XHRcdFx0XHRjb25zdCBmcm9udG1hdHRlciA9IGF3YWl0IGdldEZpbGVGcm9udG1hdHRlcih0aGlzLmFwcCwgZmlsZSk7XHJcblx0XHRcdFx0XHRcdGlmIChmcm9udG1hdHRlcj8udGFncykge1xyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IHRhZ3MgPSBBcnJheS5pc0FycmF5KGZyb250bWF0dGVyLnRhZ3MpXHJcblx0XHRcdFx0XHRcdFx0XHQ/IChmcm9udG1hdHRlci50YWdzIGFzIHN0cmluZ1tdKVxyXG5cdFx0XHRcdFx0XHRcdFx0OiBbZnJvbnRtYXR0ZXIudGFncyBhcyBzdHJpbmddO1xyXG5cdFx0XHRcdFx0XHRcdHRhZ3MuZm9yRWFjaCh0YWcgPT4ge1xyXG5cdFx0XHRcdFx0XHRcdFx0aWYgKCFhbGxUYWdzLmhhcyh0YWcpKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdGFsbFRhZ3MuYWRkKHRhZyk7XHJcblx0XHRcdFx0XHRcdFx0XHRcdC8vIEFkZCBjaGVja2JveCBmb3IgdGhpcyB0YWcgaWYgbW9kYWwgaXMgc3RpbGwgb3BlblxyXG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAodGhpcy5jb250ZW50RWwgJiYgdGhpcy5jb250ZW50RWwuaXNDb25uZWN0ZWQgJiYgcmVtb3ZlQ29udGFpbmVyLmlzQ29ubmVjdGVkKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5hZGRUYWdDaGVja2JveChyZW1vdmVDb250YWluZXIsIHRhZyk7XHJcblx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fSkoKTtcclxuXHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0Ly8gRm9yIC5tZCBmaWxlcywgdXNlIG1ldGFkYXRhIGNhY2hlIChzeW5jaHJvbm91cylcclxuXHRcdFx0XHRcdGNvbnN0IG1ldGFkYXRhID0gdGhpcy5hcHAubWV0YWRhdGFDYWNoZS5nZXRGaWxlQ2FjaGUoZmlsZSk7XHJcblx0XHRcdFx0XHRjb25zdCBmcm9udG1hdHRlciA9IG1ldGFkYXRhPy5mcm9udG1hdHRlcjtcclxuXHRcdFx0XHRcdGlmIChmcm9udG1hdHRlcj8udGFncykge1xyXG5cdFx0XHRcdFx0XHRjb25zdCB0YWdzID0gQXJyYXkuaXNBcnJheShmcm9udG1hdHRlci50YWdzKVxyXG5cdFx0XHRcdFx0XHRcdD8gKGZyb250bWF0dGVyLnRhZ3MgYXMgc3RyaW5nW10pXHJcblx0XHRcdFx0XHRcdFx0OiBbZnJvbnRtYXR0ZXIudGFncyBhcyBzdHJpbmddO1xyXG5cdFx0XHRcdFx0XHR0YWdzLmZvckVhY2godGFnID0+IGFsbFRhZ3MuYWRkKHRhZykpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdC8vIENyZWF0ZSBjaGVja2JveGVzIGZvciBlYWNoIHRhZ1xyXG5cdFx0Zm9yIChjb25zdCB0YWcgb2YgQXJyYXkuZnJvbShhbGxUYWdzKS5zb3J0KCkpIHtcclxuXHRcdFx0bmV3IFNldHRpbmcocmVtb3ZlQ29udGFpbmVyKVxyXG5cdFx0XHRcdC5zZXROYW1lKHRhZylcclxuXHRcdFx0XHQuYWRkVG9nZ2xlKHRvZ2dsZSA9PiB7XHJcblx0XHRcdFx0XHR0b2dnbGVcclxuXHRcdFx0XHRcdFx0LnNldFZhbHVlKHRoaXMudGFnc1RvUmVtb3ZlLmhhcyh0YWcpKVxyXG5cdFx0XHRcdFx0XHQub25DaGFuZ2UodmFsdWUgPT4ge1xyXG5cdFx0XHRcdFx0XHRcdGlmICh2YWx1ZSkge1xyXG5cdFx0XHRcdFx0XHRcdFx0dGhpcy50YWdzVG9SZW1vdmUuYWRkKHRhZyk7XHJcblx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHRcdHRoaXMudGFnc1RvUmVtb3ZlLmRlbGV0ZSh0YWcpO1xyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0fSk7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gQnV0dG9uc1xyXG5cdFx0Y29uc3QgYnV0dG9uQ29udGFpbmVyID0gY29udGVudEVsLmNyZWF0ZURpdigpO1xyXG5cdFx0YnV0dG9uQ29udGFpbmVyLmFkZENsYXNzKCdiYXNlcy1jbXMtbW9kYWwtYnV0dG9uLWNvbnRhaW5lcicpO1xyXG5cclxuXHRcdGNvbnN0IGNhbmNlbEJ0biA9IGJ1dHRvbkNvbnRhaW5lci5jcmVhdGVFbCgnYnV0dG9uJyk7XHJcblx0XHRjYW5jZWxCdG4uc2V0VGV4dCgnQ2FuY2VsJyk7XHJcblx0XHRjYW5jZWxCdG4uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB0aGlzLmNsb3NlKCkpO1xyXG5cclxuXHRcdGNvbnN0IGFwcGx5QnRuID0gYnV0dG9uQ29udGFpbmVyLmNyZWF0ZUVsKCdidXR0b24nKTtcclxuXHRcdGFwcGx5QnRuLnNldFRleHQoJ0FwcGx5Jyk7XHJcblx0XHRhcHBseUJ0bi5hZGRDbGFzcygnbW9kLWN0YScpO1xyXG5cdFx0YXBwbHlCdG4uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB7XHJcblx0XHRcdHZvaWQgKGFzeW5jICgpID0+IHtcclxuXHRcdFx0XHRhd2FpdCB0aGlzLmFwcGx5Q2hhbmdlcygpO1xyXG5cdFx0XHRcdHRoaXMuY2xvc2UoKTtcclxuXHRcdFx0fSkoKTtcclxuXHRcdH0pO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBhZGRUYWdDaGVja2JveChjb250YWluZXI6IEhUTUxFbGVtZW50LCB0YWc6IHN0cmluZyk6IHZvaWQge1xyXG5cdFx0bmV3IFNldHRpbmcoY29udGFpbmVyKVxyXG5cdFx0XHQuc2V0TmFtZSh0YWcpXHJcblx0XHRcdC5hZGRUb2dnbGUodG9nZ2xlID0+IHtcclxuXHRcdFx0XHR0b2dnbGVcclxuXHRcdFx0XHRcdC5zZXRWYWx1ZSh0aGlzLnRhZ3NUb1JlbW92ZS5oYXModGFnKSlcclxuXHRcdFx0XHRcdC5vbkNoYW5nZSh2YWx1ZSA9PiB7XHJcblx0XHRcdFx0XHRcdGlmICh2YWx1ZSkge1xyXG5cdFx0XHRcdFx0XHRcdHRoaXMudGFnc1RvUmVtb3ZlLmFkZCh0YWcpO1xyXG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRcdHRoaXMudGFnc1RvUmVtb3ZlLmRlbGV0ZSh0YWcpO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9KTtcclxuXHRcdFx0fSk7XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIGFzeW5jIGFwcGx5Q2hhbmdlcygpOiBQcm9taXNlPHZvaWQ+IHtcclxuXHRcdC8vIEFkZCB0YWdzXHJcblx0XHRpZiAodGhpcy50YWdzVG9BZGQudHJpbSgpKSB7XHJcblx0XHRcdGNvbnN0IHRhZ3NUb0FkZCA9IHRoaXMudGFnc1RvQWRkXHJcblx0XHRcdFx0LnNwbGl0KCcsJylcclxuXHRcdFx0XHQubWFwKHQgPT4gdC50cmltKCkpXHJcblx0XHRcdFx0LmZpbHRlcih0ID0+IHQubGVuZ3RoID4gMCk7XHJcblx0XHRcdGlmICh0YWdzVG9BZGQubGVuZ3RoID4gMCkge1xyXG5cdFx0XHRcdGF3YWl0IHRoaXMuYnVsa09wcy5hZGRUYWdzKHRoaXMuZmlsZXMsIHRhZ3NUb0FkZCk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHQvLyBSZW1vdmUgdGFnc1xyXG5cdFx0aWYgKHRoaXMudGFnc1RvUmVtb3ZlLnNpemUgPiAwKSB7XHJcblx0XHRcdGF3YWl0IHRoaXMuYnVsa09wcy5yZW1vdmVUYWdzKHRoaXMuZmlsZXMsIEFycmF5LmZyb20odGhpcy50YWdzVG9SZW1vdmUpKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdG9uQ2xvc2UoKTogdm9pZCB7XHJcblx0XHRjb25zdCB7IGNvbnRlbnRFbCB9ID0gdGhpcztcclxuXHRcdGNvbnRlbnRFbC5lbXB0eSgpO1xyXG5cdH1cclxufVxyXG5cclxuXHJcbiIsICIvKipcclxuICogU2V0IFByb3BlcnR5IE1vZGFsXHJcbiAqIE1vZGFsIGZvciBzZXR0aW5nIGEgcHJvcGVydHkgdmFsdWUgb24gc2VsZWN0ZWQgZmlsZXNcclxuICovXHJcblxyXG5pbXBvcnQgeyBNb2RhbCwgQXBwLCBTZXR0aW5nIH0gZnJvbSAnb2JzaWRpYW4nO1xyXG5pbXBvcnQgeyBCdWxrT3BlcmF0aW9ucyB9IGZyb20gJy4uL3V0aWxzL2J1bGstb3BlcmF0aW9ucyc7XHJcblxyXG5leHBvcnQgY2xhc3MgU2V0UHJvcGVydHlNb2RhbCBleHRlbmRzIE1vZGFsIHtcclxuXHRwcml2YXRlIGZpbGVzOiBzdHJpbmdbXTtcclxuXHRwcml2YXRlIHByb3BlcnR5TmFtZTogc3RyaW5nID0gJyc7XHJcblx0cHJpdmF0ZSBwcm9wZXJ0eVZhbHVlOiBzdHJpbmcgPSAnJztcclxuXHRwcml2YXRlIHByb3BlcnR5VHlwZTogc3RyaW5nID0gJ3RleHQnO1xyXG5cdHByaXZhdGUgYnVsa09wczogQnVsa09wZXJhdGlvbnM7XHJcblxyXG5cdGNvbnN0cnVjdG9yKGFwcDogQXBwLCBmaWxlczogc3RyaW5nW10pIHtcclxuXHRcdHN1cGVyKGFwcCk7XHJcblx0XHR0aGlzLmZpbGVzID0gZmlsZXM7XHJcblx0XHR0aGlzLmJ1bGtPcHMgPSBuZXcgQnVsa09wZXJhdGlvbnMoYXBwKTtcclxuXHR9XHJcblxyXG5cdG9uT3BlbigpOiB2b2lkIHtcclxuXHRcdGNvbnN0IHsgY29udGVudEVsIH0gPSB0aGlzO1xyXG5cclxuXHRcdGNvbnRlbnRFbC5lbXB0eSgpO1xyXG5cdFx0bmV3IFNldHRpbmcoY29udGVudEVsKS5zZXROYW1lKCdTZXQgcHJvcGVydHknKS5zZXRIZWFkaW5nKCk7XHJcblx0XHRjb250ZW50RWwuY3JlYXRlRWwoJ3AnLCB7IHRleHQ6IGBTZXR0aW5nIHByb3BlcnR5IG9uICR7dGhpcy5maWxlcy5sZW5ndGh9IGZpbGUke3RoaXMuZmlsZXMubGVuZ3RoICE9PSAxID8gJ3MnIDogJyd9YCB9KTtcclxuXHJcblx0XHQvLyBQcm9wZXJ0eSBuYW1lXHJcblx0XHRuZXcgU2V0dGluZyhjb250ZW50RWwpXHJcblx0XHRcdC5zZXROYW1lKCdQcm9wZXJ0eSBuYW1lJylcclxuXHRcdFx0LnNldERlc2MoJ0VudGVyIHRoZSBwcm9wZXJ0eSBuYW1lIHRvIHNldC4nKVxyXG5cdFx0XHQuYWRkVGV4dCh0ZXh0ID0+IHtcclxuXHRcdFx0XHR0ZXh0XHJcblx0XHRcdFx0XHQuc2V0UGxhY2Vob2xkZXIoJ0VudGVyIG5hbWUnKVxyXG5cdFx0XHRcdFx0Lm9uQ2hhbmdlKHZhbHVlID0+IHtcclxuXHRcdFx0XHRcdFx0dGhpcy5wcm9wZXJ0eU5hbWUgPSB2YWx1ZTtcclxuXHRcdFx0XHRcdH0pO1xyXG5cdFx0XHR9KTtcclxuXHJcblx0XHQvLyBQcm9wZXJ0eSB0eXBlXHJcblx0XHRuZXcgU2V0dGluZyhjb250ZW50RWwpXHJcblx0XHRcdC5zZXROYW1lKCdQcm9wZXJ0eSB0eXBlJylcclxuXHRcdFx0LnNldERlc2MoJ1NlbGVjdCB0aGUgcHJvcGVydHkgdHlwZS4nKVxyXG5cdFx0XHQuYWRkRHJvcGRvd24oZHJvcGRvd24gPT4ge1xyXG5cdFx0XHRcdGRyb3Bkb3duXHJcblx0XHRcdFx0XHQuYWRkT3B0aW9uKCd0ZXh0JywgJ1RleHQnKVxyXG5cdFx0XHRcdFx0LmFkZE9wdGlvbignbnVtYmVyJywgJ051bWJlcicpXHJcblx0XHRcdFx0XHQuYWRkT3B0aW9uKCdjaGVja2JveCcsICdDaGVja2JveCcpXHJcblx0XHRcdFx0XHQuYWRkT3B0aW9uKCdkYXRlJywgJ0RhdGUnKVxyXG5cdFx0XHRcdFx0LnNldFZhbHVlKHRoaXMucHJvcGVydHlUeXBlKVxyXG5cdFx0XHRcdFx0Lm9uQ2hhbmdlKHZhbHVlID0+IHtcclxuXHRcdFx0XHRcdFx0dGhpcy5wcm9wZXJ0eVR5cGUgPSB2YWx1ZTtcclxuXHRcdFx0XHRcdH0pO1xyXG5cdFx0XHR9KTtcclxuXHJcblx0XHQvLyBQcm9wZXJ0eSB2YWx1ZVxyXG5cdFx0bmV3IFNldHRpbmcoY29udGVudEVsKVxyXG5cdFx0XHQuc2V0TmFtZSgnUHJvcGVydHkgdmFsdWUnKVxyXG5cdFx0XHQuc2V0RGVzYygnRW50ZXIgdGhlIHByb3BlcnR5IHZhbHVlLicpXHJcblx0XHRcdC5hZGRUZXh0KHRleHQgPT4ge1xyXG5cdFx0XHRcdHRleHRcclxuXHRcdFx0XHRcdC5zZXRQbGFjZWhvbGRlcignRW50ZXIgdmFsdWUnKVxyXG5cdFx0XHRcdFx0Lm9uQ2hhbmdlKHZhbHVlID0+IHtcclxuXHRcdFx0XHRcdFx0dGhpcy5wcm9wZXJ0eVZhbHVlID0gdmFsdWU7XHJcblx0XHRcdFx0XHR9KTtcclxuXHRcdFx0fSk7XHJcblxyXG5cdFx0Ly8gQnV0dG9uc1xyXG5cdFx0Y29uc3QgYnV0dG9uQ29udGFpbmVyID0gY29udGVudEVsLmNyZWF0ZURpdigpO1xyXG5cdFx0YnV0dG9uQ29udGFpbmVyLmFkZENsYXNzKCdiYXNlcy1jbXMtbW9kYWwtYnV0dG9uLWNvbnRhaW5lcicpO1xyXG5cclxuXHRcdGNvbnN0IGNhbmNlbEJ0biA9IGJ1dHRvbkNvbnRhaW5lci5jcmVhdGVFbCgnYnV0dG9uJyk7XHJcblx0XHRjYW5jZWxCdG4uc2V0VGV4dCgnQ2FuY2VsJyk7XHJcblx0XHRjYW5jZWxCdG4uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB0aGlzLmNsb3NlKCkpO1xyXG5cclxuXHRcdGNvbnN0IGFwcGx5QnRuID0gYnV0dG9uQ29udGFpbmVyLmNyZWF0ZUVsKCdidXR0b24nKTtcclxuXHRcdGFwcGx5QnRuLnNldFRleHQoJ0FwcGx5Jyk7XHJcblx0XHRhcHBseUJ0bi5hZGRDbGFzcygnbW9kLWN0YScpO1xyXG5cdFx0YXBwbHlCdG4uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB7XHJcblx0XHRcdHZvaWQgKGFzeW5jICgpID0+IHtcclxuXHRcdFx0XHRpZiAodGhpcy5wcm9wZXJ0eU5hbWUgJiYgdGhpcy5wcm9wZXJ0eVZhbHVlKSB7XHJcblx0XHRcdFx0XHRhd2FpdCB0aGlzLmFwcGx5Q2hhbmdlcygpO1xyXG5cdFx0XHRcdFx0dGhpcy5jbG9zZSgpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSkoKTtcclxuXHRcdH0pO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBhc3luYyBhcHBseUNoYW5nZXMoKTogUHJvbWlzZTx2b2lkPiB7XHJcblx0XHRsZXQgdmFsdWU6IHVua25vd24gPSB0aGlzLnByb3BlcnR5VmFsdWU7XHJcblxyXG5cdFx0Ly8gQ29udmVydCB2YWx1ZSBiYXNlZCBvbiB0eXBlXHJcblx0XHRpZiAodGhpcy5wcm9wZXJ0eVR5cGUgPT09ICdudW1iZXInKSB7XHJcblx0XHRcdHZhbHVlID0gTnVtYmVyKHRoaXMucHJvcGVydHlWYWx1ZSk7XHJcblx0XHR9IGVsc2UgaWYgKHRoaXMucHJvcGVydHlUeXBlID09PSAnY2hlY2tib3gnKSB7XHJcblx0XHRcdHZhbHVlID0gdGhpcy5wcm9wZXJ0eVZhbHVlLnRvTG93ZXJDYXNlKCkgPT09ICd0cnVlJyB8fCB0aGlzLnByb3BlcnR5VmFsdWUgPT09ICcxJztcclxuXHRcdH0gZWxzZSBpZiAodGhpcy5wcm9wZXJ0eVR5cGUgPT09ICdkYXRlJykge1xyXG5cdFx0XHR2YWx1ZSA9IHRoaXMucHJvcGVydHlWYWx1ZTsgLy8gS2VlcCBhcyBzdHJpbmcgZm9yIGRhdGVcclxuXHRcdH1cclxuXHJcblx0XHRhd2FpdCB0aGlzLmJ1bGtPcHMuc2V0UHJvcGVydHkodGhpcy5maWxlcywgdGhpcy5wcm9wZXJ0eU5hbWUsIHZhbHVlLCB0aGlzLnByb3BlcnR5VHlwZSk7XHJcblx0fVxyXG5cclxuXHRvbkNsb3NlKCk6IHZvaWQge1xyXG5cdFx0Y29uc3QgeyBjb250ZW50RWwgfSA9IHRoaXM7XHJcblx0XHRjb250ZW50RWwuZW1wdHkoKTtcclxuXHR9XHJcbn1cclxuXHJcblxyXG4iLCAiLyoqXHJcbiAqIFJlbW92ZSBQcm9wZXJ0eSBNb2RhbFxyXG4gKiBNb2RhbCBmb3IgcmVtb3ZpbmcgcHJvcGVydGllcyBmcm9tIHNlbGVjdGVkIGZpbGVzXHJcbiAqL1xyXG5cclxuaW1wb3J0IHsgTW9kYWwsIEFwcCwgU2V0dGluZywgVEZpbGUgfSBmcm9tICdvYnNpZGlhbic7XHJcbmltcG9ydCB7IEJ1bGtPcGVyYXRpb25zIH0gZnJvbSAnLi4vdXRpbHMvYnVsay1vcGVyYXRpb25zJztcclxuaW1wb3J0IHsgZ2V0RmlsZUZyb250bWF0dGVyIH0gZnJvbSAnLi4vdXRpbHMvZnJvbnRtYXR0ZXItaGVscGVyJztcclxuXHJcbmV4cG9ydCBjbGFzcyBSZW1vdmVQcm9wZXJ0eU1vZGFsIGV4dGVuZHMgTW9kYWwge1xyXG5cdHByaXZhdGUgZmlsZXM6IHN0cmluZ1tdO1xyXG5cdHByaXZhdGUgcHJvcGVydGllc1RvUmVtb3ZlOiBTZXQ8c3RyaW5nPiA9IG5ldyBTZXQoKTtcclxuXHRwcml2YXRlIGJ1bGtPcHM6IEJ1bGtPcGVyYXRpb25zO1xyXG5cclxuXHRjb25zdHJ1Y3RvcihhcHA6IEFwcCwgZmlsZXM6IHN0cmluZ1tdKSB7XHJcblx0XHRzdXBlcihhcHApO1xyXG5cdFx0dGhpcy5maWxlcyA9IGZpbGVzO1xyXG5cdFx0dGhpcy5idWxrT3BzID0gbmV3IEJ1bGtPcGVyYXRpb25zKGFwcCk7XHJcblx0fVxyXG5cclxuXHRvbk9wZW4oKTogdm9pZCB7XHJcblx0XHRjb25zdCB7IGNvbnRlbnRFbCB9ID0gdGhpcztcclxuXHJcblx0XHRjb250ZW50RWwuZW1wdHkoKTtcclxuXHRcdG5ldyBTZXR0aW5nKGNvbnRlbnRFbCkuc2V0TmFtZSgnUmVtb3ZlIHByb3BlcnR5Jykuc2V0SGVhZGluZygpO1xyXG5cdFx0Y29udGVudEVsLmNyZWF0ZUVsKCdwJywgeyB0ZXh0OiBgUmVtb3ZpbmcgcHJvcGVydGllcyBmcm9tICR7dGhpcy5maWxlcy5sZW5ndGh9IGZpbGUke3RoaXMuZmlsZXMubGVuZ3RoICE9PSAxID8gJ3MnIDogJyd9YCB9KTtcclxuXHJcblx0XHQvLyBDcmVhdGUgY2hlY2tib3hlcyBjb250YWluZXIgZmlyc3RcclxuXHRcdGNvbnN0IHByb3BlcnRpZXNDb250YWluZXIgPSBjb250ZW50RWwuY3JlYXRlRGl2KCk7XHJcblx0XHRcclxuXHRcdC8vIEdldCBhbGwgdW5pcXVlIHByb3BlcnRpZXMgZnJvbSBzZWxlY3RlZCBmaWxlc1xyXG5cdFx0Y29uc3QgYWxsUHJvcGVydGllcyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xyXG5cdFx0XHJcblx0XHQvLyBMb2FkIHByb3BlcnRpZXMgc3luY2hyb25vdXNseSBmb3IgLm1kIGZpbGVzIGZpcnN0XHJcblx0XHRmb3IgKGNvbnN0IGZpbGVQYXRoIG9mIHRoaXMuZmlsZXMpIHtcclxuXHRcdFx0Y29uc3QgZmlsZSA9IHRoaXMuYXBwLnZhdWx0LmdldEFic3RyYWN0RmlsZUJ5UGF0aChmaWxlUGF0aCk7XHJcblx0XHRcdGlmIChmaWxlIGluc3RhbmNlb2YgVEZpbGUgJiYgZmlsZS5leHRlbnNpb24gIT09ICdtZHgnKSB7XHJcblx0XHRcdFx0Y29uc3QgbWV0YWRhdGEgPSB0aGlzLmFwcC5tZXRhZGF0YUNhY2hlLmdldEZpbGVDYWNoZShmaWxlKTtcclxuXHRcdFx0XHRjb25zdCBmcm9udG1hdHRlciA9IG1ldGFkYXRhPy5mcm9udG1hdHRlcjtcclxuXHRcdFx0XHRpZiAoZnJvbnRtYXR0ZXIpIHtcclxuXHRcdFx0XHRcdGZvciAoY29uc3Qga2V5IGluIGZyb250bWF0dGVyKSB7XHJcblx0XHRcdFx0XHRcdGlmIChrZXkgIT09ICd0YWdzJyAmJiBrZXkgIT09ICd0aXRsZScpIHtcclxuXHRcdFx0XHRcdFx0XHRhbGxQcm9wZXJ0aWVzLmFkZChrZXkpO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHRcclxuXHRcdC8vIFJlbmRlciBjaGVja2JveGVzIGZvciAubWQgZmlsZSBwcm9wZXJ0aWVzXHJcblx0XHRmb3IgKGNvbnN0IHByb3Agb2YgQXJyYXkuZnJvbShhbGxQcm9wZXJ0aWVzKS5zb3J0KCkpIHtcclxuXHRcdFx0dGhpcy5hZGRQcm9wZXJ0eUNoZWNrYm94KHByb3BlcnRpZXNDb250YWluZXIsIHByb3ApO1xyXG5cdFx0fVxyXG5cdFx0XHJcblx0XHQvLyBMb2FkIE1EWCBmaWxlIHByb3BlcnRpZXMgYXN5bmNocm9ub3VzbHlcclxuXHRcdHZvaWQgKGFzeW5jICgpID0+IHtcclxuXHRcdFx0Zm9yIChjb25zdCBmaWxlUGF0aCBvZiB0aGlzLmZpbGVzKSB7XHJcblx0XHRcdFx0Y29uc3QgZmlsZSA9IHRoaXMuYXBwLnZhdWx0LmdldEFic3RyYWN0RmlsZUJ5UGF0aChmaWxlUGF0aCk7XHJcblx0XHRcdFx0aWYgKGZpbGUgaW5zdGFuY2VvZiBURmlsZSAmJiBmaWxlLmV4dGVuc2lvbiA9PT0gJ21keCcpIHtcclxuXHRcdFx0XHRcdGNvbnN0IGZyb250bWF0dGVyID0gYXdhaXQgZ2V0RmlsZUZyb250bWF0dGVyKHRoaXMuYXBwLCBmaWxlKTtcclxuXHRcdFx0XHRcdGlmIChmcm9udG1hdHRlcikge1xyXG5cdFx0XHRcdFx0XHRmb3IgKGNvbnN0IGtleSBpbiBmcm9udG1hdHRlcikge1xyXG5cdFx0XHRcdFx0XHRcdGlmIChrZXkgIT09ICd0YWdzJyAmJiBrZXkgIT09ICd0aXRsZScpIHtcclxuXHRcdFx0XHRcdFx0XHRcdGlmICghYWxsUHJvcGVydGllcy5oYXMoa2V5KSkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRhbGxQcm9wZXJ0aWVzLmFkZChrZXkpO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBBZGQgY2hlY2tib3ggZm9yIHRoaXMgcHJvcGVydHkgZHluYW1pY2FsbHlcclxuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKHRoaXMuY29udGVudEVsICYmIHRoaXMuY29udGVudEVsLmlzQ29ubmVjdGVkICYmIHByb3BlcnRpZXNDb250YWluZXIuaXNDb25uZWN0ZWQpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR0aGlzLmFkZFByb3BlcnR5Q2hlY2tib3gocHJvcGVydGllc0NvbnRhaW5lciwga2V5KTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fSkoKTtcclxuXHJcblx0XHRpZiAoYWxsUHJvcGVydGllcy5zaXplID09PSAwKSB7XHJcblx0XHRcdGNvbnRlbnRFbC5jcmVhdGVFbCgncCcsIHsgdGV4dDogJ05vIHByb3BlcnRpZXMgZm91bmQgaW4gc2VsZWN0ZWQgZmlsZXMuJyB9KTtcclxuXHRcdH1cclxuXHJcblx0XHQvLyBCdXR0b25zXHJcblx0XHRjb25zdCBidXR0b25Db250YWluZXIgPSBjb250ZW50RWwuY3JlYXRlRGl2KCk7XHJcblx0XHRidXR0b25Db250YWluZXIuYWRkQ2xhc3MoJ2Jhc2VzLWNtcy1tb2RhbC1idXR0b24tY29udGFpbmVyJyk7XHJcblxyXG5cdFx0Y29uc3QgY2FuY2VsQnRuID0gYnV0dG9uQ29udGFpbmVyLmNyZWF0ZUVsKCdidXR0b24nKTtcclxuXHRcdGNhbmNlbEJ0bi5zZXRUZXh0KCdDYW5jZWwnKTtcclxuXHRcdGNhbmNlbEJ0bi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHRoaXMuY2xvc2UoKSk7XHJcblxyXG5cdFx0Y29uc3QgYXBwbHlCdG4gPSBidXR0b25Db250YWluZXIuY3JlYXRlRWwoJ2J1dHRvbicpO1xyXG5cdFx0YXBwbHlCdG4uc2V0VGV4dCgnQXBwbHknKTtcclxuXHRcdGFwcGx5QnRuLmFkZENsYXNzKCdtb2QtY3RhJyk7XHJcblx0XHRhcHBseUJ0bi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHtcclxuXHRcdFx0dm9pZCAoYXN5bmMgKCkgPT4ge1xyXG5cdFx0XHRcdGlmICh0aGlzLnByb3BlcnRpZXNUb1JlbW92ZS5zaXplID4gMCkge1xyXG5cdFx0XHRcdFx0YXdhaXQgdGhpcy5hcHBseUNoYW5nZXMoKTtcclxuXHRcdFx0XHRcdHRoaXMuY2xvc2UoKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0pKCk7XHJcblx0XHR9KTtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgYWRkUHJvcGVydHlDaGVja2JveChjb250YWluZXI6IEhUTUxFbGVtZW50LCBwcm9wOiBzdHJpbmcpOiB2b2lkIHtcclxuXHRcdG5ldyBTZXR0aW5nKGNvbnRhaW5lcilcclxuXHRcdFx0LnNldE5hbWUocHJvcClcclxuXHRcdFx0LmFkZFRvZ2dsZSh0b2dnbGUgPT4ge1xyXG5cdFx0XHRcdHRvZ2dsZVxyXG5cdFx0XHRcdFx0LnNldFZhbHVlKHRoaXMucHJvcGVydGllc1RvUmVtb3ZlLmhhcyhwcm9wKSlcclxuXHRcdFx0XHRcdC5vbkNoYW5nZSh2YWx1ZSA9PiB7XHJcblx0XHRcdFx0XHRcdGlmICh2YWx1ZSkge1xyXG5cdFx0XHRcdFx0XHRcdHRoaXMucHJvcGVydGllc1RvUmVtb3ZlLmFkZChwcm9wKTtcclxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHR0aGlzLnByb3BlcnRpZXNUb1JlbW92ZS5kZWxldGUocHJvcCk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH0pO1xyXG5cdFx0XHR9KTtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgYXN5bmMgYXBwbHlDaGFuZ2VzKCk6IFByb21pc2U8dm9pZD4ge1xyXG5cdFx0Zm9yIChjb25zdCBwcm9wIG9mIHRoaXMucHJvcGVydGllc1RvUmVtb3ZlKSB7XHJcblx0XHRcdGF3YWl0IHRoaXMuYnVsa09wcy5yZW1vdmVQcm9wZXJ0eSh0aGlzLmZpbGVzLCBwcm9wKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdG9uQ2xvc2UoKTogdm9pZCB7XHJcblx0XHRjb25zdCB7IGNvbnRlbnRFbCB9ID0gdGhpcztcclxuXHRcdGNvbnRlbnRFbC5lbXB0eSgpO1xyXG5cdH1cclxufVxyXG5cclxuXHJcbiIsICIvKipcbiAqIFRvb2xiYXIgQWN0aW9uc1xuICogSGFuZGxlcyBhbGwgYnVsayBvcGVyYXRpb24gYWN0aW9ucyBmcm9tIHRoZSB0b29sYmFyXG4gKi9cblxuaW1wb3J0IHsgQXBwIH0gZnJvbSAnb2JzaWRpYW4nO1xuaW1wb3J0IHR5cGUgQmFzZXNDTVNQbHVnaW4gZnJvbSAnLi4vbWFpbic7XG5pbXBvcnQgeyBCdWxrT3BlcmF0aW9ucyB9IGZyb20gJy4vYnVsay1vcGVyYXRpb25zJztcbmltcG9ydCB7IE1hbmFnZVRhZ3NNb2RhbCB9IGZyb20gJy4uL2NvbXBvbmVudHMvbWFuYWdlLXRhZ3MtbW9kYWwnO1xuaW1wb3J0IHsgU2V0UHJvcGVydHlNb2RhbCB9IGZyb20gJy4uL2NvbXBvbmVudHMvc2V0LXByb3BlcnR5LW1vZGFsJztcbmltcG9ydCB7IFJlbW92ZVByb3BlcnR5TW9kYWwgfSBmcm9tICcuLi9jb21wb25lbnRzL3JlbW92ZS1wcm9wZXJ0eS1tb2RhbCc7XG5pbXBvcnQgeyBEZWxldGlvblByZXZpZXdNb2RhbCB9IGZyb20gJy4uL2NvbXBvbmVudHMvZGVsZXRpb24tcHJldmlldyc7XG5pbXBvcnQgeyBCdWxrT3BlcmF0aW9uQ29uZmlybU1vZGFsIH0gZnJvbSAnLi4vY29tcG9uZW50cy9idWxrLW9wZXJhdGlvbi1jb25maXJtJztcbmltcG9ydCB7IHByZXBhcmVEZWxldGlvblByZXZpZXcsIGV4ZWN1dGVTbWFydERlbGV0aW9uIH0gZnJvbSAnLi9zbWFydC1kZWxldGlvbic7XG5pbXBvcnQgdHlwZSB7IENNU1NldHRpbmdzIH0gZnJvbSAnLi4vc2hhcmVkL2RhdGEtdHJhbnNmb3JtJztcblxuZXhwb3J0IGNsYXNzIFRvb2xiYXJBY3Rpb25zIHtcblx0cHJpdmF0ZSBidWxrT3BzOiBCdWxrT3BlcmF0aW9ucztcblxuXHRjb25zdHJ1Y3Rvcihcblx0XHRwcml2YXRlIGFwcDogQXBwLFxuXHRcdHByaXZhdGUgcGx1Z2luOiBCYXNlc0NNU1BsdWdpbixcblx0XHRwcml2YXRlIGdldFNlbGVjdGVkRmlsZXM6ICgpID0+IHN0cmluZ1tdLFxuXHRcdHByaXZhdGUgY2xlYXJTZWxlY3Rpb246ICgpID0+IHZvaWQsXG5cdFx0cHJpdmF0ZSByZWZyZXNoVmlldzogKCkgPT4gdm9pZCxcblx0XHRwcml2YXRlIHNob3dUb29sYmFyOiAoKSA9PiB2b2lkXG5cdCkge1xuXHRcdHRoaXMuYnVsa09wcyA9IG5ldyBCdWxrT3BlcmF0aW9ucyhhcHApO1xuXHR9XG5cblx0YXN5bmMgaGFuZGxlU2V0RHJhZnQoc2V0dGluZ3M/OiBDTVNTZXR0aW5ncyk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGNvbnN0IGZpbGVzID0gdGhpcy5nZXRTZWxlY3RlZEZpbGVzKCk7XG5cdFx0aWYgKGZpbGVzLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuXG5cdFx0aWYgKHRoaXMucGx1Z2luLnNldHRpbmdzLmNvbmZpcm1CdWxrT3BlcmF0aW9ucykge1xuXHRcdFx0Y29uc3QgbW9kYWwgPSBuZXcgQnVsa09wZXJhdGlvbkNvbmZpcm1Nb2RhbChcblx0XHRcdFx0dGhpcy5hcHAsXG5cdFx0XHRcdGZpbGVzLFxuXHRcdFx0XHQnZHJhZnQnLFxuXHRcdFx0XHQoKSA9PiB7XG5cdFx0XHRcdFx0dm9pZCAoYXN5bmMgKCkgPT4ge1xuXHRcdFx0XHRcdFx0YXdhaXQgdGhpcy5idWxrT3BzLnNldERyYWZ0KGZpbGVzLCB0cnVlLCBzZXR0aW5ncyk7XG5cdFx0XHRcdFx0XHR0aGlzLnJlZnJlc2hWaWV3KCk7XG5cdFx0XHRcdFx0fSkoKTtcblx0XHRcdFx0fVxuXHRcdFx0KTtcblx0XHRcdG1vZGFsLm9wZW4oKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0YXdhaXQgdGhpcy5idWxrT3BzLnNldERyYWZ0KGZpbGVzLCB0cnVlLCBzZXR0aW5ncyk7XG5cdFx0XHR0aGlzLnJlZnJlc2hWaWV3KCk7XG5cdFx0fVxuXHR9XG5cblx0YXN5bmMgaGFuZGxlUHVibGlzaChzZXR0aW5ncz86IENNU1NldHRpbmdzKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0Y29uc3QgZmlsZXMgPSB0aGlzLmdldFNlbGVjdGVkRmlsZXMoKTtcblx0XHRpZiAoZmlsZXMubGVuZ3RoID09PSAwKSByZXR1cm47XG5cblx0XHRpZiAodGhpcy5wbHVnaW4uc2V0dGluZ3MuY29uZmlybUJ1bGtPcGVyYXRpb25zKSB7XG5cdFx0XHRjb25zdCBtb2RhbCA9IG5ldyBCdWxrT3BlcmF0aW9uQ29uZmlybU1vZGFsKFxuXHRcdFx0XHR0aGlzLmFwcCxcblx0XHRcdFx0ZmlsZXMsXG5cdFx0XHRcdCdwdWJsaXNoJyxcblx0XHRcdFx0KCkgPT4ge1xuXHRcdFx0XHRcdHZvaWQgKGFzeW5jICgpID0+IHtcblx0XHRcdFx0XHRcdGF3YWl0IHRoaXMuYnVsa09wcy5zZXREcmFmdChmaWxlcywgZmFsc2UsIHNldHRpbmdzKTtcblx0XHRcdFx0XHRcdHRoaXMucmVmcmVzaFZpZXcoKTtcblx0XHRcdFx0XHR9KSgpO1xuXHRcdFx0XHR9XG5cdFx0XHQpO1xuXHRcdFx0bW9kYWwub3BlbigpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRhd2FpdCB0aGlzLmJ1bGtPcHMuc2V0RHJhZnQoZmlsZXMsIGZhbHNlLCBzZXR0aW5ncyk7XG5cdFx0XHR0aGlzLnJlZnJlc2hWaWV3KCk7XG5cdFx0fVxuXHR9XG5cblx0aGFuZGxlTWFuYWdlVGFncygpOiB2b2lkIHtcblx0XHRjb25zdCBmaWxlcyA9IHRoaXMuZ2V0U2VsZWN0ZWRGaWxlcygpO1xuXHRcdGlmIChmaWxlcy5sZW5ndGggPT09IDApIHJldHVybjtcblxuXHRcdGNvbnN0IG1vZGFsID0gbmV3IE1hbmFnZVRhZ3NNb2RhbCh0aGlzLmFwcCwgZmlsZXMpO1xuXHRcdG1vZGFsLm9uQ2xvc2UgPSAoKSA9PiB7XG5cdFx0XHQvLyBLZWVwIHRvb2xiYXIgdmlzaWJsZSAtIGRvbid0IGxldCBpdCBjbG9zZVxuXHRcdFx0dGhpcy5zaG93VG9vbGJhcigpO1xuXHRcdFx0Ly8gUmVmcmVzaCB2aWV3IC0gdGhlIHJlZnJlc2hWaWV3IGNhbGxiYWNrIHdpbGwgcHJlc2VydmUgc2VsZWN0aW9uXG5cdFx0XHR0aGlzLnJlZnJlc2hWaWV3KCk7XG5cdFx0fTtcblx0XHRtb2RhbC5vcGVuKCk7XG5cdH1cblxuXHRoYW5kbGVTZXRQcm9wZXJ0eSgpOiB2b2lkIHtcblx0XHRjb25zdCBmaWxlcyA9IHRoaXMuZ2V0U2VsZWN0ZWRGaWxlcygpO1xuXHRcdGlmIChmaWxlcy5sZW5ndGggPT09IDApIHJldHVybjtcblxuXHRcdGNvbnN0IG1vZGFsID0gbmV3IFNldFByb3BlcnR5TW9kYWwodGhpcy5hcHAsIGZpbGVzKTtcblx0XHRtb2RhbC5vbkNsb3NlID0gKCkgPT4ge1xuXHRcdFx0Ly8gS2VlcCB0b29sYmFyIHZpc2libGUgLSBkb24ndCBsZXQgaXQgY2xvc2Vcblx0XHRcdHRoaXMuc2hvd1Rvb2xiYXIoKTtcblx0XHRcdC8vIFJlZnJlc2ggdmlldyAtIHRoZSByZWZyZXNoVmlldyBjYWxsYmFjayB3aWxsIHByZXNlcnZlIHNlbGVjdGlvblxuXHRcdFx0dGhpcy5yZWZyZXNoVmlldygpO1xuXHRcdH07XG5cdFx0bW9kYWwub3BlbigpO1xuXHR9XG5cblx0aGFuZGxlUmVtb3ZlUHJvcGVydHkoKTogdm9pZCB7XG5cdFx0Y29uc3QgZmlsZXMgPSB0aGlzLmdldFNlbGVjdGVkRmlsZXMoKTtcblx0XHRpZiAoZmlsZXMubGVuZ3RoID09PSAwKSByZXR1cm47XG5cblx0XHRjb25zdCBtb2RhbCA9IG5ldyBSZW1vdmVQcm9wZXJ0eU1vZGFsKHRoaXMuYXBwLCBmaWxlcyk7XG5cdFx0bW9kYWwub25DbG9zZSA9ICgpID0+IHtcblx0XHRcdC8vIEtlZXAgdG9vbGJhciB2aXNpYmxlIC0gZG9uJ3QgbGV0IGl0IGNsb3NlXG5cdFx0XHR0aGlzLnNob3dUb29sYmFyKCk7XG5cdFx0XHQvLyBSZWZyZXNoIHZpZXcgLSB0aGUgcmVmcmVzaFZpZXcgY2FsbGJhY2sgd2lsbCBwcmVzZXJ2ZSBzZWxlY3Rpb25cblx0XHRcdHRoaXMucmVmcmVzaFZpZXcoKTtcblx0XHR9O1xuXHRcdG1vZGFsLm9wZW4oKTtcblx0fVxuXG5cdGFzeW5jIGhhbmRsZURlbGV0ZSgpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRjb25zdCBmaWxlcyA9IHRoaXMuZ2V0U2VsZWN0ZWRGaWxlcygpO1xuXHRcdGlmIChmaWxlcy5sZW5ndGggPT09IDApIHJldHVybjtcblxuXHRcdGlmICh0aGlzLnBsdWdpbi5zZXR0aW5ncy5jb25maXJtRGVsZXRpb25zKSB7XG5cdFx0XHRjb25zdCBwcmV2aWV3ID0gYXdhaXQgcHJlcGFyZURlbGV0aW9uUHJldmlldyhcblx0XHRcdFx0dGhpcy5hcHAsXG5cdFx0XHRcdGZpbGVzLFxuXHRcdFx0XHR0aGlzLnBsdWdpbi5zZXR0aW5nc1xuXHRcdFx0KTtcblxuXHRcdFx0Y29uc3QgbW9kYWwgPSBuZXcgRGVsZXRpb25QcmV2aWV3TW9kYWwoXG5cdFx0XHRcdHRoaXMuYXBwLFxuXHRcdFx0XHRwcmV2aWV3LFxuXHRcdFx0XHQoKSA9PiB7XG5cdFx0XHRcdFx0dGhpcy5jbGVhclNlbGVjdGlvbigpO1xuXHRcdFx0XHRcdHRoaXMucmVmcmVzaFZpZXcoKTtcblx0XHRcdFx0fVxuXHRcdFx0KTtcblx0XHRcdG1vZGFsLm9wZW4oKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gRGlyZWN0IGRlbGV0aW9uIHdpdGhvdXQgY29uZmlybWF0aW9uXG5cdFx0XHRjb25zdCBwcmV2aWV3ID0gYXdhaXQgcHJlcGFyZURlbGV0aW9uUHJldmlldyhcblx0XHRcdFx0dGhpcy5hcHAsXG5cdFx0XHRcdGZpbGVzLFxuXHRcdFx0XHR0aGlzLnBsdWdpbi5zZXR0aW5nc1xuXHRcdFx0KTtcblx0XHRcdGF3YWl0IGV4ZWN1dGVTbWFydERlbGV0aW9uKHRoaXMuYXBwLCBwcmV2aWV3KTtcblx0XHRcdHRoaXMuY2xlYXJTZWxlY3Rpb24oKTtcblx0XHRcdHRoaXMucmVmcmVzaFZpZXcoKTtcblx0XHR9XG5cdH1cbn1cblxuIiwgIi8qKlxyXG4gKiBCdWxrIE9wZXJhdGlvbiBDb25maXJtYXRpb24gTW9kYWxcclxuICogU2hvd3MgY29uZmlybWF0aW9uIGRpYWxvZyBiZWZvcmUgcGVyZm9ybWluZyBidWxrIG9wZXJhdGlvbnNcclxuICovXHJcblxyXG5pbXBvcnQgeyBNb2RhbCwgQXBwLCBTZXR0aW5nIH0gZnJvbSAnb2JzaWRpYW4nO1xyXG5cclxuZXhwb3J0IGNsYXNzIEJ1bGtPcGVyYXRpb25Db25maXJtTW9kYWwgZXh0ZW5kcyBNb2RhbCB7XHJcblx0cHJpdmF0ZSBmaWxlczogc3RyaW5nW107XHJcblx0cHJpdmF0ZSBvcGVyYXRpb246ICdkcmFmdCcgfCAncHVibGlzaCc7XHJcblx0cHJpdmF0ZSBvbkNvbmZpcm06ICgpID0+IHZvaWQ7XHJcblxyXG5cdGNvbnN0cnVjdG9yKFxyXG5cdFx0YXBwOiBBcHAsXHJcblx0XHRmaWxlczogc3RyaW5nW10sXHJcblx0XHRvcGVyYXRpb246ICdkcmFmdCcgfCAncHVibGlzaCcsXHJcblx0XHRvbkNvbmZpcm06ICgpID0+IHZvaWRcclxuXHQpIHtcclxuXHRcdHN1cGVyKGFwcCk7XHJcblx0XHR0aGlzLmZpbGVzID0gZmlsZXM7XHJcblx0XHR0aGlzLm9wZXJhdGlvbiA9IG9wZXJhdGlvbjtcclxuXHRcdHRoaXMub25Db25maXJtID0gb25Db25maXJtO1xyXG5cdH1cclxuXHJcblx0b25PcGVuKCk6IHZvaWQge1xyXG5cdFx0Y29uc3QgeyBjb250ZW50RWwgfSA9IHRoaXM7XHJcblxyXG5cdFx0Y29udGVudEVsLmVtcHR5KCk7XHJcblxyXG5cdFx0Y29uc3Qgb3BlcmF0aW9uTmFtZSA9IHRoaXMub3BlcmF0aW9uID09PSAnZHJhZnQnID8gJ21hcmsgYXMgZHJhZnQnIDogJ21hcmsgYXMgcHVibGlzaGVkJztcclxuXHRcdGNvbnN0IGhlYWRpbmdUZXh0ID0gb3BlcmF0aW9uTmFtZS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIG9wZXJhdGlvbk5hbWUuc2xpY2UoMSk7XHJcblx0XHRuZXcgU2V0dGluZyhjb250ZW50RWwpLnNldE5hbWUoYENvbmZpcm0gJHtoZWFkaW5nVGV4dH1gKS5zZXRIZWFkaW5nKCk7XHJcblxyXG5cdFx0Y29udGVudEVsLmNyZWF0ZUVsKCdwJywge1xyXG5cdFx0XHR0ZXh0OiBgQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvICR7b3BlcmF0aW9uTmFtZX0gJHt0aGlzLmZpbGVzLmxlbmd0aH0gZmlsZSR7dGhpcy5maWxlcy5sZW5ndGggIT09IDEgPyAncycgOiAnJ30/YFxyXG5cdFx0fSk7XHJcblxyXG5cdFx0Ly8gU2hvdyBmaWxlIGxpc3QgKGxpbWl0ZWQgdG8gMjApXHJcblx0XHRpZiAodGhpcy5maWxlcy5sZW5ndGggPiAwKSB7XHJcblx0XHRcdGNvbnN0IGZpbGVzTGlzdCA9IGNvbnRlbnRFbC5jcmVhdGVFbCgndWwnLCB7IGNsczogJ2Jhc2VzLWNtcy1kZWxldGlvbi1saXN0JyB9KTtcclxuXHRcdFx0Zm9yIChjb25zdCBmaWxlUGF0aCBvZiB0aGlzLmZpbGVzLnNsaWNlKDAsIDIwKSkge1xyXG5cdFx0XHRcdGNvbnN0IGxpID0gZmlsZXNMaXN0LmNyZWF0ZUVsKCdsaScpO1xyXG5cdFx0XHRcdGxpLnNldFRleHQoZmlsZVBhdGgpO1xyXG5cdFx0XHR9XHJcblx0XHRcdGlmICh0aGlzLmZpbGVzLmxlbmd0aCA+IDIwKSB7XHJcblx0XHRcdFx0ZmlsZXNMaXN0LmNyZWF0ZUVsKCdsaScsIHtcclxuXHRcdFx0XHRcdHRleHQ6IGAuLi4gYW5kICR7dGhpcy5maWxlcy5sZW5ndGggLSAyMH0gbW9yZSBmaWxlJHt0aGlzLmZpbGVzLmxlbmd0aCAtIDIwICE9PSAxID8gJ3MnIDogJyd9YFxyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gQnV0dG9uc1xyXG5cdFx0Y29uc3QgYnV0dG9uQ29udGFpbmVyID0gY29udGVudEVsLmNyZWF0ZURpdigpO1xyXG5cdFx0YnV0dG9uQ29udGFpbmVyLmFkZENsYXNzKCdiYXNlcy1jbXMtbW9kYWwtYnV0dG9uLWNvbnRhaW5lcicpO1xyXG5cclxuXHRcdGNvbnN0IGNhbmNlbEJ0biA9IGJ1dHRvbkNvbnRhaW5lci5jcmVhdGVFbCgnYnV0dG9uJyk7XHJcblx0XHRjYW5jZWxCdG4uc2V0VGV4dCgnQ2FuY2VsJyk7XHJcblx0XHRjYW5jZWxCdG4uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB0aGlzLmNsb3NlKCkpO1xyXG5cclxuXHRcdGNvbnN0IGNvbmZpcm1CdG4gPSBidXR0b25Db250YWluZXIuY3JlYXRlRWwoJ2J1dHRvbicpO1xyXG5cdFx0Y29uZmlybUJ0bi5zZXRUZXh0KCdDb25maXJtJyk7XHJcblx0XHRjb25maXJtQnRuLmFkZENsYXNzKCdtb2QtY3RhJyk7XHJcblx0XHRjb25maXJtQnRuLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4ge1xyXG5cdFx0XHR0aGlzLm9uQ29uZmlybSgpO1xyXG5cdFx0XHR0aGlzLmNsb3NlKCk7XHJcblx0XHR9KTtcclxuXHR9XHJcblxyXG5cdG9uQ2xvc2UoKTogdm9pZCB7XHJcblx0XHRjb25zdCB7IGNvbnRlbnRFbCB9ID0gdGhpcztcclxuXHRcdGNvbnRlbnRFbC5lbXB0eSgpO1xyXG5cdH1cclxufVxyXG5cclxuXHJcbiIsICJpbXBvcnQgeyBBcHAgfSBmcm9tICdvYnNpZGlhbic7XHJcbmltcG9ydCB7IHJlYWRDTVNTZXR0aW5ncyB9IGZyb20gJy4uL3NoYXJlZC9zZXR0aW5ncy1zY2hlbWEnO1xyXG5pbXBvcnQgdHlwZSB7IEJhc2VzQ01TU2V0dGluZ3MgfSBmcm9tICcuLi90eXBlcyc7XHJcblxyXG4vLyBCYXNlcyBjb25maWcgb2JqZWN0IGludGVyZmFjZVxyXG5pbnRlcmZhY2UgQmFzZXNDb25maWcge1xyXG5cdGdldChrZXk6IHN0cmluZyk6IHVua25vd247XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBTZXR1cCBpbnRlcmNlcHRvciBmb3IgbmV3IG5vdGUgYnV0dG9uIGNsaWNrc1xyXG4gKiBIYW5kbGVzIGN1c3RvbSBuZXcgbm90ZSBsb2NhdGlvbiBzZXR0aW5nc1xyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIHNldHVwTmV3Tm90ZUludGVyY2VwdG9yKFxyXG5cdGFwcDogQXBwLFxyXG5cdGNvbnRhaW5lckVsOiBIVE1MRWxlbWVudCxcclxuXHRjb25maWc6IEJhc2VzQ29uZmlnLFxyXG5cdHBsdWdpblNldHRpbmdzOiBCYXNlc0NNU1NldHRpbmdzLFxyXG5cdHJlZ2lzdGVyQ2xlYW51cDogKGNsZWFudXA6ICgpID0+IHZvaWQpID0+IHZvaWRcclxuKTogdm9pZCB7XHJcblx0Ly8gSW50ZXJjZXB0IGNsaWNrcyBvbiB0aGUgbmV3IGJ1dHRvbiAtIHVzZSBjYXB0dXJlIHBoYXNlIHRvIGNhdGNoIGJlZm9yZSBCYXNlc1xyXG5cdGNvbnN0IGludGVyY2VwdE5ld0J1dHRvbiA9IChlOiBNb3VzZUV2ZW50KSA9PiB7XHJcblx0XHRjb25zdCB0YXJnZXQgPSBlLnRhcmdldCBhcyBIVE1MRWxlbWVudDtcclxuXHRcdFxyXG5cdFx0Ly8gVHJ5IG11bHRpcGxlIHNlbGVjdG9ycyBmb3IgdGhlIG5ldyBidXR0b24gLSBCYXNlcyBtaWdodCB1c2UgZGlmZmVyZW50IHN0cnVjdHVyZXNcclxuXHRcdGNvbnN0IGJ1dHRvbkVsID0gdGFyZ2V0LmNsb3Nlc3QoJy5iYXNlcy10b29sYmFyLW5ldy1pdGVtLW1lbnUsIC5iYXNlcy10b29sYmFyLW5ldy1pdGVtLW1lbnUgLnRleHQtaWNvbi1idXR0b24sIFtkYXRhLWFjdGlvbj1cIm5ldy1pdGVtXCJdLCBidXR0b25bYXJpYS1sYWJlbCo9XCJuZXdcIl0sIGJ1dHRvblthcmlhLWxhYmVsKj1cIk5ld1wiXSwgLmJhc2VzLXRvb2xiYXIgYnV0dG9uJyk7XHJcblx0XHRcclxuXHRcdGlmICghYnV0dG9uRWwpIHtcclxuXHRcdFx0cmV0dXJuOyAvLyBOb3QgdGhlIG5ldyBidXR0b25cclxuXHRcdH1cclxuXHRcdFxyXG5cdFx0Ly8gRG9uJ3QgaW50ZXJmZXJlIHdpdGggY2xpY2tzIGluc2lkZSB0aGUgYnVsayB0b29sYmFyIG9yIG90aGVyIENNUyBlbGVtZW50c1xyXG5cdFx0aWYgKHRhcmdldC5jbG9zZXN0KCcuYmFzZXMtY21zLWJ1bGstdG9vbGJhciwgLmJhc2VzLWNtcy1jb250YWluZXIgLmNhcmQnKSkge1xyXG5cdFx0XHRyZXR1cm47IC8vIExldCB0aGVzZSBjbGlja3Mgd29yayBub3JtYWxseVxyXG5cdFx0fVxyXG5cdFx0XHJcblx0XHQvLyBDaGVjayBpZiB0aGlzIGNsaWNrIGlzIGZvciBPVVIgc3BlY2lmaWMgdmlldyBpbnN0YW5jZVxyXG5cdFx0Ly8gR2V0IHRoZSBhY3RpdmUgdmlldyB0byBzZWUgd2hpY2ggb25lIGlzIGFjdHVhbGx5IGFjdGl2ZVxyXG5cdFx0Y29uc3QgYWN0aXZlTGVhZiA9IChhcHAud29ya3NwYWNlIGFzIHVua25vd24gYXMgeyBhY3RpdmVMZWFmPzogeyB2aWV3PzogeyBjb250YWluZXJFbD86IEhUTUxFbGVtZW50OyByZWFkb25seSB0eXBlPzogc3RyaW5nIH0gfSB9KS5hY3RpdmVMZWFmO1xyXG5cdFx0Y29uc3QgYWN0aXZlVmlldyA9IGFjdGl2ZUxlYWY/LnZpZXc7XHJcblx0XHRjb25zdCBhY3RpdmVWaWV3Q29udGFpbmVyID0gYWN0aXZlVmlldz8uY29udGFpbmVyRWw7XHJcblx0XHRcclxuXHRcdC8vIEZJUlNUOiBPbmx5IGludGVyY2VwdCBpZiB0aGUgYWN0aXZlIHZpZXcgaXMgYSBDTVMgdmlldyAodHlwZSA9PT0gJ2Jhc2VzLWNtcycpXHJcblx0XHQvLyBUaGlzIHByZXZlbnRzIGludGVyY2VwdGluZyB3aGVuIHVzZXIgc3dpdGNoZXMgdG8gdGFibGUvY2FyZHMgdmlld1xyXG5cdFx0Ly8gQ2hlY2sgdGhlIGNvbnRhaW5lciBmb3IgdGhlIENNUyBjbGFzcyBhcyBhIGZhbGxiYWNrIGlmIHR5cGUgaXNuJ3QgYXZhaWxhYmxlXHJcblx0XHRjb25zdCBpc0NNU1ZpZXcgPSBhY3RpdmVWaWV3Py50eXBlID09PSAnYmFzZXMtY21zJyB8fCBcclxuXHRcdFx0KGFjdGl2ZVZpZXdDb250YWluZXI/LnF1ZXJ5U2VsZWN0b3IoJy5iYXNlcy1jbXMtY29udGFpbmVyJykgIT09IG51bGwpO1xyXG5cdFx0XHJcblx0XHRpZiAoIWlzQ01TVmlldykge1xyXG5cdFx0XHRyZXR1cm47IC8vIE5vdCBhIENNUyB2aWV3LCBsZXQgQmFzZXMgaGFuZGxlIGl0IG5vcm1hbGx5IChkb24ndCBwcmV2ZW50IGRlZmF1bHQpXHJcblx0XHR9XHJcblx0XHRcclxuXHRcdC8vIFNFQ09ORDogQ2hlY2sgaWYgb3VyIGNvbnRhaW5lciBpcyB3aXRoaW4gdGhlIGFjdGl2ZSB2aWV3J3MgY29udGFpbmVyLCBvciBpZiB0aGV5J3JlIHRoZSBzYW1lXHJcblx0XHQvLyBUaGUgYWN0aXZlIHZpZXcncyBjb250YWluZXJFbCBpcyB1c3VhbGx5IHdvcmtzcGFjZS1sZWFmLWNvbnRlbnQsIGFuZCBvdXIgY29udGFpbmVyIGlzIGluc2lkZSBpdFxyXG5cdFx0Y29uc3QgaXNPdXJWaWV3ID0gYWN0aXZlVmlld0NvbnRhaW5lciAmJiAoXHJcblx0XHRcdGFjdGl2ZVZpZXdDb250YWluZXIgPT09IGNvbnRhaW5lckVsIHx8IFxyXG5cdFx0XHRhY3RpdmVWaWV3Q29udGFpbmVyLmNvbnRhaW5zKGNvbnRhaW5lckVsKSB8fFxyXG5cdFx0XHRjb250YWluZXJFbC5jb250YWlucyhhY3RpdmVWaWV3Q29udGFpbmVyKVxyXG5cdFx0KTtcclxuXHRcdFxyXG5cdFx0aWYgKCFpc091clZpZXcpIHtcclxuXHRcdFx0cmV0dXJuOyAvLyBOb3Qgb3VyIHZpZXdcclxuXHRcdH1cclxuXHRcdFxyXG5cdFx0Ly8gR2V0IHRoZSBjb25maWcgZnJvbSB0aGUgdmlldyBpbnN0YW5jZSBzdG9yZWQgb24gdGhlIGNvbnRhaW5lciAtIHRoaXMgZW5zdXJlcyB3ZSBnZXQgdGhlIGN1cnJlbnQgY29uZmlnXHJcblx0XHRjb25zdCBjb250YWluZXJXaXRoVmlldyA9IGNvbnRhaW5lckVsIGFzIHVua25vd24gYXMgeyBcclxuXHRcdFx0X19jbXNDb25maWc/OiBCYXNlc0NvbmZpZztcclxuXHRcdFx0X19jbXNWaWV3PzogeyBjb25maWc/OiBCYXNlc0NvbmZpZyB9O1xyXG5cdFx0fTtcclxuXHRcdFxyXG5cdFx0Ly8gVHJ5IHRvIGdldCBjb25maWcgZnJvbSB0aGUgdmlldyBpbnN0YW5jZSBmaXJzdCAobW9zdCByZWxpYWJsZSlcclxuXHRcdGNvbnN0IHZpZXdJbnN0YW5jZSA9IGNvbnRhaW5lcldpdGhWaWV3Ll9fY21zVmlldztcclxuXHRcdGNvbnN0IHZpZXdDb25maWcgPSB2aWV3SW5zdGFuY2U/LmNvbmZpZyB8fCBjb250YWluZXJXaXRoVmlldy5fX2Ntc0NvbmZpZyB8fCBjb25maWc7XHJcblx0XHRcclxuXHRcdGNvbnN0IHNldHRpbmdzID0gcmVhZENNU1NldHRpbmdzKHZpZXdDb25maWcsIHBsdWdpblNldHRpbmdzKTtcclxuXHJcblx0XHQvLyBDaGVjayBpZiB3ZSBuZWVkIHRvIGludGVyY2VwdDogZWl0aGVyIFwiT3BlbiBuZXcgbm90ZXMgZGlyZWN0bHlcIiBpcyBlbmFibGVkLCBvciBhIGxvY2F0aW9uIGlzIHNwZWNpZmllZFxyXG5cdFx0Y29uc3QgaGFzQ3VzdG9tTG9jYXRpb24gPSBzZXR0aW5ncy5uZXdOb3RlTG9jYXRpb24gJiYgc2V0dGluZ3MubmV3Tm90ZUxvY2F0aW9uLnRyaW0oKSAhPT0gJyc7XHJcblx0XHRcclxuXHRcdGlmIChzZXR0aW5ncy5jdXN0b21pemVOZXdCdXR0b24gfHwgaGFzQ3VzdG9tTG9jYXRpb24pIHtcclxuXHRcdFx0Ly8gUHJldmVudCBkZWZhdWx0IHRvIGhhbmRsZSBub3RlIGNyZWF0aW9uIG91cnNlbHZlc1xyXG5cdFx0XHQvLyAoV2UgbXVzdCBpbnRlcmNlcHQgaWYgbG9jYXRpb24gaXMgc2V0LCBldmVuIGlmIFwiT3BlbiBuZXcgbm90ZXMgZGlyZWN0bHlcIiBpcyBvZmYsXHJcblx0XHRcdC8vIGJlY2F1c2UgQmFzZXMgbW9kYWwgZG9lc24ndCBzdXBwb3J0IGN1c3RvbSBsb2NhdGlvbnMpXHJcblx0XHRcdGUucHJldmVudERlZmF1bHQoKTtcclxuXHRcdFx0ZS5zdG9wUHJvcGFnYXRpb24oKTtcclxuXHRcdFx0ZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcclxuXHRcdFx0XHJcblx0XHRcdC8vIEhhbmRsZSB0aGUgbm90ZSBjcmVhdGlvbiBhc3luY2hyb25vdXNseVxyXG5cdFx0XHR2b2lkIChhc3luYyAoKSA9PiB7XHJcblx0XHRcdFx0Y29uc3QgbG9jYXRpb25JbnB1dCA9IHNldHRpbmdzLm5ld05vdGVMb2NhdGlvbj8udHJpbSgpIHx8ICcnO1xyXG5cdFx0XHRcdFxyXG5cdFx0XHRcdC8vIElmIGxvY2F0aW9uIGlzIGVtcHR5IGFuZCBcIk9wZW4gbmV3IG5vdGVzIGRpcmVjdGx5XCIgaXMgb2ZmLCB1c2UgT2JzaWRpYW4ncyBkZWZhdWx0XHJcblx0XHRcdFx0Ly8gKFRoaXMgY2FzZSBzaG91bGQgYmUgcmFyZSBzaW5jZSB3ZSBvbmx5IGludGVyY2VwdCBpZiBsb2NhdGlvbiBpcyBzZXQgb3Igb3B0aW9uIGlzIG9uKVxyXG5cdFx0XHRcdGlmIChsb2NhdGlvbklucHV0ID09PSAnJyAmJiAhc2V0dGluZ3MuY3VzdG9taXplTmV3QnV0dG9uKSB7XHJcblx0XHRcdFx0XHQvLyBVc2UgT2JzaWRpYW4ncyBkZWZhdWx0IG5ldyBub3RlIGxvY2F0aW9uXHJcblx0XHRcdFx0XHRjb25zdCB2YXVsdENvbmZpZyA9IChhcHAudmF1bHQgYXMgeyBjb25maWc/OiB7IG5ld0ZpbGVMb2NhdGlvbj86IHN0cmluZzsgbmV3RmlsZUZvbGRlclBhdGg/OiBzdHJpbmcgfSB9KS5jb25maWc7XHJcblx0XHRcdFx0XHRjb25zdCBuZXdGaWxlTG9jYXRpb24gPSB2YXVsdENvbmZpZz8ubmV3RmlsZUxvY2F0aW9uIHx8ICdmb2xkZXInO1xyXG5cdFx0XHRcdFx0Y29uc3QgbmV3RmlsZUZvbGRlclBhdGggPSB2YXVsdENvbmZpZz8ubmV3RmlsZUZvbGRlclBhdGggfHwgJyc7XHJcblx0XHRcdFx0XHRcclxuXHRcdFx0XHRcdGxldCBmaWxlUGF0aCA9ICdVbnRpdGxlZC5tZCc7XHJcblx0XHRcdFx0XHRcclxuXHRcdFx0XHRcdGlmIChuZXdGaWxlTG9jYXRpb24gPT09ICdmb2xkZXInICYmIG5ld0ZpbGVGb2xkZXJQYXRoKSB7XHJcblx0XHRcdFx0XHRcdGZpbGVQYXRoID0gYCR7bmV3RmlsZUZvbGRlclBhdGh9L1VudGl0bGVkLm1kYDtcclxuXHRcdFx0XHRcdH0gZWxzZSBpZiAobmV3RmlsZUxvY2F0aW9uID09PSAnY3VycmVudCcpIHtcclxuXHRcdFx0XHRcdFx0Y29uc3QgYWN0aXZlRmlsZSA9IGFwcC53b3Jrc3BhY2UuZ2V0QWN0aXZlRmlsZSgpO1xyXG5cdFx0XHRcdFx0XHRpZiAoYWN0aXZlRmlsZSAmJiBhY3RpdmVGaWxlLnBhcmVudCkge1xyXG5cdFx0XHRcdFx0XHRcdGZpbGVQYXRoID0gYCR7YWN0aXZlRmlsZS5wYXJlbnQucGF0aH0vVW50aXRsZWQubWRgO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9IGVsc2UgaWYgKG5ld0ZpbGVMb2NhdGlvbiA9PT0gJ3Jvb3QnKSB7XHJcblx0XHRcdFx0XHRcdGZpbGVQYXRoID0gJ1VudGl0bGVkLm1kJztcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFxyXG5cdFx0XHRcdFx0Y29uc3QgZmlsZSA9IGF3YWl0IGFwcC52YXVsdC5jcmVhdGUoZmlsZVBhdGgsICcnKTtcclxuXHRcdFx0XHRcdC8vIE9ubHkgb3BlbiBkaXJlY3RseSBpZiBcIk9wZW4gbmV3IG5vdGVzIGRpcmVjdGx5XCIgaXMgZW5hYmxlZFxyXG5cdFx0XHRcdFx0aWYgKHNldHRpbmdzLmN1c3RvbWl6ZU5ld0J1dHRvbikge1xyXG5cdFx0XHRcdFx0XHRhd2FpdCBhcHAud29ya3NwYWNlLm9wZW5MaW5rVGV4dChmaWxlLnBhdGgsICcnLCBmYWxzZSk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdFxyXG5cdFx0XHRcdC8vIElmIGxvY2F0aW9uIGlzIFwiL1wiIG9yIGp1c3Qgc2xhc2hlcywgdXNlIHZhdWx0IHJvb3RcclxuXHRcdFx0XHRpZiAobG9jYXRpb25JbnB1dCA9PT0gJy8nIHx8IGxvY2F0aW9uSW5wdXQucmVwbGFjZSgvXFwvL2csICcnKSA9PT0gJycpIHtcclxuXHRcdFx0XHRcdGNvbnN0IG5ld0ZpbGUgPSBhd2FpdCBhcHAudmF1bHQuY3JlYXRlKCdVbnRpdGxlZC5tZCcsICcnKTtcclxuXHRcdFx0XHRcdC8vIE9ubHkgb3BlbiBkaXJlY3RseSBpZiBcIk9wZW4gbmV3IG5vdGVzIGRpcmVjdGx5XCIgaXMgZW5hYmxlZFxyXG5cdFx0XHRcdFx0aWYgKHNldHRpbmdzLmN1c3RvbWl6ZU5ld0J1dHRvbikge1xyXG5cdFx0XHRcdFx0XHRhd2FpdCBhcHAud29ya3NwYWNlLm9wZW5MaW5rVGV4dChuZXdGaWxlLnBhdGgsICcnLCBmYWxzZSk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdFxyXG5cdFx0XHRcdC8vIE90aGVyd2lzZSwgdXNlIHRoZSBzcGVjaWZpZWQgZm9sZGVyXHJcblx0XHRcdFx0Y29uc3QgZm9sZGVyUGF0aCA9IGxvY2F0aW9uSW5wdXQucmVwbGFjZSgvXlxcLyt8XFwvKyQvZywgJycpO1xyXG5cdFx0XHRcdFxyXG5cdFx0XHRcdGxldCBmb2xkZXIgPSBhcHAudmF1bHQuZ2V0QWJzdHJhY3RGaWxlQnlQYXRoKGZvbGRlclBhdGgpO1xyXG5cdFx0XHRcdFxyXG5cdFx0XHRcdGlmICghZm9sZGVyIHx8ICEoJ2NoaWxkcmVuJyBpbiBmb2xkZXIpKSB7XHJcblx0XHRcdFx0XHRhd2FpdCBhcHAudmF1bHQuY3JlYXRlRm9sZGVyKGZvbGRlclBhdGgpO1xyXG5cdFx0XHRcdFx0Zm9sZGVyID0gYXBwLnZhdWx0LmdldEFic3RyYWN0RmlsZUJ5UGF0aChmb2xkZXJQYXRoKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0XHJcblx0XHRcdFx0aWYgKGZvbGRlciAmJiAnY2hpbGRyZW4nIGluIGZvbGRlcikge1xyXG5cdFx0XHRcdFx0Y29uc3QgbmV3RmlsZSA9IGF3YWl0IGFwcC52YXVsdC5jcmVhdGUoYCR7Zm9sZGVyUGF0aH0vVW50aXRsZWQubWRgLCAnJyk7XHJcblx0XHRcdFx0XHQvLyBPbmx5IG9wZW4gZGlyZWN0bHkgaWYgXCJPcGVuIG5ldyBub3RlcyBkaXJlY3RseVwiIGlzIGVuYWJsZWRcclxuXHRcdFx0XHRcdGlmIChzZXR0aW5ncy5jdXN0b21pemVOZXdCdXR0b24pIHtcclxuXHRcdFx0XHRcdFx0YXdhaXQgYXBwLndvcmtzcGFjZS5vcGVuTGlua1RleHQobmV3RmlsZS5wYXRoLCAnJywgZmFsc2UpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSkoKS5jYXRjaCgoZXJyb3IpID0+IHtcclxuXHRcdFx0XHRjb25zb2xlLmVycm9yKCdbQ01TXSBFcnJvciBjcmVhdGluZyBuZXcgbm90ZTonLCBlcnJvcik7XHJcblx0XHRcdH0pO1xyXG5cdFx0fVxyXG5cdH07XHJcblxyXG5cdC8vIEFkZCBldmVudCBsaXN0ZW5lciB0byBkb2N1bWVudCB3aXRoIGNhcHR1cmUgcGhhc2UgdG8gaW50ZXJjZXB0IGJlZm9yZSBCYXNlc1xyXG5cdGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgaW50ZXJjZXB0TmV3QnV0dG9uIGFzIEV2ZW50TGlzdGVuZXIsIHRydWUpO1xyXG5cdFxyXG5cdC8vIEFsc28gdHJ5IHRvIGludGVyY2VwdCBvbiB0aGUgYnV0dG9uIGRpcmVjdGx5IHdoZW4gaXQgYXBwZWFyc1xyXG5cdGNvbnN0IG9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoKCkgPT4ge1xyXG5cdFx0Y29uc3QgYnV0dG9ucyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5iYXNlcy10b29sYmFyLW5ldy1pdGVtLW1lbnUsIC5iYXNlcy10b29sYmFyLW5ldy1pdGVtLW1lbnUgLnRleHQtaWNvbi1idXR0b24sIFtkYXRhLWFjdGlvbj1cIm5ldy1pdGVtXCJdJyk7XHJcblx0XHRidXR0b25zLmZvckVhY2goKGJ1dHRvbkVsKSA9PiB7XHJcblx0XHRcdGNvbnN0IGJ1dHRvbldpdGhGbGFnID0gYnV0dG9uRWwgYXMgdW5rbm93biBhcyB7IF9fY21zSW50ZXJjZXB0ZWQ/OiBib29sZWFuIH07XHJcblx0XHRcdGlmICghYnV0dG9uV2l0aEZsYWcuX19jbXNJbnRlcmNlcHRlZCkge1xyXG5cdFx0XHRcdGJ1dHRvbldpdGhGbGFnLl9fY21zSW50ZXJjZXB0ZWQgPSB0cnVlO1xyXG5cdFx0XHRcdGJ1dHRvbkVsLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgaW50ZXJjZXB0TmV3QnV0dG9uIGFzIEV2ZW50TGlzdGVuZXIsIHRydWUpO1xyXG5cdFx0XHR9XHJcblx0XHR9KTtcclxuXHR9KTtcclxuXHJcblx0b2JzZXJ2ZXIub2JzZXJ2ZShkb2N1bWVudC5ib2R5LCB7IGNoaWxkTGlzdDogdHJ1ZSwgc3VidHJlZTogdHJ1ZSB9KTtcclxuXHRcclxuXHQvLyBDaGVjayBpbW1lZGlhdGVseVxyXG5cdGNvbnN0IGJ1dHRvbnMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuYmFzZXMtdG9vbGJhci1uZXctaXRlbS1tZW51LCAuYmFzZXMtdG9vbGJhci1uZXctaXRlbS1tZW51IC50ZXh0LWljb24tYnV0dG9uLCBbZGF0YS1hY3Rpb249XCJuZXctaXRlbVwiXScpO1xyXG5cdGJ1dHRvbnMuZm9yRWFjaCgoYnV0dG9uRWwpID0+IHtcclxuXHRcdGNvbnN0IGJ1dHRvbldpdGhGbGFnID0gYnV0dG9uRWwgYXMgdW5rbm93biBhcyB7IF9fY21zSW50ZXJjZXB0ZWQ/OiBib29sZWFuIH07XHJcblx0XHRpZiAoIWJ1dHRvbldpdGhGbGFnLl9fY21zSW50ZXJjZXB0ZWQpIHtcclxuXHRcdFx0YnV0dG9uV2l0aEZsYWcuX19jbXNJbnRlcmNlcHRlZCA9IHRydWU7XHJcblx0XHRcdGJ1dHRvbkVsLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgaW50ZXJjZXB0TmV3QnV0dG9uIGFzIEV2ZW50TGlzdGVuZXIsIHRydWUpO1xyXG5cdFx0fVxyXG5cdH0pO1xyXG5cdFxyXG5cdC8vIFJlZ2lzdGVyIGNsZWFudXBcclxuXHRyZWdpc3RlckNsZWFudXAoKCkgPT4ge1xyXG5cdFx0ZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2xpY2snLCBpbnRlcmNlcHROZXdCdXR0b24gYXMgRXZlbnRMaXN0ZW5lciwgdHJ1ZSk7XHJcblx0XHRvYnNlcnZlci5kaXNjb25uZWN0KCk7XHJcblx0fSk7XHJcbn1cclxuXHJcblxyXG4iLCAiLyoqXHJcbiAqIFByb3BlcnR5IFRvZ2dsZSBIYW5kbGVyXHJcbiAqIEhhbmRsZXMgdG9nZ2xpbmcgcHJvcGVydGllcyBvbiBmaWxlcyAoaW5jbHVkaW5nIGRyYWZ0IHN0YXR1cylcclxuICovXHJcblxyXG5pbXBvcnQgeyBBcHAsIFRGaWxlIH0gZnJvbSAnb2JzaWRpYW4nO1xyXG5pbXBvcnQgeyByZWFkQ01TU2V0dGluZ3MgfSBmcm9tICcuLi9zaGFyZWQvc2V0dGluZ3Mtc2NoZW1hJztcclxuaW1wb3J0IHR5cGUgeyBCYXNlc0NNU1NldHRpbmdzIH0gZnJvbSAnLi4vdHlwZXMnO1xyXG5pbXBvcnQgeyBwcm9jZXNzRmlsZUZyb250TWF0dGVyIH0gZnJvbSAnLi9mcm9udG1hdHRlci1oZWxwZXInO1xyXG5cclxuaW50ZXJmYWNlIEJhc2VzQ29uZmlnIHtcclxuXHRnZXQoa2V5OiBzdHJpbmcpOiB1bmtub3duO1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgUHJvcGVydHlUb2dnbGVIYW5kbGVyIHtcclxuXHRjb25zdHJ1Y3RvcihcclxuXHRcdHByaXZhdGUgYXBwOiBBcHAsXHJcblx0XHRwcml2YXRlIGNvbmZpZzogQmFzZXNDb25maWcsXHJcblx0XHRwcml2YXRlIHBsdWdpblNldHRpbmdzOiBCYXNlc0NNU1NldHRpbmdzLFxyXG5cdFx0cHJpdmF0ZSBvblJlZnJlc2g6ICgpID0+IHZvaWRcclxuXHQpIHt9XHJcblxyXG5cdGFzeW5jIGhhbmRsZVByb3BlcnR5VG9nZ2xlKHBhdGg6IHN0cmluZywgcHJvcGVydHk6IHN0cmluZywgdmFsdWU6IHVua25vd24pOiBQcm9taXNlPHZvaWQ+IHtcclxuXHRcdHRyeSB7XHJcblx0XHRcdGNvbnN0IGZpbGUgPSB0aGlzLmFwcC52YXVsdC5nZXRBYnN0cmFjdEZpbGVCeVBhdGgocGF0aCk7XHJcblx0XHRcdGlmICghKGZpbGUgaW5zdGFuY2VvZiBURmlsZSkpIHJldHVybjtcclxuXHJcblx0XHRcdC8vIFN0cmlwIFwibm90ZS5cIiBwcmVmaXggaWYgcHJlc2VudCAoQmFzZXMgdXNlcyBcIm5vdGUucHJvcGVydHlcIiBidXQgZnJvbnRtYXR0ZXIgdXNlcyBqdXN0IFwicHJvcGVydHlcIilcclxuXHRcdFx0Y29uc3QgY2xlYW5Qcm9wZXJ0eSA9IHByb3BlcnR5LnN0YXJ0c1dpdGgoJ25vdGUuJykgPyBwcm9wZXJ0eS5zdWJzdHJpbmcoNSkgOiBwcm9wZXJ0eTtcclxuXHJcblx0XHRcdC8vIFJlYWQgc2V0dGluZ3MgdG8gY2hlY2sgaWYgdGhpcyBpcyB0aGUgZHJhZnQgcHJvcGVydHlcclxuXHRcdFx0Y29uc3Qgc2V0dGluZ3MgPSByZWFkQ01TU2V0dGluZ3MoXHJcblx0XHRcdFx0dGhpcy5jb25maWcsXHJcblx0XHRcdFx0dGhpcy5wbHVnaW5TZXR0aW5nc1xyXG5cdFx0XHQpO1xyXG5cclxuXHRcdFx0Ly8gQ2hlY2sgaWYgdGhpcyBpcyB0aGUgZHJhZnQgc3RhdHVzIHByb3BlcnR5XHJcblx0XHRcdGNvbnN0IGlzRHJhZnRQcm9wZXJ0eSA9IHNldHRpbmdzLnNob3dEcmFmdFN0YXR1cyAmJiBjbGVhblByb3BlcnR5ID09PSAnZHJhZnQnO1xyXG5cdFx0XHRsZXQgc2hvdWxkUmVmcmVzaCA9IGZhbHNlO1xyXG5cclxuXHRcdFx0aWYgKGlzRHJhZnRQcm9wZXJ0eSkge1xyXG5cdFx0XHRcdC8vIENoZWNrIGlmIHVzaW5nIGZpbGVuYW1lIHByZWZpeCBtb2RlXHJcblx0XHRcdFx0aWYgKHNldHRpbmdzLmRyYWZ0U3RhdHVzVXNlRmlsZW5hbWVQcmVmaXgpIHtcclxuXHRcdFx0XHRcdC8vIEFsd2F5cyB1c2UgZmlsZW5hbWUtYmFzZWQgZGV0ZWN0aW9uIHdoZW4gdGhpcyBzZXR0aW5nIGlzIGVuYWJsZWRcclxuXHRcdFx0XHRcdGNvbnN0IGZpbGVOYW1lID0gZmlsZS5iYXNlbmFtZTsgLy8gYmFzZW5hbWUgZXhjbHVkZXMgZXh0ZW5zaW9uXHJcblx0XHRcdFx0XHRjb25zdCBzdGFydHNXaXRoVW5kZXJzY29yZSA9IGZpbGVOYW1lLnN0YXJ0c1dpdGgoJ18nKTtcclxuXHRcdFx0XHRcdGNvbnN0IGN1cnJlbnRQYXRoID0gZmlsZS5wYXRoO1xyXG5cdFx0XHRcdFx0Y29uc3QgcGF0aFBhcnRzID0gY3VycmVudFBhdGguc3BsaXQoJy8nKTtcclxuXHRcdFx0XHRcdFxyXG5cdFx0XHRcdFx0Ly8gVG9nZ2xlIGJhc2VkIG9uIGRlc2lyZWQgc3RhdGU6IGlmIHZhbHVlIGlzIHRydWUgKGRyYWZ0KSwgZW5zdXJlIHVuZGVyc2NvcmU7IGlmIGZhbHNlIChwdWJsaXNoZWQpLCByZW1vdmUgaXRcclxuXHRcdFx0XHRcdGlmICh2YWx1ZSA9PT0gdHJ1ZSkge1xyXG5cdFx0XHRcdFx0XHQvLyBUb2dnbGluZyB0byBkcmFmdCAtIGFkZCB1bmRlcnNjb3JlIGlmIG5vdCBwcmVzZW50XHJcblx0XHRcdFx0XHRcdGlmICghc3RhcnRzV2l0aFVuZGVyc2NvcmUpIHtcclxuXHRcdFx0XHRcdFx0XHRjb25zdCBuZXdOYW1lID0gYF8ke2ZpbGVOYW1lfSR7ZmlsZS5leHRlbnNpb24gPyBgLiR7ZmlsZS5leHRlbnNpb259YCA6ICcnfWA7XHJcblx0XHRcdFx0XHRcdFx0cGF0aFBhcnRzW3BhdGhQYXJ0cy5sZW5ndGggLSAxXSA9IG5ld05hbWU7XHJcblx0XHRcdFx0XHRcdFx0Y29uc3QgbmV3UGF0aCA9IHBhdGhQYXJ0cy5qb2luKCcvJyk7XHJcblx0XHRcdFx0XHRcdFx0YXdhaXQgdGhpcy5hcHAuZmlsZU1hbmFnZXIucmVuYW1lRmlsZShmaWxlLCBuZXdQYXRoKTtcclxuXHRcdFx0XHRcdFx0XHRzaG91bGRSZWZyZXNoID0gdHJ1ZTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0Ly8gVG9nZ2xpbmcgdG8gcHVibGlzaGVkIC0gcmVtb3ZlIHVuZGVyc2NvcmUgaWYgcHJlc2VudFxyXG5cdFx0XHRcdFx0XHRpZiAoc3RhcnRzV2l0aFVuZGVyc2NvcmUpIHtcclxuXHRcdFx0XHRcdFx0XHRjb25zdCBuZXdOYW1lID0gZmlsZU5hbWUuc3Vic3RyaW5nKDEpICsgKGZpbGUuZXh0ZW5zaW9uID8gYC4ke2ZpbGUuZXh0ZW5zaW9ufWAgOiAnJyk7XHJcblx0XHRcdFx0XHRcdFx0cGF0aFBhcnRzW3BhdGhQYXJ0cy5sZW5ndGggLSAxXSA9IG5ld05hbWU7XHJcblx0XHRcdFx0XHRcdFx0Y29uc3QgbmV3UGF0aCA9IHBhdGhQYXJ0cy5qb2luKCcvJyk7XHJcblx0XHRcdFx0XHRcdFx0YXdhaXQgdGhpcy5hcHAuZmlsZU1hbmFnZXIucmVuYW1lRmlsZShmaWxlLCBuZXdQYXRoKTtcclxuXHRcdFx0XHRcdFx0XHRzaG91bGRSZWZyZXNoID0gdHJ1ZTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHQvLyBVc2UgcHJvcGVydHktYmFzZWQgZGV0ZWN0aW9uIChmcm9udG1hdHRlcilcclxuXHRcdFx0XHRcdGNvbnN0IGNsZWFuQ29uZmlnUHJvcGVydHkgPSBzZXR0aW5ncy5kcmFmdFN0YXR1c1Byb3BlcnR5ICYmIHNldHRpbmdzLmRyYWZ0U3RhdHVzUHJvcGVydHkudHJpbSgpXHJcblx0XHRcdFx0XHRcdD8gKHNldHRpbmdzLmRyYWZ0U3RhdHVzUHJvcGVydHkuc3RhcnRzV2l0aCgnbm90ZS4nKSBcclxuXHRcdFx0XHRcdFx0XHQ/IHNldHRpbmdzLmRyYWZ0U3RhdHVzUHJvcGVydHkuc3Vic3RyaW5nKDUpIFxyXG5cdFx0XHRcdFx0XHRcdDogc2V0dGluZ3MuZHJhZnRTdGF0dXNQcm9wZXJ0eSlcclxuXHRcdFx0XHRcdFx0OiAnZHJhZnQnO1xyXG5cdFx0XHRcdFx0XHJcblx0XHRcdFx0XHRhd2FpdCBwcm9jZXNzRmlsZUZyb250TWF0dGVyKHRoaXMuYXBwLCBmaWxlLCAoZnJvbnRtYXR0ZXIpID0+IHtcclxuXHRcdFx0XHRcdFx0ZnJvbnRtYXR0ZXJbY2xlYW5Db25maWdQcm9wZXJ0eV0gPSB2YWx1ZTtcclxuXHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0c2hvdWxkUmVmcmVzaCA9IHRydWU7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdC8vIE5vcm1hbCBwcm9wZXJ0eSB0b2dnbGUgLSB1cGRhdGUgZnJvbnRtYXR0ZXJcclxuXHRcdFx0XHRhd2FpdCBwcm9jZXNzRmlsZUZyb250TWF0dGVyKHRoaXMuYXBwLCBmaWxlLCAoZnJvbnRtYXR0ZXIpID0+IHtcclxuXHRcdFx0XHRcdGZyb250bWF0dGVyW2NsZWFuUHJvcGVydHldID0gdmFsdWU7XHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdFx0c2hvdWxkUmVmcmVzaCA9IHRydWU7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdC8vIE9ubHkgcmVmcmVzaCBpZiB3ZSBhY3R1YWxseSBtYWRlIGEgY2hhbmdlXHJcblx0XHRcdGlmIChzaG91bGRSZWZyZXNoKSB7XHJcblx0XHRcdFx0Ly8gV2FpdCBmb3IgbWV0YWRhdGEgY2FjaGUgdG8gdXBkYXRlLCB0aGVuIHJlZnJlc2ggdmlld1xyXG5cdFx0XHRcdHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XHJcblx0XHRcdFx0XHR3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XHJcblx0XHRcdFx0XHRcdHRyeSB7XHJcblx0XHRcdFx0XHRcdFx0dGhpcy5vblJlZnJlc2goKTtcclxuXHRcdFx0XHRcdFx0fSBjYXRjaCAoZXJyb3IpIHtcclxuXHRcdFx0XHRcdFx0XHRjb25zb2xlLmVycm9yKCdFcnJvciByZWZyZXNoaW5nIHZpZXcgYWZ0ZXIgcHJvcGVydHkgdG9nZ2xlOicsIGVycm9yKTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fSwgMTAwKTtcclxuXHRcdFx0XHR9KTtcclxuXHRcdFx0fVxyXG5cdFx0fSBjYXRjaCAoZXJyb3IpIHtcclxuXHRcdFx0Y29uc29sZS5lcnJvcignRXJyb3IgdG9nZ2xpbmcgcHJvcGVydHk6JywgZXJyb3IpO1xyXG5cdFx0fVxyXG5cdH1cclxufVxyXG5cclxuXHJcbiIsICIvKipcclxuICogU2Nyb2xsIGFuZCBMYXlvdXQgTWFuYWdlclxyXG4gKiBIYW5kbGVzIGluZmluaXRlIHNjcm9sbCwgdmlydHVhbCBzY3JvbGxpbmcsIGFuZCByZXNwb25zaXZlIGdyaWQgbGF5b3V0XHJcbiAqL1xyXG5cclxuaW1wb3J0IHsgQXBwIH0gZnJvbSAnb2JzaWRpYW4nO1xyXG5pbXBvcnQgdHlwZSB7IENNU1NldHRpbmdzIH0gZnJvbSAnLi4vc2hhcmVkL2RhdGEtdHJhbnNmb3JtJztcclxuaW1wb3J0IHsgcmVhZENNU1NldHRpbmdzIH0gZnJvbSAnLi4vc2hhcmVkL3NldHRpbmdzLXNjaGVtYSc7XHJcbmltcG9ydCB0eXBlIHsgQmFzZXNDTVNTZXR0aW5ncyB9IGZyb20gJy4uL3R5cGVzJztcclxuXHJcbmludGVyZmFjZSBCYXNlc0NvbmZpZyB7XHJcblx0Z2V0KGtleTogc3RyaW5nKTogdW5rbm93bjtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBWaXJ0dWFsU2Nyb2xsUmFuZ2Uge1xyXG5cdHN0YXJ0SW5kZXg6IG51bWJlcjtcclxuXHRlbmRJbmRleDogbnVtYmVyO1xyXG5cdHRvcFBhZGRpbmc6IG51bWJlcjtcclxuXHRib3R0b21QYWRkaW5nOiBudW1iZXI7XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBTY3JvbGxMYXlvdXRNYW5hZ2VyIHtcclxuXHRwcml2YXRlIHNjcm9sbExpc3RlbmVyOiAoKCkgPT4gdm9pZCkgfCBudWxsID0gbnVsbDtcclxuXHRwcml2YXRlIHNjcm9sbFRocm90dGxlVGltZW91dDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0cHJpdmF0ZSByZXNpemVPYnNlcnZlcjogUmVzaXplT2JzZXJ2ZXIgfCBudWxsID0gbnVsbDtcclxuXHRwcml2YXRlIHdpbmRvd1Jlc2l6ZUhhbmRsZXI6ICgoKSA9PiB2b2lkKSB8IG51bGwgPSBudWxsO1xyXG5cdHByaXZhdGUgaXNMb2FkaW5nOiBib29sZWFuID0gZmFsc2U7XHJcblx0cHJpdmF0ZSBkaXNwbGF5ZWRDb3VudDogbnVtYmVyID0gNTA7XHJcblx0cHJpdmF0ZSB0b3RhbEVudHJpZXM6IG51bWJlciA9IDA7XHJcblx0cHJpdmF0ZSBjb25maWc6IEJhc2VzQ29uZmlnO1xyXG5cdHByaXZhdGUgY29uZmlnUG9sbEludGVydmFsOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHRwcml2YXRlIGxhc3RDYXJkU2l6ZTogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0cHJpdmF0ZSBsYXN0SW1hZ2VBc3BlY3RSYXRpbzogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblxyXG5cdC8vIFZpcnR1YWwgc2Nyb2xsaW5nIHN0YXRlXHJcblx0cHJpdmF0ZSB2aXJ0dWFsU2Nyb2xsRW5hYmxlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cdHByaXZhdGUgZXN0aW1hdGVkQ2FyZEhlaWdodDogbnVtYmVyID0gMzAwOyAvLyBEZWZhdWx0IGVzdGltYXRlLCB1cGRhdGVkIG9uIHJlbmRlclxyXG5cdHByaXZhdGUgY2FyZHNQZXJSb3c6IG51bWJlciA9IDM7IC8vIERlZmF1bHQsIHVwZGF0ZWQgYmFzZWQgb24gY29udGFpbmVyIHdpZHRoXHJcblx0cHJpdmF0ZSBsYXN0U2Nyb2xsVG9wOiBudW1iZXIgPSAwO1xyXG5cdHByaXZhdGUgdmlydHVhbFNjcm9sbENhbGxiYWNrOiAoKHJhbmdlOiBWaXJ0dWFsU2Nyb2xsUmFuZ2UpID0+IHZvaWQpIHwgbnVsbCA9IG51bGw7XHJcblxyXG5cdGNvbnN0cnVjdG9yKFxyXG5cdFx0cHJpdmF0ZSBjb250YWluZXJFbDogSFRNTEVsZW1lbnQsXHJcblx0XHRwcml2YXRlIGFwcDogQXBwLFxyXG5cdFx0Y29uZmlnOiBCYXNlc0NvbmZpZyxcclxuXHRcdHByaXZhdGUgcGx1Z2luU2V0dGluZ3M6IEJhc2VzQ01TU2V0dGluZ3MsXHJcblx0XHRwcml2YXRlIG9uTG9hZE1vcmU6ICgpID0+IHZvaWQsXHJcblx0XHRwcml2YXRlIHJlZ2lzdGVyQ2xlYW51cDogKGNsZWFudXA6ICgpID0+IHZvaWQpID0+IHZvaWRcclxuXHQpIHtcclxuXHRcdHRoaXMuY29uZmlnID0gY29uZmlnO1xyXG5cdFx0Y29uc3QgaXNNb2JpbGUgPSAodGhpcy5hcHAgYXMgeyBpc01vYmlsZT86IGJvb2xlYW4gfSkuaXNNb2JpbGUgPz8gZmFsc2U7XHJcblx0XHR0aGlzLmRpc3BsYXllZENvdW50ID0gaXNNb2JpbGUgPyAyNSA6IDUwO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogVXBkYXRlIHRoZSBjb25maWcgcmVmZXJlbmNlICh1c2VmdWwgd2hlbiBjb25maWcgYmVjb21lcyBhdmFpbGFibGUgYWZ0ZXIgY29uc3RydWN0aW9uKVxyXG5cdCAqL1xyXG5cdHVwZGF0ZUNvbmZpZyhjb25maWc6IEJhc2VzQ29uZmlnKTogdm9pZCB7XHJcblx0XHR0aGlzLmNvbmZpZyA9IGNvbmZpZztcclxuXHR9XHJcblxyXG5cdHNldERpc3BsYXllZENvdW50KGNvdW50OiBudW1iZXIpOiB2b2lkIHtcclxuXHRcdHRoaXMuZGlzcGxheWVkQ291bnQgPSBjb3VudDtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIFJlc2V0IGRpc3BsYXllZCBjb3VudCBhbmQgc2Nyb2xsIHBvc2l0aW9uXHJcblx0ICovXHJcblx0cmVzZXRTY3JvbGwoKTogdm9pZCB7XHJcblx0XHRjb25zdCBpc01vYmlsZSA9ICh0aGlzLmFwcCBhcyB7IGlzTW9iaWxlPzogYm9vbGVhbiB9KS5pc01vYmlsZSA/PyBmYWxzZTtcclxuXHRcdHRoaXMuZGlzcGxheWVkQ291bnQgPSBpc01vYmlsZSA/IDI1IDogNTA7XHJcblx0XHR0aGlzLmNvbnRhaW5lckVsLnNjcm9sbFRvcCA9IDA7XHJcblx0fVxyXG5cclxuXHRnZXREaXNwbGF5ZWRDb3VudCgpOiBudW1iZXIge1xyXG5cdFx0cmV0dXJuIHRoaXMuZGlzcGxheWVkQ291bnQ7XHJcblx0fVxyXG5cclxuXHRzZXRJc0xvYWRpbmcobG9hZGluZzogYm9vbGVhbik6IHZvaWQge1xyXG5cdFx0dGhpcy5pc0xvYWRpbmcgPSBsb2FkaW5nO1xyXG5cdH1cclxuXHJcblx0c2V0dXBJbmZpbml0ZVNjcm9sbCh0b3RhbEVudHJpZXM6IG51bWJlcik6IHZvaWQge1xyXG5cdFx0dGhpcy50b3RhbEVudHJpZXMgPSB0b3RhbEVudHJpZXM7XHJcblx0XHRcclxuXHRcdC8vIENsZWFuIHVwIGV4aXN0aW5nIGxpc3RlbmVyXHJcblx0XHRpZiAodGhpcy5zY3JvbGxMaXN0ZW5lcikge1xyXG5cdFx0XHR0aGlzLmNvbnRhaW5lckVsLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIHRoaXMuc2Nyb2xsTGlzdGVuZXIpO1xyXG5cdFx0XHR0aGlzLnNjcm9sbExpc3RlbmVyID0gbnVsbDtcclxuXHRcdH1cclxuXHJcblx0XHQvLyBTa2lwIGlmIGFsbCBpdGVtcyBhbHJlYWR5IGRpc3BsYXllZFxyXG5cdFx0aWYgKHRoaXMuZGlzcGxheWVkQ291bnQgPj0gdG90YWxFbnRyaWVzKSB7XHJcblx0XHRcdHJldHVybjtcclxuXHRcdH1cclxuXHJcblx0XHQvLyBDcmVhdGUgc2Nyb2xsIGhhbmRsZXIgd2l0aCB0aHJvdHRsaW5nXHJcblx0XHR0aGlzLnNjcm9sbExpc3RlbmVyID0gKCkgPT4ge1xyXG5cdFx0XHQvLyBUaHJvdHRsZTogc2tpcCBpZiBjb29sZG93biBhY3RpdmVcclxuXHRcdFx0aWYgKHRoaXMuc2Nyb2xsVGhyb3R0bGVUaW1lb3V0ICE9PSBudWxsKSB7XHJcblx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHQvLyBTa2lwIGlmIGFscmVhZHkgbG9hZGluZ1xyXG5cdFx0XHRpZiAodGhpcy5pc0xvYWRpbmcpIHtcclxuXHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdC8vIENhbGN1bGF0ZSBkaXN0YW5jZSBmcm9tIGJvdHRvbVxyXG5cdFx0XHRjb25zdCBzY3JvbGxUb3AgPSB0aGlzLmNvbnRhaW5lckVsLnNjcm9sbFRvcDtcclxuXHRcdFx0Y29uc3Qgc2Nyb2xsSGVpZ2h0ID0gdGhpcy5jb250YWluZXJFbC5zY3JvbGxIZWlnaHQ7XHJcblx0XHRcdGNvbnN0IGNsaWVudEhlaWdodCA9IHRoaXMuY29udGFpbmVyRWwuY2xpZW50SGVpZ2h0O1xyXG5cdFx0XHRjb25zdCBkaXN0YW5jZUZyb21Cb3R0b20gPSBzY3JvbGxIZWlnaHQgLSAoc2Nyb2xsVG9wICsgY2xpZW50SGVpZ2h0KTtcclxuXHJcblx0XHRcdC8vIER5bmFtaWMgdGhyZXNob2xkIGJhc2VkIG9uIHZpZXdwb3J0IGFuZCBkZXZpY2VcclxuXHRcdFx0Y29uc3QgaXNNb2JpbGUgPSAodGhpcy5hcHAgYXMgeyBpc01vYmlsZT86IGJvb2xlYW4gfSkuaXNNb2JpbGUgPz8gZmFsc2U7XHJcblx0XHRcdGNvbnN0IHZpZXdwb3J0TXVsdGlwbGllciA9IGlzTW9iaWxlID8gMSA6IDI7XHJcblx0XHRcdGNvbnN0IHRocmVzaG9sZCA9IGNsaWVudEhlaWdodCAqIHZpZXdwb3J0TXVsdGlwbGllcjtcclxuXHJcblx0XHRcdC8vIENoZWNrIGlmIHNob3VsZCBsb2FkIG1vcmVcclxuXHRcdFx0aWYgKGRpc3RhbmNlRnJvbUJvdHRvbSA8IHRocmVzaG9sZCAmJiB0aGlzLmRpc3BsYXllZENvdW50IDwgdG90YWxFbnRyaWVzKSB7XHJcblx0XHRcdFx0dGhpcy5pc0xvYWRpbmcgPSB0cnVlO1xyXG5cdFx0XHRcdGNvbnN0IGJhdGNoU2l6ZSA9IDUwO1xyXG5cdFx0XHRcdHRoaXMuZGlzcGxheWVkQ291bnQgPSBNYXRoLm1pbih0aGlzLmRpc3BsYXllZENvdW50ICsgYmF0Y2hTaXplLCB0b3RhbEVudHJpZXMpO1xyXG5cdFx0XHRcdC8vIENhbGwgb25Mb2FkTW9yZSB3aGljaCB3aWxsIHRyaWdnZXIgb25EYXRhVXBkYXRlZFxyXG5cdFx0XHRcdC8vIG9uRGF0YVVwZGF0ZWQgd2lsbCB0aGVuIGNhbGwgc2V0dXBJbmZpbml0ZVNjcm9sbCBhZ2FpbiB3aXRoIHVwZGF0ZWQgY291bnRcclxuXHRcdFx0XHR0aGlzLm9uTG9hZE1vcmUoKTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Ly8gU3RhcnQgdGhyb3R0bGUgY29vbGRvd25cclxuXHRcdFx0dGhpcy5zY3JvbGxUaHJvdHRsZVRpbWVvdXQgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XHJcblx0XHRcdFx0dGhpcy5zY3JvbGxUaHJvdHRsZVRpbWVvdXQgPSBudWxsO1xyXG5cdFx0XHR9LCAxMDApO1xyXG5cdFx0fTtcclxuXHJcblx0XHQvLyBBdHRhY2ggbGlzdGVuZXJcclxuXHRcdHRoaXMuY29udGFpbmVyRWwuYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgdGhpcy5zY3JvbGxMaXN0ZW5lcik7XHJcblxyXG5cdFx0Ly8gUmVnaXN0ZXIgY2xlYW51cFxyXG5cdFx0dGhpcy5yZWdpc3RlckNsZWFudXAoKCkgPT4ge1xyXG5cdFx0XHRpZiAodGhpcy5zY3JvbGxMaXN0ZW5lcikge1xyXG5cdFx0XHRcdHRoaXMuY29udGFpbmVyRWwucmVtb3ZlRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgdGhpcy5zY3JvbGxMaXN0ZW5lcik7XHJcblx0XHRcdH1cclxuXHRcdFx0aWYgKHRoaXMuc2Nyb2xsVGhyb3R0bGVUaW1lb3V0ICE9PSBudWxsKSB7XHJcblx0XHRcdFx0d2luZG93LmNsZWFyVGltZW91dCh0aGlzLnNjcm9sbFRocm90dGxlVGltZW91dCk7XHJcblx0XHRcdH1cclxuXHRcdH0pO1xyXG5cdH1cclxuXHJcblx0c2V0dXBSZXNpemVPYnNlcnZlcigpOiB2b2lkIHtcclxuXHRcdC8vIE9ubHkgc2V0IHVwIG9uY2UgLSBidXQgbm93IHdlIGp1c3QgbmVlZCB0byBzZXQgdGhlIGNhcmQgbWluIHdpZHRoXHJcblx0XHQvLyBDU1MgR3JpZCdzIGF1dG8tZmlsbCB3aWxsIGhhbmRsZSBjb2x1bW4gc25hcHBpbmcgYXV0b21hdGljYWxseVxyXG5cdFx0aWYgKHRoaXMucmVzaXplT2JzZXJ2ZXIpIHtcclxuXHRcdFx0cmV0dXJuOyAvLyBBbHJlYWR5IHNldCB1cFxyXG5cdFx0fVxyXG5cclxuXHRcdC8vIENyZWF0ZSB0aGUgdXBkYXRlIGZ1bmN0aW9uIC0ganVzdCBzZXQgY2FyZCBtaW4gd2lkdGgsIENTUyBHcmlkIGhhbmRsZXMgdGhlIHJlc3RcclxuXHRcdGNvbnN0IHVwZGF0ZUdyaWQgPSAoKSA9PiB7XHJcblx0XHRcdC8vIEd1YXJkOiBlbnN1cmUgY29uZmlnIGV4aXN0cyBhbmQgaGFzIGdldCBtZXRob2QgYmVmb3JlIHVzaW5nIGl0XHJcblx0XHRcdGlmICghdGhpcy5jb25maWcgfHwgdHlwZW9mIHRoaXMuY29uZmlnLmdldCAhPT0gJ2Z1bmN0aW9uJykge1xyXG5cdFx0XHRcdHJldHVybjsgLy8gQ29uZmlnIG5vdCByZWFkeSB5ZXQsIHNraXAgdXBkYXRlXHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGNvbnN0IGN1cnJlbnRTZXR0aW5ncyA9IHJlYWRDTVNTZXR0aW5ncyhcclxuXHRcdFx0XHR0aGlzLmNvbmZpZyxcclxuXHRcdFx0XHR0aGlzLnBsdWdpblNldHRpbmdzXHJcblx0XHRcdCk7XHJcblx0XHRcdGNvbnN0IGNhcmRNaW5XaWR0aCA9IGN1cnJlbnRTZXR0aW5ncy5jYXJkU2l6ZTtcclxuXHRcdFx0Y29uc3QgaW1hZ2VBc3BlY3RSYXRpbyA9IGN1cnJlbnRTZXR0aW5ncy5pbWFnZUFzcGVjdFJhdGlvO1xyXG5cclxuXHRcdFx0Ly8gU2V0IENTUyB2YXJpYWJsZXMgb24gY29udGFpbmVyIC0gQ1NTIEdyaWQgYXV0by1maWxsIGhhbmRsZXMgY29sdW1uIHNuYXBwaW5nXHJcblx0XHRcdHRoaXMuY29udGFpbmVyRWwuc3R5bGUuc2V0UHJvcGVydHkoJy0tY2FyZC1taW4td2lkdGgnLCBgJHtjYXJkTWluV2lkdGh9cHhgKTtcclxuXHRcdFx0dGhpcy5jb250YWluZXJFbC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1iYXNlcy1jbXMtaW1hZ2UtYXNwZWN0LXJhdGlvJywgU3RyaW5nKGltYWdlQXNwZWN0UmF0aW8pKTtcclxuXHRcdFx0XHJcblx0XHRcdC8vIFRyYWNrIGxhc3QgdmFsdWVzIGZvciBwb2xsaW5nXHJcblx0XHRcdHRoaXMubGFzdENhcmRTaXplID0gY2FyZE1pbldpZHRoO1xyXG5cdFx0XHR0aGlzLmxhc3RJbWFnZUFzcGVjdFJhdGlvID0gaW1hZ2VBc3BlY3RSYXRpbztcclxuXHRcdH07XHJcblxyXG5cdFx0Ly8gU2V0IHVwIFJlc2l6ZU9ic2VydmVyIHRvIGNhbGwgdXBkYXRlR3JpZCB3aGVuIGNvbnRhaW5lciByZXNpemVzXHJcblx0XHR0aGlzLnJlc2l6ZU9ic2VydmVyID0gbmV3IFJlc2l6ZU9ic2VydmVyKHVwZGF0ZUdyaWQpO1xyXG5cdFx0dGhpcy5yZXNpemVPYnNlcnZlci5vYnNlcnZlKHRoaXMuY29udGFpbmVyRWwpO1xyXG5cdFx0XHJcblx0XHQvLyBDYWxsIHVwZGF0ZUdyaWQgaW1tZWRpYXRlbHkgdG8gc2V0IGluaXRpYWwgdmFsdWVzXHJcblx0XHR1cGRhdGVHcmlkKCk7XHJcblx0XHRcclxuXHRcdC8vIFNldCB1cCBwb2xsaW5nIHRvIGRldGVjdCBjb25maWcgY2hhbmdlcyAoZm9yIHJlYWwtdGltZSB1cGRhdGVzIHdoZW4gY2FyZCBzaXplIGNoYW5nZXMpXHJcblx0XHQvLyBQb2xsIGV2ZXJ5IDEwMG1zIHRvIGNoZWNrIGlmIGNhcmRTaXplIG9yIGltYWdlQXNwZWN0UmF0aW8gaGFzIGNoYW5nZWRcclxuXHRcdHRoaXMuY29uZmlnUG9sbEludGVydmFsID0gd2luZG93LnNldEludGVydmFsKCgpID0+IHtcclxuXHRcdFx0aWYgKCF0aGlzLmNvbmZpZyB8fCB0eXBlb2YgdGhpcy5jb25maWcuZ2V0ICE9PSAnZnVuY3Rpb24nKSB7XHJcblx0XHRcdFx0cmV0dXJuOyAvLyBDb25maWcgbm90IHJlYWR5IHlldCwgc2tpcCBjaGVja1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRjb25zdCBjdXJyZW50U2V0dGluZ3MgPSByZWFkQ01TU2V0dGluZ3MoXHJcblx0XHRcdFx0dGhpcy5jb25maWcsXHJcblx0XHRcdFx0dGhpcy5wbHVnaW5TZXR0aW5nc1xyXG5cdFx0XHQpO1xyXG5cdFx0XHRjb25zdCBjdXJyZW50Q2FyZFNpemUgPSBjdXJyZW50U2V0dGluZ3MuY2FyZFNpemU7XHJcblx0XHRcdGNvbnN0IGN1cnJlbnRJbWFnZUFzcGVjdFJhdGlvID0gY3VycmVudFNldHRpbmdzLmltYWdlQXNwZWN0UmF0aW87XHJcblxyXG5cdFx0XHQvLyBDaGVjayBpZiBjYXJkU2l6ZSBvciBpbWFnZUFzcGVjdFJhdGlvIGhhcyBjaGFuZ2VkXHJcblx0XHRcdGlmICh0aGlzLmxhc3RDYXJkU2l6ZSAhPT0gY3VycmVudENhcmRTaXplIHx8IHRoaXMubGFzdEltYWdlQXNwZWN0UmF0aW8gIT09IGN1cnJlbnRJbWFnZUFzcGVjdFJhdGlvKSB7XHJcblx0XHRcdFx0Ly8gVXBkYXRlIGdyaWQgbGF5b3V0IGltbWVkaWF0ZWx5IHdoZW4gc2V0dGluZ3MgY2hhbmdlXHJcblx0XHRcdFx0dGhpcy5jb250YWluZXJFbC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1jYXJkLW1pbi13aWR0aCcsIGAke2N1cnJlbnRDYXJkU2l6ZX1weGApO1xyXG5cdFx0XHRcdHRoaXMuY29udGFpbmVyRWwuc3R5bGUuc2V0UHJvcGVydHkoJy0tYmFzZXMtY21zLWltYWdlLWFzcGVjdC1yYXRpbycsIFN0cmluZyhjdXJyZW50SW1hZ2VBc3BlY3RSYXRpbykpO1xyXG5cdFx0XHRcdFxyXG5cdFx0XHRcdC8vIFVwZGF0ZSB0cmFja2VkIHZhbHVlc1xyXG5cdFx0XHRcdHRoaXMubGFzdENhcmRTaXplID0gY3VycmVudENhcmRTaXplO1xyXG5cdFx0XHRcdHRoaXMubGFzdEltYWdlQXNwZWN0UmF0aW8gPSBjdXJyZW50SW1hZ2VBc3BlY3RSYXRpbztcclxuXHRcdFx0fVxyXG5cdFx0fSwgMTAwKTtcclxuXHRcdFxyXG5cdFx0Ly8gUmVnaXN0ZXIgY2xlYW51cCBmb3IgcG9sbGluZyBpbnRlcnZhbFxyXG5cdFx0dGhpcy5yZWdpc3RlckNsZWFudXAoKCkgPT4ge1xyXG5cdFx0XHRpZiAodGhpcy5jb25maWdQb2xsSW50ZXJ2YWwgIT09IG51bGwpIHtcclxuXHRcdFx0XHR3aW5kb3cuY2xlYXJJbnRlcnZhbCh0aGlzLmNvbmZpZ1BvbGxJbnRlcnZhbCk7XHJcblx0XHRcdFx0dGhpcy5jb25maWdQb2xsSW50ZXJ2YWwgPSBudWxsO1xyXG5cdFx0XHR9XHJcblx0XHR9KTtcclxuXHR9XHJcblxyXG5cdHVwZGF0ZUdyaWRMYXlvdXQoc2V0dGluZ3M6IENNU1NldHRpbmdzKTogdm9pZCB7XHJcblx0XHQvLyBKdXN0IHNldCB0aGUgY2FyZCBtaW4gd2lkdGggLSBDU1MgR3JpZCBhdXRvLWZpbGwgaGFuZGxlcyBjb2x1bW4gc25hcHBpbmcgYXV0b21hdGljYWxseVxyXG5cdFx0dGhpcy5jb250YWluZXJFbC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1jYXJkLW1pbi13aWR0aCcsIGAke3NldHRpbmdzLmNhcmRTaXplfXB4YCk7XHJcblx0XHR0aGlzLmNvbnRhaW5lckVsLnN0eWxlLnNldFByb3BlcnR5KCctLWJhc2VzLWNtcy1pbWFnZS1hc3BlY3QtcmF0aW8nLCBTdHJpbmcoc2V0dGluZ3MuaW1hZ2VBc3BlY3RSYXRpbykpO1xyXG5cdFx0XHJcblx0XHQvLyBVcGRhdGUgdHJhY2tlZCB2YWx1ZXMgdG8gcHJldmVudCB1bm5lY2Vzc2FyeSBwb2xsaW5nIHRyaWdnZXJzXHJcblx0XHR0aGlzLmxhc3RDYXJkU2l6ZSA9IHNldHRpbmdzLmNhcmRTaXplO1xyXG5cdFx0dGhpcy5sYXN0SW1hZ2VBc3BlY3RSYXRpbyA9IHNldHRpbmdzLmltYWdlQXNwZWN0UmF0aW87XHJcblx0fVxyXG5cclxuXHRjbGVhbnVwKCk6IHZvaWQge1xyXG5cdFx0aWYgKHRoaXMucmVzaXplT2JzZXJ2ZXIpIHtcclxuXHRcdFx0dGhpcy5yZXNpemVPYnNlcnZlci5kaXNjb25uZWN0KCk7XHJcblx0XHRcdHRoaXMucmVzaXplT2JzZXJ2ZXIgPSBudWxsO1xyXG5cdFx0fVxyXG5cdFx0aWYgKHRoaXMud2luZG93UmVzaXplSGFuZGxlcikge1xyXG5cdFx0XHR3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigncmVzaXplJywgdGhpcy53aW5kb3dSZXNpemVIYW5kbGVyKTtcclxuXHRcdFx0dGhpcy53aW5kb3dSZXNpemVIYW5kbGVyID0gbnVsbDtcclxuXHRcdH1cclxuXHRcdGlmICh0aGlzLnNjcm9sbExpc3RlbmVyKSB7XHJcblx0XHRcdHRoaXMuY29udGFpbmVyRWwucmVtb3ZlRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgdGhpcy5zY3JvbGxMaXN0ZW5lcik7XHJcblx0XHRcdHRoaXMuc2Nyb2xsTGlzdGVuZXIgPSBudWxsO1xyXG5cdFx0fVxyXG5cdFx0aWYgKHRoaXMuc2Nyb2xsVGhyb3R0bGVUaW1lb3V0ICE9PSBudWxsKSB7XHJcblx0XHRcdHdpbmRvdy5jbGVhclRpbWVvdXQodGhpcy5zY3JvbGxUaHJvdHRsZVRpbWVvdXQpO1xyXG5cdFx0XHR0aGlzLnNjcm9sbFRocm90dGxlVGltZW91dCA9IG51bGw7XHJcblx0XHR9XHJcblx0XHRpZiAodGhpcy5jb25maWdQb2xsSW50ZXJ2YWwgIT09IG51bGwpIHtcclxuXHRcdFx0d2luZG93LmNsZWFySW50ZXJ2YWwodGhpcy5jb25maWdQb2xsSW50ZXJ2YWwpO1xyXG5cdFx0XHR0aGlzLmNvbmZpZ1BvbGxJbnRlcnZhbCA9IG51bGw7XHJcblx0XHR9XHJcblx0XHR0aGlzLnZpcnR1YWxTY3JvbGxDYWxsYmFjayA9IG51bGw7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBDaGVjayBpZiB2aXJ0dWFsIHNjcm9sbGluZyBzaG91bGQgYmUgZW5hYmxlZCBiYXNlZCBvbiB0b3RhbCBlbnRyaWVzIGFuZCBzZXR0aW5nc1xyXG5cdCAqL1xyXG5cdHNob3VsZEVuYWJsZVZpcnR1YWxTY3JvbGwodG90YWxFbnRyaWVzOiBudW1iZXIpOiBib29sZWFuIHtcclxuXHRcdGNvbnN0IHRocmVzaG9sZCA9IHRoaXMucGx1Z2luU2V0dGluZ3MudmlydHVhbFNjcm9sbFRocmVzaG9sZDtcclxuXHRcdHJldHVybiB0b3RhbEVudHJpZXMgPiB0aHJlc2hvbGQ7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBHZXQgd2hldGhlciB2aXJ0dWFsIHNjcm9sbGluZyBpcyBjdXJyZW50bHkgZW5hYmxlZFxyXG5cdCAqL1xyXG5cdGlzVmlydHVhbFNjcm9sbEVuYWJsZWQoKTogYm9vbGVhbiB7XHJcblx0XHRyZXR1cm4gdGhpcy52aXJ0dWFsU2Nyb2xsRW5hYmxlZDtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIFVwZGF0ZSBlc3RpbWF0ZWQgY2FyZCBoZWlnaHQgYmFzZWQgb24gYWN0dWFsIHJlbmRlcmVkIGNhcmRzXHJcblx0ICovXHJcblx0dXBkYXRlQ2FyZE1ldHJpY3MoY2FyZEhlaWdodDogbnVtYmVyLCBjYXJkc1BlclJvdzogbnVtYmVyKTogdm9pZCB7XHJcblx0XHRpZiAoY2FyZEhlaWdodCA+IDApIHtcclxuXHRcdFx0dGhpcy5lc3RpbWF0ZWRDYXJkSGVpZ2h0ID0gY2FyZEhlaWdodDtcclxuXHRcdH1cclxuXHRcdGlmIChjYXJkc1BlclJvdyA+IDApIHtcclxuXHRcdFx0dGhpcy5jYXJkc1BlclJvdyA9IGNhcmRzUGVyUm93O1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogQ2FsY3VsYXRlIGNhcmRzIHBlciByb3cgYmFzZWQgb24gY29udGFpbmVyIHdpZHRoIGFuZCBjYXJkIG1pbiB3aWR0aFxyXG5cdCAqL1xyXG5cdHByaXZhdGUgY2FsY3VsYXRlQ2FyZHNQZXJSb3coKTogbnVtYmVyIHtcclxuXHRcdGNvbnN0IGNvbnRhaW5lcldpZHRoID0gdGhpcy5jb250YWluZXJFbC5jbGllbnRXaWR0aDtcclxuXHRcdGNvbnN0IGNhcmRNaW5XaWR0aCA9IHRoaXMubGFzdENhcmRTaXplIHx8IDI4MDtcclxuXHRcdGNvbnN0IGdhcCA9IDE2OyAvLyBDU1MgZ3JpZCBnYXBcclxuXHRcdHJldHVybiBNYXRoLm1heCgxLCBNYXRoLmZsb29yKChjb250YWluZXJXaWR0aCArIGdhcCkgLyAoY2FyZE1pbldpZHRoICsgZ2FwKSkpO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogQ2FsY3VsYXRlIHdoaWNoIGNhcmRzIHNob3VsZCBiZSB2aXNpYmxlIGluIHRoZSB2aWV3cG9ydFxyXG5cdCAqL1xyXG5cdGNhbGN1bGF0ZVZpc2libGVSYW5nZSh0b3RhbEVudHJpZXM6IG51bWJlcik6IFZpcnR1YWxTY3JvbGxSYW5nZSB7XHJcblx0XHRjb25zdCBzY3JvbGxUb3AgPSB0aGlzLmNvbnRhaW5lckVsLnNjcm9sbFRvcDtcclxuXHRcdGNvbnN0IHZpZXdwb3J0SGVpZ2h0ID0gdGhpcy5jb250YWluZXJFbC5jbGllbnRIZWlnaHQ7XHJcblx0XHRjb25zdCBidWZmZXIgPSB0aGlzLnBsdWdpblNldHRpbmdzLnZpcnR1YWxTY3JvbGxCdWZmZXI7XHJcblxyXG5cdFx0Ly8gVXBkYXRlIGNhcmRzIHBlciByb3cgYmFzZWQgb24gY3VycmVudCBjb250YWluZXJcclxuXHRcdHRoaXMuY2FyZHNQZXJSb3cgPSB0aGlzLmNhbGN1bGF0ZUNhcmRzUGVyUm93KCk7XHJcblxyXG5cdFx0Ly8gQ2FsY3VsYXRlIHJvdyBoZWlnaHQgKGNhcmQgaGVpZ2h0ICsgZ2FwKVxyXG5cdFx0Y29uc3Qgcm93SGVpZ2h0ID0gdGhpcy5lc3RpbWF0ZWRDYXJkSGVpZ2h0ICsgMTY7IC8vIDE2cHggZ2FwXHJcblxyXG5cdFx0Ly8gQ2FsY3VsYXRlIHRvdGFsIHJvd3NcclxuXHRcdGNvbnN0IHRvdGFsUm93cyA9IE1hdGguY2VpbCh0b3RhbEVudHJpZXMgLyB0aGlzLmNhcmRzUGVyUm93KTtcclxuXHJcblx0XHQvLyBDYWxjdWxhdGUgd2hpY2ggcm93cyBhcmUgdmlzaWJsZVxyXG5cdFx0Y29uc3QgZmlyc3RWaXNpYmxlUm93ID0gTWF0aC5tYXgoMCwgTWF0aC5mbG9vcihzY3JvbGxUb3AgLyByb3dIZWlnaHQpIC0gYnVmZmVyKTtcclxuXHRcdGNvbnN0IGxhc3RWaXNpYmxlUm93ID0gTWF0aC5taW4oXHJcblx0XHRcdHRvdGFsUm93cyAtIDEsXHJcblx0XHRcdE1hdGguY2VpbCgoc2Nyb2xsVG9wICsgdmlld3BvcnRIZWlnaHQpIC8gcm93SGVpZ2h0KSArIGJ1ZmZlclxyXG5cdFx0KTtcclxuXHJcblx0XHQvLyBDb252ZXJ0IHJvd3MgdG8gY2FyZCBpbmRpY2VzXHJcblx0XHRjb25zdCBzdGFydEluZGV4ID0gZmlyc3RWaXNpYmxlUm93ICogdGhpcy5jYXJkc1BlclJvdztcclxuXHRcdGNvbnN0IGVuZEluZGV4ID0gTWF0aC5taW4odG90YWxFbnRyaWVzIC0gMSwgKGxhc3RWaXNpYmxlUm93ICsgMSkgKiB0aGlzLmNhcmRzUGVyUm93IC0gMSk7XHJcblxyXG5cdFx0Ly8gQ2FsY3VsYXRlIHBhZGRpbmcgZm9yIHNjcm9sbCBwb3NpdGlvblxyXG5cdFx0Y29uc3QgdG9wUGFkZGluZyA9IGZpcnN0VmlzaWJsZVJvdyAqIHJvd0hlaWdodDtcclxuXHRcdGNvbnN0IGJvdHRvbVBhZGRpbmcgPSBNYXRoLm1heCgwLCAodG90YWxSb3dzIC0gbGFzdFZpc2libGVSb3cgLSAxKSAqIHJvd0hlaWdodCk7XHJcblxyXG5cdFx0cmV0dXJuIHtcclxuXHRcdFx0c3RhcnRJbmRleCxcclxuXHRcdFx0ZW5kSW5kZXgsXHJcblx0XHRcdHRvcFBhZGRpbmcsXHJcblx0XHRcdGJvdHRvbVBhZGRpbmdcclxuXHRcdH07XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBTZXR1cCB2aXJ0dWFsIHNjcm9sbGluZyBmb3IgbGFyZ2UgY2FyZCBzZXRzXHJcblx0ICovXHJcblx0c2V0dXBWaXJ0dWFsU2Nyb2xsKFxyXG5cdFx0dG90YWxFbnRyaWVzOiBudW1iZXIsXHJcblx0XHRvblJhbmdlQ2hhbmdlOiAocmFuZ2U6IFZpcnR1YWxTY3JvbGxSYW5nZSkgPT4gdm9pZFxyXG5cdCk6IFZpcnR1YWxTY3JvbGxSYW5nZSB8IG51bGwge1xyXG5cdFx0dGhpcy50b3RhbEVudHJpZXMgPSB0b3RhbEVudHJpZXM7XHJcblx0XHR0aGlzLnZpcnR1YWxTY3JvbGxDYWxsYmFjayA9IG9uUmFuZ2VDaGFuZ2U7XHJcblxyXG5cdFx0Ly8gQ2hlY2sgaWYgd2Ugc2hvdWxkIGVuYWJsZSB2aXJ0dWFsIHNjcm9sbGluZ1xyXG5cdFx0aWYgKCF0aGlzLnNob3VsZEVuYWJsZVZpcnR1YWxTY3JvbGwodG90YWxFbnRyaWVzKSkge1xyXG5cdFx0XHR0aGlzLnZpcnR1YWxTY3JvbGxFbmFibGVkID0gZmFsc2U7XHJcblx0XHRcdHJldHVybiBudWxsO1xyXG5cdFx0fVxyXG5cclxuXHRcdHRoaXMudmlydHVhbFNjcm9sbEVuYWJsZWQgPSB0cnVlO1xyXG5cclxuXHRcdC8vIENsZWFuIHVwIGV4aXN0aW5nIGxpc3RlbmVyXHJcblx0XHRpZiAodGhpcy5zY3JvbGxMaXN0ZW5lcikge1xyXG5cdFx0XHR0aGlzLmNvbnRhaW5lckVsLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIHRoaXMuc2Nyb2xsTGlzdGVuZXIpO1xyXG5cdFx0XHR0aGlzLnNjcm9sbExpc3RlbmVyID0gbnVsbDtcclxuXHRcdH1cclxuXHJcblx0XHQvLyBDcmVhdGUgdmlydHVhbCBzY3JvbGwgaGFuZGxlclxyXG5cdFx0dGhpcy5zY3JvbGxMaXN0ZW5lciA9ICgpID0+IHtcclxuXHRcdFx0Ly8gVGhyb3R0bGUgc2Nyb2xsIGV2ZW50c1xyXG5cdFx0XHRpZiAodGhpcy5zY3JvbGxUaHJvdHRsZVRpbWVvdXQgIT09IG51bGwpIHtcclxuXHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGNvbnN0IGN1cnJlbnRTY3JvbGxUb3AgPSB0aGlzLmNvbnRhaW5lckVsLnNjcm9sbFRvcDtcclxuXHJcblx0XHRcdC8vIE9ubHkgdXBkYXRlIGlmIHNjcm9sbCBwb3NpdGlvbiBjaGFuZ2VkIHNpZ25pZmljYW50bHkgKGF0IGxlYXN0IDUwcHgpXHJcblx0XHRcdGlmIChNYXRoLmFicyhjdXJyZW50U2Nyb2xsVG9wIC0gdGhpcy5sYXN0U2Nyb2xsVG9wKSA8IDUwKSB7XHJcblx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHR0aGlzLmxhc3RTY3JvbGxUb3AgPSBjdXJyZW50U2Nyb2xsVG9wO1xyXG5cclxuXHRcdFx0Ly8gQ2FsY3VsYXRlIG5ldyB2aXNpYmxlIHJhbmdlXHJcblx0XHRcdGNvbnN0IHJhbmdlID0gdGhpcy5jYWxjdWxhdGVWaXNpYmxlUmFuZ2UodGhpcy50b3RhbEVudHJpZXMpO1xyXG5cclxuXHRcdFx0Ly8gTm90aWZ5IGNhbGxiYWNrXHJcblx0XHRcdGlmICh0aGlzLnZpcnR1YWxTY3JvbGxDYWxsYmFjaykge1xyXG5cdFx0XHRcdHRoaXMudmlydHVhbFNjcm9sbENhbGxiYWNrKHJhbmdlKTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Ly8gVGhyb3R0bGVcclxuXHRcdFx0dGhpcy5zY3JvbGxUaHJvdHRsZVRpbWVvdXQgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XHJcblx0XHRcdFx0dGhpcy5zY3JvbGxUaHJvdHRsZVRpbWVvdXQgPSBudWxsO1xyXG5cdFx0XHR9LCAxNik7IC8vIH42MGZwc1xyXG5cdFx0fTtcclxuXHJcblx0XHR0aGlzLmNvbnRhaW5lckVsLmFkZEV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIHRoaXMuc2Nyb2xsTGlzdGVuZXIsIHsgcGFzc2l2ZTogdHJ1ZSB9KTtcclxuXHJcblx0XHQvLyBSZWdpc3RlciBjbGVhbnVwXHJcblx0XHR0aGlzLnJlZ2lzdGVyQ2xlYW51cCgoKSA9PiB7XHJcblx0XHRcdGlmICh0aGlzLnNjcm9sbExpc3RlbmVyKSB7XHJcblx0XHRcdFx0dGhpcy5jb250YWluZXJFbC5yZW1vdmVFdmVudExpc3RlbmVyKCdzY3JvbGwnLCB0aGlzLnNjcm9sbExpc3RlbmVyKTtcclxuXHRcdFx0XHR0aGlzLnNjcm9sbExpc3RlbmVyID0gbnVsbDtcclxuXHRcdFx0fVxyXG5cdFx0fSk7XHJcblxyXG5cdFx0Ly8gUmV0dXJuIGluaXRpYWwgdmlzaWJsZSByYW5nZVxyXG5cdFx0cmV0dXJuIHRoaXMuY2FsY3VsYXRlVmlzaWJsZVJhbmdlKHRvdGFsRW50cmllcyk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBHZXQgdG90YWwgc2Nyb2xsIGhlaWdodCBmb3IgdmlydHVhbCBzY3JvbGxpbmdcclxuXHQgKi9cclxuXHRnZXRWaXJ0dWFsU2Nyb2xsSGVpZ2h0KHRvdGFsRW50cmllczogbnVtYmVyKTogbnVtYmVyIHtcclxuXHRcdGNvbnN0IHRvdGFsUm93cyA9IE1hdGguY2VpbCh0b3RhbEVudHJpZXMgLyB0aGlzLmNhcmRzUGVyUm93KTtcclxuXHRcdGNvbnN0IHJvd0hlaWdodCA9IHRoaXMuZXN0aW1hdGVkQ2FyZEhlaWdodCArIDE2O1xyXG5cdFx0cmV0dXJuIHRvdGFsUm93cyAqIHJvd0hlaWdodDtcclxuXHR9XHJcbn1cclxuXHJcblxyXG4iLCAiLyoqXG4gKiBWaWV3IFN3aXRjaCBMaXN0ZW5lclxuICogRGV0ZWN0cyB3aGVuIHRoZSB2aWV3IGlzIHN3aXRjaGVkIGF3YXkgYW5kIGNsZWFycyBzZWxlY3Rpb25cbiAqL1xuXG5pbXBvcnQgdHlwZSBCYXNlc0NNU1BsdWdpbiBmcm9tICcuLi9tYWluJztcblxuZXhwb3J0IGNsYXNzIFZpZXdTd2l0Y2hMaXN0ZW5lciB7XG5cdHByaXZhdGUgbXV0YXRpb25PYnNlcnZlcjogTXV0YXRpb25PYnNlcnZlciB8IG51bGwgPSBudWxsO1xuXHRwcml2YXRlIGJhY2t1cEludGVydmFsOiBudW1iZXIgfCBudWxsID0gbnVsbDtcblx0cHJpdmF0ZSBjdXJyZW50QmFzZUlkZW50aWZpZXI6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuXG5cdGNvbnN0cnVjdG9yKFxuXHRcdHByaXZhdGUgY29udGFpbmVyRWw6IEhUTUxFbGVtZW50LFxuXHRcdHByaXZhdGUgcGx1Z2luOiBCYXNlc0NNU1BsdWdpbixcblx0XHRwcml2YXRlIGNvbmZpZzogeyBnZXROYW1lPzogKCkgPT4gc3RyaW5nOyBuYW1lPzogc3RyaW5nIH0sXG5cdFx0cHJpdmF0ZSBjb250cm9sbGVyOiB7IGdldEJhc2VOYW1lPzogKCkgPT4gc3RyaW5nOyBiYXNlTmFtZT86IHN0cmluZyB9IHwgdW5kZWZpbmVkLFxuXHRcdHByaXZhdGUgZGF0YTogeyBiYXNlTmFtZT86IHN0cmluZyB9IHwgdW5kZWZpbmVkLFxuXHRcdHByaXZhdGUgc2VsZWN0ZWRGaWxlczogU2V0PHN0cmluZz4sXG5cdFx0cHJpdmF0ZSBvblNlbGVjdGlvbkNsZWFyZWQ6ICgpID0+IHZvaWQsXG5cdFx0cHJpdmF0ZSByZWdpc3RlckNsZWFudXA6IChjbGVhbnVwOiAoKSA9PiB2b2lkKSA9PiB2b2lkXG5cdCkgeyB9XG5cblx0c2V0dXAoaGFuZGxlU2VsZWN0aW9uQ2hhbmdlOiAocGF0aDogc3RyaW5nLCBzZWxlY3RlZDogYm9vbGVhbikgPT4gdm9pZCk6IChwYXRoOiBzdHJpbmcsIHNlbGVjdGVkOiBib29sZWFuKSA9PiB2b2lkIHtcblx0XHRjb25zdCBzdGFydE9ic2VydmluZyA9ICgpID0+IHtcblx0XHRcdC8vIFJFTU9WRUQ6IE11dGF0aW9uT2JzZXJ2ZXIgdGhhdCBjbGVhcmVkIHNlbGVjdGlvbiB3aGVuIGNhcmRzIHdlcmUgcmVtb3ZlZC5cblx0XHRcdC8vIFRoaXMgd2FzIGNhdXNpbmcgc2VsZWN0aW9uIHRvIGNsZWFyIGR1cmluZyB2aWV3IHJlZnJlc2hlcyBvciBwYXJ0aWFsIHVwZGF0ZXMuXG5cdFx0fTtcblxuXHRcdGNvbnN0IHN0b3BPYnNlcnZpbmcgPSAoKSA9PiB7XG5cdFx0XHRpZiAodGhpcy5tdXRhdGlvbk9ic2VydmVyKSB7XG5cdFx0XHRcdHRoaXMubXV0YXRpb25PYnNlcnZlci5kaXNjb25uZWN0KCk7XG5cdFx0XHRcdHRoaXMubXV0YXRpb25PYnNlcnZlciA9IG51bGw7XG5cdFx0XHR9XG5cdFx0XHQvLyBSRU1PVkVEOiBGb3JjZSBjbGVhciBzZWxlY3Rpb24gb24gc3RvcE9ic2VydmluZy5cblx0XHRcdC8vIFRoaXMgd2FzIHRvbyBhZ2dyZXNzaXZlIGZvciB2aWV3IGxpZmVjeWNsZSBtYW5hZ2VtZW50LlxuXHRcdH07XG5cblx0XHQvLyBHZXQgYmFzZSBpZGVudGlmaWVyIC0gdHJ5IG11bHRpcGxlIG1ldGhvZHNcblx0XHRjb25zdCBnZXRCYXNlSWRlbnRpZmllciA9ICgpOiBzdHJpbmcgfCBudWxsID0+IHtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdC8vIFRyeSB0byBnZXQgYmFzZSBuYW1lIGZyb20gY29uZmlnXG5cdFx0XHRcdGlmICh0aGlzLmNvbmZpZz8uZ2V0TmFtZSkge1xuXHRcdFx0XHRcdHJldHVybiB0aGlzLmNvbmZpZy5nZXROYW1lKCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKHRoaXMuY29uZmlnPy5uYW1lKSB7XG5cdFx0XHRcdFx0cmV0dXJuIFN0cmluZyh0aGlzLmNvbmZpZy5uYW1lKTtcblx0XHRcdFx0fVxuXHRcdFx0XHQvLyBUcnkgdG8gYWNjZXNzIGNvbnRyb2xsZXJcblx0XHRcdFx0aWYgKHRoaXMuY29udHJvbGxlcikge1xuXHRcdFx0XHRcdGlmICh0aGlzLmNvbnRyb2xsZXI/LmdldEJhc2VOYW1lKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gdGhpcy5jb250cm9sbGVyLmdldEJhc2VOYW1lKCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGlmICh0aGlzLmNvbnRyb2xsZXI/LmJhc2VOYW1lKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gU3RyaW5nKHRoaXMuY29udHJvbGxlci5iYXNlTmFtZSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdC8vIFRyeSB0byBnZXQgZnJvbSBkYXRhXG5cdFx0XHRcdGlmICh0aGlzLmRhdGEpIHtcblx0XHRcdFx0XHRpZiAodGhpcy5kYXRhLmJhc2VOYW1lKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gU3RyaW5nKHRoaXMuZGF0YS5iYXNlTmFtZSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9IGNhdGNoIHtcblx0XHRcdFx0Ly8gSWdub3JlIGVycm9yc1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0fTtcblxuXHRcdC8vIEFsc28gY2hlY2sgcGVyaW9kaWNhbGx5IGFzIGJhY2t1cCAoc2xvd2VyLCA1MDBtcylcblx0XHRjb25zdCBiYWNrdXBDaGVjayA9ICgpID0+IHtcblx0XHRcdGlmICh0aGlzLnNlbGVjdGVkRmlsZXMuc2l6ZSA9PT0gMCkge1xuXHRcdFx0XHRpZiAodGhpcy5iYWNrdXBJbnRlcnZhbCAhPT0gbnVsbCkge1xuXHRcdFx0XHRcdHdpbmRvdy5jbGVhckludGVydmFsKHRoaXMuYmFja3VwSW50ZXJ2YWwpO1xuXHRcdFx0XHRcdHRoaXMuYmFja3VwSW50ZXJ2YWwgPSBudWxsO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0Ly8gQ2hlY2sgaWYgYmFzZSBpZGVudGlmaWVyIGNoYW5nZWRcblx0XHRcdGNvbnN0IGN1cnJlbnRCYXNlSWQgPSBnZXRCYXNlSWRlbnRpZmllcigpO1xuXHRcdFx0aWYgKHRoaXMuY3VycmVudEJhc2VJZGVudGlmaWVyICE9PSBudWxsICYmIGN1cnJlbnRCYXNlSWQgIT09IG51bGwgJiZcblx0XHRcdFx0dGhpcy5jdXJyZW50QmFzZUlkZW50aWZpZXIgIT09IGN1cnJlbnRCYXNlSWQpIHtcblx0XHRcdFx0dGhpcy5zZWxlY3RlZEZpbGVzLmNsZWFyKCk7XG5cdFx0XHRcdHRoaXMub25TZWxlY3Rpb25DbGVhcmVkKCk7XG5cdFx0XHRcdHN0b3BPYnNlcnZpbmcoKTtcblx0XHRcdFx0aWYgKHRoaXMuYmFja3VwSW50ZXJ2YWwgIT09IG51bGwpIHtcblx0XHRcdFx0XHR3aW5kb3cuY2xlYXJJbnRlcnZhbCh0aGlzLmJhY2t1cEludGVydmFsKTtcblx0XHRcdFx0XHR0aGlzLmJhY2t1cEludGVydmFsID0gbnVsbDtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdC8vIENoZWNrIGlmIGNvbnRhaW5lciBoYXMgY2FyZHNcblx0XHRcdGNvbnN0IGFsbENhcmRzID0gdGhpcy5jb250YWluZXJFbC5xdWVyeVNlbGVjdG9yQWxsKCcuY2FyZFtkYXRhLXBhdGhdJyk7XG5cdFx0XHRpZiAoYWxsQ2FyZHMubGVuZ3RoID09PSAwKSB7XG5cdFx0XHRcdHRoaXMuc2VsZWN0ZWRGaWxlcy5jbGVhcigpO1xuXHRcdFx0XHR0aGlzLm9uU2VsZWN0aW9uQ2xlYXJlZCgpO1xuXHRcdFx0fVxuXHRcdH07XG5cblx0XHQvLyBTdGFydCBvYnNlcnZpbmcgd2hlbiBzZWxlY3Rpb24gaXMgbWFkZVxuXHRcdGNvbnN0IG9yaWdpbmFsSGFuZGxlU2VsZWN0aW9uQ2hhbmdlID0gaGFuZGxlU2VsZWN0aW9uQ2hhbmdlLmJpbmQodGhpcyk7XG5cdFx0Y29uc3Qgd3JhcHBlZEhhbmRsZVNlbGVjdGlvbkNoYW5nZSA9IChwYXRoOiBzdHJpbmcsIHNlbGVjdGVkOiBib29sZWFuKSA9PiB7XG5cdFx0XHRvcmlnaW5hbEhhbmRsZVNlbGVjdGlvbkNoYW5nZShwYXRoLCBzZWxlY3RlZCk7XG5cblx0XHRcdC8vIFN0YXJ0IG9ic2VydmluZyBpZiB3ZSBoYXZlIHNlbGVjdGlvbiwgc3RvcCBpZiB3ZSBkb24ndFxuXHRcdFx0aWYgKHRoaXMuc2VsZWN0ZWRGaWxlcy5zaXplID4gMCkge1xuXHRcdFx0XHQvLyBTdG9yZSBjdXJyZW50IGJhc2UgaWRlbnRpZmllciB3aGVuIHNlbGVjdGlvbiBzdGFydHNcblx0XHRcdFx0aWYgKHRoaXMuY3VycmVudEJhc2VJZGVudGlmaWVyID09PSBudWxsKSB7XG5cdFx0XHRcdFx0dGhpcy5jdXJyZW50QmFzZUlkZW50aWZpZXIgPSBnZXRCYXNlSWRlbnRpZmllcigpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHN0YXJ0T2JzZXJ2aW5nKCk7XG5cdFx0XHRcdC8vIEFsc28gc3RhcnQgYmFja3VwIGludGVydmFsIC0gdXNlIHBsdWdpbidzIHJlZ2lzdGVySW50ZXJ2YWwgZm9yIHByb3BlciBjbGVhbnVwXG5cdFx0XHRcdGlmICh0aGlzLmJhY2t1cEludGVydmFsID09PSBudWxsKSB7XG5cdFx0XHRcdFx0dGhpcy5iYWNrdXBJbnRlcnZhbCA9IHRoaXMucGx1Z2luLnJlZ2lzdGVySW50ZXJ2YWwod2luZG93LnNldEludGVydmFsKGJhY2t1cENoZWNrLCA1MDApKTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Ly8gQ2xlYXIgYmFzZSBpZGVudGlmaWVyIHdoZW4gc2VsZWN0aW9uIGlzIGVtcHR5XG5cdFx0XHRcdHRoaXMuY3VycmVudEJhc2VJZGVudGlmaWVyID0gbnVsbDtcblx0XHRcdFx0Ly8gU2VsZWN0aW9uIGJlY2FtZSBlbXB0eSAtIHN0b3Agb2JzZXJ2aW5nXG5cdFx0XHRcdHN0b3BPYnNlcnZpbmcoKTtcblx0XHRcdFx0aWYgKHRoaXMuYmFja3VwSW50ZXJ2YWwgIT09IG51bGwpIHtcblx0XHRcdFx0XHR3aW5kb3cuY2xlYXJJbnRlcnZhbCh0aGlzLmJhY2t1cEludGVydmFsKTtcblx0XHRcdFx0XHR0aGlzLmJhY2t1cEludGVydmFsID0gbnVsbDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH07XG5cblx0XHQvLyBSZWdpc3RlciBjbGVhbnVwXG5cdFx0dGhpcy5yZWdpc3RlckNsZWFudXAoKCkgPT4ge1xuXHRcdFx0c3RvcE9ic2VydmluZygpO1xuXHRcdFx0aWYgKHRoaXMuYmFja3VwSW50ZXJ2YWwgIT09IG51bGwpIHtcblx0XHRcdFx0d2luZG93LmNsZWFySW50ZXJ2YWwodGhpcy5iYWNrdXBJbnRlcnZhbCk7XG5cdFx0XHRcdHRoaXMuYmFja3VwSW50ZXJ2YWwgPSBudWxsO1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0cmV0dXJuIHdyYXBwZWRIYW5kbGVTZWxlY3Rpb25DaGFuZ2U7XG5cdH1cblxuXHRjbGVhbnVwKCk6IHZvaWQge1xuXHRcdGlmICh0aGlzLm11dGF0aW9uT2JzZXJ2ZXIpIHtcblx0XHRcdHRoaXMubXV0YXRpb25PYnNlcnZlci5kaXNjb25uZWN0KCk7XG5cdFx0XHR0aGlzLm11dGF0aW9uT2JzZXJ2ZXIgPSBudWxsO1xuXHRcdH1cblx0XHRpZiAodGhpcy5iYWNrdXBJbnRlcnZhbCAhPT0gbnVsbCkge1xuXHRcdFx0d2luZG93LmNsZWFySW50ZXJ2YWwodGhpcy5iYWNrdXBJbnRlcnZhbCk7XG5cdFx0XHR0aGlzLmJhY2t1cEludGVydmFsID0gbnVsbDtcblx0XHR9XG5cdH1cbn1cblxuIiwgIi8qKlxyXG4gKiBVdGlsaXR5IGZ1bmN0aW9ucyB0byBkZXRlY3QgaWYgYSBDTVMgdmlldyBpcyBlbWJlZGRlZCBpbiBhIG1hcmtkb3duIG5vdGVcclxuICovXHJcblxyXG4vKipcclxuICogQ2hlY2sgaWYgYSBjb250YWluZXIgZWxlbWVudCBpcyBpbnNpZGUgYSBtYXJrZG93biBlbWJlZFxyXG4gKiBAcGFyYW0gY29udGFpbmVyRWwgLSBUaGUgY29udGFpbmVyIGVsZW1lbnQgdG8gY2hlY2tcclxuICogQHJldHVybnMgdHJ1ZSBpZiB0aGUgY29udGFpbmVyIGlzIGluc2lkZSBhbiBlbWJlZCwgZmFsc2Ugb3RoZXJ3aXNlXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gaXNFbWJlZGRlZFZpZXcoY29udGFpbmVyRWw6IEhUTUxFbGVtZW50KTogYm9vbGVhbiB7XHJcblx0aWYgKCFjb250YWluZXJFbCkge1xyXG5cdFx0cmV0dXJuIGZhbHNlO1xyXG5cdH1cclxuXHJcblx0Ly8gQ2hlY2sgaWYgY29udGFpbmVyIGlzIGluc2lkZSBhIG1hcmtkb3duIGVtYmVkXHJcblx0Ly8gT2JzaWRpYW4gdXNlcyB2YXJpb3VzIGNsYXNzZXMgZm9yIGVtYmVkczpcclxuXHQvLyAtIC5tYXJrZG93bi1lbWJlZCBmb3IgbWFya2Rvd24gZW1iZWRzICh0cmFuc2NsdXNpb25zKVxyXG5cdC8vIC0gLmludGVybmFsLWVtYmVkIGZvciBpbnRlcm5hbCBmaWxlIGVtYmVkc1xyXG5cdC8vIC0gLm1hcmtkb3duLWVtYmVkLWNvbnRlbnQgZm9yIHRoZSBjb250ZW50IHdyYXBwZXJcclxuXHQvLyAtIC5tYXJrZG93bi1zb3VyY2UtdmlldyBmb3Igc3RhbmRhcmQgY29kZSBibG9ja3MgaW4gTGl2ZSBQcmV2aWV3XHJcblx0Ly8gLSAubWFya2Rvd24tcmVhZGluZy12aWV3IGZvciBzdGFuZGFyZCBjb2RlIGJsb2NrcyBpbiBSZWFkaW5nIG1vZGVcclxuXHRjb25zdCBlbWJlZFBhcmVudCA9IGNvbnRhaW5lckVsLmNsb3Nlc3QoJy5tYXJrZG93bi1lbWJlZCwgLmludGVybmFsLWVtYmVkLCAubWFya2Rvd24tZW1iZWQtY29udGVudCwgLm1hcmtkb3duLXNvdXJjZS12aWV3LCAubWFya2Rvd24tcmVhZGluZy12aWV3Jyk7XHJcblxyXG5cdHJldHVybiBlbWJlZFBhcmVudCAhPT0gbnVsbDtcclxufVxyXG5cclxuLyoqXHJcbiAqIEdldCB0aGUgZmlsZSBwYXRoIG9mIHRoZSBub3RlIGNvbnRhaW5pbmcgdGhlIGVtYmVkIChpZiBlbWJlZGRlZClcclxuICogQHBhcmFtIGNvbnRhaW5lckVsIC0gVGhlIGNvbnRhaW5lciBlbGVtZW50IHRvIGNoZWNrXHJcbiAqIEBwYXJhbSBhcHAgLSBPYnNpZGlhbiBhcHAgaW5zdGFuY2VcclxuICogQHJldHVybnMgVGhlIGZpbGUgcGF0aCBvZiB0aGUgY29udGFpbmluZyBub3RlLCBvciBudWxsIGlmIG5vdCBlbWJlZGRlZFxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGdldEVtYmVkZGluZ0ZpbGUoY29udGFpbmVyRWw6IEhUTUxFbGVtZW50LCBhcHA6IHsgd29ya3NwYWNlPzogeyBnZXRBY3RpdmVGaWxlPzogKCkgPT4geyBwYXRoOiBzdHJpbmcgfSB8IG51bGwgfSB9KTogc3RyaW5nIHwgbnVsbCB7XHJcblx0aWYgKCFpc0VtYmVkZGVkVmlldyhjb250YWluZXJFbCkpIHtcclxuXHRcdHJldHVybiBudWxsO1xyXG5cdH1cclxuXHJcblx0Ly8gVHJ5IHRvIGZpbmQgdGhlIG1hcmtkb3duIHZpZXcgdGhhdCBjb250YWlucyB0aGlzIGVtYmVkXHJcblx0Y29uc3QgZW1iZWRQYXJlbnQgPSBjb250YWluZXJFbC5jbG9zZXN0KCcubWFya2Rvd24tZW1iZWQsIC5pbnRlcm5hbC1lbWJlZCcpO1xyXG5cdGlmICghZW1iZWRQYXJlbnQpIHtcclxuXHRcdHJldHVybiBudWxsO1xyXG5cdH1cclxuXHJcblx0Ly8gTG9vayBmb3IgdGhlIG1hcmtkb3duIHZpZXcgaW4gdGhlIHBhcmVudCBjaGFpblxyXG5cdGxldCBjdXJyZW50OiBIVE1MRWxlbWVudCB8IG51bGwgPSBlbWJlZFBhcmVudC5wYXJlbnRFbGVtZW50O1xyXG5cdHdoaWxlIChjdXJyZW50KSB7XHJcblx0XHQvLyBDaGVjayBpZiB0aGlzIGlzIGEgbWFya2Rvd24gdmlld1xyXG5cdFx0Y29uc3Qgdmlld0VsID0gY3VycmVudC5jbG9zZXN0KCcubWFya2Rvd24tc291cmNlLXZpZXcsIC5tYXJrZG93bi1yZWFkaW5nLXZpZXcnKTtcclxuXHRcdGlmICh2aWV3RWwpIHtcclxuXHRcdFx0Ly8gVHJ5IHRvIGdldCB0aGUgZmlsZSBmcm9tIHRoZSB2aWV3XHJcblx0XHRcdGNvbnN0IHZpZXcgPSAodmlld0VsIGFzIHVua25vd24gYXMgeyBmaWxlPzogeyBwYXRoOiBzdHJpbmcgfSB9KS5maWxlO1xyXG5cdFx0XHRpZiAodmlldz8ucGF0aCkge1xyXG5cdFx0XHRcdHJldHVybiB2aWV3LnBhdGg7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdGN1cnJlbnQgPSBjdXJyZW50LnBhcmVudEVsZW1lbnQ7XHJcblx0fVxyXG5cclxuXHQvLyBGYWxsYmFjazogdHJ5IHRvIGdldCBhY3RpdmUgZmlsZSAobGVzcyByZWxpYWJsZSBmb3IgZW1iZWRkZWQgdmlld3MpXHJcblx0aWYgKGFwcC53b3Jrc3BhY2U/LmdldEFjdGl2ZUZpbGUpIHtcclxuXHRcdGNvbnN0IGFjdGl2ZUZpbGUgPSBhcHAud29ya3NwYWNlLmdldEFjdGl2ZUZpbGUoKTtcclxuXHRcdGlmIChhY3RpdmVGaWxlKSB7XHJcblx0XHRcdHJldHVybiBhY3RpdmVGaWxlLnBhdGg7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRyZXR1cm4gbnVsbDtcclxufVxyXG5cclxuIiwgIi8qKlxuICogVHlwZVNjcmlwdCB0eXBlcyBmb3IgQmFzZXMgQ01TIHBsdWdpblxuICovXG5cbmV4cG9ydCBpbnRlcmZhY2UgQmFzZXNDTVNTZXR0aW5ncyB7XG5cdC8vIEJ1bGsgb3BlcmF0aW9uIHNldHRpbmdzXG5cdGNvbmZpcm1CdWxrT3BlcmF0aW9uczogYm9vbGVhbjtcblxuXHQvLyBEZWxldGlvbiBzZXR0aW5nc1xuXHRkZWxldGVQYXJlbnRGb2xkZXI6IGJvb2xlYW47XG5cdGRlbGV0ZVBhcmVudEZvbGRlckZpbGVuYW1lOiBzdHJpbmc7XG5cdGRlbGV0ZVVuaXF1ZUF0dGFjaG1lbnRzOiBib29sZWFuO1xuXG5cdC8vIENvbmZpcm1hdGlvbiBkaWFsb2cgc2V0dGluZ3Ncblx0Y29uZmlybURlbGV0aW9uczogYm9vbGVhbjtcblxuXHQvLyBJY29uIHNldHRpbmdzXG5cdHVzZUhvbWVJY29uOiBib29sZWFuO1xuXG5cdC8vIFF1aWNrIGVkaXQgc2V0dGluZ3Ncblx0ZW5hYmxlUXVpY2tFZGl0OiBib29sZWFuO1xuXHRxdWlja0VkaXRDb21tYW5kOiBzdHJpbmc7XG5cdHF1aWNrRWRpdENvbW1hbmROYW1lOiBzdHJpbmc7IC8vIFN0b3JlIGNvbW1hbmQgbmFtZSBmb3IgZGlzcGxheVxuXHRxdWlja0VkaXRJY29uOiBzdHJpbmc7IC8vIEljb24gSUQgZm9yIHRoZSBxdWljayBlZGl0IGljb25cblx0cXVpY2tFZGl0T3BlbkZpbGU6IGJvb2xlYW47IC8vIEF0dGVtcHQgdG8gb3BlbiBmaWxlIGFuZCBleGVjdXRlIGNvbW1hbmQgZm9yIHVuc3VwcG9ydGVkIGNvbW1hbmRzXG5cblx0Ly8gVG9vbGJhciBidXR0b24gdmlzaWJpbGl0eSBzZXR0aW5nc1xuXHRzaG93VG9vbGJhclNlbGVjdEFsbDogYm9vbGVhbjtcblx0c2hvd1Rvb2xiYXJDbGVhcjogYm9vbGVhbjtcblx0c2hvd1Rvb2xiYXJEcmFmdDogYm9vbGVhbjtcblx0c2hvd1Rvb2xiYXJQdWJsaXNoOiBib29sZWFuO1xuXHRzaG93VG9vbGJhclRhZ3M6IGJvb2xlYW47XG5cdHNob3dUb29sYmFyU2V0OiBib29sZWFuO1xuXHRzaG93VG9vbGJhclJlbW92ZTogYm9vbGVhbjtcblx0c2hvd1Rvb2xiYXJEZWxldGU6IGJvb2xlYW47XG5cblx0Ly8gQXBwZWFyYW5jZSBzZXR0aW5nc1xuXHRmb3JjZVN0YXRpY0dpZkltYWdlczogYm9vbGVhbjtcblxuXHQvLyBQZXJmb3JtYW5jZSBzZXR0aW5nc1xuXHRlbWJlZGRlZFZpZXdSZWZyZXNoRGVib3VuY2VNczogbnVtYmVyO1xuXG5cdC8vIFZpcnR1YWwgc2Nyb2xsaW5nIHNldHRpbmdzXG5cdHZpcnR1YWxTY3JvbGxUaHJlc2hvbGQ6IG51bWJlcjsgLy8gTnVtYmVyIG9mIGNhcmRzIGFib3ZlIHdoaWNoIHZpcnR1YWwgc2Nyb2xsaW5nIGlzIGVuYWJsZWRcblx0dmlydHVhbFNjcm9sbEJ1ZmZlcjogbnVtYmVyOyAvLyBOdW1iZXIgb2YgY2FyZHMgdG8gcmVuZGVyIGFib3ZlL2JlbG93IHZpZXdwb3J0XG5cblx0Ly8gTWlncmF0aW9uIHRyYWNraW5nXG5cdG1pZ3JhdGlvbkJhc2VzQ21zVG9DbXNEb25lOiBib29sZWFuO1xufVxuXG5leHBvcnQgY29uc3QgREVGQVVMVF9TRVRUSU5HUzogQmFzZXNDTVNTZXR0aW5ncyA9IHtcblx0Y29uZmlybUJ1bGtPcGVyYXRpb25zOiB0cnVlLFxuXHRkZWxldGVQYXJlbnRGb2xkZXI6IGZhbHNlLFxuXHRkZWxldGVQYXJlbnRGb2xkZXJGaWxlbmFtZTogJ2luZGV4Jyxcblx0ZGVsZXRlVW5pcXVlQXR0YWNobWVudHM6IGZhbHNlLFxuXHRjb25maXJtRGVsZXRpb25zOiB0cnVlLFxuXHR1c2VIb21lSWNvbjogZmFsc2UsXG5cdGVuYWJsZVF1aWNrRWRpdDogZmFsc2UsXG5cdHF1aWNrRWRpdENvbW1hbmQ6ICcnLFxuXHRxdWlja0VkaXRDb21tYW5kTmFtZTogJycsXG5cdHF1aWNrRWRpdEljb246ICdwZW5jaWwtbGluZScsXG5cdHF1aWNrRWRpdE9wZW5GaWxlOiBmYWxzZSxcblx0c2hvd1Rvb2xiYXJTZWxlY3RBbGw6IHRydWUsXG5cdHNob3dUb29sYmFyQ2xlYXI6IHRydWUsXG5cdHNob3dUb29sYmFyRHJhZnQ6IHRydWUsXG5cdHNob3dUb29sYmFyUHVibGlzaDogdHJ1ZSxcblx0c2hvd1Rvb2xiYXJUYWdzOiB0cnVlLFxuXHRzaG93VG9vbGJhclNldDogdHJ1ZSxcblx0c2hvd1Rvb2xiYXJSZW1vdmU6IHRydWUsXG5cdHNob3dUb29sYmFyRGVsZXRlOiB0cnVlLFxuXHRmb3JjZVN0YXRpY0dpZkltYWdlczogZmFsc2UsXG5cdGVtYmVkZGVkVmlld1JlZnJlc2hEZWJvdW5jZU1zOiAyNTAsXG5cdHZpcnR1YWxTY3JvbGxUaHJlc2hvbGQ6IDEwMCwgLy8gRW5hYmxlIHZpcnR1YWwgc2Nyb2xsaW5nIGZvciA+MTAwIGNhcmRzXG5cdHZpcnR1YWxTY3JvbGxCdWZmZXI6IDIwLCAvLyBSZW5kZXIgMjAgY2FyZHMgYWJvdmUvYmVsb3cgdmlld3BvcnRcblx0bWlncmF0aW9uQmFzZXNDbXNUb0Ntc0RvbmU6IGZhbHNlLFxufTtcblxuLyoqXG4gKiBDYXJkIGRhdGEgc3RydWN0dXJlIGZvciByZW5kZXJpbmdcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDYXJkRGF0YSB7XG5cdHBhdGg6IHN0cmluZztcblx0bmFtZTogc3RyaW5nO1xuXHR0aXRsZTogc3RyaW5nO1xuXHR0YWdzOiBzdHJpbmdbXTtcblx0eWFtbFRhZ3M6IHN0cmluZ1tdO1xuXHRjdGltZTogbnVtYmVyO1xuXHRtdGltZTogbnVtYmVyO1xuXHRmb2xkZXJQYXRoOiBzdHJpbmc7XG5cdHNuaXBwZXQ/OiBzdHJpbmc7XG5cdGltYWdlVXJsPzogc3RyaW5nIHwgc3RyaW5nW107XG5cdGhhc0ltYWdlQXZhaWxhYmxlOiBib29sZWFuO1xuXHRwcm9wZXJ0aWVzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbn1cblxuLyoqXG4gKiBCdWxrIG9wZXJhdGlvbiB0eXBlc1xuICovXG5leHBvcnQgdHlwZSBCdWxrT3BlcmF0aW9uID1cblx0fCAnc2V0LWRyYWZ0J1xuXHR8ICdwdWJsaXNoJ1xuXHR8ICdtYW5hZ2UtdGFncydcblx0fCAnc2V0LXByb3BlcnR5J1xuXHR8ICdyZW1vdmUtcHJvcGVydHknXG5cdHwgJ2RlbGV0ZSc7XG4iLCAiaW1wb3J0IHsgUXVlcnlDb250cm9sbGVyIH0gZnJvbSAnb2JzaWRpYW4nO1xuaW1wb3J0IHR5cGUgQmFzZXNDTVNQbHVnaW4gZnJvbSAnLi4vbWFpbic7XG5pbXBvcnQgeyBCYXNlc0NNU1ZpZXcsIENNU19WSUVXX1RZUEUgfSBmcm9tICcuLi92aWV3cy9jbXMtdmlldyc7XG5cbi8qKlxuICogUmVnaXN0ZXIgdGhlIENNUyB2aWV3IHdpdGggdGhlIEJhc2VzIHBsdWdpblxuICogSGFuZGxlcyBncmFjZWZ1bCBkZWdyYWRhdGlvbiBpZiBCYXNlcyBwbHVnaW4gaXMgbm90IGluc3RhbGxlZFxuICogSW5jbHVkZXMgcmV0cnkgbG9naWMgZm9yIG1vYmlsZSB3aGVyZSBCYXNlcyBwbHVnaW4gbWF5IGxvYWQgbGF0ZXJcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlZ2lzdGVyQmFzZXNDTVNWaWV3KHBsdWdpbjogQmFzZXNDTVNQbHVnaW4sIHJldHJpZXMgPSA1KTogdm9pZCB7XG5cdHRyeSB7XG5cdFx0Ly8gVXNlIHRoZSBwbHVnaW4gaW5zdGFuY2UgaXRzZWxmIGZvciByZWdpc3RyYXRpb24uXG5cdFx0Ly8gVGhlIEJhc2VzIHBsdWdpbiBsaWtlbHkgbW9ua2V5LXBhdGNoZXMgdGhpcyBvbnRvIHRoZSBQbHVnaW4gcHJvdG90eXBlLlxuXHRcdGNvbnN0IGJhc2VzUGx1Z2luID0gcGx1Z2luIGFzIGFueTtcblxuXHRcdGlmICh0eXBlb2YgYmFzZXNQbHVnaW4ucmVnaXN0ZXJCYXNlc1ZpZXcgPT09ICdmdW5jdGlvbicpIHtcblx0XHRcdGNvbnN0IHZpZXdPcHRpb25zRm4gPSBnZXRDTVNWaWV3T3B0aW9ucygpO1xuXHRcdFx0Y29uc3Qgdmlld0NvbmZpZyA9IHtcblx0XHRcdFx0bmFtZTogJ0NNUycsXG5cdFx0XHRcdGljb246IHBsdWdpbi5zZXR0aW5ncy51c2VIb21lSWNvbiA/ICdsdWNpZGUtaG9tZScgOiAnbHVjaWRlLWJsb2NrcycsXG5cdFx0XHRcdGZhY3Rvcnk6IChjb250cm9sbGVyOiBRdWVyeUNvbnRyb2xsZXIsIGNvbnRhaW5lckVsOiBIVE1MRWxlbWVudCkgPT4ge1xuXHRcdFx0XHRcdGNvbnN0IHZpZXcgPSBuZXcgQmFzZXNDTVNWaWV3KGNvbnRyb2xsZXIsIGNvbnRhaW5lckVsLCBwbHVnaW4pO1xuXHRcdFx0XHRcdC8vIEFkZCB2aWV3IHRvIHBsdWdpbidzIGFjdGl2ZSB2aWV3cyB0cmFja2luZ1xuXHRcdFx0XHRcdGNvbnN0IHBsdWdpbldpdGhWaWV3cyA9IHBsdWdpbiBhcyB7IGFjdGl2ZVZpZXdzPzogU2V0PEJhc2VzQ01TVmlldz4gfTtcblx0XHRcdFx0XHRpZiAocGx1Z2luV2l0aFZpZXdzLmFjdGl2ZVZpZXdzKSB7XG5cdFx0XHRcdFx0XHRwbHVnaW5XaXRoVmlld3MuYWN0aXZlVmlld3MuYWRkKHZpZXcpO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vIElmIHRoaXMgaXMgYW4gZW1iZWRkZWQgdmlldywgc2NoZWR1bGUgYW4gaW5pdGlhbCByZWZyZXNoIHdpdGggcmV0cnkgbG9naWNcblx0XHRcdFx0XHQvLyBUaGlzIGVuc3VyZXMgZW1iZWRkZWQgdmlld3MgcG9wdWxhdGUgaW1tZWRpYXRlbHkgd2hlbiBmaXJzdCBhZGRlZCB0byBhIG5vdGVcblx0XHRcdFx0XHRpZiAodmlldy5pc0VtYmVkZGVkKSB7XG5cdFx0XHRcdFx0XHQvLyBSZXRyeSBsb2dpYzogdHJ5IG11bHRpcGxlIHRpbWVzIHdpdGggaW5jcmVhc2luZyBkZWxheXMgdW50aWwgZGF0YSBpcyByZWFkeVxuXHRcdFx0XHRcdFx0bGV0IHJldHJ5Q291bnQgPSAwO1xuXHRcdFx0XHRcdFx0Y29uc3QgbWF4UmV0cmllcyA9IDg7IC8vIFRyeSB1cCB0byA4IHRpbWVzIG92ZXIgfjEuNSBzZWNvbmRzXG5cdFx0XHRcdFx0XHRjb25zdCBiYXNlRGVsYXkgPSAyNTA7IC8vIFN0YXJ0IHdpdGggMjUwbXMsIGluY3JlYXNlIGJ5IDEwMG1zIGVhY2ggcmV0cnlcblxuXHRcdFx0XHRcdFx0Y29uc3QgdHJ5UmVmcmVzaCA9ICgpID0+IHtcblx0XHRcdFx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRcdFx0XHRjb25zdCBjb250YWluZXJFbCA9ICh2aWV3IGFzIHVua25vd24gYXMgeyBjb250YWluZXJFbD86IEhUTUxFbGVtZW50IH0pLmNvbnRhaW5lckVsO1xuXHRcdFx0XHRcdFx0XHRcdGlmICghY29udGFpbmVyRWwgfHwgIWNvbnRhaW5lckVsLmlzQ29ubmVjdGVkKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm47IC8vIFZpZXcgbm8gbG9uZ2VyIGV4aXN0cywgc3RvcCByZXRyeWluZ1xuXHRcdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRcdC8vIENoZWNrIGlmIGRhdGEgaXMgcmVhZHkgKGVuc3VyZSBhcnJheSBpcyBwb3B1bGF0ZWQsIG5vdCBqdXN0IGFuIGVtcHR5IHN0cnVjdHVyZSlcblx0XHRcdFx0XHRcdFx0XHRjb25zdCB2aWV3RGF0YSA9ICh2aWV3IGFzIHVua25vd24gYXMgeyBkYXRhPzogeyBkYXRhPzogdW5rbm93bltdOyBncm91cGVkRGF0YT86IHVua25vd25bXSB9IH0pLmRhdGE7XG5cdFx0XHRcdFx0XHRcdFx0Y29uc3QgaGFzRGF0YSA9IHZpZXdEYXRhICYmIEFycmF5LmlzQXJyYXkodmlld0RhdGEuZGF0YSkgJiYgdmlld0RhdGEuZGF0YS5sZW5ndGggPiAwICYmIHZpZXdEYXRhLmdyb3VwZWREYXRhO1xuXG5cdFx0XHRcdFx0XHRcdFx0Ly8gQWx3YXlzIHRyaWdnZXIgb25EYXRhVXBkYXRlZCgpIC0gaXQgaGFzIGl0cyBvd24gcmV0cnkgbG9naWMgaWYgZGF0YSBpc24ndCByZWFkeVxuXHRcdFx0XHRcdFx0XHRcdC8vIFRoaXMgZW5zdXJlcyB0aGUgQmFzZXMgcGx1Z2luIHJlLWV2YWx1YXRlcyBmaWx0ZXJzIHdpdGggY3VycmVudCBhY3RpdmUgZmlsZSBjb250ZXh0XG5cdFx0XHRcdFx0XHRcdFx0aWYgKHR5cGVvZiAodmlldyBhcyB7IG9uRGF0YVVwZGF0ZWQ/OiAoKSA9PiB2b2lkIH0pLm9uRGF0YVVwZGF0ZWQgPT09ICdmdW5jdGlvbicpIHtcblx0XHRcdFx0XHRcdFx0XHRcdCh2aWV3IGFzIHsgb25EYXRhVXBkYXRlZDogKCkgPT4gdm9pZCB9KS5vbkRhdGFVcGRhdGVkKCk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdFx0Ly8gSWYgZGF0YSB3YXNuJ3QgcmVhZHkgYW5kIHdlIGhhdmVuJ3QgaGl0IG1heCByZXRyaWVzLCBzY2hlZHVsZSBhbm90aGVyIGF0dGVtcHRcblx0XHRcdFx0XHRcdFx0XHRpZiAoIWhhc0RhdGEgJiYgcmV0cnlDb3VudCA8IG1heFJldHJpZXMpIHtcblx0XHRcdFx0XHRcdFx0XHRcdHJldHJ5Q291bnQrKztcblx0XHRcdFx0XHRcdFx0XHRcdGNvbnN0IGRlbGF5ID0gYmFzZURlbGF5ICsgKHJldHJ5Q291bnQgKiAxMDApOyAvLyAyNTBtcywgMzUwbXMsIDQ1MG1zLCBldGMuXG5cdFx0XHRcdFx0XHRcdFx0XHR3aW5kb3cuc2V0VGltZW91dCh0cnlSZWZyZXNoLCBkZWxheSk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9IGNhdGNoIChlcnJvcikge1xuXHRcdFx0XHRcdFx0XHRcdC8vIFNpbGVudGx5IGlnbm9yZSBlcnJvcnMgZHVyaW5nIGluaXRpYWwgcmVmcmVzaFxuXHRcdFx0XHRcdFx0XHRcdGNvbnNvbGUud2FybignQmFzZXMgQ01TOiBFcnJvciByZWZyZXNoaW5nIG5ld2x5IGNyZWF0ZWQgZW1iZWRkZWQgdmlldzonLCBlcnJvcik7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH07XG5cblx0XHRcdFx0XHRcdC8vIFN0YXJ0IHRoZSByZXRyeSBzZXF1ZW5jZSBhZnRlciBpbml0aWFsIGRlbGF5XG5cdFx0XHRcdFx0XHR3aW5kb3cuc2V0VGltZW91dCh0cnlSZWZyZXNoLCBiYXNlRGVsYXkpO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdHJldHVybiB2aWV3O1xuXHRcdFx0XHR9LFxuXHRcdFx0XHRvcHRpb25zOiAoKSA9PiB2aWV3T3B0aW9uc0ZuKENNU19WSUVXX1RZUEUpXG5cdFx0XHR9O1xuXG5cdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1jYWxsLCBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLW1lbWJlci1hY2Nlc3MgLS0gcmVnaXN0ZXJCYXNlc1ZpZXcgaXMgbW9ua2V5LXBhdGNoZWQgb250byB0aGUgcGx1Z2luIGluc3RhbmNlIGJ5IHRoZSBCYXNlcyBjb3JlIHBsdWdpblxuXHRcdFx0YmFzZXNQbHVnaW4ucmVnaXN0ZXJCYXNlc1ZpZXcoQ01TX1ZJRVdfVFlQRSwgdmlld0NvbmZpZyk7XG5cdFx0fSBlbHNlIGlmIChyZXRyaWVzID4gMCkge1xuXHRcdFx0Ly8gTWV0aG9kIG5vdCBhdmFpbGFibGUgeWV0LCByZXRyeSBhZnRlciBhIHNob3J0IGRlbGF5IChjb21tb24gb24gbW9iaWxlKVxuXHRcdFx0Ly8gQ2xlYXIgYW55IGV4aXN0aW5nIHRpbWVvdXQgYmVmb3JlIHNldHRpbmcgYSBuZXcgb25lXG5cdFx0XHRjb25zdCBwbHVnaW5XaXRoVGltZW91dCA9IHBsdWdpbiBhcyB7IHJlZ2lzdHJhdGlvblRpbWVvdXQ/OiBudW1iZXIgfCBudWxsIH07XG5cdFx0XHRjb25zdCByZWdpc3RyYXRpb25UaW1lb3V0ID0gcGx1Z2luV2l0aFRpbWVvdXQucmVnaXN0cmF0aW9uVGltZW91dDtcblx0XHRcdGlmIChyZWdpc3RyYXRpb25UaW1lb3V0ICE9PSBudWxsICYmIHJlZ2lzdHJhdGlvblRpbWVvdXQgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHR3aW5kb3cuY2xlYXJUaW1lb3V0KHJlZ2lzdHJhdGlvblRpbWVvdXQpO1xuXHRcdFx0fVxuXHRcdFx0cGx1Z2luV2l0aFRpbWVvdXQucmVnaXN0cmF0aW9uVGltZW91dCA9IHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdFx0cGx1Z2luV2l0aFRpbWVvdXQucmVnaXN0cmF0aW9uVGltZW91dCA9IG51bGw7XG5cdFx0XHRcdHJlZ2lzdGVyQmFzZXNDTVNWaWV3KHBsdWdpbiwgcmV0cmllcyAtIDEpO1xuXHRcdFx0fSwgMjAwKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Y29uc29sZS53YXJuKCdCYXNlcyBDTVM6IHJlZ2lzdGVyQmFzZXNWaWV3IG5vdCBhdmFpbGFibGUuIElzIEJhc2VzIHBsdWdpbiBpbnN0YWxsZWQ/Jyk7XG5cdFx0fVxuXHR9IGNhdGNoIChlcnJvcikge1xuXHRcdGNvbnNvbGUuZXJyb3IoJ0Jhc2VzIENNUzogRXJyb3IgcmVnaXN0ZXJpbmcgdmlldzonLCBlcnJvcik7XG5cdH1cbn1cblxuLyoqXG4gKiBHZXQgQ01TIHZpZXcgb3B0aW9ucyBmb3IgQmFzZSBwbHVnaW4gY29uZmlndXJhdGlvblxuICovXG5mdW5jdGlvbiBnZXRDTVNWaWV3T3B0aW9ucygpOiAodmlld1R5cGU/OiBzdHJpbmcpID0+IHVua25vd25bXSB7XG5cdC8vIER5bmFtaWMgaW1wb3J0IHRvIGF2b2lkIGNpcmN1bGFyIGRlcGVuZGVuY3lcblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1yZXF1aXJlLWltcG9ydHMsIG5vLXVuZGVmIC0tIE5lZWQgZHluYW1pYyBpbXBvcnQgZm9yIGNpcmN1bGFyIGRlcGVuZGVuY3lcblx0Y29uc3QgeyBnZXRDTVNWaWV3T3B0aW9ucyB9ID0gcmVxdWlyZSgnLi4vc2hhcmVkL3NldHRpbmdzLXNjaGVtYScpIGFzIHsgZ2V0Q01TVmlld09wdGlvbnM6ICh2aWV3VHlwZT86IHN0cmluZykgPT4gdW5rbm93bltdIH07XG5cdHJldHVybiBnZXRDTVNWaWV3T3B0aW9ucztcbn1cblxuIiwgImltcG9ydCB7IEFwcCwgVEZpbGUsIE5vdGljZSB9IGZyb20gJ29ic2lkaWFuJztcclxuXHJcbi8qKlxyXG4gKiBTaW1wbGlmaWVkLCBzYWZlIG1pZ3JhdGlvbiB1dGlsaXR5IHRvIGNvbnZlcnQgbGVnYWN5ICdiYXNlcy1jbXMnIHZpZXcgdHlwZXMgdG8gJ2NtcydcclxuICogU2NhbnMgLm1kLCAuYmFzZSwgYW5kIC5tZHggZmlsZXMuXHJcbiAqL1xyXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbWlncmF0ZUJhc2VzQ21zVG9DbXMoYXBwOiBBcHApOiBQcm9taXNlPG51bWJlcj4ge1xyXG4gICAgY29uc3QgZmlsZXMgPSBhcHAudmF1bHQuZ2V0RmlsZXMoKTtcclxuICAgIGxldCBtaWdyYXRlZENvdW50ID0gMDtcclxuXHJcbiAgICBjb25zb2xlLmxvZyhgQmFzZXMgQ01TOiBTdGFydGluZyBzYWZlIHZhdWx0IHNjYW4gZm9yICdiYXNlcy1jbXMnIHR5cGVzLi4uYCk7XHJcblxyXG4gICAgZm9yIChjb25zdCBmaWxlIG9mIGZpbGVzKSB7XHJcbiAgICAgICAgY29uc3QgZXh0ID0gZmlsZS5leHRlbnNpb24udG9Mb3dlckNhc2UoKTtcclxuICAgICAgICBpZiAoZXh0ID09PSAnbWQnIHx8IGV4dCA9PT0gJ2Jhc2UnIHx8IGV4dCA9PT0gJ21keCcpIHtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGNvbnRlbnQgPSBhd2FpdCBhcHAudmF1bHQucmVhZChmaWxlKTtcclxuXHJcbiAgICAgICAgICAgICAgICAvLyBFeHRyZW1lbHkgc3BlY2lmaWMgYW5kIHNhZmUgcmVwbGFjZW1lbnQuXHJcbiAgICAgICAgICAgICAgICAvLyBXZSBvbmx5IHRhcmdldCB0aGUgdmFsdWUgJ2Jhc2VzLWNtcycgd2hlbiBwcmVjZWRlZCBieSAndHlwZTonXHJcbiAgICAgICAgICAgICAgICAvLyBVc2luZyBbIFxcdF0qIGVuc3VyZXMgd2UgTkVWRVIgc3dhbGxvdyBuZXdsaW5lcyAoXFxuKS5cclxuICAgICAgICAgICAgICAgIGlmIChjb250ZW50LnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoJ2Jhc2VzLWNtcycpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyByZWdleCB0YXJnZXRzOiBuYW1lOiBiYXNlcy1jbXMsIG5hbWU6IFwiYmFzZXMtY21zXCIsIGV0Yy5cclxuICAgICAgICAgICAgICAgICAgICAvLyBUaGUgdXNlIG9mIFsgXFx0XSogaXMgY3JpdGljYWwgdG8gYXZvaWQgdGhlIGNvcnJ1cHRpb24gc2VlbiBlYXJsaWVyLlxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5ld0NvbnRlbnQgPSBjb250ZW50LnJlcGxhY2UoLyh0eXBlWyBcXHRdKjpbIFxcdF0qW1wiJ10/KWJhc2VzLWNtc1xcYi9naSwgJyQxY21zJyk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChuZXdDb250ZW50ICE9PSBjb250ZW50KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IGFwcC52YXVsdC5tb2RpZnkoZmlsZSwgbmV3Q29udGVudCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1pZ3JhdGVkQ291bnQrKztcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coYEJhc2VzIENNUzogTWlncmF0ZWQgJHtmaWxlLnBhdGh9YCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihgQmFzZXMgQ01TOiBFcnJvciByZWFkaW5nICR7ZmlsZS5wYXRofTpgLCBlcnJvcik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgY29uc29sZS5sb2coYEJhc2VzIENNUyBNaWdyYXRpb246IFVwZGF0ZWQgJHttaWdyYXRlZENvdW50fSBmaWxlcy5gKTtcclxuICAgIHJldHVybiBtaWdyYXRlZENvdW50O1xyXG59XHJcbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFXTyxTQUFTLFVBQVUsTUFBc0I7QUFDL0MsU0FBTyxLQUFLLGNBQWM7QUFDM0I7QUFNTyxTQUFTLG9CQUNmLFNBQ2dFO0FBQ2hFLFFBQU0sbUJBQW1CO0FBQ3pCLFFBQU0sUUFBUSxRQUFRLE1BQU0sZ0JBQWdCO0FBRTVDLE1BQUksQ0FBQyxPQUFPO0FBRVgsV0FBTztBQUFBLE1BQ04sYUFBYSxDQUFDO0FBQUEsTUFDZCxNQUFNO0FBQUEsSUFDUDtBQUFBLEVBQ0Q7QUFFQSxRQUFNLGtCQUFrQixNQUFNLENBQUM7QUFDL0IsUUFBTSxjQUFjLFFBQVEsTUFBTSxNQUFNLENBQUMsRUFBRSxNQUFNO0FBRWpELE1BQUk7QUFDSCxVQUFNLGFBQVMsNEJBQVUsZUFBZTtBQUN4QyxVQUFNLGNBQWMsVUFBVSxPQUFPLFdBQVcsV0FBVyxTQUFTLENBQUM7QUFDckUsV0FBTztBQUFBLE1BQ047QUFBQSxNQUNBLE1BQU07QUFBQSxJQUNQO0FBQUEsRUFDRCxTQUFTLEdBQUc7QUFDWCxZQUFRLE1BQU0saUNBQWlDLENBQUM7QUFFaEQsV0FBTztBQUFBLE1BQ04sYUFBYSxDQUFDO0FBQUEsTUFDZCxNQUFNO0FBQUEsSUFDUDtBQUFBLEVBQ0Q7QUFDRDtBQUtBLGVBQXNCLG1CQUNyQixLQUNBLE1BQzBDO0FBQzFDLE1BQUksQ0FBQyxVQUFVLElBQUksR0FBRztBQUNyQixXQUFPO0FBQUEsRUFDUjtBQUVBLE1BQUk7QUFDSCxVQUFNLFVBQVUsTUFBTSxJQUFJLE1BQU0sS0FBSyxJQUFJO0FBQ3pDLFVBQU0sU0FBUyxvQkFBb0IsT0FBTztBQUMxQyxXQUFPLFNBQVMsT0FBTyxjQUFjO0FBQUEsRUFDdEMsU0FBUyxHQUFHO0FBQ1gsWUFBUSxNQUFNLHFDQUFxQyxLQUFLLElBQUksS0FBSyxDQUFDO0FBQ2xFLFdBQU87QUFBQSxFQUNSO0FBQ0Q7QUF3Q0EsZUFBc0Isc0JBQ3JCLEtBQ0EsTUFDQSxVQUNnQjtBQUNoQixNQUFJLENBQUMsVUFBVSxJQUFJLEdBQUc7QUFDckIsVUFBTSxJQUFJLE1BQU0sUUFBUSxLQUFLLElBQUkscUJBQXFCO0FBQUEsRUFDdkQ7QUFFQSxNQUFJO0FBQ0gsVUFBTSxVQUFVLE1BQU0sSUFBSSxNQUFNLEtBQUssSUFBSTtBQUN6QyxVQUFNLFNBQVMsb0JBQW9CLE9BQU87QUFFMUMsUUFBSSxDQUFDLFFBQVE7QUFDWixZQUFNLElBQUksTUFBTSxzQ0FBc0M7QUFBQSxJQUN2RDtBQUdBLFVBQU0sY0FBYyxFQUFFLEdBQUcsT0FBTyxZQUFZO0FBRzVDLGFBQVMsV0FBVztBQUdwQixVQUFNLHlCQUFxQixnQ0FBYyxXQUFXLEVBQUUsS0FBSztBQUczRCxVQUFNLGFBQWE7QUFBQSxFQUFRLGtCQUFrQjtBQUFBO0FBQUEsRUFBVSxPQUFPLElBQUk7QUFHbEUsVUFBTSxJQUFJLE1BQU0sT0FBTyxNQUFNLFVBQVU7QUFBQSxFQUN4QyxTQUFTLEdBQUc7QUFDWCxZQUFRLE1BQU0sdUNBQXVDLEtBQUssSUFBSSxLQUFLLENBQUM7QUFDcEUsVUFBTTtBQUFBLEVBQ1A7QUFDRDtBQW5KQSxJQU1BQTtBQU5BO0FBQUE7QUFBQTtBQU1BLElBQUFBLG1CQUFxRDtBQUFBO0FBQUE7OztBQ1lyRCxlQUFzQixtQkFDckIsS0FDQSxNQUMwQztBQUMxQyxNQUFJLFVBQVUsSUFBSSxHQUFHO0FBRXBCLFdBQU8sTUFBTSxtQkFBbUIsS0FBSyxJQUFJO0FBQUEsRUFDMUMsT0FBTztBQUVOLFVBQU0sV0FBVyxJQUFJLGNBQWMsYUFBYSxJQUFJO0FBQ3BELFlBQU8scUNBQVUsZ0JBQWU7QUFBQSxFQUNqQztBQUNEO0FBTUEsZUFBc0IsdUJBQ3JCLEtBQ0EsTUFDQSxVQUNnQjtBQUNoQixNQUFJLFVBQVUsSUFBSSxHQUFHO0FBRXBCLFVBQU0sc0JBQXNCLEtBQUssTUFBTSxRQUFRO0FBQUEsRUFDaEQsT0FBTztBQUVOLFVBQU0sSUFBSSxZQUFZLG1CQUFtQixNQUFNLFFBQVE7QUFBQSxFQUN4RDtBQUNEO0FBaERBO0FBQUE7QUFBQTtBQU9BO0FBQUE7QUFBQTs7O0FDUEE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQWVPLFNBQVMsZ0JBQ2YsUUFDQSxnQkFDYztBQWxCZjtBQW9CQyxRQUFNLFlBQVksQ0FBQyxRQUF5QjtBQXBCN0MsUUFBQUM7QUFxQkUsWUFBT0EsTUFBQSxpQ0FBUSxRQUFSLGdCQUFBQSxJQUFBLGFBQWM7QUFBQSxFQUN0QjtBQUVBLFNBQU87QUFBQSxJQUNOLGVBQWdCLFVBQVUsZUFBZSxLQUFnQjtBQUFBLElBQ3pELHFCQUFzQixVQUFVLHFCQUFxQixLQUFnQjtBQUFBLElBQ3JFLGVBQWdCLFVBQVUsZUFBZSxLQUFnQjtBQUFBLElBQ3pELFdBQVc7QUFBQTtBQUFBLElBQ1gsV0FBVyxlQUFVLFVBQVUsTUFBcEIsWUFBcUM7QUFBQSxJQUNoRCxjQUFlLFVBQVUsY0FBYyxLQUFnQjtBQUFBLElBQ3ZELGtCQUFrQixlQUFVLGlCQUFpQixNQUEzQixZQUE0QztBQUFBLElBQzlELGtCQUFrQixlQUFVLGlCQUFpQixNQUEzQixZQUE0QztBQUFBLElBQzlELG9CQUFvQixlQUFVLG1CQUFtQixNQUE3QixZQUE4QztBQUFBLElBQ2xFLDBCQUEwQixlQUFVLHlCQUF5QixNQUFuQyxZQUFvRDtBQUFBLElBQzlFLG1CQUFtQixNQUFNO0FBQ3hCLFlBQU0sUUFBUSxVQUFVLGtCQUFrQjtBQUMxQyxVQUFJLFVBQVUsWUFBWSxVQUFVLGNBQWMsVUFBVSxTQUFTO0FBQ3BFLGVBQU87QUFBQSxNQUNSO0FBRUEsYUFBUSxVQUFVLFFBQVMsVUFBVTtBQUFBLElBQ3RDLEdBQUc7QUFBQSxJQUNILGtCQUFtQixVQUFVLGtCQUFrQixLQUFnQjtBQUFBLElBQy9ELGtCQUFtQixVQUFVLGtCQUFrQixLQUFnQjtBQUFBLElBQy9ELGtCQUFtQixVQUFVLGtCQUFrQixLQUFnQjtBQUFBLElBQy9ELGtCQUFtQixVQUFVLGtCQUFrQixLQUFnQjtBQUFBLElBQy9ELGtCQUFtQixVQUFVLGtCQUFrQixLQUFnQjtBQUFBLElBQy9ELGtCQUFtQixVQUFVLGtCQUFrQixLQUFnQjtBQUFBLElBQy9ELGtCQUFtQixVQUFVLGtCQUFrQixLQUFnQjtBQUFBLElBQy9ELGtCQUFtQixVQUFVLGtCQUFrQixLQUFnQjtBQUFBLElBQy9ELGtCQUFtQixVQUFVLGtCQUFrQixLQUFnQjtBQUFBLElBQy9ELG1CQUFvQixVQUFVLG1CQUFtQixLQUFnQjtBQUFBLElBQ2pFLG1CQUFvQixVQUFVLG1CQUFtQixLQUFnQjtBQUFBLElBQ2pFLG1CQUFvQixVQUFVLG1CQUFtQixLQUFnQjtBQUFBLElBQ2pFLG1CQUFvQixVQUFVLG1CQUFtQixLQUFnQjtBQUFBLElBQ2pFLG1CQUFvQixVQUFVLG1CQUFtQixLQUFnQjtBQUFBLElBQ2pFLDZCQUE2QixlQUFVLDRCQUE0QixNQUF0QyxZQUF1RDtBQUFBLElBQ3BGLDZCQUE2QixlQUFVLDRCQUE0QixNQUF0QyxZQUF1RDtBQUFBLElBQ3BGLDZCQUE2QixlQUFVLDRCQUE0QixNQUF0QyxZQUF1RDtBQUFBLElBQ3BGLDZCQUE2QixlQUFVLDRCQUE0QixNQUF0QyxZQUF1RDtBQUFBLElBQ3BGLDhCQUE4QixlQUFVLDZCQUE2QixNQUF2QyxZQUF3RDtBQUFBLElBQ3RGLCtCQUErQixlQUFVLDhCQUE4QixNQUF4QyxZQUF5RDtBQUFBLElBQ3hGLCtCQUErQixlQUFVLDhCQUE4QixNQUF4QyxZQUF5RDtBQUFBLElBQ3hGLHdCQUF5QixVQUFVLHdCQUF3QixLQUEwQjtBQUFBLElBQ3JGLHdCQUF5QixVQUFVLHdCQUF3QixLQUEwQjtBQUFBLElBQ3JGLHdCQUF5QixVQUFVLHdCQUF3QixLQUEwQjtBQUFBLElBQ3JGLHdCQUF5QixVQUFVLHdCQUF3QixLQUEwQjtBQUFBLElBQ3JGLHdCQUF5QixVQUFVLHdCQUF3QixLQUEwQjtBQUFBLElBQ3JGLHdCQUF5QixVQUFVLHdCQUF3QixLQUEwQjtBQUFBLElBQ3JGLHdCQUF5QixVQUFVLHdCQUF3QixLQUEwQjtBQUFBLElBQ3JGLGFBQWMsVUFBVSxhQUFhLEtBQXdDO0FBQUEsSUFDN0UsZUFBZ0IsVUFBVSxlQUFlLEtBQTZDO0FBQUEsSUFDdEYsZ0JBQWlCLFVBQVUsZ0JBQWdCLEtBQXFDO0FBQUEsSUFDaEYsa0JBQWtCLGVBQVUsaUJBQWlCLE1BQTNCLFlBQTRDO0FBQUEsSUFDOUQscUJBQXNCLFVBQVUscUJBQXFCLEtBQWdCO0FBQUEsSUFDckUscUJBQXFCLGVBQVUsb0JBQW9CLE1BQTlCLFlBQStDO0FBQUEsSUFDcEUsK0JBQStCLGVBQVUsOEJBQThCLE1BQXhDLFlBQXlEO0FBQUEsSUFDeEYsV0FBVyxlQUFVLFVBQVUsTUFBcEIsWUFBcUM7QUFBQSxJQUNoRCxjQUFlLFVBQVUsY0FBYyxLQUFnQjtBQUFBLElBQ3ZELGdCQUFnQixlQUFVLGVBQWUsTUFBekIsWUFBeUM7QUFBQSxJQUN6RCxxQkFBcUIsZUFBVSxvQkFBb0IsTUFBOUIsWUFBK0M7QUFBQSxJQUNwRSxpQkFBa0IsVUFBVSxpQkFBaUIsS0FBZ0I7QUFBQSxJQUM3RCxvQkFBb0IsZUFBVSxtQkFBbUIsTUFBN0IsWUFBOEM7QUFBQSxJQUNsRSxXQUFXLGVBQVUsVUFBVSxNQUFwQixZQUFvQztBQUFBLElBQy9DLG1CQUFtQixlQUFVLGtCQUFrQixNQUE1QixZQUE0QztBQUFBLEVBQ2hFO0FBQ0Q7QUFLTyxTQUFTLG9CQUErQjtBQUM5QyxRQUFNLFVBQVU7QUFBQTtBQUFBLElBRWY7QUFBQSxNQUNDLE1BQU07QUFBQSxNQUNOLGFBQWE7QUFBQSxNQUNiLEtBQUs7QUFBQSxNQUNMLEtBQUs7QUFBQSxNQUNMLEtBQUs7QUFBQSxNQUNMLE1BQU07QUFBQSxNQUNOLFNBQVM7QUFBQSxJQUNWO0FBQUE7QUFBQSxJQUVBO0FBQUEsTUFDQyxNQUFNO0FBQUEsTUFDTixhQUFhO0FBQUEsTUFDYixPQUFPO0FBQUEsUUFDTjtBQUFBLFVBQ0MsTUFBTTtBQUFBLFVBQ04sYUFBYTtBQUFBLFVBQ2IsS0FBSztBQUFBLFVBQ0wsYUFBYTtBQUFBLFVBQ2IsU0FBUztBQUFBLFFBQ1Y7QUFBQSxNQUNEO0FBQUEsSUFDRDtBQUFBO0FBQUEsSUFFQTtBQUFBLE1BQ0MsTUFBTTtBQUFBLE1BQ04sYUFBYTtBQUFBLE1BQ2IsT0FBTztBQUFBLFFBQ047QUFBQSxVQUNDLE1BQU07QUFBQSxVQUNOLGFBQWE7QUFBQSxVQUNiLEtBQUs7QUFBQSxVQUNMLFNBQVM7QUFBQSxRQUNWO0FBQUEsUUFDQTtBQUFBLFVBQ0MsTUFBTTtBQUFBLFVBQ04sYUFBYTtBQUFBLFVBQ2IsS0FBSztBQUFBLFVBQ0wsYUFBYTtBQUFBLFVBQ2IsU0FBUztBQUFBLFFBQ1Y7QUFBQSxRQUNBO0FBQUEsVUFDQyxNQUFNO0FBQUEsVUFDTixhQUFhO0FBQUEsVUFDYixLQUFLO0FBQUEsVUFDTCxTQUFTO0FBQUEsUUFDVjtBQUFBLFFBQ0E7QUFBQSxVQUNDLE1BQU07QUFBQSxVQUNOLGFBQWE7QUFBQSxVQUNiLEtBQUs7QUFBQSxVQUNMLFNBQVM7QUFBQSxRQUNWO0FBQUEsTUFDRDtBQUFBLElBQ0Q7QUFBQTtBQUFBLElBRUE7QUFBQSxNQUNDLE1BQU07QUFBQSxNQUNOLGFBQWE7QUFBQSxNQUNiLE9BQU87QUFBQSxRQUNOO0FBQUEsVUFDQyxNQUFNO0FBQUEsVUFDTixhQUFhO0FBQUEsVUFDYixLQUFLO0FBQUEsVUFDTCxTQUFTO0FBQUEsWUFDUixRQUFRO0FBQUEsWUFDUixhQUFhO0FBQUEsWUFDYixTQUFTO0FBQUEsVUFDVjtBQUFBLFVBQ0EsU0FBUztBQUFBLFFBQ1Y7QUFBQSxRQUNBO0FBQUEsVUFDQyxNQUFNO0FBQUEsVUFDTixhQUFhO0FBQUEsVUFDYixLQUFLO0FBQUEsVUFDTCxhQUFhO0FBQUEsVUFDYixTQUFTO0FBQUEsUUFDVjtBQUFBLFFBQ0E7QUFBQSxVQUNDLE1BQU07QUFBQSxVQUNOLGFBQWE7QUFBQSxVQUNiLEtBQUs7QUFBQSxVQUNMLFNBQVM7QUFBQSxZQUNSLFVBQVU7QUFBQSxZQUNWLFlBQVk7QUFBQSxZQUNaLFNBQVM7QUFBQSxVQUNWO0FBQUEsVUFDQSxTQUFTO0FBQUEsUUFDVjtBQUFBLFFBQ0E7QUFBQSxVQUNDLE1BQU07QUFBQSxVQUNOLGFBQWE7QUFBQSxVQUNiLEtBQUs7QUFBQSxVQUNMLEtBQUs7QUFBQSxVQUNMLEtBQUs7QUFBQSxVQUNMLE1BQU07QUFBQSxVQUNOLFNBQVM7QUFBQSxVQUNULFVBQVU7QUFBQSxZQUNULEtBQUs7QUFBQSxZQUNMLE9BQU87QUFBQSxVQUNSO0FBQUEsUUFDRDtBQUFBLE1BQ0Q7QUFBQSxJQUNEO0FBQUE7QUFBQSxJQUVBO0FBQUEsTUFDQyxNQUFNO0FBQUEsTUFDTixhQUFhO0FBQUEsTUFDYixPQUFPO0FBQUEsUUFDTjtBQUFBLFVBQ0MsTUFBTTtBQUFBLFVBQ04sYUFBYTtBQUFBLFVBQ2IsS0FBSztBQUFBLFVBQ0wsU0FBUztBQUFBLFFBQ1Y7QUFBQSxRQUNBO0FBQUEsVUFDQyxNQUFNO0FBQUEsVUFDTixhQUFhO0FBQUEsVUFDYixLQUFLO0FBQUEsVUFDTCxhQUFhO0FBQUEsVUFDYixTQUFTO0FBQUEsUUFDVjtBQUFBLFFBQ0E7QUFBQSxVQUNDLE1BQU07QUFBQSxVQUNOLGFBQWE7QUFBQSxVQUNiLGFBQWE7QUFBQSxVQUNiLEtBQUs7QUFBQSxVQUNMLFNBQVM7QUFBQSxRQUNWO0FBQUEsTUFDRDtBQUFBLElBQ0Q7QUFBQTtBQUFBLElBRUE7QUFBQSxNQUNDLE1BQU07QUFBQSxNQUNOLGFBQWE7QUFBQSxNQUNiLE9BQU87QUFBQSxRQUNOO0FBQUEsVUFDQyxNQUFNO0FBQUEsVUFDTixhQUFhO0FBQUEsVUFDYixLQUFLO0FBQUEsVUFDTCxTQUFTO0FBQUEsUUFDVjtBQUFBLFFBQ0E7QUFBQSxVQUNDLE1BQU07QUFBQSxVQUNOLGFBQWE7QUFBQSxVQUNiLEtBQUs7QUFBQSxVQUNMLGFBQWE7QUFBQSxVQUNiLFNBQVM7QUFBQSxRQUNWO0FBQUEsUUFDQTtBQUFBLFVBQ0MsTUFBTTtBQUFBLFVBQ04sYUFBYTtBQUFBLFVBQ2IsS0FBSztBQUFBLFVBQ0wsU0FBUztBQUFBLFFBQ1Y7QUFBQSxRQUNBO0FBQUEsVUFDQyxNQUFNO0FBQUEsVUFDTixhQUFhO0FBQUEsVUFDYixLQUFLO0FBQUEsVUFDTCxTQUFTO0FBQUEsUUFDVjtBQUFBLE1BQ0Q7QUFBQSxJQUNEO0FBQUE7QUFBQSxJQUVBO0FBQUEsTUFDQyxNQUFNO0FBQUEsTUFDTixhQUFhO0FBQUEsTUFDYixPQUFPO0FBQUEsUUFDTjtBQUFBLFVBQ0MsTUFBTTtBQUFBLFVBQ04sYUFBYTtBQUFBLFVBQ2IsS0FBSztBQUFBLFVBQ0wsU0FBUztBQUFBLFFBQ1Y7QUFBQSxRQUNBO0FBQUEsVUFDQyxNQUFNO0FBQUEsVUFDTixhQUFhO0FBQUEsVUFDYixLQUFLO0FBQUEsVUFDTCxhQUFhO0FBQUEsVUFDYixTQUFTO0FBQUEsUUFDVjtBQUFBLFFBQ0E7QUFBQSxVQUNDLE1BQU07QUFBQSxVQUNOLGFBQWE7QUFBQSxVQUNiLEtBQUs7QUFBQSxVQUNMLEtBQUs7QUFBQSxVQUNMLEtBQUs7QUFBQSxVQUNMLE1BQU07QUFBQSxVQUNOLFNBQVM7QUFBQSxVQUNULFVBQVU7QUFBQSxZQUNULEtBQUs7QUFBQSxZQUNMLE9BQU87QUFBQSxVQUNSO0FBQUEsUUFDRDtBQUFBLE1BQ0Q7QUFBQSxJQUNEO0FBQUE7QUFBQSxJQUVBO0FBQUEsTUFDQyxNQUFNO0FBQUEsTUFDTixhQUFhO0FBQUEsTUFDYixPQUFPO0FBQUEsUUFDTjtBQUFBLFVBQ0MsTUFBTTtBQUFBLFVBQ04sYUFBYTtBQUFBLFVBQ2IsS0FBSztBQUFBLFVBQ0wsU0FBUztBQUFBLFlBQ1IsUUFBUTtBQUFBLFlBQ1IsVUFBVTtBQUFBLFlBQ1YsU0FBUztBQUFBLFVBQ1Y7QUFBQSxVQUNBLFNBQVM7QUFBQSxRQUNWO0FBQUEsTUFDRDtBQUFBLElBQ0Q7QUFBQTtBQUFBLElBRUE7QUFBQSxNQUNDLE1BQU07QUFBQSxNQUNOLGFBQWE7QUFBQSxNQUNiLE9BQU87QUFBQSxRQUNOO0FBQUEsVUFDQyxNQUFNO0FBQUEsVUFDTixhQUFhO0FBQUEsVUFDYixLQUFLO0FBQUEsVUFDTCxhQUFhO0FBQUEsVUFDYixTQUFTO0FBQUEsUUFDVjtBQUFBLFFBQ0E7QUFBQSxVQUNDLE1BQU07QUFBQSxVQUNOLGFBQWE7QUFBQSxVQUNiLEtBQUs7QUFBQSxVQUNMLGFBQWE7QUFBQSxVQUNiLFNBQVM7QUFBQSxRQUNWO0FBQUEsUUFDQTtBQUFBLFVBQ0MsTUFBTTtBQUFBLFVBQ04sYUFBYTtBQUFBLFVBQ2IsS0FBSztBQUFBLFVBQ0wsU0FBUztBQUFBLFFBQ1Y7QUFBQSxRQUNBO0FBQUEsVUFDQyxNQUFNO0FBQUEsVUFDTixhQUFhO0FBQUEsVUFDYixLQUFLO0FBQUEsVUFDTCxTQUFTO0FBQUEsWUFDUixPQUFPO0FBQUEsWUFDUCxVQUFVO0FBQUEsVUFDWDtBQUFBLFVBQ0EsU0FBUztBQUFBLFFBQ1Y7QUFBQSxNQUNEO0FBQUEsSUFDRDtBQUFBO0FBQUEsSUFFQTtBQUFBLE1BQ0MsTUFBTTtBQUFBLE1BQ04sYUFBYTtBQUFBLE1BQ2IsT0FBTztBQUFBLFFBQ047QUFBQSxVQUNDLE1BQU07QUFBQSxVQUNOLGFBQWE7QUFBQSxVQUNiLEtBQUs7QUFBQSxVQUNMLGFBQWE7QUFBQSxVQUNiLFNBQVM7QUFBQSxRQUNWO0FBQUEsUUFDQTtBQUFBLFVBQ0MsTUFBTTtBQUFBLFVBQ04sYUFBYTtBQUFBLFVBQ2IsS0FBSztBQUFBLFVBQ0wsYUFBYTtBQUFBLFVBQ2IsU0FBUztBQUFBLFFBQ1Y7QUFBQSxRQUNBO0FBQUEsVUFDQyxNQUFNO0FBQUEsVUFDTixhQUFhO0FBQUEsVUFDYixLQUFLO0FBQUEsVUFDTCxTQUFTO0FBQUEsUUFDVjtBQUFBLFFBQ0E7QUFBQSxVQUNDLE1BQU07QUFBQSxVQUNOLGFBQWE7QUFBQSxVQUNiLEtBQUs7QUFBQSxVQUNMLFNBQVM7QUFBQSxZQUNSLE9BQU87QUFBQSxZQUNQLFVBQVU7QUFBQSxVQUNYO0FBQUEsVUFDQSxTQUFTO0FBQUEsUUFDVjtBQUFBLE1BQ0Q7QUFBQSxJQUNEO0FBQUE7QUFBQSxJQUVBO0FBQUEsTUFDQyxNQUFNO0FBQUEsTUFDTixhQUFhO0FBQUEsTUFDYixPQUFPO0FBQUEsUUFDTjtBQUFBLFVBQ0MsTUFBTTtBQUFBLFVBQ04sYUFBYTtBQUFBLFVBQ2IsS0FBSztBQUFBLFVBQ0wsYUFBYTtBQUFBLFVBQ2IsU0FBUztBQUFBLFFBQ1Y7QUFBQSxRQUNBO0FBQUEsVUFDQyxNQUFNO0FBQUEsVUFDTixhQUFhO0FBQUEsVUFDYixLQUFLO0FBQUEsVUFDTCxhQUFhO0FBQUEsVUFDYixTQUFTO0FBQUEsUUFDVjtBQUFBLFFBQ0E7QUFBQSxVQUNDLE1BQU07QUFBQSxVQUNOLGFBQWE7QUFBQSxVQUNiLEtBQUs7QUFBQSxVQUNMLFNBQVM7QUFBQSxRQUNWO0FBQUEsUUFDQTtBQUFBLFVBQ0MsTUFBTTtBQUFBLFVBQ04sYUFBYTtBQUFBLFVBQ2IsS0FBSztBQUFBLFVBQ0wsU0FBUztBQUFBLFlBQ1IsT0FBTztBQUFBLFlBQ1AsVUFBVTtBQUFBLFVBQ1g7QUFBQSxVQUNBLFNBQVM7QUFBQSxRQUNWO0FBQUEsTUFDRDtBQUFBLElBQ0Q7QUFBQTtBQUFBLElBRUE7QUFBQSxNQUNDLE1BQU07QUFBQSxNQUNOLGFBQWE7QUFBQSxNQUNiLE9BQU87QUFBQSxRQUNOO0FBQUEsVUFDQyxNQUFNO0FBQUEsVUFDTixhQUFhO0FBQUEsVUFDYixLQUFLO0FBQUEsVUFDTCxhQUFhO0FBQUEsVUFDYixTQUFTO0FBQUEsUUFDVjtBQUFBLFFBQ0E7QUFBQSxVQUNDLE1BQU07QUFBQSxVQUNOLGFBQWE7QUFBQSxVQUNiLEtBQUs7QUFBQSxVQUNMLGFBQWE7QUFBQSxVQUNiLFNBQVM7QUFBQSxRQUNWO0FBQUEsUUFDQTtBQUFBLFVBQ0MsTUFBTTtBQUFBLFVBQ04sYUFBYTtBQUFBLFVBQ2IsS0FBSztBQUFBLFVBQ0wsU0FBUztBQUFBLFFBQ1Y7QUFBQSxRQUNBO0FBQUEsVUFDQyxNQUFNO0FBQUEsVUFDTixhQUFhO0FBQUEsVUFDYixLQUFLO0FBQUEsVUFDTCxTQUFTO0FBQUEsWUFDUixPQUFPO0FBQUEsWUFDUCxVQUFVO0FBQUEsVUFDWDtBQUFBLFVBQ0EsU0FBUztBQUFBLFFBQ1Y7QUFBQSxNQUNEO0FBQUEsSUFDRDtBQUFBO0FBQUEsSUFFQTtBQUFBLE1BQ0MsTUFBTTtBQUFBLE1BQ04sYUFBYTtBQUFBLE1BQ2IsT0FBTztBQUFBLFFBQ047QUFBQSxVQUNDLE1BQU07QUFBQSxVQUNOLGFBQWE7QUFBQSxVQUNiLEtBQUs7QUFBQSxVQUNMLGFBQWE7QUFBQSxVQUNiLFNB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LEVBQUUsS0FBSztBQUNoRCxXQUFTLGlCQUFpQixlQUFlLEVBQUUsS0FBSztBQUNoRCxXQUFTLGlCQUFpQixlQUFlLEVBQUUsS0FBSztBQUNoRCxXQUFTLGlCQUFpQixlQUFlLEVBQUUsS0FBSztBQUloRCxXQUFTLFlBQVksZUFBZSxDQUFDLElBQUksTUFBTSwwQkFBMEIsZUFBZSxDQUFDLEdBQUcsT0FBTyxVQUFVLFVBQVUsS0FBSyxtQkFBbUIsSUFBSTtBQUNuSixXQUFTLFlBQVksZUFBZSxDQUFDLElBQUksTUFBTSwwQkFBMEIsZUFBZSxDQUFDLEdBQUcsT0FBTyxVQUFVLFVBQVUsS0FBSyxtQkFBbUIsSUFBSTtBQUNuSixXQUFTLFlBQVksZUFBZSxDQUFDLElBQUksTUFBTSwwQkFBMEIsZUFBZSxDQUFDLEdBQUcsT0FBTyxVQUFVLFVBQVUsS0FBSyxtQkFBbUIsSUFBSTtBQUNuSixXQUFTLFlBQVksZUFBZSxDQUFDLElBQUksTUFBTSwwQkFBMEIsZUFBZSxDQUFDLEdBQUcsT0FBTyxVQUFVLFVBQVUsS0FBSyxtQkFBbUIsSUFBSTtBQUNuSixXQUFTLFlBQVksZUFBZSxDQUFDLElBQUksTUFBTSwwQkFBMEIsZUFBZSxDQUFDLEdBQUcsT0FBTyxVQUFVLFVBQVUsS0FBSyxtQkFBbUIsSUFBSTtBQUNuSixXQUFTLFlBQVksZUFBZSxDQUFDLElBQUksTUFBTSwwQkFBMEIsZUFBZSxDQUFDLEdBQUcsT0FBTyxVQUFVLFVBQVUsS0FBSyxtQkFBbUIsSUFBSTtBQUNuSixXQUFTLFlBQVksZUFBZSxDQUFDLElBQUksTUFBTSwwQkFBMEIsZUFBZSxDQUFDLEdBQUcsT0FBTyxVQUFVLFVBQVUsS0FBSyxtQkFBbUIsSUFBSTtBQUNuSixXQUFTLFlBQVksZUFBZSxDQUFDLElBQUksTUFBTSwwQkFBMEIsZUFBZSxDQUFDLEdBQUcsT0FBTyxVQUFVLFVBQVUsS0FBSyxtQkFBbUIsSUFBSTtBQUNuSixXQUFTLFlBQVksZUFBZSxDQUFDLElBQUksTUFBTSwwQkFBMEIsZUFBZSxDQUFDLEdBQUcsT0FBTyxVQUFVLFVB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VUFBSSxRQUFRLE9BQU8sS0FBSyxtQkFBbUIsWUFBWTtBQUN0RCxhQUFLLGVBQWU7QUFBQSxNQUNyQjtBQUFBLElBQ0QsQ0FBQztBQUFBLEVBQ0Y7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQUtBLFdBQVcsTUFBMEI7QUFDcEMsU0FBSyxZQUFZLE9BQU8sSUFBSTtBQUFBLEVBQzdCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBT0EsdUJBQTZCO0FBRTVCLFFBQUksS0FBSyxnQ0FBZ0MsTUFBTTtBQUM5QyxhQUFPLGFBQWEsS0FBSywyQkFBMkI7QUFBQSxJQUNyRDtBQUVBLFNBQUssOEJBQThCLE9BQU8sV0FBVyxNQUFNO0FBQzFELFdBQUssOEJBQThCO0FBRW5DLFdBQUssa0JBQWtCO0FBR3ZCLFVBQUksaUJBQWlCO0FBQ3JCLFdBQUssWUFBWSxRQUFRLFVBQVE7QUFFaEMsWUFBSSxLQUFLLFlBQVk7QUFDcEIsY0FBSTtBQUVILGtCQUFNLGNBQWUsS0FBa0Q7QUFDdkUsZ0JBQUksZUFBZSxZQUFZLGFBQWE7QUFHM0Msa0JBQUksT0FBUSxLQUF3QyxrQkFBa0IsWUFBWTtBQUNqRixnQkFBQyxLQUF1QyxjQUFjO0FBQ3REO0FBQUEsY0FDRDtBQUFBLFlBQ0Q7QUFBQSxVQUNELFNBQVMsT0FBTztBQUVmLG9CQUFRLEtBQUssOENBQThDLEtBQUs7QUFBQSxVQUNqRTtBQUFBLFFBQ0Q7QUFBQSxNQUNELENBQUM7QUFHRCxVQUFJLGlCQUFpQixHQUFHO0FBQ3ZCLGdCQUFRLE1BQU0sd0JBQXdCLGNBQWMsNENBQTRDO0FBQUEsTUFDakc7QUFBQSxJQUNELEdBQUcsS0FBSyxTQUFTLDZCQUE2QjtBQUFBLEVBQy9DO0FBRUQ7IiwKICAibmFtZXMiOiBbImltcG9ydF9vYnNpZGlhbiIsICJfYSIsICJpbXBvcnRfb2JzaWRpYW4iLCAidW5pcXVlQXR0YWNobWVudHMiLCAiaW1wb3J0X29ic2lkaWFuIiwgImltcG9ydF9vYnNpZGlhbiIsICJpbXBvcnRfb2JzaWRpYW4iLCAiaW1wb3J0X29ic2lkaWFuIiwgImltcG9ydF9vYnNpZGlhbiIsICJpbXBvcnRfb2JzaWRpYW4iLCAiaW1wb3J0X29ic2lkaWFuIiwgImltcG9ydF9vYnNpZGlhbiIsICJpbXBvcnRfb2JzaWRpYW4iLCAiaW1wb3J0X29ic2lkaWFuIiwgImltcG9ydF9vYnNpZGlhbiIsICJpbXBvcnRfb2JzaWRpYW4iLCAiaW1wb3J0X29ic2lkaWFuIiwgImNvbW1hbmRSZWdpc3RyeSIsICJjb21tYW5kIiwgImUiLCAiX2EiLCAiX2IiLCAiaW1wb3J0X29ic2lkaWFuIiwgImUiLCAidGl0bGVFbCIsICJpbXBvcnRfb2JzaWRpYW4iLCAiaW1wb3J0X29ic2lkaWFuIiwgImltcG9ydF9vYnNpZGlhbiIsICJpbXBvcnRfb2JzaWRpYW4iLCAiaW1wb3J0X29ic2lkaWFuIiwgImltcG9ydF9vYnNpZGlhbiIsICJwYXJlbnQiLCAiYnV0dG9ucyIsICJpbXBvcnRfb2JzaWRpYW4iLCAiY29tcGFyaXNvbiIsICJhbGxFbnRyaWVzIiwgInByZXBhcmVEZWxldGlvblByZXZpZXciLCAiZXhlY3V0ZVNtYXJ0RGVsZXRpb24iLCAiRGVsZXRpb25QcmV2aWV3TW9kYWwiLCAiZ2V0Q01TVmlld09wdGlvbnMiLCAiY29udGFpbmVyRWwiLCAiaW1wb3J0X29ic2lkaWFuIl0KfQo= diff --git a/src/content/.obsidian/plugins/bases-cms/manifest.json b/src/content/.obsidian/plugins/bases-cms/manifest.json new file mode 100644 index 0000000..edc7467 --- /dev/null +++ b/src/content/.obsidian/plugins/bases-cms/manifest.json @@ -0,0 +1 @@ +{"id":"bases-cms","name":"Bases CMS","version":"0.4.2","minAppVersion":"1.10.2","description":"Manage your notes in bases like a content management system.","author":"David V. Kimball","authorUrl":"https://davidvkimball.com","fundingUrl":"https://patreon.com/davidvkimball","isDesktopOnly":false} \ No newline at end of file diff --git a/src/content/.obsidian/plugins/bases-cms/styles.css b/src/content/.obsidian/plugins/bases-cms/styles.css new file mode 100644 index 0000000..6000a2d --- /dev/null +++ b/src/content/.obsidian/plugins/bases-cms/styles.css @@ -0,0 +1,1539 @@ +/* @settings + +name: Bases CMS +id: bases-cms +settings: + - + id: layout-heading + title: Card layout + type: heading + level: 2 + collapsed: true + - + id: bases-cms-min-grid-columns + title: Minimum grid columns + description: Minimum number of columns in grid view + type: variable-select + default: '1' + options: + - + label: One + value: '1' + - + label: Two + value: '2' + - + id: bases-cms-card-spacing + title: Card spacing + description: Spacing between cards + type: variable-number-slider + default: 8 + min: 0 + max: 32 + step: 1 + format: px + - + id: bases-cms-card-padding-container + title: Card padding + description: Padding between cards and container borders + type: variable-number-slider + default: 12 + min: 0 + max: 32 + step: 1 + format: px + - + id: bases-cms-view-background + title: View background + description: Background color for card views + type: variable-themed-color + format: hex + default-light: '#' + default-dark: '#' + - + id: cards-heading + title: Cards + type: heading + level: 2 + collapsed: true + - + id: bases-cms-element-spacing + title: Card element spacing + description: Spacing between elements within cards + type: variable-number-slider + default: 8 + min: 0 + max: 24 + step: 1 + format: px + - + id: bases-cms-card-padding + title: Card padding + description: Padding from card edges to content + type: variable-number-slider + default: 12 + min: 0 + max: 24 + step: 1 + format: px + - + id: bases-cms-card-border-radius + title: Card border radius + description: Corner roundness of cards + type: variable-number-slider + default: 8 + min: 0 + max: 32 + step: 1 + format: px + - + id: bases-cms-card-border + title: Card border + description: Show border around cards + type: variable-boolean + default: true + - + id: bases-cms-card-border-color + title: Card border color + description: Color of card borders + type: variable-themed-color + format: hex + default-light: '#' + default-dark: '#' + - + id: bases-cms-card-border-color-hover + title: Card border color on hover + description: Color of card borders when hovering + type: variable-themed-color + format: hex + default-light: '#' + default-dark: '#' + - + id: bases-cms-card-background + title: Card background + description: Card background appearance + type: class-select + allowEmpty: false + default: bases-cms-card-background-tinted + options: + - + label: Tinted + value: bases-cms-card-background-tinted + - + label: Transparent + value: bases-cms-card-background-transparent + - + label: Custom color + value: bases-cms-card-background-custom + - + id: bases-cms-card-background-custom-color + title: Custom card background + description: Custom color for card backgrounds (only used when Card background is set to Custom color) + type: variable-themed-color + format: hex + default-light: '#' + default-dark: '#' + - + - + id: covers-heading + title: Covers + type: heading + level: 2 + collapsed: true + - + id: bases-cms-cover-crop + title: Cover crop alignment + description: How to crop cover images when aspect ratios don't match + type: class-select + allowEmpty: false + default: bases-cms-cover-crop-center + options: + - + label: Top + value: bases-cms-cover-crop-top + - + label: Center + value: bases-cms-cover-crop-center + - + label: Bottom + value: bases-cms-cover-crop-bottom + - + id: bases-cms-show-cover-placeholder + title: Show placeholder for cards with no image + description: If covers are enabled but a file doesn't have an image, show an empty cover. If disabled, card content will fill all available space. + type: class-toggle + default: true + - + id: properties-heading + title: Properties + type: heading + level: 2 + collapsed: true + - + id: bases-cms-list-separator + title: List item separator + description: Separator between items in list-type properties. Whitespace preserved. + type: variable-text + default: ", " + quotes: true + - + id: bases-cms-fade-list-separator + title: Fade list separator + description: Dim the separator color + type: class-toggle + default: true + - + id: bases-cms-empty-value-marker + title: Empty value marker + description: What to show for empty property values. Whitespace preserved. + type: variable-text + default: "—" + quotes: true + - + id: bases-cms-fade-empty-marker + title: Fade empty marker + description: Dim the empty value marker color + type: class-toggle + default: true + - + id: bases-cms-property-label-spacing + title: Property label spacing + description: Spacing between property labels and content above them + type: variable-number-slider + default: 6 + min: 0 + max: 24 + step: 1 + format: px + - + - + id: bases-cms-property-master-font + title: Property font + description: Font name as it appears on your system. Can be overridden by individual item options below. + type: variable-text + default: '' + - + id: bases-cms-property-master-font-size + title: Property font size + description: Font size for all properties (e.g., 0.8em, 13px, 0.8125rem) + type: variable-text + default: '' + - + id: bases-cms-property-color + title: Text color + description: Theme color preset for property text + type: class-select + allowEmpty: false + default: bases-cms-property-color-muted + options: + - + label: Faint + value: bases-cms-property-color-faint + - + label: Muted + value: bases-cms-property-color-muted + - + label: Normal + value: bases-cms-property-color-normal + - + label: Accent + value: bases-cms-property-color-accent + - + label: Red + value: bases-cms-property-color-red + - + label: Orange + value: bases-cms-property-color-orange + - + label: Yellow + value: bases-cms-property-color-yellow + - + label: Green + value: bases-cms-property-color-green + - + label: Cyan + value: bases-cms-property-color-cyan + - + label: Blue + value: bases-cms-property-color-blue + - + label: Purple + value: bases-cms-property-color-purple + - + label: Pink + value: bases-cms-property-color-pink + - + label: Custom + value: bases-cms-property-color-custom + - + id: bases-cms-property-color-custom + title: Custom text color + description: Custom color for property text (when Text color is set to Custom) + type: variable-themed-color + format: hex + default-light: '#' + default-dark: '#' + - + id: bases-cms-hide-missing-properties + title: Hide missing properties + description: Do not display a property if a file does not have it. + type: class-toggle + default: false + - + id: bases-cms-hide-empty-properties + title: Hide empty properties + description: Do not display a property if its value is empty. + type: class-toggle + default: false + - + id: bases-cms-badge-heading + title: Draft/Published Badge + type: heading + level: 2 + collapsed: true + - + id: bases-cms-badge-style + title: Badge style + description: Visual style for draft/published status badges + type: class-select + allowEmpty: false + default: bases-cms-badge-style-default + options: + - + label: Default + value: bases-cms-badge-style-default + - + label: Minimal + value: bases-cms-badge-style-minimal + - + label: Custom colors + value: bases-cms-badge-style-custom + - + id: bases-cms-badge-draft-color + title: Draft badge color + description: Custom color for draft status badge (only used when Badge style is set to Custom colors) + type: variable-themed-color + format: hex + default-light: '#FFC107' + default-dark: '#FFC107' + - + id: bases-cms-badge-published-color + title: Published badge color + description: Custom color for published status badge (only used when Badge style is set to Custom colors) + type: variable-themed-color + format: hex + default-light: '#2E7D32' + default-dark: '#2E7D32' + - + id: bases-cms-badge-font-size + title: Badge font size + description: Font size for status badges (e.g., 0.65em, 11px, 0.6875rem) + type: variable-text + default: '' + - + id: bases-cms-badge-padding + title: Badge padding + description: Padding inside status badges + type: variable-number-slider + default: 6 + min: 2 + max: 16 + step: 1 + format: px + - + id: bases-cms-badge-border-radius + title: Badge border radius + description: Corner roundness of status badges + type: variable-number-slider + default: 10 + min: 0 + max: 20 + step: 1 + format: px + - + id: bases-cms-date-heading + title: Date Property + type: heading + level: 2 + collapsed: true + - + id: bases-cms-date-font + title: Date font + description: Font name as it appears on your system + type: variable-text + default: '' + - + id: bases-cms-date-font-size + title: Date font size + description: Font size for date property (e.g., 0.85em, 13px, 0.8125rem) + type: variable-text + default: '' + - + id: bases-cms-date-color + title: Date color + description: Theme color preset for date text + type: class-select + allowEmpty: false + default: bases-cms-date-color-muted + options: + - + label: Faint + value: bases-cms-date-color-faint + - + label: Muted + value: bases-cms-date-color-muted + - + label: Normal + value: bases-cms-date-color-normal + - + label: Accent + value: bases-cms-date-color-accent + - + label: Custom + value: bases-cms-date-color-custom + - + id: bases-cms-date-color-custom + title: Custom date color + description: Custom color for date text (when Date color is set to Custom) + type: variable-themed-color + format: hex + default-light: '#' + default-dark: '#' + - + id: bases-cms-checkbox-heading + title: Selection Checkboxes + type: heading + level: 2 + collapsed: true + - + id: bases-cms-checkbox-click-radius + title: Click radius + description: Size of the clickable area around checkboxes (larger = easier to click) + type: variable-number-slider + default: 14 + min: 8 + max: 32 + step: 1 + format: px + - + id: bases-cms-hide-checkboxes + title: Hide checkboxes + description: When enabled, checkboxes are hidden and selection is only possible via right-click context menu + type: class-toggle + default: false +*/ + +/** + * Bases CMS Plugin Styles + */ + +/* ============================================ + VIEW ICON STYLING + ============================================ */ + +/* Ensure CMS view icon matches other view icons */ +.bases-view-selector [data-view-type="bases-cms"] svg, +.bases-view-selector [data-view-type="bases-cms"] .lucide-blocks { + opacity: var(--icon-opacity); + color: var(--icon-color); +} + +.bases-view-selector [data-view-type="bases-cms"]:hover svg, +.bases-view-selector [data-view-type="bases-cms"]:hover .lucide-blocks { + opacity: var(--icon-opacity-hover); +} + +/* ============================================ + CONTAINER & GRID LAYOUT + ============================================ */ + +.bases-cms-container { + height: 100%; + overflow-y: auto; + overflow-x: hidden; + background-color: var(--bases-cms-view-background, transparent); +} + +/* Match native Bases cards view padding (single source: .bases-view) */ +.bases-view[data-view-type="cms"] { + --bases-view-padding: var(--size-4-3); + --bases-embed-padding: var(--size-4-1) 1px; +} + +.bases-cms-grid { + display: grid; + gap: var(--bases-cms-card-spacing, 8px); + align-items: stretch; + width: 100%; + max-width: 100%; + box-sizing: border-box; + padding: 0; + grid-template-columns: repeat(auto-fill, minmax(var(--card-min-width, 300px), 1fr)); +} + +/* Ensure no extra padding in embedded view containers */ +.markdown-rendered .bases-view, +.markdown-rendered .bases-cms-container { + padding-right: 0 !important; +} + +/* Remove reserved scrollbar gutter in embed so cards fill width (Bases may set scrollbar-gutter: stable on .bases-view) */ +.markdown-rendered .bases-view { + scrollbar-gutter: auto; +} + +/* Minimum grid columns - when set to 2, ensure at least 2 columns by constraining card width */ +body[style*="--bases-cms-min-grid-columns: 2"] .bases-cms-grid, +body[style*="--bases-cms-min-grid-columns: '2'"] .bases-cms-grid { + --max-card-width: calc((100% - var(--bases-cms-card-spacing, 8px)) / 2); + grid-template-columns: repeat(auto-fill, minmax(min(var(--card-min-width, 300px), var(--max-card-width)), 1fr)); +} + +.bases-cms-group { + display: grid; + grid-column: 1 / -1; + grid-template-columns: subgrid; + row-gap: var(--size-4-3); + padding: 0 0 var(--size-4-4) 0; + border-color: var(--background-modifier-border); + border-width: 0 0 1px 0; + border-style: solid; +} + +.bases-cms-group:last-child { + border-bottom: none; + padding-bottom: 0; +} + +.bases-cms-group-heading { + grid-column: 1 / -1; + padding: var(--size-4-1) 0 0; +} + +.bases-cms-group-value { + font-size: 0.9em; + color: var(--text-muted); +} + +/* ============================================ + CARD STYLING + ============================================ */ + +.bases-cms-grid .card { + margin: 0 !important; + display: flex; + flex-direction: column; + min-height: 100%; + min-width: 0; + overflow: visible; +} + +.bases-cms-grid .card .card-content~.card-properties, +.bases-cms-grid .card .card-title~.card-properties { + margin-top: auto; + padding-top: var(--bases-cms-element-spacing, 8px); +} + +.bases-cms .card { + border: 1px solid var(--bases-cms-card-border-color, var(--background-modifier-border)); + border-radius: var(--bases-cms-card-border-radius, 8px); + padding: var(--bases-cms-card-padding, 12px) !important; + margin: var(--bases-cms-card-spacing, 8px) 0; + background-color: var(--background-primary-alt); + break-inside: avoid; + page-break-inside: avoid; + transition: border-color 0.2s; + position: relative; +} + +/* Card background styles */ +body.bases-cms-card-background-transparent .bases-cms .card { + background-color: transparent !important; +} + +body.bases-cms-card-background-custom .bases-cms .card { + background-color: var(--bases-cms-card-background-custom-color, var(--background-primary-alt)) !important; +} + + +/* Global spacing between card elements */ +.bases-cms .card>*+* { + margin-top: var(--bases-cms-element-spacing, 8px); +} + +/* Exclude absolutely positioned elements from spacing */ +.bases-cms .card>.card-status-badge, +.bases-cms .card>.bases-cms-select-checkbox { + margin-top: 0; +} + +@media (hover: hover) { + .bases-cms .card:hover { + --hover-color: var(--bases-cms-card-border-color-hover); + border-color: var(--hover-color, var(--text-faint)) !important; + } +} + +.bases-cms .card.selected { + border-color: var(--interactive-accent); + box-shadow: 0 0 0 2px var(--interactive-accent); +} + +/* Ensure cover image respects card border-radius when selected */ +.bases-cms .card.selected.image-format-cover .card-cover { + border-radius: var(--bases-cms-card-border-radius, 8px) var(--bases-cms-card-border-radius, 8px) 0 0; +} + +/* Selection checkbox */ +.bases-cms-select-checkbox { + position: absolute; + top: 20px; + right: 18px; + z-index: 11; + --checkbox-click-radius: var(--bases-cms-checkbox-click-radius, 32px); + width: var(--checkbox-click-radius); + height: var(--checkbox-click-radius); + display: flex; + align-items: center; + justify-content: center; + transform: translate(50%, -50%); + margin: 0; + padding: 0; +} + +/* Hide checkboxes when Style Settings option is enabled */ +body.bases-cms-hide-checkboxes .bases-cms .bases-cms-select-checkbox { + display: none !important; +} + +.bases-cms-select-checkbox input[type="checkbox"] { + cursor: default; + margin: 0; + padding: 0; + flex-shrink: 0; +} + +/* For cover images, add subtle drop shadow for visibility on light images */ +.bases-cms .card.image-format-cover .bases-cms-select-checkbox input[type="checkbox"] { + filter: drop-shadow(0 1px 2px rgba(0, 0, 0, 0.2)); +} + +/* ============================================ + CARD TITLE + ============================================ */ + +.bases-cms .card-title { + font-weight: calc(var(--font-weight) + var(--bold-modifier)); + color: var(--bases-cms-title-color, var(--color-base-100)); + font-family: var(--bases-cms-title-font, inherit); + font-size: var(--bases-cms-title-font-size, var(--font-ui-medium)); + max-width: 100%; + word-break: break-word; + text-align: left; + margin: 0; + display: -webkit-box; + -webkit-line-clamp: var(--bases-cms-title-lines, 2); + line-clamp: var(--bases-cms-title-lines, 2); + -webkit-box-orient: vertical; + overflow: hidden; + line-height: var(--line-height-tight); + position: relative; + padding-right: 42px; + /* 18px (icon position) + ~20px (icon width) + 4px (spacing) */ +} + + +/* For non-cover views, add more padding to make room for checkbox + icon */ +.bases-cms .card.image-format-none .card-title, +.bases-cms .card.image-format-thumbnail .card-title { + padding-right: 60px; + /* 18px (icon position) + ~20px (icon width) + 8px (spacing) + 14px (checkbox area) */ +} + +/* Quick edit icon styling */ +.bases-cms-quick-edit-icon { + display: inline-flex; + align-items: center; + cursor: default !important; + position: absolute; + right: 18px; + top: 0; + z-index: 10; + pointer-events: auto; +} + +/* Quick edit icon when title is hidden */ + + +/* ============================================ + CARD CONTENT (Text Preview & Images) + ============================================ */ + +.bases-cms .card-content { + display: flex; + flex-direction: column; + gap: var(--bases-cms-element-spacing, 8px); +} + +/* For thumbnail format, use row layout for thumbnail + text side by side */ +.bases-cms .card.image-format-thumbnail .card-content { + flex-direction: row; + align-items: flex-start; +} + +/* Thumbnail positioning */ +.bases-cms .card.image-format-thumbnail.thumbnail-left .card-content { + flex-direction: row; +} + +.bases-cms .card.image-format-thumbnail.thumbnail-right .card-content { + flex-direction: row-reverse; +} + +.bases-cms .card.image-format-thumbnail.thumbnail-top .card-content { + flex-direction: column; +} + +.bases-cms .card.image-format-thumbnail.thumbnail-bottom .card-content { + flex-direction: column-reverse; +} + +/* For top/bottom thumbnail positions, thumbnail should be full width */ +.bases-cms .card.image-format-thumbnail.thumbnail-top .card-thumbnail, +.bases-cms .card.image-format-thumbnail.thumbnail-bottom .card-thumbnail { + width: 100%; + height: calc(100% / var(--bases-cms-thumbnail-aspect-ratio, 1.00)); +} + +.bases-cms .card-text-wrapper { + display: flex; + flex-direction: column; + gap: var(--bases-cms-element-spacing, 8px); + flex: 1; + min-width: 0; + min-height: 0; +} + +.bases-cms .card.image-format-thumbnail .card-text-preview { + flex: 0 1 auto; + min-width: 0; +} + +.bases-cms .card-text-preview { + color: var(--bases-cms-text-preview-color, var(--text-muted)); + font-family: var(--bases-cms-text-preview-font, inherit); + font-size: var(--bases-cms-text-preview-font-size, var(--bases-table-font-size)); + flex: 1; + min-width: 0; + display: -webkit-box; + -webkit-line-clamp: var(--bases-cms-text-preview-lines, 5); + line-clamp: var(--bases-cms-text-preview-lines, 5); + -webkit-box-orient: vertical; + overflow: hidden; + line-height: 1.4; + word-break: break-word; + overflow-wrap: break-word; +} + + +/* ============================================ + THUMBNAIL STYLING + ============================================ */ + +.bases-cms .card-thumbnail { + flex-shrink: 0; + width: var(--bases-cms-thumbnail-size, 80px); + height: calc(var(--bases-cms-thumbnail-size, 80px) / var(--bases-cms-thumbnail-aspect-ratio, 1.00)); + overflow: hidden; + border-radius: var(--bases-cms-thumbnail-border-radius, 4px); + pointer-events: none; +} + +.bases-cms .card-thumbnail-placeholder { + flex-shrink: 0; + width: var(--bases-cms-thumbnail-size, 80px); + height: calc(var(--bases-cms-thumbnail-size, 80px) / var(--bases-cms-thumbnail-aspect-ratio, 1.00)); + border-radius: var(--bases-cms-thumbnail-border-radius, 4px); + background-color: var(--background-modifier-border); +} + +.bases-cms .card-thumbnail .image-embed { + width: 100%; + height: 100%; + background-size: cover; + background-position: center center; + background-repeat: no-repeat; + filter: blur(0.5px); +} + +/* ============================================ + COVER IMAGE FORMAT + ============================================ */ + +.bases-cms .card.image-format-cover { + position: relative; + overflow: hidden; + padding: 0; +} + +.bases-cms .card.image-format-cover .card-title, +.bases-cms .card.image-format-cover .card-content, +.bases-cms .card.image-format-cover .card-properties { + padding-left: 12px; + padding-right: 12px; +} + +/* Ensure cover view title has enough padding for the quick edit icon */ +.bases-cms .card.image-format-cover .card-title { + padding-right: 42px; + /* Override the 12px above to make room for icon */ +} + +.bases-cms .card.image-format-cover>.card-title:first-child, +.bases-cms .card.image-format-cover>.card-content:first-child, +.bases-cms .card.image-format-cover>.card-properties:first-child, +.bases-cms .card.image-format-cover>.card-date:first-child { + padding-top: 12px; +} + +.bases-cms .card.image-format-cover>.card-title:last-child, +.bases-cms .card.image-format-cover>.card-content:last-child, +.bases-cms .card.image-format-cover>.card-properties:last-child { + padding-bottom: 12px; +} + +.bases-cms .card.image-format-cover:has(.card-cover) .card-title { + margin-top: calc(var(--bases-cms-image-aspect-ratio, 0.55) * (100% + 26px) - 1px); +} + +/* When placeholder exists, push title down similar to cover image */ +.bases-cms .card.image-format-cover:has(.card-cover-placeholder) .card-title { + margin-top: calc(var(--bases-cms-image-aspect-ratio, 0.55) * (100% + 26px) - 1px); +} + +/* Title is always shown - no special handling needed for missing titles */ + +.bases-cms .card.image-format-cover .card-cover { + position: absolute; + top: 0; + left: 0; + width: 100% !important; + height: 0; + padding-top: calc(var(--bases-cms-image-aspect-ratio, 0.55) * 100%) !important; + border-radius: var(--bases-cms-card-border-radius, 8px) var(--bases-cms-card-border-radius, 8px) 0 0; + margin: 0; + overflow: visible; + /* Account for selected card's box-shadow */ + top: -1px; + left: -1px; + width: calc(100% + 2px) !important; +} + +.bases-cms .card.image-format-cover .card-cover-placeholder { + position: absolute; + top: 0; + left: 0; + width: 100% !important; + height: 0; + padding-top: calc(var(--bases-cms-image-aspect-ratio, 0.55) * 100%) !important; + border-radius: var(--bases-cms-card-border-radius, 8px) var(--bases-cms-card-border-radius, 8px) 0 0; + background-color: var(--background-modifier-border); + margin: 0; + overflow: visible; +} + + +.bases-cms .card.image-format-cover .card-cover .image-embed { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + background-size: cover; + background-position: center center; + background-repeat: no-repeat; + filter: blur(0.5px); +} + +/* Cover background styles apply to the cover container, visible when image doesn't fill (contain mode) */ +/* For cover mode, background is only visible if image has transparency or doesn't fill the area */ +.bases-cms .card.image-format-cover .card-cover { + background-color: var(--background-modifier-border); +} + +/* Cover crop alignment */ +body.bases-cms-cover-crop-top .bases-cms .card.image-format-cover .card-cover .image-embed { + background-position: center top !important; +} + +body.bases-cms-cover-crop-bottom .bases-cms .card.image-format-cover .card-cover .image-embed { + background-position: center bottom !important; +} + +body.bases-cms-cover-crop-center .bases-cms .card.image-format-cover .card-cover .image-embed, +body:not(.bases-cms-cover-crop-top):not(.bases-cms-cover-crop-bottom) .bases-cms .card.image-format-cover .card-cover .image-embed { + background-position: center center !important; +} + +/* Cover background */ +.bases-cms .card.image-format-cover .card-cover { + background-color: var(--background-modifier-border); +} + +/* ============================================ + CARD DATE STYLING + ============================================ */ + +.bases-cms .card-date { + font-family: var(--bases-cms-date-font, inherit); + font-size: var(--bases-cms-date-font-size, 0.85em); + color: var(--bases-cms-date-color, var(--text-muted)); + margin-top: 4px; +} + +/* Date color presets */ +body.bases-cms-date-color-faint .bases-cms .card-date { + color: var(--text-faint) !important; +} + +body.bases-cms-date-color-muted .bases-cms .card-date { + color: var(--text-muted) !important; +} + +body.bases-cms-date-color-normal .bases-cms .card-date { + color: var(--text-normal) !important; +} + +body.bases-cms-date-color-accent .bases-cms .card-date { + color: var(--text-accent) !important; +} + +body.bases-cms-date-color-custom .bases-cms .card-date { + color: var(--bases-cms-date-color-custom, var(--text-muted)) !important; +} + +/* Only add padding for cover format */ +.bases-cms .card.image-format-cover .card-date { + padding-left: 12px; + padding-right: 12px; +} + +/* ============================================ + STATUS BADGE (Draft/Published) + ============================================ */ + +.bases-cms .card-status-badge { + padding: 2px 6px; + border-radius: 10px; + font-size: 0.65em; + font-weight: 500; + text-transform: uppercase; + cursor: default !important; + letter-spacing: 0.2px; + line-height: 1.2; + height: 18px; + display: inline-flex; + align-items: center; + justify-content: center; + box-shadow: 0 1px 2px rgba(0, 0, 0, 0.15); + transition: background-color 0.15s ease; + margin-bottom: 6px; + font-size: var(--bases-cms-badge-font-size, 0.65em); + padding: var(--bases-cms-badge-padding, 6px); + border-radius: var(--bases-cms-badge-border-radius, 10px); +} + +.bases-cms .card-status-badge:hover { + /* Lighten background on hover - Obsidian native feel */ + filter: brightness(1.15); +} + +/* Position badge absolutely at top-left, vertically aligned with checkbox */ +.bases-cms .card .card-status-badge { + position: absolute; + top: 20px; + left: 12px; + transform: translateY(-50%); + z-index: 11; + margin: 0; + /* Ensure badge is always visible */ + display: inline-flex !important; + visibility: visible !important; + opacity: 1 !important; + width: auto; +} + +/* Add top margin to title when badge is present so it appears below the badge */ +.bases-cms .card:not(.image-format-cover):has(.card-status-badge) .card-title { + margin-top: 32px; +} + +/* Badge style presets */ +/* Default style - uses the standard green/yellow colors */ +body.bases-cms-badge-style-default .bases-cms .card-status-badge.status-draft, +body:not(.bases-cms-badge-style-minimal):not(.bases-cms-badge-style-custom) .bases-cms .card-status-badge.status-draft { + background-color: rgba(255, 193, 7, 0.95) !important; + color: rgba(0, 0, 0, 0.9); +} + +body.bases-cms-badge-style-default .bases-cms .card-status-badge.status-published, +body:not(.bases-cms-badge-style-minimal):not(.bases-cms-badge-style-custom) .bases-cms .card-status-badge.status-published { + background-color: rgba(46, 125, 50, 0.95) !important; + color: rgba(255, 255, 255, 1); +} + +/* Minimal style */ +body.bases-cms-badge-style-minimal .bases-cms .card-status-badge { + background-color: transparent !important; + border: 1px solid var(--text-muted) !important; + color: var(--text-muted) !important; + box-shadow: none !important; +} + +/* Custom colors style */ +body.bases-cms-badge-style-custom .bases-cms .card-status-badge.status-draft { + background-color: var(--bases-cms-badge-draft-color, rgba(255, 193, 7, 0.95)) !important; + color: rgba(0, 0, 0, 0.9); +} + +body.bases-cms-badge-style-custom .bases-cms .card-status-badge.status-published { + background-color: var(--bases-cms-badge-published-color, rgba(46, 125, 50, 0.95)) !important; + color: rgba(255, 255, 255, 1); +} + +/* ============================================ + PROPERTIES STYLING + ============================================ */ + +.bases-cms .card-properties { + margin-top: var(--bases-cms-element-spacing, 8px); + flex-shrink: 0; +} + +/* Top property groups appear before content */ +.bases-cms .card-properties.properties-top { + margin-top: 0; + margin-bottom: var(--bases-cms-element-spacing, 8px); +} + +/* Bottom property groups appear after content */ +.bases-cms .card-properties.properties-bottom { + margin-top: var(--bases-cms-element-spacing, 8px); + margin-bottom: 0; +} + +.bases-cms .properties-4field { + display: flex; + flex-direction: column; + gap: var(--bases-cms-element-spacing, 8px); +} + +.bases-cms .property-row { + display: flex; + flex-direction: column; + gap: calc(var(--bases-cms-property-label-spacing, 6px) * 1.5); + align-items: flex-start; +} + +.bases-cms .property-row-side-by-side { + flex-direction: row; + gap: var(--bases-cms-element-spacing, 8px); +} + +.bases-cms .property-field { + flex: 1; + min-width: 0; + overflow: visible; +} + +.bases-cms .property-field:last-child { + margin-bottom: 0; +} + +.bases-cms .property-label { + font-size: 0.7em; + color: var(--text-muted); + margin-top: var(--bases-cms-property-label-spacing, 6px); + margin-bottom: 3px; + font-weight: 500; + letter-spacing: 0.3px; +} + +/* Only apply uppercase to non-custom labels (fallback to property name) */ +.bases-cms .property-label:not(.property-label-custom) { + text-transform: uppercase; +} + +.bases-cms .property-label-inline { + font-size: 0.9em; + color: var(--text-muted); +} + +.bases-cms .property-content { + font-family: var(--bases-cms-property-master-font, inherit) !important; + font-size: var(--bases-cms-property-master-font-size, 0.9em) !important; + color: var(--bases-cms-property-master-color, var(--text-muted)); + word-break: break-word; + overflow-wrap: break-word; + overflow: visible; +} + +/* Property color presets */ +body.bases-cms-property-color-faint .bases-cms .property-content { + color: var(--text-faint) !important; +} + +body.bases-cms-property-color-muted .bases-cms .property-content { + color: var(--text-muted) !important; +} + +body.bases-cms-property-color-normal .bases-cms .property-content { + color: var(--text-normal) !important; +} + +body.bases-cms-property-color-accent .bases-cms .property-content { + color: var(--text-accent) !important; +} + +body.bases-cms-property-color-red .bases-cms .property-content { + color: var(--text-error) !important; +} + +body.bases-cms-property-color-orange .bases-cms .property-content { + color: var(--color-orange, #ff9800) !important; +} + +body.bases-cms-property-color-yellow .bases-cms .property-content { + color: var(--color-yellow, #fdd835) !important; +} + +body.bases-cms-property-color-green .bases-cms .property-content { + color: var(--color-green, #4caf50) !important; +} + +body.bases-cms-property-color-cyan .bases-cms .property-content { + color: var(--color-cyan, #00bcd4) !important; +} + +body.bases-cms-property-color-blue .bases-cms .property-content { + color: var(--color-blue, #2196f3) !important; +} + +body.bases-cms-property-color-purple .bases-cms .property-content { + color: var(--color-purple, #9c27b0) !important; +} + +body.bases-cms-property-color-pink .bases-cms .property-content { + color: var(--color-pink, #e91e63) !important; +} + +body.bases-cms-property-color-custom .bases-cms .property-content { + color: var(--bases-cms-property-color-custom, var(--text-muted)) !important; +} + +/* Fade empty marker - dimmed by default (works without Style Settings) */ +.bases-cms .property-empty-marker { + opacity: 0.5; +} + +/* When inline labels are enabled, make content flow inline */ +.bases-cms .property-content-inline { + display: inline; +} + +.bases-cms .property-content-inline .text-wrapper { + display: inline; +} + +.bases-cms .property-content .text-wrapper { + overflow: visible; + word-break: break-word; + overflow-wrap: break-word; +} + +/* Tags */ +.bases-cms .tags-wrapper { + display: flex; + flex-wrap: wrap; + gap: 4px; + overflow-x: auto; + scrollbar-width: none; +} + +.bases-cms .tags-wrapper::-webkit-scrollbar { + display: none; +} + +.bases-cms .tag { + display: inline-block; + padding: 2px 8px; + border-radius: 4px; + background-color: var(--tag-background); + color: var(--tag-color); + font-size: 0.85em; + text-decoration: none; + white-space: nowrap; +} + +.bases-cms .tag:hover { + background-color: var(--tag-background-hover); +} + +/* Card tags (pills under text preview) */ +.bases-cms .card-tags { + display: flex; + flex-wrap: wrap; + gap: 4px; + margin-top: 6px; + line-height: 1.2; +} + +.bases-cms .card-tag { + background-color: var(--tag-background); + border: var(--tag-border-width) solid var(--tag-border-color); + border-radius: var(--tag-radius); + color: var(--tag-color); + font-size: var(--tag-size); + font-weight: var(--tag-weight); + text-decoration: var(--tag-decoration); + padding: var(--tag-padding-y) var(--tag-padding-x); + line-height: 1; + white-space: nowrap; + display: inline-block; +} + +.bases-cms .card-tag:hover { + background-color: var(--tag-background-hover); +} + +.bases-cms .card-tag-more { + display: inline-block; + padding: 2px 8px; + border-radius: 10px; + background-color: var(--background-modifier-border); + color: var(--text-muted); + font-size: 0.75em; + font-weight: 500; + white-space: nowrap; + line-height: 1.4; + font-style: italic; +} + +/* Path segments */ +.bases-cms .path-wrapper { + display: flex; + flex-wrap: wrap; + gap: 0; + overflow-x: auto; + scrollbar-width: none; +} + +.bases-cms .path-wrapper::-webkit-scrollbar { + display: none; +} + +.bases-cms .path-segment { + cursor: pointer; + color: var(--text-muted); + transition: color 0.2s; +} + +.bases-cms .path-segment:hover { + color: var(--text-normal); +} + +.bases-cms .path-separator { + color: var(--text-faint); + margin: 0 2px; +} + +/* Checkbox properties - Native Obsidian styling */ +.bases-cms .property-content:has(input[type="checkbox"]) { + display: flex; + align-items: center; + gap: 6px; +} + +/* ============================================ + BULK TOOLBAR + ============================================ */ + +/* Ensure padding variables are available in the workspace context */ +.workspace-leaf-content[data-type="bases"] .bases-cms-bulk-toolbar { + --bases-header-padding-start: var(--size-4-2); + --bases-header-padding-end: var(--size-4-2); +} + +.bases-cms-bulk-toolbar { + display: flex; + align-items: center; + justify-content: space-between; + gap: 1rem; + width: 100%; + height: 44px; + min-height: 44px; + background-color: var(--background-primary); + z-index: 15; + padding-left: var(--bases-header-padding-start, var(--size-4-2)); + padding-right: var(--bases-header-padding-end, var(--size-4-2)); + margin: 0; + box-sizing: border-box; + overflow: hidden; + opacity: 0; + transform: translateY(-5px); + transition: opacity 0.2s ease, transform 0.2s ease; +} + +/* Embedded: tighter right padding so toolbar aligns with content */ +.markdown-rendered .bases-cms-bulk-toolbar { + padding-right: 4px; +} + +/* Ensure no gap between header and bulk toolbar */ +.bases-header+.bases-cms-bulk-toolbar { + margin-top: 0; +} + +.bases-cms-bulk-toolbar-left { + display: flex; + align-items: center; + gap: 0; + flex: 0 0 auto; + min-width: 0; + flex-wrap: nowrap; +} + +.bases-cms-bulk-toolbar-right { + display: flex; + align-items: center; + gap: 0; + flex: 0 0 auto; + margin-left: auto; + min-width: 0; + flex-wrap: nowrap; +} + +/* Mobile-specific toolbar improvements */ +@media (hover: none) and (pointer: coarse), +(max-width: 768px) { + + .bases-cms-bulk-toolbar-left, + .bases-cms-bulk-toolbar-right { + gap: var(--size-4-1); + } + + .bases-cms-bulk-toolbar .text-icon-button { + padding: var(--size-4-2) var(--size-4-2); + min-height: 40px; + } + + .bases-cms-bulk-toolbar .text-icon-button .text-button-icon { + width: 20px; + height: 20px; + } + + .bases-cms-bulk-toolbar .text-icon-button .text-button-icon svg { + width: 20px; + height: 20px; + } +} + +/* Selected count styling */ +.bases-cms-selected-count { + margin-left: 0.75rem !important; +} + +.bases-cms-selected-count .text-button-label { + font-size: var(--font-ui-smaller); + cursor: default; + pointer-events: none; + color: var(--text-muted); +} + +.bases-cms-selected-count:hover { + background: transparent !important; +} + +/* Use Bases' existing text-icon-button styles, but ensure cursor is default */ +.bases-cms-bulk-toolbar .text-icon-button { + cursor: default; + color: var(--text-normal); +} + +.bases-cms-bulk-toolbar .text-icon-button .text-button-icon svg { + color: var(--text-normal); + stroke: var(--text-normal); +} + +.bases-cms-bulk-toolbar .text-icon-button.destructive { + color: var(--text-error); +} + +.bases-cms-bulk-toolbar .text-icon-button.destructive .text-button-icon svg { + color: var(--text-error) !important; + stroke: var(--text-error) !important; +} + +.bases-cms-bulk-toolbar .text-icon-button.destructive:hover { + background: var(--background-modifier-error); + color: var(--text-error); +} + +/* Keep delete button icon color consistent on hover */ +.bases-cms-bulk-toolbar .text-icon-button.destructive:hover .text-button-icon svg { + color: var(--text-error); + stroke: var(--text-error); +} + +/* Modal button container */ +.bases-cms-modal-button-container { + display: flex; + gap: 0.5rem; + justify-content: flex-end; + margin-top: 1rem; +} + +/* Bulk toolbar visibility states */ + +.bases-cms-bulk-toolbar-hidden { + display: none !important; +} + +.bases-cms-bulk-toolbar-visible { + display: flex !important; + visibility: visible !important; + opacity: 1 !important; + transform: translateY(0) !important; +} + +.bases-cms-bulk-toolbar-animating-in { + opacity: 1 !important; + transform: translateY(0) !important; +} + +.bases-cms-bulk-toolbar-animating-out { + opacity: 0 !important; + transform: translateY(-10px) !important; +} + +.bases-cms-properties-hidden { + display: none; +} + +.bases-cms-setting-hidden { + display: none; +} + +.bases-cms-cursor-default { + cursor: default; +} + +.bases-cms-cursor-pointer { + cursor: pointer; +} + +/* Responsive: Hide text labels on icon buttons when collapsed, but keep count visible */ +.bases-cms-bulk-toolbar.collapsed .text-icon-button .text-button-label { + display: none; +} + +/* Always keep the selected count text visible */ +.bases-cms-bulk-toolbar.collapsed .bases-cms-selected-count .text-button-label { + display: block !important; +} + +/* When collapsed, reduce padding on buttons to save space */ +.bases-cms-bulk-toolbar.collapsed .text-icon-button { + padding-left: var(--size-4-1); + padding-right: var(--size-4-1); +} + +/* ============================================ + DELETION PREVIEW MODAL + ============================================ */ + +.bases-cms-deletion-warning { + color: var(--text-error); + font-weight: 600; + margin: 1rem 0; +} + +.bases-cms-deletion-list { + max-height: 300px; + overflow-y: auto; + list-style: disc; + padding-left: 2rem; + margin: 0.5rem 0; +} + +.bases-cms-deletion-list li { + margin: 0.25rem 0; + word-break: break-all; +} + +/* ============================================ + PROPERTIES INFO MODAL + ============================================ */ + +.properties-info-explanation { + margin: 1rem 0; +} + +.properties-info-explanation p { + margin: 0.5rem 0; + line-height: 1.6; +} + +.properties-info-special, +.properties-info-configured, +.properties-info-howto, +.properties-info-note { + margin: 1.5rem 0; +} + +.properties-info-special h3, +.properties-info-configured h3, +.properties-info-howto h3 { + margin-top: 0; + margin-bottom: 0.75rem; + font-size: 1.1em; + font-weight: 600; +} + +.properties-info-special ul, +.properties-info-configured ul, +.properties-info-howto ol { + margin: 0.5rem 0; + padding-left: 1.5rem; +} + +.properties-info-special li, +.properties-info-configured li, +.properties-info-howto li { + margin: 0.5rem 0; + line-height: 1.5; +} + +.properties-info-none { + color: var(--text-muted); + font-style: italic; +} + +.properties-info-tip { + background-color: var(--background-modifier-border); + padding: 0.75rem 1rem; + border-radius: 4px; + margin: 1rem 0; + border-left: 3px solid var(--interactive-accent); +} + +/* Group settings compatibility styling for older Obsidian builds (< 1.11.0) */ +/* Scoped to only this plugin's settings container to avoid affecting other plugins */ +.bases-cms-settings-compat .setting-group-heading h3 { + margin: 0 0 0.75rem; + padding-bottom: 0.5rem; + padding-top: 0.5rem; + font-size: 1rem; + font-weight: 600; + border-bottom: none !important; +} \ No newline at end of file diff --git a/src/content/.obsidian/plugins/data-files-editor/data.json b/src/content/.obsidian/plugins/data-files-editor/data.json new file mode 100644 index 0000000..9d4854d --- /dev/null +++ b/src/content/.obsidian/plugins/data-files-editor/data.json @@ -0,0 +1,24 @@ +{ + "doLoadTxt": false, + "doCreateTxt": false, + "doLoadXml": false, + "doCreateXml": false, + "doLoadJson": false, + "doCreateJson": false, + "doLoadYaml": false, + "doCreateYaml": false, + "doLoadAstro": false, + "doCreateAstro": false, + "doLoadTs": false, + "doCreateTs": false, + "doLoadCss": false, + "doCreateCss": false, + "doLoadHtml": false, + "doCreateHtml": false, + "doLoadJs": false, + "doCreateJs": false, + "doLoadMjs": false, + "doCreateMjs": false, + "doAutosaveFiles": true, + "lineWrapping": true +} \ No newline at end of file diff --git a/src/content/.obsidian/plugins/data-files-editor/main.js b/src/content/.obsidian/plugins/data-files-editor/main.js new file mode 100644 index 0000000..06ad7af --- /dev/null +++ b/src/content/.obsidian/plugins/data-files-editor/main.js @@ -0,0 +1,6 @@ +/* +THIS IS A GENERATED/BUNDLED FILE BY ESBUILD +if you want to view the source, please visit the github repository of this plugin +*/ + +var Ne=Object.create;var W=Object.defineProperty;var Ge=Object.getOwnPropertyDescriptor;var ze=Object.getOwnPropertyNames;var Ae=Object.getPrototypeOf,je=Object.prototype.hasOwnProperty;var Ie=(e,t)=>{for(var s in t)W(e,s,{get:t[s],enumerable:!0})},ge=(e,t,s,o)=>{if(t&&typeof t=="object"||typeof t=="function")for(let O of ze(t))!je.call(e,O)&&O!==s&&W(e,O,{get:()=>t[O],enumerable:!(o=Ge(t,O))||o.enumerable});return e};var Be=(e,t,s)=>(s=e!=null?Ne(Ae(e)):{},ge(t||!e||!e.__esModule?W(s,"default",{value:e,enumerable:!0}):s,e)),Je=e=>ge(W({},"__esModule",{value:!0}),e);var wt={};Ie(wt,{default:()=>G});module.exports=Je(wt);var z=require("obsidian");var qe=require("obsidian");var X="json";var c="txt";var x="yaml",A="json",j="xml",I="txt",B="yaml",ce="yml",J="astro",H="ts",F="css",K="html",ee="js",te="mjs";var pe=require("@lezer/lr"),P=require("@lezer/highlight"),Fe=(0,P.styleTags)({String:P.tags.string,Number:P.tags.number,"True False":P.tags.bool,PropertyName:P.tags.propertyName,Null:P.tags.null,", :":P.tags.separator,"[ ]":P.tags.squareBracket,"{ }":P.tags.brace}),fe=pe.LRParser.deserialize({version:14,states:"$bOVQPOOOOQO'#Cb'#CbOnQPO'#CeOvQPO'#ClOOQO'#Cr'#CrQOQPOOOOQO'#Cg'#CgO}QPO'#CfO!SQPO'#CtOOQO,59P,59PO![QPO,59PO!aQPO'#CuOOQO,59W,59WO!iQPO,59WOVQPO,59QOqQPO'#CmO!nQPO,59`OOQO1G.k1G.kOVQPO'#CnO!vQPO,59aOOQO1G.r1G.rOOQO1G.l1G.lOOQO,59X,59XOOQO-E6k-E6kOOQO,59Y,59YOOQO-E6l-E6l",stateData:"#O~OeOS~OQSORSOSSOTSOWQO_ROgPO~OVXOgUO~O^[O~PVO[^O~O]_OVhX~OVaO~O]bO^iX~O^dO~O]_OVha~O]bO^ia~O",goto:"!kjPPPPPPkPPkqwPPPPk{!RPPP!XP!e!hXSOR^bQWQRf_TVQ_Q`WRg`QcZRicQTOQZRQe^RhbRYQR]R",nodeNames:"\u26A0 JsonText True False Null Number String } { Object Property PropertyName : , ] [ Array",maxTerm:25,nodeProps:[["isolate",-2,6,11,""],["openedBy",7,"{",14,"["],["closedBy",8,"}",15,"]"]],propSources:[Fe],skippedNodes:[0],repeatNodeCount:2,tokenData:"(|~RaXY!WYZ!W]^!Wpq!Wrs!]|}$u}!O$z!Q!R%T!R![&c![!]&t!}#O&y#P#Q'O#Y#Z'T#b#c'r#h#i(Z#o#p(r#q#r(w~!]Oe~~!`Wpq!]qr!]rs!xs#O!]#O#P!}#P;'S!];'S;=`$o<%lO!]~!}Og~~#QXrs!]!P!Q!]#O#P!]#U#V!]#Y#Z!]#b#c!]#f#g!]#h#i!]#i#j#m~#pR!Q![#y!c!i#y#T#Z#y~#|R!Q![$V!c!i$V#T#Z$V~$YR!Q![$c!c!i$c#T#Z$c~$fR!Q![!]!c!i!]#T#Z!]~$rP;=`<%l!]~$zO]~~$}Q!Q!R%T!R![&c~%YRT~!O!P%c!g!h%w#X#Y%w~%fP!Q![%i~%nRT~!Q![%i!g!h%w#X#Y%w~%zR{|&T}!O&T!Q![&Z~&WP!Q![&Z~&`PT~!Q![&Z~&hST~!O!P%c!Q![&c!g!h%w#X#Y%w~&yO[~~'OO_~~'TO^~~'WP#T#U'Z~'^P#`#a'a~'dP#g#h'g~'jP#X#Y'm~'rOR~~'uP#i#j'x~'{P#`#a(O~(RP#`#a(U~(ZOS~~(^P#f#g(a~(dP#i#j(g~(jP#X#Y(m~(rOQ~~(wOW~~(|OV~",tokenizers:[0],topRules:{JsonText:[0,1]},tokenPrec:0});var f=require("@codemirror/language");var Ke=f.LRLanguage.define({name:"json",parser:fe.configure({props:[f.indentNodeProp.add({Object:(0,f.continuedIndent)({except:/^\s*\}/}),Array:(0,f.continuedIndent)({except:/^\s*\]/})}),f.foldNodeProp.add({"Object Array":f.foldInside})]}),languageData:{closeBrackets:{brackets:["[","{",'"']},indentOnInput:/^\s*[\}\]]$/}});function me(){return new f.LanguageSupport(Ke)}var se=require("@codemirror/view"),$=require("@codemirror/commands"),Pe=require("@codemirror/language"),D=()=>[se.keymap.of([$.indentWithTab]),Pe.indentUnit.of(" ")],he=()=>[se.keymap.of([{key:"Shift-Tab",preventDefault:!0,run:$.indentLess}])];var Se=require("obsidian"),k=require("@codemirror/view"),Xe=require("@codemirror/state"),xe=require("@codemirror/commands");var g=require("@codemirror/view"),et=require("@codemirror/view"),Qe=require("@codemirror/state"),m=require("@codemirror/language"),v=require("@codemirror/commands"),q=require("@codemirror/search"),S=require("@codemirror/autocomplete"),ue=require("@codemirror/lint"),Te=(()=>[(0,g.lineNumbers)(),(0,g.highlightActiveLineGutter)(),(0,g.highlightSpecialChars)(),(0,v.history)(),(0,m.foldGutter)(),(0,g.drawSelection)(),(0,g.dropCursor)(),Qe.EditorState.allowMultipleSelections.of(!0),(0,m.indentOnInput)(),(0,m.syntaxHighlighting)(m.defaultHighlightStyle,{fallback:!0}),(0,m.bracketMatching)(),(0,S.closeBrackets)(),(0,S.autocompletion)(),(0,g.rectangularSelection)(),(0,g.crosshairCursor)(),(0,g.highlightActiveLine)(),(0,q.highlightSelectionMatches)(),g.keymap.of([...S.closeBracketsKeymap,...v.defaultKeymap,...q.searchKeymap,...v.historyKeymap,...m.foldKeymap,...S.completionKeymap,...ue.lintKeymap])])();var h=class extends Se.TextFileView{constructor(s,o){super(s);this.customHistoryKeymap=[{win:"Ctrl-Shift-z",run:xe.redo,preventDefault:!0}];this.plugin=o}onload(){super.onload(),this.editorEl=this.contentEl.createDiv("datafile-source-view mod-cm6"),this.cmEditor=new k.EditorView({state:this.createDefaultEditorState(),parent:this.editorEl}),this.app.workspace.trigger("codemirror",this.cmEditor)}getViewData(){return this.cmEditor.state.doc.toString()}setViewData(s,o){this.cmEditor.dispatch({changes:{from:0,to:this.cmEditor.state.doc.length,insert:s}})}clear(){}getDisplayText(){return this.file?this.file.basename:"NOFILE"}onClose(){return super.onClose()}async reload(){this.plugin.settings.doAutosaveFiles&&await this.save(!1);let s=this.getViewData();this.cmEditor.setState(this.createDefaultEditorState()),this.setViewData(s,!1)}onEditorUpdate(s){this.plugin.settings.doAutosaveFiles&&s.docChanged&&this.requestSave()}createDefaultEditorState(){return Xe.EditorState.create({extensions:[...this.getCommonEditorExtensions(),...this.getEditorExtensions()]})}getCommonEditorExtensions(){let s=[Te,k.keymap.of(this.customHistoryKeymap),k.EditorView.updateListener.of(this.onEditorUpdate.bind(this))];return this.plugin.settings.lineWrapping&&s.push(k.EditorView.lineWrapping),s}};var R=class extends h{constructor(t,s){super(t,s)}getViewType(){return X}getEditorExtensions(){let t;return t=[D(),me()],t}};var C=class extends h{constructor(t,s){super(t,s)}getViewType(){return c}getEditorExtensions(){let t;return t=[he()],t}};var T=require("@lezer/lr"),l=require("@lezer/highlight"),L=63,Re=64,tt=1,st=2,be=3,at=4,ye=5,ot=6,nt=7,ve=65,it=66,rt=8,Ot=9,lt=10,dt=11,gt=12,ke=13,ct=19,pt=20,ft=29,mt=33,Pt=34,ht=47,Qt=0,Oe=1,oe=2,_=3,ne=4,Q=class{constructor(t,s,o){this.parent=t,this.depth=s,this.type=o,this.hash=(t?t.hash+t.hash<<8:0)+s+(s<<4)+o}};Q.top=new Q(null,-1,Qt);function V(e,t){for(let s=0,o=t-e.pos-1;;o--,s++){let O=e.peek(o);if(u(O)||O==-1)return s}}function ie(e){return e==32||e==9}function u(e){return e==10||e==13}function Le(e){return ie(e)||u(e)}function E(e){return e<0||Le(e)}var ut=new T.ContextTracker({start:Q.top,reduce(e,t){return e.type==_&&(t==pt||t==Pt)?e.parent:e},shift(e,t,s,o){if(t==be)return new Q(e,V(o,o.pos),Oe);if(t==ve||t==ye)return new Q(e,V(o,o.pos),oe);if(t==L)return e.parent;if(t==ct||t==mt)return new Q(e,0,_);if(t==ke&&e.type==ne)return e.parent;if(t==ht){let O=/[1-9]/.exec(o.read(o.pos,s.pos));if(O)return new Q(e,e.depth+ +O[0],ne)}return e},hash(e){return e.hash}});function w(e,t,s=0){return e.peek(s)==t&&e.peek(s+1)==t&&e.peek(s+2)==t&&E(e.peek(s+3))}var Tt=new T.ExternalTokenizer((e,t)=>{if(e.next==-1&&t.canShift(Re))return e.acceptToken(Re);let s=e.peek(-1);if((u(s)||s<0)&&t.context.type!=_){if(w(e,45))if(t.canShift(L))e.acceptToken(L);else return e.acceptToken(tt,3);if(w(e,46))if(t.canShift(L))e.acceptToken(L);else return e.acceptToken(st,3);let o=0;for(;e.next==32;)o++,e.advance();(o{if(t.context.type==_){e.next==63&&(e.advance(),E(e.next)&&e.acceptToken(nt));return}if(e.next==45)e.advance(),E(e.next)&&e.acceptToken(t.context.type==Oe&&t.context.depth==V(e,e.pos-1)?at:be);else if(e.next==63)e.advance(),E(e.next)&&e.acceptToken(t.context.type==oe&&t.context.depth==V(e,e.pos-1)?ot:ye);else{let s=e.pos;for(;;)if(ie(e.next)){if(e.pos==s)return;e.advance()}else if(e.next==33)we(e);else if(e.next==38)re(e);else if(e.next==42){re(e);break}else if(e.next==39||e.next==34){if(le(e,!0))break;return}else if(e.next==91||e.next==123){if(!xt(e))return;break}else{Ve(e,!0,!1,0);break}for(;ie(e.next);)e.advance();if(e.next==58){if(e.pos==s&&t.canShift(ft))return;let o=e.peek(1);E(o)&&e.acceptTokenTo(t.context.type==oe&&t.context.depth==V(e,s)?it:ve,s)}}},{contextual:!0});function Xt(e){return e>32&&e<127&&e!=34&&e!=37&&e!=44&&e!=60&&e!=62&&e!=92&&e!=94&&e!=96&&e!=123&&e!=124&&e!=125}function Ce(e){return e>=48&&e<=57||e>=97&&e<=102||e>=65&&e<=70}function Ee(e,t){return e.next==37?(e.advance(),Ce(e.next)&&e.advance(),Ce(e.next)&&e.advance(),!0):Xt(e.next)||t&&e.next==44?(e.advance(),!0):!1}function we(e){if(e.advance(),e.next==60){for(e.advance();;)if(!Ee(e,!0)){e.next==62&&e.advance();break}}else for(;Ee(e,!1););}function re(e){for(e.advance();!E(e.next)&&M(e.next)!="f";)e.advance()}function le(e,t){let s=e.next,o=!1,O=e.pos;for(e.advance();;){let i=e.next;if(i<0)break;if(e.advance(),i==s)if(i==39)if(e.next==39)e.advance();else break;else break;else if(i==92&&s==34)e.next>=0&&e.advance();else if(u(i)){if(t)return!1;o=!0}else if(t&&e.pos>=O+1024)return!1}return!o}function xt(e){for(let t=[],s=e.pos+1024;;)if(e.next==91||e.next==123)t.push(e.next),e.advance();else if(e.next==39||e.next==34){if(!le(e,!0))return!1}else if(e.next==93||e.next==125){if(t[t.length-1]!=e.next-2)return!1;if(t.pop(),e.advance(),!t.length)return!0}else{if(e.next<0||e.pos>s||u(e.next))return!1;e.advance()}}var Rt="iiisiiissisfissssssssssssisssiiissssssssssssssssssssssssssfsfssissssssssssssssssssssssssssfif";function M(e){return e<33?"u":e>125?"s":Rt[e-33]}function ae(e,t){let s=M(e);return s!="u"&&!(t&&s=="f")}function Ve(e,t,s,o){if(M(e.next)=="s"||(e.next==63||e.next==58||e.next==45)&&ae(e.peek(1),s))e.advance();else return!1;let O=e.pos;for(;;){let i=e.next,d=0,a=o+1;for(;Le(i);){if(u(i)){if(t)return!1;a=0}else a++;i=e.peek(++d)}if(!(i>=0&&(i==58?ae(e.peek(d+1),s):i==35?e.peek(d-1)!=32:ae(i,s)))||!s&&a<=o||a==0&&!s&&(w(e,45,d)||w(e,46,d)))break;if(t&&M(i)=="f")return!1;for(let n=d;n>=0;n--)e.advance();if(t&&e.pos>O+1024)return!1}return!0}var Ct=new T.ExternalTokenizer((e,t)=>{if(e.next==33)we(e),e.acceptToken(gt);else if(e.next==38||e.next==42){let s=e.next==38?lt:dt;re(e),e.acceptToken(s)}else e.next==39||e.next==34?(le(e,!1),e.acceptToken(Ot)):Ve(e,!1,t.context.type==_,t.context.depth)&&e.acceptToken(rt)}),Et=new T.ExternalTokenizer((e,t)=>{let s=t.context.type==ne?t.context.depth:-1,o=e.pos;e:for(;;){let O=0,i=e.next;for(;i==32;)i=e.peek(++O);if(!O&&(w(e,45,O)||w(e,46,O))||!u(i)&&(s<0&&(s=Math.max(t.context.depth+1,O)),OYAN>Y",stateData:";S~O!fOS!gOS^OS~OP_OQbORSOTUOWROXROYYOZZO[XOcPOqQO!PVO!V[O!cTO~O`cO~P]OVkOWROXROYeOZfO[dOcPOmhOqQO~OboO~P!bOVtOWROXROYeOZfO[dOcPOmrOqQO~OpwO~P#WORSOTUOWROXROYYOZZO[XOcPOqQO!PVO!cTO~OSvP!avP!bvP~P#|OWROXROYeOZfO[dOcPOqQO~OmzO~P%OOm!OOUzP!azP!bzP!dzP~P#|O^!SO!b!QO!f!TO!g!RO~ORSOTUOWROXROcPOqQO!PVO!cTO~OY!UOP!QXQ!QX!V!QX!`!QXS!QX!a!QX!b!QXU!QXm!QX!d!QX~P&aO[!WOP!SXQ!SX!V!SX!`!SXS!SX!a!SX!b!SXU!SXm!SX!d!SX~P&aO^!ZO!W![O!b!YO!f!]O!g!YO~OP!_O!V[OQaX!`aX~OPaXQaX!VaX!`aX~P#|OP!bOQ!cO!V[O~OP_O!V[O~P#|OWROXROY!fOcPOqQObfXmfXofXpfX~OWROXRO[!hOcPOqQObhXmhXohXphX~ObeXmlXoeX~ObkXokX~P%OOm!kO~Om!lObnPonP~P%OOb!pOo!oO~Ob!pO~P!bOm!sOosXpsX~OosXpsX~P%OOm!uOotPptP~P%OOo!xOp!yO~Op!yO~P#WOS!|O!a#OO!b#OO~OUyX!ayX!byX!dyX~P#|Om#QO~OU#SO!a#UO!b#UO!d#RO~Om#WOUzX!azX!bzX!dzX~O]#XO~O!b#XO!g#YO~O^#ZO!b#XO!g#YO~OP!RXQ!RX!V!RX!`!RXS!RX!a!RX!b!RXU!RXm!RX!d!RX~P&aOP!TXQ!TX!V!TX!`!TXS!TX!a!TX!b!TXU!TXm!TX!d!TX~P&aO!b#^O!g#^O~O^#_O!b#^O!f#`O!g#^O~O^#_O!W#aO!b#^O!g#^O~OPaaQaa!Vaa!`aa~P#|OP#cO!V[OQ!XX!`!XX~OP!XXQ!XX!V!XX!`!XX~P#|OP_O!V[OQ!_X!`!_X~P#|OWROXROcPOqQObgXmgXogXpgX~OWROXROcPOqQObiXmiXoiXpiX~Obkaoka~P%OObnXonX~P%OOm#kO~Ob#lOo!oO~Oosapsa~P%OOotXptX~P%OOm#pO~Oo!xOp#qO~OSwP!awP!bwP~P#|OS!|O!a#vO!b#vO~OUya!aya!bya!dya~P#|Om#xO~P%OOm#{OU}P!a}P!b}P!d}P~P#|OU#SO!a$OO!b$OO!d#RO~O]$QO~O!b$QO!g$RO~O!b$SO!g$SO~O^$TO!b$SO!g$SO~O^$TO!b$SO!f$UO!g$SO~OP!XaQ!Xa!V!Xa!`!Xa~P#|Obnaona~P%OOotapta~P%OOo!xO~OU|X!a|X!b|X!d|X~P#|Om$ZO~Om$]OU}X!a}X!b}X!d}X~O]$^O~O!b$_O!g$_O~O^$`O!b$_O!g$_O~OU|a!a|a!b|a!d|a~P#|O!b$cO!g$cO~O",goto:",]!mPPPPPPPPPPPPPPPPP!nPP!v#v#|$`#|$c$f$j$nP%VPPP!v%Y%^%a%{&O%a&R&U&X&_&b%aP&e&{&e'O'RPP']'a'g'm's'y(XPPPPPPPP(_)e*X+c,VUaObcR#e!c!{ROPQSTUXY_bcdehknrtvz!O!U!W!_!b!c!f!h!k!l!s!u!|#Q#R#S#W#c#k#p#x#{$Z$]QmPR!qnqfPQThknrtv!k!l!s!u#R#k#pR!gdR!ieTlPnTjPnSiPnSqQvQ{TQ!mkQ!trQ!vtR#y#RR!nkTsQvR!wt!RWOSUXY_bcz!O!U!W!_!b!c!|#Q#S#W#c#x#{$Z$]RySR#t!|R|TR|UQ!PUR#|#SR#z#RR#z#SyZOSU_bcz!O!_!b!c!|#Q#S#W#c#x#{$Z$]R!VXR!XYa]O^abc!a!c!eT!da!eQnPR!rnQvQR!{vQ!}yR#u!}Q#T|R#}#TW^Obc!cS!^^!aT!aa!eQ!eaR#f!eW`Obc!cQxSS}U#SQ!`_Q#PzQ#V!OQ#b!_Q#d!bQ#s!|Q#w#QQ$P#WQ$V#cQ$Y#xQ$[#{Q$a$ZR$b$]xZOSU_bcz!O!_!b!c!|#Q#S#W#c#x#{$Z$]Q!VXQ!XYQ#[!UR#]!W!QWOSUXY_bcz!O!U!W!_!b!c!|#Q#S#W#c#x#{$Z$]pfPQThknrtv!k!l!s!u#R#k#pQ!gdQ!ieQ#g!fR#h!hSgPn^pQTkrtv#RQ!jhQ#i!kQ#j!lQ#n!sQ#o!uQ$W#kR$X#pQuQR!zv",nodeNames:"\u26A0 DirectiveEnd DocEnd - - ? ? ? Literal QuotedLiteral Anchor Alias Tag BlockLiteralContent Comment Stream BOM Document ] [ FlowSequence Item Tagged Anchored Anchored Tagged FlowMapping Pair Key : Pair , } { FlowMapping Pair Pair BlockSequence Item Item BlockMapping Pair Pair Key Pair Pair BlockLiteral BlockLiteralHeader Tagged Anchored Anchored Tagged Directive DirectiveName DirectiveContent Document",maxTerm:74,context:ut,nodeProps:[["isolate",-3,8,9,14,""],["openedBy",18,"[",32,"{"],["closedBy",19,"]",33,"}"]],propSources:[bt],skippedNodes:[0],repeatNodeCount:6,tokenData:"-Y~RnOX#PXY$QYZ$]Z]#P]^$]^p#Ppq$Qqs#Pst$btu#Puv$yv|#P|}&e}![#P![!]'O!]!`#P!`!a'i!a!}#P!}#O*g#O#P#P#P#Q+Q#Q#o#P#o#p+k#p#q'i#q#r,U#r;'S#P;'S;=`#z<%l?HT#P?HT?HU,o?HUO#PQ#UU!WQOY#PZp#Ppq#hq;'S#P;'S;=`#z<%lO#PQ#kTOY#PZs#Pt;'S#P;'S;=`#z<%lO#PQ#}P;=`<%l#P~$VQ!f~XY$Qpq$Q~$bO!g~~$gS^~OY$bZ;'S$b;'S;=`$s<%lO$b~$vP;=`<%l$bR%OX!WQOX%kXY#PZ]%k]^#P^p%kpq#hq;'S%k;'S;=`&_<%lO%kR%rX!WQ!VPOX%kXY#PZ]%k]^#P^p%kpq#hq;'S%k;'S;=`&_<%lO%kR&bP;=`<%l%kR&lUoP!WQOY#PZp#Ppq#hq;'S#P;'S;=`#z<%lO#PR'VUmP!WQOY#PZp#Ppq#hq;'S#P;'S;=`#z<%lO#PR'p[!PP!WQOY#PZp#Ppq#hq{#P{|(f|}#P}!O(f!O!R#P!R![)p![;'S#P;'S;=`#z<%lO#PR(mW!PP!WQOY#PZp#Ppq#hq!R#P!R![)V![;'S#P;'S;=`#z<%lO#PR)^U!PP!WQOY#PZp#Ppq#hq;'S#P;'S;=`#z<%lO#PR)wY!PP!WQOY#PZp#Ppq#hq{#P{|)V|}#P}!O)V!O;'S#P;'S;=`#z<%lO#PR*nUcP!WQOY#PZp#Ppq#hq;'S#P;'S;=`#z<%lO#PR+XUbP!WQOY#PZp#Ppq#hq;'S#P;'S;=`#z<%lO#PR+rUqP!WQOY#PZp#Ppq#hq;'S#P;'S;=`#z<%lO#PR,]UpP!WQOY#PZp#Ppq#hq;'S#P;'S;=`#z<%lO#PR,vU`P!WQOY#PZp#Ppq#hq;'S#P;'S;=`#z<%lO#P",tokenizers:[Tt,St,Ct,Et,0,1],topRules:{Stream:[0,15]},tokenPrec:0});var p=require("@codemirror/language"),yt=require("@lezer/common"),U=require("@lezer/highlight"),Ye=require("@lezer/lr"),vt=Ye.LRParser.deserialize({version:14,states:"!vOQOPOOO]OPO'#C_OhOPO'#C^OOOO'#Cc'#CcOpOPO'#CaQOOOOOO{OPOOOOOO'#Cb'#CbO!WOPO'#C`O!`OPO,58xOOOO-E6a-E6aOOOO-E6`-E6`OOOO'#C_'#C_OOOO1G.d1G.d",stateData:"!h~OXPOYROWTP~OWVXXRXYRX~OYVOXSP~OXROYROWTX~OXROYROWTP~OYVOXSX~OX[O~OXY~",goto:"vWPPX[beioRUOQQOR]XRXQTTOUQWQRZWSSOURYS",nodeNames:"\u26A0 Document Frontmatter DashLine FrontmatterContent Body",maxTerm:10,skippedNodes:[0],repeatNodeCount:2,tokenData:"$z~RXOYnYZ!^Z]n]^!^^}n}!O!i!O;'Sn;'S;=`!c<%lOn~qXOYnYZ!^Z]n]^!^^;'Sn;'S;=`!c<%l~n~On~~!^~!cOY~~!fP;=`<%ln~!lZOYnYZ!^Z]n]^!^^}n}!O#_!O;'Sn;'S;=`!c<%l~n~On~~!^~#bZOYnYZ!^Z]n]^!^^}n}!O$T!O;'Sn;'S;=`!c<%l~n~On~~!^~$WXOYnYZ$sZ]n]^$s^;'Sn;'S;=`!c<%l~n~On~~$s~$zOX~Y~",tokenizers:[0],topRules:{Document:[0,1]},tokenPrec:67}),kt=p.LRLanguage.define({name:"yaml",parser:_e.configure({props:[p.indentNodeProp.add({Stream:e=>{for(let t=e.node.resolve(e.pos,-1);t&&t.to>=e.pos;t=t.parent){if(t.name=="BlockLiteralContent"&&t.frome.pos)return null}}return null},FlowMapping:(0,p.delimitedIndent)({closing:"}"}),FlowSequence:(0,p.delimitedIndent)({closing:"]"})}),p.foldNodeProp.add({"FlowMapping FlowSequence":p.foldInside,"Item Pair BlockLiteral":(e,t)=>({from:t.doc.lineAt(e.from).to,to:e.to})})]}),languageData:{commentTokens:{line:"#"},indentOnInput:/^\s*[\]\}]$/}});function We(){return new p.LanguageSupport(kt)}var os=p.LRLanguage.define({name:"yaml-frontmatter",parser:vt.configure({props:[(0,U.styleTags)({DashLine:U.tags.meta})]})});var Z=require("@codemirror/language"),b=require("@lezer/highlight");var Lt=Z.HighlightStyle.define([{tag:b.tags.propertyName,color:"#e5c07b"},{tag:b.tags.string,color:"#98c379"},{tag:b.tags.number,color:"#d19a66"},{tag:b.tags.bool,color:"#d19a66"},{tag:b.tags.null,color:"#d19a66"},{tag:b.tags.comment,color:"#7f848e"}]),y=class extends h{constructor(t,s){super(t,s)}getViewType(){return x}getEditorExtensions(){let t=[D(),We()];return document.body.classList.contains("theme-dark")&&t.push((0,Z.syntaxHighlighting)(Lt)),t}};function $e(e){return[...e.workspace.getLeavesOfType(X).filter(s=>s.view instanceof R),...e.workspace.getLeavesOfType(c).filter(s=>s.view instanceof C),...e.workspace.getLeavesOfType(x).filter(s=>s.view instanceof y)].map(s=>s.view)}var N=require("obsidian"),De=Be(require("obsidian"));function de(e,t,s){if((0,N.requireApiVersion)("1.11.0")){let o=De.SettingGroup;if(o){let O=new o(e);return t&&O.setHeading(t),s&&(typeof O.setDesc=="function"?O.setDesc(s):e.createEl("p",{text:s,cls:"setting-item-description"})),{addSetting(i){O.addSetting(i)}}}}return t&&e.createDiv("setting-group-heading").createEl("h3",{text:t}),s&&e.createEl("p",{text:s,cls:"setting-item-description"}),{addSetting(o){let O=new N.Setting(e);o(O)}}}var Y=class extends qe.PluginSettingTab{constructor(s,o){super(s,o);this.requestReloadView=!1;this.plugin=o}display(){let{containerEl:s}=this;this.requestReloadView=!1,s.empty();let o=s.createEl("h2",{text:"File types"});o.style.padding="0 var(--size-4-4)",o.style.marginBottom="var(--size-4-4)";let O=s.createEl("p",{text:"Toggle which file types this plugin should handle. Please note that you must restart Obsidian for many of these changes to take effect.",cls:"setting-item-description"});O.style.padding="0 var(--size-4-4)",O.style.marginBottom="var(--size-4-4)";let i=de(s);i.addSetting(a=>a.setName("Load .txt files").addToggle(r=>r.setValue(this.plugin.settings.doLoadTxt).onChange(async n=>{this.plugin.settings.doLoadTxt=n,await this.plugin.saveSettings()}))),i.addSetting(a=>a.setName("Create .txt files").addToggle(r=>r.setValue(this.plugin.settings.doCreateTxt).onChange(async n=>{this.plugin.settings.doCreateTxt=n,await this.plugin.saveSettings()}))),i.addSetting(a=>a.setName("Load .json files").addToggle(r=>r.setValue(this.plugin.settings.doLoadJson).onChange(async n=>{this.plugin.settings.doLoadJson=n,await this.plugin.saveSettings()}))),i.addSetting(a=>a.setName("Create .json files").addToggle(r=>r.setValue(this.plugin.settings.doCreateJson).onChange(async n=>{this.plugin.settings.doCreateJson=n,await this.plugin.saveSettings()}))),i.addSetting(a=>a.setName("Load .xml files").addToggle(r=>r.setValue(this.plugin.settings.doLoadXml).onChange(async n=>{this.plugin.settings.doLoadXml=n,await this.plugin.saveSettings()}))),i.addSetting(a=>a.setName("Create .xml files").addToggle(r=>r.setValue(this.plugin.settings.doCreateXml).onChange(async n=>{this.plugin.settings.doCreateXml=n,await this.plugin.saveSettings()}))),i.addSetting(a=>a.setName("Load .yaml/.yml files").addToggle(r=>r.setValue(this.plugin.settings.doLoadYaml).onChange(async n=>{this.plugin.settings.doLoadYaml=n,await this.plugin.saveSettings()}))),i.addSetting(a=>a.setName("Create .yaml files").addToggle(r=>r.setValue(this.plugin.settings.doCreateYaml).onChange(async n=>{this.plugin.settings.doCreateYaml=n,await this.plugin.saveSettings()}))),i.addSetting(a=>a.setName("Load .html files").addToggle(r=>r.setValue(this.plugin.settings.doLoadHtml).onChange(async n=>{this.plugin.settings.doLoadHtml=n,await this.plugin.saveSettings()}))),i.addSetting(a=>a.setName("Create .html files").addToggle(r=>r.setValue(this.plugin.settings.doCreateHtml).onChange(async n=>{this.plugin.settings.doCreateHtml=n,await this.plugin.saveSettings()}))),i.addSetting(a=>a.setName("Load .css files").addToggle(r=>r.setValue(this.plugin.settings.doLoadCss).onChange(async n=>{this.plugin.settings.doLoadCss=n,await this.plugin.saveSettings()}))),i.addSetting(a=>a.setName("Create .css files").addToggle(r=>r.setValue(this.plugin.settings.doCreateCss).onChange(async n=>{this.plugin.settings.doCreateCss=n,await this.plugin.saveSettings()}))),i.addSetting(a=>a.setName("Load .js files").addToggle(r=>r.setValue(this.plugin.settings.doLoadJs).onChange(async n=>{this.plugin.settings.doLoadJs=n,await this.plugin.saveSettings()}))),i.addSetting(a=>a.setName("Create .js files").addToggle(r=>r.setValue(this.plugin.settings.doCreateJs).onChange(async n=>{this.plugin.settings.doCreateJs=n,await this.plugin.saveSettings()}))),i.addSetting(a=>a.setName("Load .mjs files").addToggle(r=>r.setValue(this.plugin.settings.doLoadMjs).onChange(async n=>{this.plugin.settings.doLoadMjs=n,await this.plugin.saveSettings()}))),i.addSetting(a=>a.setName("Create .mjs files").addToggle(r=>r.setValue(this.plugin.settings.doCreateMjs).onChange(async n=>{this.plugin.settings.doCreateMjs=n,await this.plugin.saveSettings()}))),i.addSetting(a=>a.setName("Load .ts files").addToggle(r=>r.setValue(this.plugin.settings.doLoadTs).onChange(async n=>{this.plugin.settings.doLoadTs=n,await this.plugin.saveSettings()}))),i.addSetting(a=>a.setName("Create .ts files").addToggle(r=>r.setValue(this.plugin.settings.doCreateTs).onChange(async n=>{this.plugin.settings.doCreateTs=n,await this.plugin.saveSettings()}))),i.addSetting(a=>a.setName("Load .astro files").addToggle(r=>r.setValue(this.plugin.settings.doLoadAstro).onChange(async n=>{this.plugin.settings.doLoadAstro=n,await this.plugin.saveSettings()}))),i.addSetting(a=>a.setName("Create .astro files").addToggle(r=>r.setValue(this.plugin.settings.doCreateAstro).onChange(async n=>{this.plugin.settings.doCreateAstro=n,await this.plugin.saveSettings()})));let d=de(s,"Global Settings");d.addSetting(a=>a.setName("Enable autosave for files").addToggle(r=>r.setValue(this.plugin.settings.doAutosaveFiles).onChange(async n=>{this.plugin.settings.doAutosaveFiles=n,await this.plugin.saveSettings()}))),d.addSetting(a=>a.setName("Wrap long lines").addToggle(r=>r.setValue(this.plugin.settings.lineWrapping).onChange(async n=>{this.plugin.settings.lineWrapping=n,this.requestReloadView=!0,await this.plugin.saveSettings()})))}async hide(){if(this.requestReloadView){let s=$e(this.app);for(let o of s)await o.reload()}}};var Me=require("obsidian"),Ue={join(...e){let t=e.map(s=>String(s).trim()).filter(s=>s!=null);return(0,Me.normalizePath)(t.join("/"))}};var Ze={doLoadTxt:!0,doCreateTxt:!0,doLoadXml:!0,doCreateXml:!0,doLoadJson:!0,doCreateJson:!0,doLoadYaml:!0,doCreateYaml:!0,doLoadAstro:!1,doCreateAstro:!1,doLoadTs:!1,doCreateTs:!1,doLoadCss:!1,doCreateCss:!1,doLoadHtml:!1,doCreateHtml:!1,doLoadJs:!1,doCreateJs:!1,doLoadMjs:!1,doCreateMjs:!1,doAutosaveFiles:!0,lineWrapping:!0};var G=class extends z.Plugin{async onload(){await this.loadSettings(),this.registerView(c,s=>new C(s,this)),this.registerView(X,s=>new R(s,this)),this.registerView(x,s=>new y(s,this)),this.TryRegisterTxt(),this.tryRegisterJson(),this.tryRegisterXml(),this.tryRegisterYaml(),this.tryRegisterAstro(),this.tryRegisterTs(),this.tryRegisterCss(),this.tryRegisterHtml(),this.tryRegisterJs(),this.tryRegisterMjs(),this.addSettingTab(new Y(this.app,this))}TryRegisterTxt(){this.settings.doLoadTxt&&this.registerExtensions([I],c),this.settings.doCreateTxt&&this.registerContextMenuCommand(I,"file")}tryRegisterJson(){this.settings.doLoadJson&&this.registerExtensions([A],X),this.settings.doCreateJson&&this.registerContextMenuCommand(A,"file-braces")}tryRegisterXml(){this.settings.doLoadXml&&this.registerExtensions([j],c),this.settings.doCreateXml&&this.registerContextMenuCommand(j,"file-code")}tryRegisterYaml(){this.settings.doLoadYaml&&this.registerExtensions([B,ce],x),this.settings.doCreateYaml&&this.registerContextMenuCommand(B,"file-text")}tryRegisterAstro(){this.settings.doLoadAstro&&this.registerExtensions([J],c),this.settings.doCreateAstro&&this.registerContextMenuCommand(J,"file-plus")}tryRegisterTs(){this.settings.doLoadTs&&this.registerExtensions([H],c),this.settings.doCreateTs&&this.registerContextMenuCommand(H,"file-type")}tryRegisterCss(){this.settings.doLoadCss&&this.registerExtensions([F],c),this.settings.doCreateCss&&this.registerContextMenuCommand(F,"file-sliders")}tryRegisterHtml(){this.settings.doLoadHtml&&this.registerExtensions([K],c),this.settings.doCreateHtml&&this.registerContextMenuCommand(K,"file-up")}tryRegisterJs(){this.settings.doLoadJs&&this.registerExtensions([ee],c),this.settings.doCreateJs&&this.registerContextMenuCommand(ee,"file-code")}tryRegisterMjs(){this.settings.doLoadMjs&&this.registerExtensions([te],c),this.settings.doCreateMjs&&this.registerContextMenuCommand(te,"file-code")}onunload(){}async loadSettings(){this.settings=Object.assign({},Ze,await this.loadData())}async saveSettings(){await this.saveData(this.settings)}registerContextMenuCommand(s,o){this.registerEvent(this.app.workspace.on("file-menu",(O,i)=>{let d=i instanceof z.TFile?i.parent:i;O.addItem(a=>{a.setTitle(`New .${s} file`).setIcon(o).setSection("action").onClick(async()=>{console.log(d==null?void 0:d.path),d&&await this.createFile(d.path,s)})})}))}async createFile(s,o){let{vault:O}=this.app,{adapter:i}=O,d="Unknown",a=Ue.join(s,`${d}.${o}`);try{if(await i.exists(a))throw new Error(`${a} already exists`);let n=await O.create(a,"");await this.app.workspace.getLeaf(!0).openFile(n)}catch(r){console.log(r.toString())}}}; diff --git a/src/content/.obsidian/plugins/data-files-editor/manifest.json b/src/content/.obsidian/plugins/data-files-editor/manifest.json new file mode 100644 index 0000000..3fd84cc --- /dev/null +++ b/src/content/.obsidian/plugins/data-files-editor/manifest.json @@ -0,0 +1,11 @@ +{ + "id": "data-files-editor", + "name": "Data Files Editor", + "version": "1.4.1", + "minAppVersion": "0.15.0", + "description": "Plugin to edit data files like txt, xml, json, and yaml", + "author": "ZukTol", + "authorUrl": "https://github.com/ZukTol", + "fundingUrl": "", + "isDesktopOnly": false +} \ No newline at end of file diff --git a/src/content/.obsidian/plugins/data-files-editor/styles.css b/src/content/.obsidian/plugins/data-files-editor/styles.css new file mode 100644 index 0000000..eddc247 --- /dev/null +++ b/src/content/.obsidian/plugins/data-files-editor/styles.css @@ -0,0 +1,23 @@ +/* + +This CSS file will be included with your plugin, and +available in the app when your plugin is enabled. + +If your plugin does not need CSS, delete this file. + +*/ + +.datafile-source-view.mod-cm6 .cm-gutters { + flex: 0 0 auto; + background-color: transparent; + color: var(--text-faint) !important; + border-right: none !important; + margin-inline-end: var(--file-folding-offset); + font-size: var(--font-ui-smaller); + z-index: 1; + font-variant: tabular-nums; +} + +.cm-gutterElement.cm-activeLineGutter { + background-color: #aaeeff44; +} diff --git a/src/content/.obsidian/plugins/disable-tabs/main.js b/src/content/.obsidian/plugins/disable-tabs/main.js new file mode 100644 index 0000000..1c054c1 --- /dev/null +++ b/src/content/.obsidian/plugins/disable-tabs/main.js @@ -0,0 +1,169 @@ +/* +THIS IS A GENERATED/BUNDLED FILE BY ESBUILD +if you want to view the source, please visit the github repository of this plugin +*/ + +"use strict"; +var __create = Object.create; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __getProtoOf = Object.getPrototypeOf; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( + // If the importer is in node compatibility mode or this is not an ESM + // file that has been converted to a CommonJS file using a Babel- + // compatible transform (i.e. "__esModule" has not been set), then set + // "default" to the CommonJS "module.exports" for node compatibility. + isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, + mod +)); +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/main.ts +var main_exports = {}; +__export(main_exports, { + default: () => DisableTabsPlugin +}); +module.exports = __toCommonJS(main_exports); +var import_obsidian3 = require("obsidian"); + +// src/settings.ts +var DEFAULT_SETTINGS = { + enabled: true, + hideMobileNewTabIcon: false +}; + +// src/utils/tab-enforcer.ts +var TabEnforcer = class { + constructor(app) { + this.app = app; + } + enforceSingleTab() { + const leaves = []; + this.app.workspace.iterateRootLeaves((leaf) => { + leaves.push(leaf); + }); + if (leaves.length > 1) { + let active = leaves[leaves.length - 1]; + for (const leaf of leaves) { + const view = leaf.view; + if (view && "containerEl" in view) { + const containerEl = view.containerEl; + if (containerEl && containerEl.hasClass("is-active")) { + active = leaf; + break; + } + } + } + leaves.forEach((leaf) => { + if (leaf !== active) { + leaf.detach(); + } + }); + } + } +}; + +// src/ui/settings-tab.ts +var import_obsidian2 = require("obsidian"); + +// src/utils/settings-compat.ts +var import_obsidian = require("obsidian"); +var ObsidianModule = __toESM(require("obsidian"), 1); +function createSettingsGroup(containerEl, heading, manifestId) { + if ((0, import_obsidian.requireApiVersion)("1.11.0")) { + const SettingGroupClass = ObsidianModule.SettingGroup; + if (SettingGroupClass) { + const group = heading ? new SettingGroupClass(containerEl).setHeading(heading) : new SettingGroupClass(containerEl); + return { + addSetting(cb) { + group.addSetting(cb); + } + }; + } + } + if (manifestId) { + containerEl.addClass(`${manifestId}-settings-compat`); + } + { + if (heading) { + const headingEl = containerEl.createDiv("setting-group-heading"); + headingEl.createEl("h3", { text: heading }); + } + return { + addSetting(cb) { + const setting = new import_obsidian.Setting(containerEl); + cb(setting); + } + }; + } +} + +// src/ui/settings-tab.ts +var DisableTabsSettingTab = class extends import_obsidian2.PluginSettingTab { + constructor(app, plugin) { + super(app, plugin); + this.plugin = plugin; + this.settings = plugin.settings; + } + display() { + const { containerEl } = this; + containerEl.empty(); + const generalGroup = createSettingsGroup(containerEl, void 0, "disable-tabs"); + generalGroup.addSetting((setting) => { + setting.setName("Hide mobile tabs icon").setDesc("Hide the tabs icon on mobile devices").addToggle( + (toggle) => toggle.setValue(this.settings.hideMobileNewTabIcon).onChange(async (value) => { + this.settings.hideMobileNewTabIcon = value; + await this.plugin.saveSettings(); + this.plugin.updateMobileTabIconCSS(); + }) + ); + }); + } +}; + +// src/main.ts +var DisableTabsPlugin = class extends import_obsidian3.Plugin { + async onload() { + const loadedData = await this.loadData(); + this.settings = Object.assign({}, DEFAULT_SETTINGS, loadedData); + this.tabEnforcer = new TabEnforcer(this.app); + this.updateMobileTabIconCSS(); + this.registerEvent(this.app.workspace.on("layout-change", () => { + this.tabEnforcer.enforceSingleTab(); + })); + this.app.workspace.onLayoutReady(() => { + this.tabEnforcer.enforceSingleTab(); + }); + this.addSettingTab(new DisableTabsSettingTab(this.app, this)); + } + updateMobileTabIconCSS() { + if (this.settings.hideMobileNewTabIcon) { + document.body.classList.add("disable-tabs-hide-mobile-icon"); + } else { + document.body.classList.remove("disable-tabs-hide-mobile-icon"); + } + } + async saveSettings() { + await this.saveData(this.settings); + } + onunload() { + document.body.classList.remove("disable-tabs-hide-mobile-icon"); + } +}; + + +/* nosourcemap */ \ No newline at end of file diff --git a/src/content/.obsidian/plugins/disable-tabs/manifest.json b/src/content/.obsidian/plugins/disable-tabs/manifest.json new file mode 100644 index 0000000..82ae75c --- /dev/null +++ b/src/content/.obsidian/plugins/disable-tabs/manifest.json @@ -0,0 +1,11 @@ +{ + "id": "disable-tabs", + "name": "Disable Tabs", + "version": "1.0.9", + "minAppVersion": "0.15.0", + "description": "Disables having more than one tab open at a time.", + "author": "David V. Kimball", + "authorUrl": "https://davidvkimball.com", + "fundingUrl": "https://patreon.com/davidvkimball", + "isDesktopOnly": false +} diff --git a/src/content/.obsidian/plugins/disable-tabs/styles.css b/src/content/.obsidian/plugins/disable-tabs/styles.css new file mode 100644 index 0000000..042e5bf --- /dev/null +++ b/src/content/.obsidian/plugins/disable-tabs/styles.css @@ -0,0 +1,16 @@ +/* Hide mobile new tab icon when the plugin setting is enabled */ +body.disable-tabs-hide-mobile-icon .mobile-navbar-action-tabs { + display: none; +} + +/* Group settings compatibility styling for older Obsidian builds (< 1.11.0) */ +/* Scoped to only this plugin's settings container to avoid affecting other plugins */ +.disable-tabs-settings-compat .setting-group-heading h3 { + margin: 0 0 0.75rem; + padding-bottom: 0.5rem; + padding-top: 0.5rem; + font-size: 1rem; + font-weight: 600; + border-bottom: none !important; +} + diff --git a/src/content/.obsidian/plugins/editing-toolbar/data.json b/src/content/.obsidian/plugins/editing-toolbar/data.json new file mode 100644 index 0000000..b21a5fe --- /dev/null +++ b/src/content/.obsidian/plugins/editing-toolbar/data.json @@ -0,0 +1,441 @@ +{ + "lastVersion": "3.2.7", + "aestheticStyle": "glass", + "positionStyle": "top", + "menuCommands": [ + { + "id": "editing-toolbar:editor-undo", + "name": "Undo editor", + "icon": "undo-glyph" + }, + { + "id": "editing-toolbar:editor-redo", + "name": "Redo editor", + "icon": "redo-glyph" + }, + { + "id": "SubmenuCommands-header", + "name": "submenu", + "icon": "heading-glyph", + "SubmenuCommands": [ + { + "id": "editing-toolbar:header2-text", + "name": "Header 2", + "icon": "header-2" + }, + { + "id": "editing-toolbar:header3-text", + "name": "Header 3", + "icon": "header-3" + }, + { + "id": "editing-toolbar:header4-text", + "name": "Header 4", + "icon": "header-4" + }, + { + "id": "editing-toolbar:header5-text", + "name": "Header 5", + "icon": "header-5" + }, + { + "id": "editing-toolbar:header6-text", + "name": "Header 6", + "icon": "header-6" + } + ] + }, + { + "id": "editing-toolbar:toggle-bold", + "name": "Bold", + "icon": "bold-glyph" + }, + { + "id": "editing-toolbar:toggle-italics", + "name": "Italics", + "icon": "italic-glyph" + }, + { + "id": "editing-toolbar:toggle-strikethrough", + "name": "Strikethrough", + "icon": "strikethrough-glyph" + }, + { + "id": "editing-toolbar:underline", + "name": "Underline", + "icon": "underline-glyph" + }, + { + "id": "editing-toolbar:toggle-highlight", + "name": "==Highlight==", + "icon": "highlight-glyph" + }, + { + "id": "editing-toolbar:toggle-format-brush", + "name": "Format Painter", + "icon": "paintbrush" + }, + { + "id": "editing-toolbar:format-eraser", + "name": "Clear text formatting", + "icon": "eraser" + }, + { + "id": "editing-toolbar:editor:swap-line-down", + "name": "Swap line down", + "icon": "lucide-corner-right-down" + }, + { + "id": "SubmenuCommands-text-tools", + "name": "Text Tools", + "icon": "box", + "menuType": "dropdown", + "SubmenuCommands": [ + { + "id": "editing-toolbar:get-plain-text", + "name": "Get Plain Text", + "icon": "lucide-file-text" + }, + { + "id": "editing-toolbar:smart-symbols", + "name": "Full Half Converter", + "icon": "lucide-at-sign" + }, + { + "id": "editingToolbar-Divider-Line", + "name": "Line Operations", + "icon": "vertical-split" + }, + { + "id": "editing-toolbar:insert-blank-lines", + "name": "Insert Blank Lines", + "icon": "lucide-space" + }, + { + "id": "editing-toolbar:remove-blank-lines", + "name": "Remove Blank Lines", + "icon": "lucide-minimize-2" + }, + { + "id": "editing-toolbar:split-lines", + "name": "Split Lines", + "icon": "lucide-split" + }, + { + "id": "editing-toolbar:merge-lines", + "name": "Merge Lines", + "icon": "lucide-merge" + }, + { + "id": "editing-toolbar:dedupe-lines", + "name": "Dedupe Lines", + "icon": "lucide-filter" + }, + { + "id": "editingToolbar-Divider-Line", + "name": "Text Processing", + "icon": "vertical-split" + }, + { + "id": "editing-toolbar:add-wrap", + "name": "Add Prefix/Suffix", + "icon": "lucide-wrap-text" + }, + { + "id": "editing-toolbar:number-lines", + "name": "Number Lines (Custom)", + "icon": "lucide-list-ordered" + }, + { + "id": "editing-toolbar:remove-whitespace-trim", + "name": "Trim Line Ends", + "icon": "lucide-scissors" + }, + { + "id": "editing-toolbar:remove-whitespace-compress", + "name": "Shrink Extra Spaces", + "icon": "lucide-minimize" + }, + { + "id": "editing-toolbar:remove-whitespace-all", + "name": "Remove All Whitespace", + "icon": "lucide-eraser" + }, + { + "id": "editingToolbar-Divider-Line", + "name": "Advanced Tools", + "icon": "vertical-split" + }, + { + "id": "editing-toolbar:list-to-table", + "name": "List to Table", + "icon": "lucide-table" + }, + { + "id": "editing-toolbar:table-to-list", + "name": "Table to List", + "icon": "lucide-list" + }, + { + "id": "editing-toolbar:extract-between", + "name": "Extract Between Strings", + "icon": "lucide-brackets" + } + ] + }, + { + "id": "editing-toolbar:editor:swap-line-up", + "name": "Swap line up", + "icon": "lucide-corner-right-up" + }, + { + "id": "editing-toolbar:editor:attach-file", + "name": "Attach file", + "icon": "lucide-paperclip" + }, + { + "id": "editing-toolbar:editor:insert-table", + "name": "Insert Table", + "icon": "lucide-table" + }, + { + "id": "editing-toolbar:editor:toggle-blockquote", + "name": "Blockquote", + "icon": "quote" + }, + { + "id": "editing-toolbar:insert-callout", + "name": "Insert Callout ", + "icon": "alert-triangle" + }, + { + "id": "SubmenuCommands-list", + "name": "submenu-list", + "icon": "bullet-list-glyph", + "SubmenuCommands": [ + { + "id": "editing-toolbar:toggle-bullet-list", + "name": "Bullet list", + "icon": "" + }, + { + "id": "editing-toolbar:toggle-numbered-list", + "name": "Numbered list", + "icon": "" + }, + { + "id": "editing-toolbar:editor:toggle-checklist-status", + "name": "Checklist", + "icon": "checkbox-glyph" + }, + { + "id": "editing-toolbar:undent-list", + "name": "Unindent-list", + "icon": "" + }, + { + "id": "editing-toolbar:indent-list", + "name": "Indent list", + "icon": "" + }, + { + "id": "editing-toolbar:renumber-ordered-list", + "name": "Reorder numbered list", + "icon": "list-restart" + } + ] + }, + { + "id": "SubmenuCommands-mdcmder", + "name": "submenu", + "icon": "", + "SubmenuCommands": [ + { + "id": "editing-toolbar:editor:toggle-code", + "name": "Inline code", + "icon": "code-glyph" + }, + { + "id": "editing-toolbar:codeblock", + "name": "Code block", + "icon": "codeblock-glyph" + }, + { + "id": "editing-toolbar:editor:insert-wikilink", + "name": "Insert wikilink [[]]", + "icon": "" + }, + { + "id": "editing-toolbar:editor:insert-embed", + "name": "Insert embed ![[]]", + "icon": "note-glyph" + }, + { + "id": "editing-toolbar:insert-link", + "name": "Insert link []()", + "icon": "link-glyph" + }, + { + "id": "editing-toolbar:hrline", + "name": "Horizontal divider", + "icon": "" + }, + { + "id": "editing-toolbar:custom-summary", + "name": "Summary", + "icon": "chat-bubbles-filled" + }, + { + "id": "editing-toolbar:custom-small", + "name": "Small text", + "icon": "header-n" + }, + { + "id": "editing-toolbar:superscript", + "name": "Superscript", + "icon": "superscript-glyph" + }, + { + "id": "editing-toolbar:subscript", + "name": "Subscript", + "icon": "subscript-glyph" + }, + { + "id": "editing-toolbar:toggle-inline-math", + "name": "Inline math", + "icon": "lucide-sigma" + }, + { + "id": "editing-toolbar:editor:insert-mathblock", + "name": "MathBlock", + "icon": "lucide-sigma-square" + } + ] + }, + { + "id": "SubmenuCommands-aligin", + "name": "submenu-aligin", + "icon": "align-left", + "SubmenuCommands": [ + { + "id": "editing-toolbar:left", + "name": "

", + "icon": "align-left" + }, + { + "id": "editing-toolbar:center", + "name": "
", + "icon": "align-center" + }, + { + "id": "editing-toolbar:right", + "name": "

", + "icon": "align-right" + }, + { + "id": "editing-toolbar:justify", + "name": "

", + "icon": "align-justify" + } + ] + }, + { + "id": "editing-toolbar:change-font-color", + "name": "Change font color[html]", + "icon": "" + }, + { + "id": "zenmode:toggle-zen-mode", + "name": "Zen Mode: Toggle", + "icon": "expand" + } + ], + "followingCommands": [], + "topCommands": [], + "fixedCommands": [], + "mobileCommands": [], + "enableMultipleConfig": false, + "enableTopToolbar": true, + "enableFollowingToolbar": false, + "enableFixedToolbar": false, + "appendMethod": "workspace", + "shouldShowMenuOnSelect": false, + "cMenuVisibility": false, + "cMenuBottomValue": 4.25, + "cMenuNumRows": 12, + "cMenuWidth": 610, + "cMenuFontColor": "#2DC26B", + "cMenuBackgroundColor": "#d3f8b6", + "autohide": false, + "Iscentered": false, + "custom_bg1": "#FFB78B8C", + "custom_bg2": "#CDF4698C", + "custom_bg3": "#A0CCF68C", + "custom_bg4": "#F0A7D88C", + "custom_bg5": "#ADEFEF8C", + "custom_fc1": "#D83931", + "custom_fc2": "#DE7802", + "custom_fc3": "#245BDB", + "custom_fc4": "#6425D0", + "custom_fc5": "#646A73", + "isLoadOnMobile": false, + "horizontalPosition": 0, + "verticalPosition": 0, + "formatBrushes": {}, + "customCommands": [ + { + "id": "custom-summary", + "name": "Summary", + "prefix": "
\n", + "suffix": " \nInclude details here.\n
", + "char": 0, + "line": 0, + "islinehead": false, + "icon": "chat-bubbles-filled" + }, + { + "id": "custom-small", + "name": "Small text", + "prefix": "", + "suffix": "", + "char": 0, + "line": 0, + "islinehead": false, + "icon": "header-n" + } + ], + "viewTypeSettings": { + "bases": false + }, + "appearanceByStyle": { + "top": { + "toolbarBackgroundColor": "rgba(var(--background-secondary-rgb), 0.7)", + "toolbarIconColor": "var(--text-normal)", + "toolbarIconSize": 18, + "aestheticStyle": "glass" + }, + "following": { + "toolbarBackgroundColor": "rgba(var(--background-secondary-rgb), 0.7)", + "toolbarIconColor": "var(--text-normal)", + "toolbarIconSize": 18, + "aestheticStyle": "default" + }, + "fixed": { + "toolbarBackgroundColor": "rgba(var(--background-secondary-rgb), 0.7)", + "toolbarIconColor": "var(--text-normal)", + "toolbarIconSize": 18, + "aestheticStyle": "default" + }, + "mobile": { + "toolbarBackgroundColor": "rgba(var(--background-secondary-rgb), 0.7)", + "toolbarIconColor": "var(--text-normal)", + "toolbarIconSize": 18, + "aestheticStyle": "default" + } + }, + "toolbarBackgroundColor": "rgba(var(--background-secondary-rgb), 0.7)", + "toolbarIconColor": "var(--text-normal)", + "toolbarIconSize": 18, + "useCurrentLineForRegex": false, + "commandIdsFixed": true +} \ No newline at end of file diff --git a/src/content/.obsidian/plugins/editing-toolbar/main.js b/src/content/.obsidian/plugins/editing-toolbar/main.js new file mode 100644 index 0000000..5673a57 --- /dev/null +++ b/src/content/.obsidian/plugins/editing-toolbar/main.js @@ -0,0 +1,12 @@ +"use strict";var e=require("obsidian");const t=["Custom","editingToolbar","editingToolbarSub","editingToolbarAdd","editingToolbarDelete","editingToolbarReload","codeblock-glyph","underline-glyph","superscript-glyph","subscript-glyph","bot-glyph","header-1","header-2","header-3","header-4","header-5","header-6","header-n","obsidian","obsidian-new","accessibility","activity","air-vent","airplay","alarm-check","alarm-clock-off","alarm-clock","alarm-minus","alarm-plus","album","alert-circle","alert-octagon","alert-triangle","align-center-horizontal","align-center-vertical","align-center","align-end-horizontal","align-end-vertical","align-horizontal-distribute-center","align-horizontal-distribute-end","align-horizontal-distribute-start","align-horizontal-justify-center","align-horizontal-justify-end","align-horizontal-justify-start","align-horizontal-space-around","align-horizontal-space-between","align-justify","align-left","align-right","align-start-horizontal","align-start-vertical","align-vertical-distribute-center","align-vertical-distribute-end","align-vertical-distribute-start","align-vertical-justify-center","align-vertical-justify-end","align-vertical-justify-start","align-vertical-space-around","align-vertical-space-between","anchor","angry","annoyed","aperture","apple","archive-restore","archive","armchair","arrow-big-down","arrow-big-left","arrow-big-right","arrow-big-up","arrow-down-circle","arrow-down-left","arrow-down-right","arrow-down","arrow-left-circle","arrow-left-right","arrow-left","arrow-right-circle","arrow-right","arrow-up-circle","arrow-up-left","arrow-up-right","arrow-up","asterisk","at-sign","award","axe","axis-3d","baby","backpack","baggage-claim","banana","banknote","bar-chart-2","bar-chart-3","bar-chart-4","bar-chart-horizontal","bar-chart","baseline","bath","battery-charging","battery-full","battery-low","battery-medium","battery","beaker","bed-double","bed-single","bed","beer","bell-minus","bell-off","bell-plus","bell-ring","bell","bike","binary","bitcoin","bluetooth-connected","bluetooth-off","bluetooth-searching","bluetooth","bold","bomb","bone","book-open","book","bookmark-minus","bookmark-plus","bookmark","bot","box-select","box","boxes","briefcase","brush","bug","building-2","building","bus","cake","calculator","calendar-check-2","calendar-check","calendar-clock","calendar-days","calendar-heart","calendar-minus","calendar-off","calendar-plus","calendar-range","calendar-search","calendar-x2","calendar-x","calendar","camera-off","camera","car","carrot","cast","check-circle-2","check-circle","check-square","check","chef-hat","cherry","chevron-down","chevron-first","chevron-last","chevron-left","chevron-right","chevron-up","chevrons-down-up","chevrons-down","chevrons-left-right","chevrons-left","chevrons-right-left","chevrons-right","chevrons-up-down","chevrons-up","chrome","cigarette-off","cigarette","circle-dot","circle-ellipsis","circle-slashed","circle","citrus","clapperboard","clipboard-check","clipboard-copy","clipboard-edit","clipboard-list","clipboard-signature","clipboard-type","clipboard-x","clipboard","clock-1","clock-10","clock-11","clock-12","clock-2","clock-3","clock-4","clock-5","clock-6","clock-7","clock-8","clock-9","clock","cloud-cog","cloud-drizzle","cloud-fog","cloud-hail","cloud-lightning","cloud-moon-rain","cloud-moon","cloud-off","cloud-rain-wind","cloud-rain","cloud-snow","cloud-sun-rain","cloud-sun","cloud","cloudy","clover","code-2","code","codepen","codesandbox","coffee","cog","coins","columns","command","compass","component","contact","contrast","cookie","copy","copyleft","copyright","corner-down-left","corner-down-right","corner-left-down","corner-left-up","corner-right-down","corner-right-up","corner-up-left","corner-up-right","cpu","credit-card","croissant","crop","cross","crosshair","crown","cup-soda","curly-braces","currency","database","delete","diamond","dice-1","dice-2","dice-3","dice-4","dice-5","dice-6","dices","diff","disc","divide-circle","divide-square","divide","dollar-sign","download-cloud","download","dribbble","droplet","droplets","drumstick","edit-2","edit-3","edit","egg-fried","egg","equal-not","equal","eraser","euro","expand","external-link","eye-off","eye","facebook","factory","fast-forward","feather","figma","file-archive","file-audio-2","file-audio","file-axis-3d","file-badge-2","file-badge","file-bar-chart-2","file-bar-chart","file-box","file-check-2","file-check","file-clock","file-code","file-cog-2","file-cog","file-diff","file-digit","file-down","file-edit","file-heart","file-image","file-input","file-json-2","file-json","file-key-2","file-key","file-line-chart","file-lock-2","file-lock","file-minus-2","file-minus","file-output","file-pie-chart","file-plus-2","file-plus","file-question","file-scan","file-search-2","file-search","file-signature","file-spreadsheet","file-symlink","file-terminal","file-text","file-type-2","file-type","file-up","file-video-2","file-video","file-volume-2","file-volume","file-warning","file-x2","file-x","file","files","film","filter","fingerprint","flag-off","flag-triangle-left","flag-triangle-right","flag","flame","flashlight-off","flashlight","flask-conical","flask-round","flip-horizontal-2","flip-horizontal","flip-vertical-2","flip-vertical","flower-2","flower","focus","folder-archive","folder-check","folder-clock","folder-closed","folder-cog-2","folder-cog","folder-down","folder-edit","folder-heart","folder-input","folder-key","folder-lock","folder-minus","folder-open","folder-output","folder-plus","folder-search-2","folder-search","folder-symlink","folder-tree","folder-up","folder-x","folder","folders","form-input","forward","frame","framer","frown","fuel","function-square","gamepad-2","gamepad","gauge","gavel","gem","ghost","gift","git-branch-plus","git-branch","git-commit","git-compare","git-fork","git-merge","git-pull-request-closed","git-pull-request-draft","git-pull-request","github","gitlab","glass-water","glasses","globe-2","globe","grab","graduation-cap","grape","grid","grip-horizontal","grip-vertical","hammer","hand-metal","hand","hard-drive","hard-hat","hash","haze","headphones","heart-crack","heart-handshake","heart-off","heart-pulse","heart","help-circle","hexagon","highlighter","history","home","hourglass","ice-cream","image-minus","image-off","image-plus","image","import","inbox","indent","indian-rupee","infinity","info","inspect","instagram","italic","japanese-yen","joystick","key","keyboard","lamp-ceiling","lamp-desk","lamp-floor","lamp-wall-down","lamp-wall-up","lamp","landmark","languages","laptop-2","laptop","lasso-select","lasso","laugh","layers","layout-dashboard","layout-grid","layout-list","layout-template","layout","leaf","library","life-buoy","lightbulb-off","lightbulb","line-chart","link-2off","link-2","link","linkedin","list-checks","list-end","list-minus","list-music","list-ordered","list-plus","list-start","list-video","list-x","list","loader-2","loader","locate-fixed","locate-off","locate","lock","log-in","log-out","luggage","magnet","mail-check","mail-minus","mail-open","mail-plus","mail-question","mail-search","mail-warning","mail-x","mail","mails","map-pin-off","map-pin","map","martini","maximize-2","maximize","medal","megaphone-off","megaphone","meh","menu","message-circle","message-square","mic-2","mic-off","mic","microscope","milestone","minimize-2","minimize","minus-circle","minus-square","minus","monitor-off","monitor-speaker","monitor","moon","more-horizontal","more-vertical","mountain-snow","mountain","mouse-pointer-2","mouse-pointer-click","mouse-pointer","mouse","move-3d","move-diagonal-2","move-diagonal","move-horizontal","move-vertical","move","music-2","music-3","music-4","music","navigation-2off","navigation-2","navigation-off","navigation","network","newspaper","octagon","option","outdent","package-2","package-check","package-minus","package-open","package-plus","package-search","package-x","package","paint-bucket","paintbrush-2","paintbrush","palette","palmtree","paperclip","party-popper","pause-circle","pause-octagon","pause","pen-tool","pencil","percent","person-standing","phone-call","phone-forwarded","phone-incoming","phone-missed","phone-off","phone-outgoing","phone","pie-chart","piggy-bank","pin-off","pin","pipette","pizza","plane","play-circle","play","plug-zap","plus-circle","plus-square","plus","pocket","podcast","pointer","pound-sterling","power-off","power","printer","puzzle","qr-code","quote","radio-receiver","radio","recycle","redo-2","redo","refresh-ccw","refresh-cw","regex","repeat-1","repeat","reply-all","reply","rewind","rocket","rocking-chair","rotate-3d","rotate-ccw","rotate-cw","rss","ruler","russian-ruble","save","scale-3d","scale","scaling","scan-face","scan-line","scan","scissors","screen-share-off","screen-share","scroll","search","send","separator-horizontal","separator-vertical","server-cog","server-crash","server-off","server","settings-2","settings","share-2","share","sheet","shield-alert","shield-check","shield-close","shield-off","shield","shirt","shopping-bag","shopping-cart","shovel","shrink","shrub","shuffle","sidebar-close","sidebar-open","sidebar","sigma","signal-high","signal-low","signal-medium","signal-zero","signal","siren","skip-back","skip-forward","skull","slack","slash","slice","sliders-horizontal","sliders","smartphone-charging","smartphone","smile-plus","smile","snowflake","sofa","sort-asc","sort-desc","speaker","sprout","square","star-half","star-off","star","stethoscope","sticker","sticky-note","stop-circle","stretch-horizontal","stretch-vertical","strikethrough","subscript","sun-dim","sun-medium","sun-moon","sun-snow","sun","sunrise","sunset","superscript","swiss-franc","switch-camera","sword","swords","syringe","table-2","table","tablet","tag","tags","target","tent","terminal-square","terminal","text-cursor-input","text-cursor","thermometer-snowflake","thermometer-sun","thermometer","thumbs-down","thumbs-up","ticket","timer-off","timer-reset","timer","toggle-left","toggle-right","tornado","toy-brick","train","trash-2","trash","tree-deciduous","tree-pine","trees","trello","trending-down","trending-up","triangle","trophy","truck","tv-2","tv","twitch","twitter","type","umbrella","underline","undo-2","undo","unlink-2","unlink","unlock","upload-cloud","upload","usb","user-check","user-cog","user-minus","user-plus","user-x","user","users","utensils-crossed","utensils","venetian-mask","verified","vibrate-off","vibrate","video-off","video","view","voicemail","volume-1","volume-2","volume-x","volume","wallet","wand-2","wand","watch","waves","webcam","webhook","wifi-off","wifi","wind","wine","wrap-text","wrench","x-circle","x-octagon","x-square","x","youtube","zap-off","zap","zoom-in","zoom-out","create-new","trash","search","right-triangle","document","folder","pencil","left-arrow","right-arrow","three-horizontal-bars","dot-network","audio-file","image-file","pdf-file","gear","documents","blocks","go-to-file","presentation","cross-in-box","microphone","microphone-filled","two-columns","link","popup-open","checkmark","hashtag","left-arrow-with-tail","right-arrow-with-tail","up-arrow-with-tail","down-arrow-with-tail","lines-of-text","vertical-three-dots","pin","magnifying-glass","info","horizontal-split","vertical-split","calendar-with-checkmark","folder-minus","sheets-in-box","up-and-down-arrows","broken-link","cross","any-key","reset","star","crossed-star","dice","filled-pin","enter","help","vault","open-vault","paper-plane","bullet-list","uppercase-lowercase-a","star-list","expand-vertically","languages","switch","pane-layout","install","sync","check-in-circle","sync-small","check-small","paused","forward-arrow","stacked-levels","bracket-glyph","note-glyph","tag-glyph","price-tag-glyph","heading-glyph","bold-glyph","italic-glyph","strikethrough-glyph","highlight-glyph","code-glyph","quote-glyph","link-glyph","bullet-list-glyph","number-list-glyph","checkbox-glyph","undo-glyph","redo-glyph","up-chevron-glyph","down-chevron-glyph","left-chevron-glyph","right-chevron-glyph","percent-sign-glyph","keyboard-glyph","double-up-arrow-glyph","double-down-arrow-glyph","image-glyph","wrench-screwdriver-glyph","clock","plus-with-circle","minus-with-circle","indent-glyph","unindent-glyph","fullscreen","exit-fullscreen","cloud","run-command","compress-glyph","enlarge-glyph","scissors-glyph","up-curly-arrow-glyph","down-curly-arrow-glyph","plus-minus-glyph","links-going-out","links-coming-in","add-note-glyph","duplicate-glyph","clock-glyph","calendar-glyph","command-glyph","dice-glyph","file-explorer-glyph","graph-glyph","import-glyph","navigate-glyph","open-elsewhere-glyph","presentation-glyph","paper-plane-glyph","question-mark-glyph","restore-file-glyph","search-glyph","star-glyph","play-audio-glyph","stop-audio-glyph","tomorrow-glyph","wand-glyph","workspace-glyph","yesterday-glyph","box-glyph","merge-files-glyph","merge-files","two-blank-pages","scissors","paste","paste-text","split","select-all-text","wand","github-glyph","reading-glasses","user-manual-filled","discord-filled","chat-bubbles-filled","experiment-filled","bracket-glyph","box-glyph","check-small","dice-glyph","dice","discord","right-triangle","heading-glyph","help","keyboard-toggle","broken-link","experiment","left-arrow","link","link-glyph","links-coming-in","links-going-out","open-vault","paused","question-mark-glyph","right-arrow","sidebar-left","sidebar-right","sheets-in-box","star-list","sync-small","tabs","uppercase-lowercase-a","vault","stack-horizontal","stack-vertical","stretch-horizontal","stretch-vertical","distribute-space-horizontal","distribute-space-vertical"],i=1024;let o=0;class n{constructor(e,t){this.from=e,this.to=t}}class s{constructor(e={}){this.id=o++,this.perNode=!!e.perNode,this.deserialize=e.deserialize||(()=>{throw new Error("This node type doesn't define a deserialize function")}),this.combine=e.combine||null}add(e){if(this.perNode)throw new RangeError("Can't add per-node props to node types");return"function"!=typeof e&&(e=l.match(e)),t=>{let i=e(t);return void 0===i?null:[this,i]}}}s.closedBy=new s({deserialize:e=>e.split(" ")}),s.openedBy=new s({deserialize:e=>e.split(" ")}),s.group=new s({deserialize:e=>e.split(" ")}),s.isolate=new s({deserialize:e=>{if(e&&"rtl"!=e&&"ltr"!=e&&"auto"!=e)throw new RangeError("Invalid value for isolate: "+e);return e||"auto"}}),s.contextHash=new s({perNode:!0}),s.lookAhead=new s({perNode:!0}),s.mounted=new s({perNode:!0});class r{constructor(e,t,i,o=!1){this.tree=e,this.overlay=t,this.parser=i,this.bracketed=o}static get(e){return e&&e.props&&e.props[s.mounted.id]}}const a=Object.create(null);class l{constructor(e,t,i,o=0){this.name=e,this.props=t,this.id=i,this.flags=o}static define(e){let t=e.props&&e.props.length?Object.create(null):a,i=(e.top?1:0)|(e.skipped?2:0)|(e.error?4:0)|(null==e.name?8:0),o=new l(e.name||"",t,e.id,i);if(e.props)for(let i of e.props)if(Array.isArray(i)||(i=i(o)),i){if(i[0].perNode)throw new RangeError("Can't store a per-node prop on a node type");t[i[0].id]=i[1]}return o}prop(e){return this.props[e.id]}get isTop(){return(1&this.flags)>0}get isSkipped(){return(2&this.flags)>0}get isError(){return(4&this.flags)>0}get isAnonymous(){return(8&this.flags)>0}is(e){if("string"==typeof e){if(this.name==e)return!0;let t=this.prop(s.group);return!!t&&t.indexOf(e)>-1}return this.id==e}static match(e){let t=Object.create(null);for(let i in e)for(let o of i.split(" "))t[o]=e[i];return e=>{for(let i=e.prop(s.group),o=-1;o<(i?i.length:0);o++){let n=t[o<0?e.name:i[o]];if(n)return n}}}}l.none=new l("",Object.create(null),0,8);const c=new WeakMap,d=new WeakMap;var h;!function(e){e[e.ExcludeBuffers=1]="ExcludeBuffers",e[e.IncludeAnonymous=2]="IncludeAnonymous",e[e.IgnoreMounts=4]="IgnoreMounts",e[e.IgnoreOverlays=8]="IgnoreOverlays",e[e.EnterBracketed=16]="EnterBracketed"}(h||(h={}));class u{constructor(e,t,i,o,n){if(this.type=e,this.children=t,this.positions=i,this.length=o,this.props=null,n&&n.length){this.props=Object.create(null);for(let[e,t]of n)this.props["number"==typeof e?e:e.id]=t}}toString(){let e=r.get(this);if(e&&!e.overlay)return e.tree.toString();let t="";for(let e of this.children){let i=e.toString();i&&(t&&(t+=","),t+=i)}return this.type.name?(/\W/.test(this.type.name)&&!this.type.isError?JSON.stringify(this.type.name):this.type.name)+(t.length?"("+t+")":""):t}cursor(e=0){return new T(this.topNode,e)}cursorAt(e,t=0,i=0){let o=c.get(this)||this.topNode,n=new T(o);return n.moveTo(e,t),c.set(this,n._tree),n}get topNode(){return new y(this,0,0,null)}resolve(e,t=0){let i=f(c.get(this)||this.topNode,e,t,!1);return c.set(this,i),i}resolveInner(e,t=0){let i=f(d.get(this)||this.topNode,e,t,!0);return d.set(this,i),i}resolveStack(e,t=0){return function(e,t,i){let o=e.resolveInner(t,i),n=null;for(let e=o instanceof y?o:o.context.parent;e;e=e.parent)if(e.index<0){let s=e.parent;(n||(n=[o])).push(s.resolve(t,i)),e=s}else{let s=r.get(e.tree);if(s&&s.overlay&&s.overlay[0].from<=t&&s.overlay[s.overlay.length-1].to>=t){let r=new y(s.tree,s.overlay[0].from+e.from,-1,e);(n||(n=[o])).push(f(r,t,i,!1))}}return n?k(n):o}(this,e,t)}iterate(e){let{enter:t,leave:i,from:o=0,to:n=this.length}=e,s=e.mode||0,r=(s&h.IncludeAnonymous)>0;for(let e=this.cursor(s|h.IncludeAnonymous);;){let s=!1;if(e.from<=n&&e.to>=o&&(!r&&e.type.isAnonymous||!1!==t(e))){if(e.firstChild())continue;s=!0}for(;s&&i&&(r||!e.type.isAnonymous)&&i(e),!e.nextSibling();){if(!e.parent())return;s=!0}}}prop(e){return e.perNode?this.props?this.props[e.id]:void 0:this.type.prop(e)}get propValues(){let e=[];if(this.props)for(let t in this.props)e.push([+t,this.props[t]]);return e}balance(e={}){return this.children.length<=8?this:I(l.none,this.children,this.positions,0,this.children.length,0,this.length,(e,t,i)=>new u(this.type,e,t,i,this.propValues),e.makeTree||((e,t,i)=>new u(l.none,e,t,i)))}static build(e){return function(e){var t;let{buffer:o,nodeSet:n,maxBufferLength:r=i,reused:a=[],minRepeatType:l=n.types.length}=e,c=Array.isArray(o)?new p(o,o.length):o,d=n.types,h=0,g=0;function f(e,t,i,o,s,u){let{id:p,start:k,end:S,size:T}=c,E=g,M=h;if(T<0){if(c.next(),-1==T){let t=a[p];return i.push(t),void o.push(k-e)}if(-3==T)return void(h=p);if(-4==T)return void(g=p);throw new RangeError(`Unrecognized record size: ${T}`)}let A,D,O=d[p],B=k-e;if(S-k<=r&&(D=C(c.pos-t,s))){let t=new Uint16Array(D.size-D.skip),i=c.pos-D.size,o=t.length;for(;c.pos>i;)o=x(D.start,t,o);A=new m(t,S-D.start,n),B=D.start-e}else{let e=c.pos-T;c.next();let t=[],i=[],o=p>=l?p:-1,n=0,s=S;for(;c.pos>e;)o>=0&&c.id==o&&c.size>=0?(c.end<=s-r&&(w(t,i,k,n,c.end,s,o,E,M),n=t.length,s=c.end),c.next()):u>2500?b(k,e,t,i):f(k,e,t,i,o,u+1);if(o>=0&&n>0&&n-1&&n>0){let e=y(O,M);A=I(O,t,i,0,t.length,0,S-k,e,e)}else A=v(O,t,i,S-k,E-S,M)}i.push(A),o.push(B)}function b(e,t,i,o){let s=[],a=0,l=-1;for(;c.pos>t;){let{id:e,start:t,end:i,size:o}=c;if(o>4)c.next();else{if(l>-1&&t=0;e-=3)t[i++]=s[e],t[i++]=s[e+1]-r,t[i++]=s[e+2]-r,t[i++]=i;i.push(new m(t,s[2]-r,n)),o.push(r-e)}}function y(e,t){return(i,o,n)=>{let r,a,l=0,c=i.length-1;if(c>=0&&(r=i[c])instanceof u){if(!c&&r.type==e&&r.length==n)return r;(a=r.prop(s.lookAhead))&&(l=o[c]+r.length+a)}return v(e,i,o,n,l,t)}}function w(e,t,i,o,s,r,a,l,c){let d=[],h=[];for(;e.length>o;)d.push(e.pop()),h.push(t.pop()+i-s);e.push(v(n.types[a],d,h,r-s,l-r,c)),t.push(s-i)}function v(e,t,i,o,n,r,a){if(r){let e=[s.contextHash,r];a=a?[e].concat(a):[e]}if(n>25){let e=[s.lookAhead,n];a=a?[e].concat(a):[e]}return new u(e,t,i,o,a)}function C(e,t){let i=c.fork(),o=0,n=0,s=0,a=i.end-r,d={size:0,start:0,skip:0};e:for(let r=i.pos-e;i.pos>r;){let e=i.size;if(i.id==t&&e>=0){d.size=o,d.start=n,d.skip=s,s+=4,o+=4,i.next();continue}let c=i.pos-e;if(e<0||c=l?4:0,u=i.start;for(i.next();i.pos>c;){if(i.size<0){if(-3!=i.size&&-4!=i.size)break e;h+=4}else i.id>=l&&(h+=4);i.next()}n=u,o+=e,s+=h}return(t<0||o==e)&&(d.size=o,d.start=n,d.skip=s),d.size>4?d:void 0}function x(e,t,i){let{id:o,start:n,end:s,size:r}=c;if(c.next(),r>=0&&o4){let o=c.pos-(r-4);for(;c.pos>o;)i=x(e,t,i)}t[--i]=a,t[--i]=s-e,t[--i]=n-e,t[--i]=o}else-3==r?h=o:-4==r&&(g=o);return i}let k=[],S=[];for(;c.pos>0;)f(e.start||0,e.bufferStart||0,k,S,-1,0);let T=null!==(t=e.length)&&void 0!==t?t:k.length?S[0]+k[0].length:0;return new u(d[e.topID],k.reverse(),S.reverse(),T)}(e)}}u.empty=new u(l.none,[],[],0);class p{constructor(e,t){this.buffer=e,this.index=t}get id(){return this.buffer[this.index-4]}get start(){return this.buffer[this.index-3]}get end(){return this.buffer[this.index-2]}get size(){return this.buffer[this.index-1]}get pos(){return this.index}next(){this.index-=4}fork(){return new p(this.buffer,this.index)}}class m{constructor(e,t,i){this.buffer=e,this.length=t,this.set=i}get type(){return l.none}toString(){let e=[];for(let t=0;t0));a=s[a+3]);return r}slice(e,t,i){let o=this.buffer,n=new Uint16Array(t-e),s=0;for(let r=e,a=0;r=t&&it;case 1:return i<=t&&o>t;case 2:return o>t;case 4:return!0}}function f(e,t,i,o){for(var n;e.from==e.to||(i<1?e.from>=t:e.from>t)||(i>-1?e.to<=t:e.to0?l.length:-1;e!=d;e+=t){let d=l[e],p=c[e]+a.from;if(n&h.EnterBracketed&&d instanceof u&&null===(null===(s=r.get(d))||void 0===s?void 0:s.overlay)&&(p>=i||p+d.length<=i)||g(o,i,p,p+d.length))if(d instanceof m){if(n&h.ExcludeBuffers)continue;let s=d.findChild(0,d.buffer.length,t,i-p,o);if(s>-1)return new x(new C(a,d,e,p),null,s)}else if(n&h.IncludeAnonymous||!d.type.isAnonymous||E(d)){let s;if(!(n&h.IgnoreMounts)&&(s=r.get(d))&&!s.overlay)return new y(s.tree,p,e,a);let l=new y(d,p,e,a);return n&h.IncludeAnonymous||!l.type.isAnonymous?l:l.nextChild(t<0?d.children.length-1:0,t,i,o,n)}}if(n&h.IncludeAnonymous||!a.type.isAnonymous)return null;if(e=a.index>=0?a.index+t:t<0?-1:a._parent._tree.children.length,a=a._parent,!a)return null}}get firstChild(){return this.nextChild(0,1,0,4)}get lastChild(){return this.nextChild(this._tree.children.length-1,-1,0,4)}childAfter(e){return this.nextChild(0,1,e,2)}childBefore(e){return this.nextChild(this._tree.children.length-1,-1,e,-2)}prop(e){return this._tree.prop(e)}enter(e,t,i=0){let o;if(!(i&h.IgnoreOverlays)&&(o=r.get(this._tree))&&o.overlay){let n=e-this.from,s=i&h.EnterBracketed&&o.bracketed;for(let{from:e,to:i}of o.overlay)if((t>0||s?e<=n:e=n:i>n))return new y(o.tree,o.overlay[0].from+this.from,-1,this)}return this.nextChild(0,1,e,t,i)}nextSignificantParent(){let e=this;for(;e.type.isAnonymous&&e._parent;)e=e._parent;return e}get parent(){return this._parent?this._parent.nextSignificantParent():null}get nextSibling(){return this._parent&&this.index>=0?this._parent.nextChild(this.index+1,1,0,4):null}get prevSibling(){return this._parent&&this.index>=0?this._parent.nextChild(this.index-1,-1,0,4):null}get tree(){return this._tree}toTree(){return this._tree}toString(){return this._tree.toString()}}function w(e,t,i,o){let n=e.cursor(),s=[];if(!n.firstChild())return s;if(null!=i)for(let e=!1;!e;)if(e=n.type.is(i),!n.nextSibling())return s;for(;;){if(null!=o&&n.type.is(o))return s;if(n.type.is(t)&&s.push(n.node),!n.nextSibling())return null==o?s:[]}}function v(e,t,i=t.length-1){for(let o=e;i>=0;o=o.parent){if(!o)return!1;if(!o.type.isAnonymous){if(t[i]&&t[i]!=o.name)return!1;i--}}return!0}class C{constructor(e,t,i,o){this.parent=e,this.buffer=t,this.index=i,this.start=o}}class x extends b{get name(){return this.type.name}get from(){return this.context.start+this.context.buffer.buffer[this.index+1]}get to(){return this.context.start+this.context.buffer.buffer[this.index+2]}constructor(e,t,i){super(),this.context=e,this._parent=t,this.index=i,this.type=e.buffer.set.types[e.buffer.buffer[i]]}child(e,t,i){let{buffer:o}=this.context,n=o.findChild(this.index+4,o.buffer[this.index+3],e,t-this.context.start,i);return n<0?null:new x(this.context,this,n)}get firstChild(){return this.child(1,0,4)}get lastChild(){return this.child(-1,0,4)}childAfter(e){return this.child(1,e,2)}childBefore(e){return this.child(-1,e,-2)}prop(e){return this.type.prop(e)}enter(e,t,i=0){if(i&h.ExcludeBuffers)return null;let{buffer:o}=this.context,n=o.findChild(this.index+4,o.buffer[this.index+3],t>0?1:-1,e-this.context.start,t);return n<0?null:new x(this.context,this,n)}get parent(){return this._parent||this.context.parent.nextSignificantParent()}externalSibling(e){return this._parent?null:this.context.parent.nextChild(this.context.index+e,e,0,4)}get nextSibling(){let{buffer:e}=this.context,t=e.buffer[this.index+3];return t<(this._parent?e.buffer[this._parent.index+3]:e.buffer.length)?new x(this.context,this._parent,t):this.externalSibling(1)}get prevSibling(){let{buffer:e}=this.context,t=this._parent?this._parent.index+4:0;return this.index==t?this.externalSibling(-1):new x(this.context,this._parent,e.findChild(t,this.index,-1,0,4))}get tree(){return null}toTree(){let e=[],t=[],{buffer:i}=this.context,o=this.index+4,n=i.buffer[this.index+3];if(n>o){let s=i.buffer[this.index+1];e.push(i.slice(o,n,s)),t.push(0)}return new u(this.type,e,t,this.to-this.from)}toString(){return this.context.buffer.childString(this.index)}}function k(e){if(!e.length)return null;let t=0,i=e[0];for(let o=1;oi.from||n.to0){if(this.index-1)for(let o=t+e,n=e<0?-1:i._tree.children.length;o!=n;o+=e){let e=i._tree.children[o];if(this.mode&h.IncludeAnonymous||e instanceof m||!e.type.isAnonymous||E(e))return!1}return!0}move(e,t){if(t&&this.enterChild(e,0,4))return!0;for(;;){if(this.sibling(e))return!0;if(this.atLastNode(e)||!this.parent())return!1}}next(e=!0){return this.move(1,e)}prev(e=!0){return this.move(-1,e)}moveTo(e,t=0){for(;(this.from==this.to||(t<1?this.from>=e:this.from>e)||(t>-1?this.to<=e:this.to=0;){for(let s=e;s;s=s._parent)if(s.index==o){if(o==this.index)return s;t=s,i=n+1;break e}o=this.stack[--n]}for(let e=i;e=0;n--){if(n<0)return v(this._tree,e,o);let s=i[t.buffer[this.stack[n]]];if(!s.isAnonymous){if(e[o]&&e[o]!=s.name)return!1;o--}}return!0}}function E(e){return e.children.some(e=>e instanceof m||!e.type.isAnonymous||E(e))}const M=new WeakMap;function A(e,t){if(!e.isAnonymous||t instanceof m||t.type!=e)return 1;let i=M.get(t);if(null==i){i=1;for(let o of t.children){if(o.type!=e||!(o instanceof u)){i=1;break}i+=A(e,o)}M.set(t,i)}return i}function I(e,t,i,o,n,s,r,a,l){let c=0;for(let i=o;i=d)break;m+=t}if(c==n+1){if(m>d){let e=i[n];t(e.children,e.positions,0,e.children.length,o[n]+a);continue}h.push(i[n])}else{let t=o[c-1]+i[c-1].length-p;h.push(I(e,i,o,n,c,p,t,null,l))}u.push(p+a-s)}}(t,i,o,n,0),(a||l)(h,u,r)}class D{constructor(e,t,i,o,n=!1,s=!1){this.from=e,this.to=t,this.tree=i,this.offset=o,this.open=(n?1:0)|(s?2:0)}get openStart(){return(1&this.open)>0}get openEnd(){return(2&this.open)>0}static addTree(e,t=[],i=!1){let o=[new D(0,e.length,e,0,!1,i)];for(let i of t)i.to>e.length&&o.push(i);return o}static applyChanges(e,t,i=128){if(!t.length)return e;let o=[],n=1,s=e.length?e[0]:null;for(let r=0,a=0,l=0;;r++){let c=r=i)for(;s&&s.from=t.from||d<=t.to||l){let e=Math.max(t.from,a)-l,i=Math.min(t.to,d)-l;t=e>=i?null:new D(e,i,t.tree,t.offset+l,r>0,!!c)}if(t&&o.push(t),s.to>d)break;s=nnew n(e.from,e.to)):[new n(0,0)]:[new n(0,e.length)],this.createParse(e,t||[],i)}parse(e,t,i){let o=this.startParse(e,t,i);for(;;){let e=o.advance();if(e)return e}}}class B{constructor(e){this.string=e}get length(){return this.string.length}chunk(e){return this.string.slice(e)}get lineChunks(){return!1}read(e,t){return this.string.slice(e,t)}}new s({perNode:!0});let L=[],P=[];function N(e){if(e<768)return!1;for(let t=0,i=L.length;;){let o=t+i>>1;if(e=P[o]))return!0;t=o+1}if(t==i)return!1}}function R(e){return e>=127462&&e<=127487}(()=>{let e="lc,34,7n,7,7b,19,,,,2,,2,,,20,b,1c,l,g,,2t,7,2,6,2,2,,4,z,,u,r,2j,b,1m,9,9,,o,4,,9,,3,,5,17,3,3b,f,,w,1j,,,,4,8,4,,3,7,a,2,t,,1m,,,,2,4,8,,9,,a,2,q,,2,2,1l,,4,2,4,2,2,3,3,,u,2,3,,b,2,1l,,4,5,,2,4,,k,2,m,6,,,1m,,,2,,4,8,,7,3,a,2,u,,1n,,,,c,,9,,14,,3,,1l,3,5,3,,4,7,2,b,2,t,,1m,,2,,2,,3,,5,2,7,2,b,2,s,2,1l,2,,,2,4,8,,9,,a,2,t,,20,,4,,2,3,,,8,,29,,2,7,c,8,2q,,2,9,b,6,22,2,r,,,,,,1j,e,,5,,2,5,b,,10,9,,2u,4,,6,,2,2,2,p,2,4,3,g,4,d,,2,2,6,,f,,jj,3,qa,3,t,3,t,2,u,2,1s,2,,7,8,,2,b,9,,19,3,3b,2,y,,3a,3,4,2,9,,6,3,63,2,2,,1m,,,7,,,,,2,8,6,a,2,,1c,h,1r,4,1c,7,,,5,,14,9,c,2,w,4,2,2,,3,1k,,,2,3,,,3,1m,8,2,2,48,3,,d,,7,4,,6,,3,2,5i,1m,,5,ek,,5f,x,2da,3,3x,,2o,w,fe,6,2x,2,n9w,4,,a,w,2,28,2,7k,,3,,4,,p,2,5,,47,2,q,i,d,,12,8,p,b,1a,3,1c,,2,4,2,2,13,,1v,6,2,2,2,2,c,,8,,1b,,1f,,,3,2,2,5,2,,,16,2,8,,6m,,2,,4,,fn4,,kh,g,g,g,a6,2,gt,,6a,,45,5,1ae,3,,2,5,4,14,3,4,,4l,2,fx,4,ar,2,49,b,4w,,1i,f,1k,3,1d,4,2,2,1x,3,10,5,,8,1q,,c,2,1g,9,a,4,2,,2n,3,2,,,2,6,,4g,,3,8,l,2,1l,2,,,,,m,,e,7,3,5,5f,8,2,3,,,n,,29,,2,6,,,2,,,2,,2,6j,,2,4,6,2,,2,r,2,2d,8,2,,,2,2y,,,,2,6,,,2t,3,2,4,,5,77,9,,2,6t,,a,2,,,4,,40,4,2,2,4,,w,a,14,6,2,4,8,,9,6,2,3,1a,d,,2,ba,7,,6,,,2a,m,2,7,,2,,2,3e,6,3,,,2,,7,,,20,2,3,,,,9n,2,f0b,5,1n,7,t4,,1r,4,29,,f5k,2,43q,,,3,4,5,8,8,2,7,u,4,44,3,1iz,1j,4,1e,8,,e,,m,5,,f,11s,7,,h,2,7,,2,,5,79,7,c5,4,15s,7,31,7,240,5,gx7k,2o,3k,6o".split(",").map(e=>e?parseInt(e,36):1);for(let t=0,i=0;t=0&&R(z(e,o));)i++,o-=2;if(i%2==0)break;t+=2}}}return t}function _(e,t,i){for(;t>0;){let o=q(e,t-2,i);if(o=56320&&e<57344}function W(e){return e>=55296&&e<56320}function H(e){return e<65536?1:2}class ${lineAt(e){if(e<0||e>this.length)throw new RangeError(`Invalid position ${e} in document of length ${this.length}`);return this.lineInner(e,!1,1,0)}line(e){if(e<1||e>this.lines)throw new RangeError(`Invalid line number ${e} in ${this.lines}-line document`);return this.lineInner(e,!0,1,0)}replace(e,t,i){[e,t]=Q(this,e,t);let o=[];return this.decompose(0,e,o,2),i.length&&i.decompose(0,i.length,o,3),this.decompose(t,this.length,o,1),j.from(o,this.length-(t-e)+i.length)}append(e){return this.replace(this.length,this.length,e)}slice(e,t=this.length){[e,t]=Q(this,e,t);let i=[];return this.decompose(e,t,i,0),j.from(i,t-e)}eq(e){if(e==this)return!0;if(e.length!=this.length||e.lines!=this.lines)return!1;let t=this.scanIdentical(e,1),i=this.length-this.scanIdentical(e,-1),o=new Z(this),n=new Z(e);for(let e=t,s=t;;){if(o.next(e),n.next(e),e=0,o.lineBreak!=n.lineBreak||o.done!=n.done||o.value!=n.value)return!1;if(s+=o.value.length,o.done||s>=i)return!0}}iter(e=1){return new Z(this,e)}iterRange(e,t=this.length){return new K(this,e,t)}iterLines(e,t){let i;if(null==e)i=this.iter();else{null==t&&(t=this.lines+1);let o=this.line(e).from;i=this.iterRange(o,Math.max(o,t==this.lines+1?this.length:t<=1?0:this.line(t-1).to))}return new J(i)}toString(){return this.sliceString(0)}toJSON(){let e=[];return this.flatten(e),e}constructor(){}static of(e){if(0==e.length)throw new RangeError("A document must have at least one line");return 1!=e.length||e[0]?e.length<=32?new U(e):j.from(U.split(e,[])):$.empty}}class U extends ${constructor(e,t=function(e){let t=-1;for(let i of e)t+=i.length+1;return t}(e)){super(),this.text=e,this.length=t}get lines(){return this.text.length}get children(){return null}lineInner(e,t,i,o){for(let n=0;;n++){let s=this.text[n],r=o+s.length;if((t?i:r)>=e)return new X(o,r,i,s);o=r+1,i++}}decompose(e,t,i,o){let n=e<=0&&t>=this.length?this:new U(G(this.text,e,t),Math.min(t,this.length)-Math.max(0,e));if(1&o){let e=i.pop(),t=Y(n.text,e.text.slice(),0,n.length);if(t.length<=32)i.push(new U(t,e.length+n.length));else{let e=t.length>>1;i.push(new U(t.slice(0,e)),new U(t.slice(e)))}}else i.push(n)}replace(e,t,i){if(!(i instanceof U))return super.replace(e,t,i);[e,t]=Q(this,e,t);let o=Y(this.text,Y(i.text,G(this.text,0,e)),t),n=this.length+i.length-(t-e);return o.length<=32?new U(o,n):j.from(U.split(o,[]),n)}sliceString(e,t=this.length,i="\n"){[e,t]=Q(this,e,t);let o="";for(let n=0,s=0;n<=t&&se&&s&&(o+=i),en&&(o+=r.slice(Math.max(0,e-n),t-n)),n=a+1}return o}flatten(e){for(let t of this.text)e.push(t)}scanIdentical(){return 0}static split(e,t){let i=[],o=-1;for(let n of e)i.push(n),o+=n.length+1,32==i.length&&(t.push(new U(i,o)),i=[],o=-1);return o>-1&&t.push(new U(i,o)),t}}class j extends ${constructor(e,t){super(),this.children=e,this.length=t,this.lines=0;for(let t of e)this.lines+=t.lines}lineInner(e,t,i,o){for(let n=0;;n++){let s=this.children[n],r=o+s.length,a=i+s.lines-1;if((t?a:r)>=e)return s.lineInner(e,t,i,o);o=r+1,i=a+1}}decompose(e,t,i,o){for(let n=0,s=0;s<=t&&n=s){let n=o&((s<=e?1:0)|(a>=t?2:0));s>=e&&a<=t&&!n?i.push(r):r.decompose(e-s,t-s,i,n)}s=a+1}}replace(e,t,i){if([e,t]=Q(this,e,t),i.lines=n&&t<=r){let a=s.replace(e-n,t-n,i),l=this.lines-s.lines+a.lines;if(a.lines>4&&a.lines>l>>6){let n=this.children.slice();return n[o]=a,new j(n,this.length-(t-e)+i.length)}return super.replace(n,r,a)}n=r+1}return super.replace(e,t,i)}sliceString(e,t=this.length,i="\n"){[e,t]=Q(this,e,t);let o="";for(let n=0,s=0;ne&&n&&(o+=i),es&&(o+=r.sliceString(e-s,t-s,i)),s=a+1}return o}flatten(e){for(let t of this.children)t.flatten(e)}scanIdentical(e,t){if(!(e instanceof j))return 0;let i=0,[o,n,s,r]=t>0?[0,0,this.children.length,e.children.length]:[this.children.length-1,e.children.length-1,-1,-1];for(;;o+=t,n+=t){if(o==s||n==r)return i;let a=this.children[o],l=e.children[n];if(a!=l)return i+a.scanIdentical(l,t);i+=a.length+1}}static from(e,t=e.reduce((e,t)=>e+t.length+1,-1)){let i=0;for(let t of e)i+=t.lines;if(i<32){let i=[];for(let t of e)t.flatten(i);return new U(i,t)}let o=Math.max(32,i>>5),n=o<<1,s=o>>1,r=[],a=0,l=-1,c=[];function d(e){let t;if(e.lines>n&&e instanceof j)for(let t of e.children)d(t);else e.lines>s&&(a>s||!a)?(h(),r.push(e)):e instanceof U&&a&&(t=c[c.length-1])instanceof U&&e.lines+t.lines<=32?(a+=e.lines,l+=e.length+1,c[c.length-1]=new U(t.text.concat(e.text),t.length+1+e.length)):(a+e.lines>o&&h(),a+=e.lines,l+=e.length+1,c.push(e))}function h(){0!=a&&(r.push(1==c.length?c[0]:j.from(c,l)),l=-1,a=c.length=0)}for(let t of e)d(t);return h(),1==r.length?r[0]:new j(r,t)}}function Y(e,t,i=0,o=1e9){for(let n=0,s=0,r=!0;s=i&&(l>o&&(a=a.slice(0,o-n)),n0?1:(e instanceof U?e.text.length:e.children.length)<<1]}nextInner(e,t){for(this.done=this.lineBreak=!1;;){let i=this.nodes.length-1,o=this.nodes[i],n=this.offsets[i],s=n>>1,r=o instanceof U?o.text.length:o.children.length;if(s==(t>0?r:0)){if(0==i)return this.done=!0,this.value="",this;t>0&&this.offsets[i-1]++,this.nodes.pop(),this.offsets.pop()}else if((1&n)==(t>0?0:1)){if(this.offsets[i]+=t,0==e)return this.lineBreak=!0,this.value="\n",this;e--}else if(o instanceof U){let n=o.text[s+(t<0?-1:0)];if(this.offsets[i]+=t,n.length>Math.max(0,e))return this.value=0==e?n:t>0?n.slice(e):n.slice(0,n.length-e),this;e-=n.length}else{let n=o.children[s+(t<0?-1:0)];e>n.length?(e-=n.length,this.offsets[i]+=t):(t<0&&this.offsets[i]--,this.nodes.push(n),this.offsets.push(t>0?1:(n instanceof U?n.text.length:n.children.length)<<1))}}}next(e=0){return e<0&&(this.nextInner(-e,-this.dir),e=this.value.length),this.nextInner(e,this.dir)}}class K{constructor(e,t,i){this.value="",this.done=!1,this.cursor=new Z(e,t>i?-1:1),this.pos=t>i?e.length:0,this.from=Math.min(t,i),this.to=Math.max(t,i)}nextInner(e,t){if(t<0?this.pos<=this.from:this.pos>=this.to)return this.value="",this.done=!0,this;e+=Math.max(0,t<0?this.pos-this.to:this.from-this.pos);let i=t<0?this.pos-this.from:this.to-this.pos;e>i&&(e=i),i-=e;let{value:o}=this.cursor.next(e);return this.pos+=(o.length+e)*t,this.value=o.length<=i?o:t<0?o.slice(o.length-i):o.slice(0,i),this.done=!this.value,this}next(e=0){return e<0?e=Math.max(e,this.from-this.pos):e>0&&(e=Math.min(e,this.to-this.pos)),this.nextInner(e,this.cursor.dir)}get lineBreak(){return this.cursor.lineBreak&&""!=this.value}}class J{constructor(e){this.inner=e,this.afterBreak=!0,this.value="",this.done=!1}next(e=0){let{done:t,lineBreak:i,value:o}=this.inner.next(e);return t&&this.afterBreak?(this.value="",this.afterBreak=!1):t?(this.done=!0,this.value=""):i?this.afterBreak?this.value="":(this.afterBreak=!0,this.next()):(this.value=o,this.afterBreak=!1),this}get lineBreak(){return!1}}"undefined"!=typeof Symbol&&($.prototype[Symbol.iterator]=function(){return this.iter()},Z.prototype[Symbol.iterator]=K.prototype[Symbol.iterator]=J.prototype[Symbol.iterator]=function(){return this});class X{constructor(e,t,i,o){this.from=e,this.to=t,this.number=i,this.text=o}get length(){return this.to-this.from}}function Q(e,t,i){return[t=Math.max(0,Math.min(e.length,t)),Math.max(t,Math.min(e.length,i))]}function ee(e,t,i=!0,o=!0){return F(e,t,i,o)}const te=/\r\n?|\n/;var ie=function(e){return e[e.Simple=0]="Simple",e[e.TrackDel=1]="TrackDel",e[e.TrackBefore=2]="TrackBefore",e[e.TrackAfter=3]="TrackAfter",e}(ie||(ie={}));class oe{constructor(e){this.sections=e}get length(){let e=0;for(let t=0;te)return n+(e-o);n+=r}else{if(i!=ie.Simple&&l>=e&&(i==ie.TrackDel&&oe||i==ie.TrackBefore&&oe))return null;if(l>e||l==e&&t<0&&!r)return e==o||t<0?n:n+a;n+=a}o=l}if(e>o)throw new RangeError(`Position ${e} is out of range for changeset of length ${o}`);return n}touchesRange(e,t=e){for(let i=0,o=0;i=0&&o<=t&&n>=e)return!(ot)||"cover";o=n}return!1}toString(){let e="";for(let t=0;t=0?":"+o:"")}return e}toJSON(){return this.sections}static fromJSON(e){if(!Array.isArray(e)||e.length%2||e.some(e=>"number"!=typeof e))throw new RangeError("Invalid JSON representation of ChangeDesc");return new oe(e)}static create(e){return new oe(e)}}class ne extends oe{constructor(e,t){super(e),this.inserted=t}apply(e){if(this.length!=e.length)throw new RangeError("Applying change set to a document with the wrong length");return ae(this,(t,i,o,n,s)=>e=e.replace(o,o+(i-t),s),!1),e}mapDesc(e,t=!1){return le(this,e,t,!0)}invert(e){let t=this.sections.slice(),i=[];for(let o=0,n=0;o=0){t[o]=r,t[o+1]=s;let a=o>>1;for(;i.length0&&re(i,t,n.text),n.forward(e),r+=e}let l=e[s++];for(;r>1].toJSON()))}return e}static of(e,t,i){let o=[],n=[],s=0,r=null;function a(e=!1){if(!e&&!o.length)return;sr||e<0||r>t)throw new RangeError(`Invalid change range ${e} to ${r} (in doc of length ${t})`);let d=c?"string"==typeof c?$.of(c.split(i||te)):c:$.empty,h=d.length;if(e==r&&0==h)return;es&&se(o,e-s,-1),se(o,r-e,h),re(n,o,d),s=r}}(e),a(!r),r}static empty(e){return new ne(e?[e,-1]:[],[])}static fromJSON(e){if(!Array.isArray(e))throw new RangeError("Invalid JSON representation of ChangeSet");let t=[],i=[];for(let o=0;ot&&"string"!=typeof e))throw new RangeError("Invalid JSON representation of ChangeSet");if(1==n.length)t.push(n[0],0);else{for(;i.length=0&&i<=0&&i==e[n+1]?e[n]+=t:n>=0&&0==t&&0==e[n]?e[n+1]+=i:o?(e[n]+=t,e[n+1]+=i):e.push(t,i)}function re(e,t,i){if(0==i.length)return;let o=t.length-2>>1;if(o>1])),!(i||r==e.sections.length||e.sections[r+1]<0);)a=e.sections[r++],l=e.sections[r++];t(n,c,s,d,h),n=c,s=d}}}function le(e,t,i,o=!1){let n=[],s=o?[]:null,r=new de(e),a=new de(t);for(let e=-1;;){if(r.done&&a.len||a.done&&r.len)throw new Error("Mismatched change set lengths");if(-1==r.ins&&-1==a.ins){let e=Math.min(r.len,a.len);se(n,e,-1),r.forward(e),a.forward(e)}else if(a.ins>=0&&(r.ins<0||e==r.i||0==r.off&&(a.len=0&&e=0)){if(r.done&&a.done)return s?ne.createSet(n,s):oe.create(n);throw new Error("Mismatched change set lengths")}{let t=0,i=r.len;for(;i;)if(-1==a.ins){let e=Math.min(i,a.len);t+=e,i-=e,a.forward(e)}else{if(!(0==a.ins&&a.lent||r.ins>=0&&r.len>t)&&(e||o.length>i),s.forward2(t),r.forward(t)}}else se(o,0,r.ins,e),n&&re(n,o,r.text),r.next()}}class de{constructor(e){this.set=e,this.i=0,this.next()}next(){let{sections:e}=this.set;this.i>1;return t>=e.length?$.empty:e[t]}textBit(e){let{inserted:t}=this.set,i=this.i-2>>1;return i>=t.length&&!e?$.empty:t[i].slice(this.off,null==e?void 0:this.off+e)}forward(e){e==this.len?this.next():(this.len-=e,this.off+=e)}forward2(e){-1==this.ins?this.forward(e):e==this.ins?this.next():(this.ins-=e,this.off+=e)}}class he{constructor(e,t,i){this.from=e,this.to=t,this.flags=i}get anchor(){return 32&this.flags?this.to:this.from}get head(){return 32&this.flags?this.from:this.to}get empty(){return this.from==this.to}get assoc(){return 8&this.flags?-1:16&this.flags?1:0}get bidiLevel(){let e=7&this.flags;return 7==e?null:e}get goalColumn(){let e=this.flags>>6;return 16777215==e?void 0:e}map(e,t=-1){let i,o;return this.empty?i=o=e.mapPos(this.from,t):(i=e.mapPos(this.from,1),o=e.mapPos(this.to,-1)),i==this.from&&o==this.to?this:new he(i,o,this.flags)}extend(e,t=e){if(e<=this.anchor&&t>=this.anchor)return ue.range(e,t);let i=Math.abs(e-this.anchor)>Math.abs(t-this.anchor)?e:t;return ue.range(this.anchor,i)}eq(e,t=!1){return!(this.anchor!=e.anchor||this.head!=e.head||this.goalColumn!=e.goalColumn||t&&this.empty&&this.assoc!=e.assoc)}toJSON(){return{anchor:this.anchor,head:this.head}}static fromJSON(e){if(!e||"number"!=typeof e.anchor||"number"!=typeof e.head)throw new RangeError("Invalid JSON representation for SelectionRange");return ue.range(e.anchor,e.head)}static create(e,t,i){return new he(e,t,i)}}class ue{constructor(e,t){this.ranges=e,this.mainIndex=t}map(e,t=-1){return e.empty?this:ue.create(this.ranges.map(i=>i.map(e,t)),this.mainIndex)}eq(e,t=!1){if(this.ranges.length!=e.ranges.length||this.mainIndex!=e.mainIndex)return!1;for(let i=0;ie.toJSON()),main:this.mainIndex}}static fromJSON(e){if(!e||!Array.isArray(e.ranges)||"number"!=typeof e.main||e.main>=e.ranges.length)throw new RangeError("Invalid JSON representation for EditorSelection");return new ue(e.ranges.map(e=>he.fromJSON(e)),e.main)}static single(e,t=e){return new ue([ue.range(e,t)],0)}static create(e,t=0){if(0==e.length)throw new RangeError("A selection needs at least one range");for(let i=0,o=0;oe?8:0)|n)}static normalized(e,t=0){let i=e[t];e.sort((e,t)=>e.from-t.from),t=e.indexOf(i);for(let i=1;io.head?ue.range(r,s):ue.range(s,r))}}return new ue(e,t)}}function pe(e,t){for(let i of e.ranges)if(i.to>t)throw new RangeError("Selection points outside of document")}let me=0;class ge{constructor(e,t,i,o,n){this.combine=e,this.compareInput=t,this.compare=i,this.isStatic=o,this.id=me++,this.default=e([]),this.extensions="function"==typeof n?n(this):n}get reader(){return this}static define(e={}){return new ge(e.combine||(e=>e),e.compareInput||((e,t)=>e===t),e.compare||(e.combine?(e,t)=>e===t:fe),!!e.static,e.enables)}of(e){return new be([],this,0,e)}compute(e,t){if(this.isStatic)throw new Error("Can't compute a static facet");return new be(e,this,1,t)}computeN(e,t){if(this.isStatic)throw new Error("Can't compute a static facet");return new be(e,this,2,t)}from(e,t){return t||(t=e=>e),this.compute([e],i=>t(i.field(e)))}}function fe(e,t){return e==t||e.length==t.length&&e.every((e,i)=>e===t[i])}class be{constructor(e,t,i,o){this.dependencies=e,this.facet=t,this.type=i,this.value=o,this.id=me++}dynamicSlot(e){var t;let i=this.value,o=this.facet.compareInput,n=this.id,s=e[n]>>1,r=2==this.type,a=!1,l=!1,c=[];for(let i of this.dependencies)"doc"==i?a=!0:"selection"==i?l=!0:1&(null!==(t=e[i.id])&&void 0!==t?t:1)||c.push(e[i.id]);return{create:e=>(e.values[s]=i(e),1),update(e,t){if(a&&t.docChanged||l&&(t.docChanged||t.selection)||we(e,c)){let t=i(e);if(r?!ye(t,e.values[s],o):!o(t,e.values[s]))return e.values[s]=t,1}return 0},reconfigure:(e,t)=>{let a,l=t.config.address[n];if(null!=l){let n=Pe(t,l);if(this.dependencies.every(i=>i instanceof ge?t.facet(i)===e.facet(i):!(i instanceof xe)||t.field(i,!1)==e.field(i,!1))||(r?ye(a=i(e),n,o):o(a=i(e),n)))return e.values[s]=n,0}else a=i(e);return e.values[s]=a,1}}}}function ye(e,t,i){if(e.length!=t.length)return!1;for(let o=0;oe[t.id]),n=i.map(e=>e.type),s=o.filter(e=>!(1&e)),r=e[t.id]>>1;function a(e){let i=[];for(let t=0;te===t),e);return e.provide&&(t.provides=e.provide(t)),t}create(e){let t=e.facet(Ce).find(e=>e.field==this);return((null==t?void 0:t.create)||this.createF)(e)}slot(e){let t=e[this.id]>>1;return{create:e=>(e.values[t]=this.create(e),1),update:(e,i)=>{let o=e.values[t],n=this.updateF(o,i);return this.compareF(o,n)?0:(e.values[t]=n,1)},reconfigure:(e,i)=>{let o,n=e.facet(Ce),s=i.facet(Ce);return(o=n.find(e=>e.field==this))&&o!=s.find(e=>e.field==this)?(e.values[t]=o.create(e),1):null!=i.config.address[this.id]?(e.values[t]=i.field(this),0):(e.values[t]=this.create(e),1)}}}init(e){return[this,Ce.of({field:this,create:e})]}get extension(){return this}}const ke=4,Se=3,Te=2,Ee=1;function Me(e){return t=>new Ie(t,e)}const Ae={highest:Me(0),high:Me(Ee),default:Me(Te),low:Me(Se),lowest:Me(ke)};class Ie{constructor(e,t){this.inner=e,this.prec=t}}class De{of(e){return new Oe(this,e)}reconfigure(e){return De.reconfigure.of({compartment:this,extension:e})}get(e){return e.config.compartments.get(this)}}class Oe{constructor(e,t){this.compartment=e,this.inner=t}}class Be{constructor(e,t,i,o,n,s){for(this.base=e,this.compartments=t,this.dynamicSlots=i,this.address=o,this.staticValues=n,this.facets=s,this.statusTemplate=[];this.statusTemplate.length>1]}static resolve(e,t,i){let o=[],n=Object.create(null),s=new Map;for(let i of function(e,t,i){let o=[[],[],[],[],[]],n=new Map;function s(e,r){let a=n.get(e);if(null!=a){if(a<=r)return;let t=o[a].indexOf(e);t>-1&&o[a].splice(t,1),e instanceof Oe&&i.delete(e.compartment)}if(n.set(e,r),Array.isArray(e))for(let t of e)s(t,r);else if(e instanceof Oe){if(i.has(e.compartment))throw new RangeError("Duplicate use of compartment in extensions");let o=t.get(e.compartment)||e.inner;i.set(e.compartment,o),s(o,r)}else if(e instanceof Ie)s(e.inner,e.prec);else if(e instanceof xe)o[r].push(e),e.provides&&s(e.provides,r);else if(e instanceof be)o[r].push(e),e.facet.extensions&&s(e.facet.extensions,Te);else{let t=e.extension;if(!t)throw new Error(`Unrecognized extension value in extension set (${e}). This sometimes happens because multiple instances of @codemirror/state are loaded, breaking instanceof checks.`);s(t,r)}}return s(e,Te),o.reduce((e,t)=>e.concat(t))}(e,t,s))i instanceof xe?o.push(i):(n[i.facet.id]||(n[i.facet.id]=[])).push(i);let r=Object.create(null),a=[],l=[];for(let e of o)r[e.id]=l.length<<1,l.push(t=>e.slot(t));let c=null==i?void 0:i.config.facets;for(let e in n){let t=n[e],o=t[0].facet,s=c&&c[e]||[];if(t.every(e=>0==e.type))if(r[o.id]=a.length<<1|1,fe(s,t))a.push(i.facet(o));else{let e=o.combine(t.map(e=>e.value));a.push(i&&o.compare(e,i.facet(o))?i.facet(o):e)}else{for(let e of t)0==e.type?(r[e.id]=a.length<<1|1,a.push(e.value)):(r[e.id]=l.length<<1,l.push(t=>e.dynamicSlot(t)));r[o.id]=l.length<<1,l.push(e=>ve(e,o,t))}}let d=l.map(e=>e(r));return new Be(e,s,d,r,a,n)}}function Le(e,t){if(1&t)return 2;let i=t>>1,o=e.status[i];if(4==o)throw new Error("Cyclic dependency between fields and/or facets");if(2&o)return o;e.status[i]=4;let n=e.computeSlot(e,e.config.dynamicSlots[i]);return e.status[i]=2|n}function Pe(e,t){return 1&t?e.config.staticValues[t>>1]:e.values[t>>1]}const Ne=ge.define(),Re=ge.define({combine:e=>e.some(e=>e),static:!0}),Fe=ge.define({combine:e=>e.length?e[0]:void 0,static:!0}),qe=ge.define(),_e=ge.define(),ze=ge.define(),Ve=ge.define({combine:e=>!!e.length&&e[0]});class We{constructor(e,t){this.type=e,this.value=t}static define(){return new He}}class He{of(e){return new We(this,e)}}class $e{constructor(e){this.map=e}of(e){return new Ue(this,e)}}class Ue{constructor(e,t){this.type=e,this.value=t}map(e){let t=this.type.map(this.value,e);return void 0===t?void 0:t==this.value?this:new Ue(this.type,t)}is(e){return this.type==e}static define(e={}){return new $e(e.map||(e=>e))}static mapEffects(e,t){if(!e.length)return e;let i=[];for(let o of e){let e=o.map(t);e&&i.push(e)}return i}}Ue.reconfigure=Ue.define(),Ue.appendConfig=Ue.define();class je{constructor(e,t,i,o,n,s){this.startState=e,this.changes=t,this.selection=i,this.effects=o,this.annotations=n,this.scrollIntoView=s,this._doc=null,this._state=null,i&&pe(i,t.newLength),n.some(e=>e.type==je.time)||(this.annotations=n.concat(je.time.of(Date.now())))}static create(e,t,i,o,n,s){return new je(e,t,i,o,n,s)}get newDoc(){return this._doc||(this._doc=this.changes.apply(this.startState.doc))}get newSelection(){return this.selection||this.startState.selection.map(this.changes)}get state(){return this._state||this.startState.applyTransaction(this),this._state}annotation(e){for(let t of this.annotations)if(t.type==e)return t.value}get docChanged(){return!this.changes.empty}get reconfigured(){return this.startState.config!=this.state.config}isUserEvent(e){let t=this.annotation(je.userEvent);return!(!t||!(t==e||t.length>e.length&&t.slice(0,e.length)==e&&"."==t[e.length]))}}function Ye(e,t){let i=[];for(let o=0,n=0;;){let s,r;if(o=e[o]))s=e[o++],r=e[o++];else{if(!(n=0;n--){let s=i[n](e);s&&Object.keys(s).length&&(o=Ge(o,Ze(t,s,e.changes.newLength),!0))}return o==e?e:je.create(t,e.changes,e.selection,o.effects,o.annotations,o.scrollIntoView)}(i?function(e){let t=e.startState,i=!0;for(let o of t.facet(qe)){let t=o(e);if(!1===t){i=!1;break}Array.isArray(t)&&(i=!0===i?t:Ye(i,t))}if(!0!==i){let o,n;if(!1===i)n=e.changes.invertedDesc,o=ne.empty(t.doc.length);else{let t=e.changes.filter(i);o=t.changes,n=t.filtered.mapDesc(t.changes).invertedDesc}e=je.create(t,o,e.selection&&e.selection.map(n),Ue.mapEffects(e.effects,n),e.annotations,e.scrollIntoView)}let o=t.facet(_e);for(let i=o.length-1;i>=0;i--){let n=o[i](e);e=n instanceof je?n:Array.isArray(n)&&1==n.length&&n[0]instanceof je?n[0]:Ke(t,Xe(n),!1)}return e}(n):n)}je.time=We.define(),je.userEvent=We.define(),je.addToHistory=We.define(),je.remote=We.define();const Je=[];function Xe(e){return null==e?Je:Array.isArray(e)?e:[e]}var Qe=function(e){return e[e.Word=0]="Word",e[e.Space=1]="Space",e[e.Other=2]="Other",e}(Qe||(Qe={}));const et=/[\u00df\u0587\u0590-\u05f4\u0600-\u06ff\u3040-\u309f\u30a0-\u30ff\u3400-\u4db5\u4e00-\u9fcc\uac00-\ud7af]/;let tt;try{tt=new RegExp("[\\p{Alphabetic}\\p{Number}_]","u")}catch(e){}function it(e){return t=>{if(!/\S/.test(t))return Qe.Space;if(function(e){if(tt)return tt.test(e);for(let t=0;t"€"&&(i.toUpperCase()!=i.toLowerCase()||et.test(i)))return!0}return!1}(t))return Qe.Word;for(let i=0;i-1)return Qe.Word;return Qe.Other}}class ot{constructor(e,t,i,o,n,s){this.config=e,this.doc=t,this.selection=i,this.values=o,this.status=e.statusTemplate.slice(),this.computeSlot=n,s&&(s._state=this);for(let e=0;en.set(t,e)),i=null),n.set(t.value.compartment,t.value.extension)):t.is(Ue.reconfigure)?(i=null,o=t.value):t.is(Ue.appendConfig)&&(i=null,o=Xe(o).concat(t.value));if(i)t=e.startState.values.slice();else{i=Be.resolve(o,n,this),t=new ot(i,this.doc,this.selection,i.dynamicSlots.map(()=>null),(e,t)=>t.reconfigure(e,this),null).values}let s=e.startState.facet(Re)?e.newSelection:e.newSelection.asSingle();new ot(i,e.newDoc,s,t,(t,i)=>i.update(t,e),e)}replaceSelection(e){return"string"==typeof e&&(e=this.toText(e)),this.changeByRange(t=>({changes:{from:t.from,to:t.to,insert:e},range:ue.cursor(t.from+e.length)}))}changeByRange(e){let t=this.selection,i=e(t.ranges[0]),o=this.changes(i.changes),n=[i.range],s=Xe(i.effects);for(let i=1;in.spec.fromJSON(s,e)))}return ot.create({doc:e.doc,selection:ue.fromJSON(e.selection),extensions:t.extensions?o.concat([t.extensions]):o})}static create(e={}){let t=Be.resolve(e.extensions||[],new Map),i=e.doc instanceof $?e.doc:$.of((e.doc||"").split(t.staticFacet(ot.lineSeparator)||te)),o=e.selection?e.selection instanceof ue?e.selection:ue.single(e.selection.anchor,e.selection.head):ue.single(0);return pe(o,i.length),t.staticFacet(Re)||(o=o.asSingle()),new ot(t,i,o,t.dynamicSlots.map(()=>null),(e,t)=>t.create(e),null)}get tabSize(){return this.facet(ot.tabSize)}get lineBreak(){return this.facet(ot.lineSeparator)||"\n"}get readOnly(){return this.facet(Ve)}phrase(e,...t){for(let t of this.facet(ot.phrases))if(Object.prototype.hasOwnProperty.call(t,e)){e=t[e];break}return t.length&&(e=e.replace(/\$(\$|\d*)/g,(e,i)=>{if("$"==i)return"$";let o=+(i||1);return!o||o>t.length?e:t[o-1]})),e}languageDataAt(e,t,i=-1){let o=[];for(let n of this.facet(Ne))for(let s of n(this,t,i))Object.prototype.hasOwnProperty.call(s,e)&&o.push(s[e]);return o}charCategorizer(e){let t=this.languageDataAt("wordChars",e);return it(t.length?t[0]:"")}wordAt(e){let{text:t,from:i,length:o}=this.doc.lineAt(e),n=this.charCategorizer(e),s=e-i,r=e-i;for(;s>0;){let e=ee(t,s,!1);if(n(t.slice(e,s))!=Qe.Word)break;s=e}for(;re.length?e[0]:4}),ot.lineSeparator=Fe,ot.readOnly=Ve,ot.phrases=ge.define({compare(e,t){let i=Object.keys(e),o=Object.keys(t);return i.length==o.length&&i.every(i=>e[i]==t[i])}}),ot.languageData=Ne,ot.changeFilter=qe,ot.transactionFilter=_e,ot.transactionExtender=ze,De.reconfigure=Ue.define();class nt{eq(e){return this==e}range(e,t=e){return rt.create(e,t,this)}}function st(e,t){return e==t||e.constructor==t.constructor&&e.eq(t)}nt.prototype.startSide=nt.prototype.endSide=0,nt.prototype.point=!1,nt.prototype.mapMode=ie.TrackDel;class rt{constructor(e,t,i){this.from=e,this.to=t,this.value=i}static create(e,t,i){return new rt(e,t,i)}}function at(e,t){return e.from-t.from||e.value.startSide-t.value.startSide}class lt{constructor(e,t,i,o){this.from=e,this.to=t,this.value=i,this.maxPoint=o}get length(){return this.to[this.to.length-1]}findIndex(e,t,i,o=0){let n=i?this.to:this.from;for(let s=o,r=n.length;;){if(s==r)return s;let o=s+r>>1,a=n[o]-e||(i?this.value[o].endSide:this.value[o].startSide)-t;if(o==s)return a>=0?s:r;a>=0?r=o:s=o+1}}between(e,t,i,o){for(let n=this.findIndex(t,-1e9,!0),s=this.findIndex(i,1e9,!1,n);nc||l==c&&d.startSide>0&&d.endSide<=0)continue;(c-l||d.endSide-d.startSide)<0||(s<0&&(s=l),d.point&&(r=Math.max(r,c-l)),i.push(d),o.push(l-s),n.push(c-s))}return{mapped:i.length?new lt(o,n,i,r):null,pos:s}}}class ct{constructor(e,t,i,o){this.chunkPos=e,this.chunk=t,this.nextLayer=i,this.maxPoint=o}static create(e,t,i,o){return new ct(e,t,i,o)}get length(){let e=this.chunk.length-1;return e<0?0:Math.max(this.chunkEnd(e),this.nextLayer.length)}get size(){if(this.isEmpty)return 0;let e=this.nextLayer.size;for(let t of this.chunk)e+=t.value.length;return e}chunkEnd(e){return this.chunkPos[e]+this.chunk[e].length}update(e){let{add:t=[],sort:i=!1,filterFrom:o=0,filterTo:n=this.length}=e,s=e.filter;if(0==t.length&&!s)return this;if(i&&(t=t.slice().sort(at)),this.isEmpty)return t.length?ct.of(t):this;let r=new ut(this,null,-1).goto(0),a=0,l=[],c=new dt;for(;r.value||a=0){let e=t[a++];c.addInner(e.from,e.to,e.value)||l.push(e)}else 1==r.rangeIndex&&r.chunkIndexthis.chunkEnd(r.chunkIndex)||nr.to||n=n&&e<=n+s.length&&!1===s.between(n,e-n,t-n,i))return}this.nextLayer.between(e,t,i)}}iter(e=0){return pt.from([this]).goto(e)}get isEmpty(){return this.nextLayer==this}static iter(e,t=0){return pt.from(e).goto(t)}static compare(e,t,i,o,n=-1){let s=e.filter(e=>e.maxPoint>0||!e.isEmpty&&e.maxPoint>=n),r=t.filter(e=>e.maxPoint>0||!e.isEmpty&&e.maxPoint>=n),a=ht(s,r,i),l=new gt(s,a,n),c=new gt(r,a,n);i.iterGaps((e,t,i)=>ft(l,e,c,t,i,o)),i.empty&&0==i.length&&ft(l,0,c,0,0,o)}static eq(e,t,i=0,o){null==o&&(o=999999999);let n=e.filter(e=>!e.isEmpty&&t.indexOf(e)<0),s=t.filter(t=>!t.isEmpty&&e.indexOf(t)<0);if(n.length!=s.length)return!1;if(!n.length)return!0;let r=ht(n,s),a=new gt(n,r,0).goto(i),l=new gt(s,r,0).goto(i);for(;;){if(a.to!=l.to||!bt(a.active,l.active)||a.point&&(!l.point||!st(a.point,l.point)))return!1;if(a.to>o)return!0;a.next(),l.next()}}static spans(e,t,i,o,n=-1){let s=new gt(e,null,n).goto(t),r=t,a=s.openStart;for(;;){let e=Math.min(s.to,i);if(s.point){let i=s.activeForPoint(s.to),n=s.pointFromr&&(o.span(r,e,s.active,a),a=s.openEnd(e));if(s.to>i)return a+(s.point&&s.to>i?1:0);r=s.to,s.next()}}static of(e,t=!1){let i=new dt;for(let o of e instanceof rt?[e]:t?function(e){if(e.length>1)for(let t=e[0],i=1;i0)return e.slice().sort(at);t=o}return e}(e):e)i.add(o.from,o.to,o.value);return i.finish()}static join(e){if(!e.length)return ct.empty;let t=e[e.length-1];for(let i=e.length-2;i>=0;i--)for(let o=e[i];o!=ct.empty;o=o.nextLayer)t=new ct(o.chunkPos,o.chunk,t,Math.max(o.maxPoint,t.maxPoint));return t}}ct.empty=new ct([],[],null,-1),ct.empty.nextLayer=ct.empty;class dt{finishChunk(e){this.chunks.push(new lt(this.from,this.to,this.value,this.maxPoint)),this.chunkPos.push(this.chunkStart),this.chunkStart=-1,this.setMaxPoint=Math.max(this.setMaxPoint,this.maxPoint),this.maxPoint=-1,e&&(this.from=[],this.to=[],this.value=[])}constructor(){this.chunks=[],this.chunkPos=[],this.chunkStart=-1,this.last=null,this.lastFrom=-1e9,this.lastTo=-1e9,this.from=[],this.to=[],this.value=[],this.maxPoint=-1,this.setMaxPoint=-1,this.nextLayer=null}add(e,t,i){this.addInner(e,t,i)||(this.nextLayer||(this.nextLayer=new dt)).add(e,t,i)}addInner(e,t,i){let o=e-this.lastTo||i.startSide-this.last.endSide;if(o<=0&&(e-this.lastFrom||i.startSide-this.last.startSide)<0)throw new Error("Ranges must be added sorted by `from` position and `startSide`");return!(o<0)&&(250==this.from.length&&this.finishChunk(!0),this.chunkStart<0&&(this.chunkStart=e),this.from.push(e-this.chunkStart),this.to.push(t-this.chunkStart),this.last=i,this.lastFrom=e,this.lastTo=t,this.value.push(i),i.point&&(this.maxPoint=Math.max(this.maxPoint,t-e)),!0)}addChunk(e,t){if((e-this.lastTo||t.value[0].startSide-this.last.endSide)<0)return!1;this.from.length&&this.finishChunk(!0),this.setMaxPoint=Math.max(this.setMaxPoint,t.maxPoint),this.chunks.push(t),this.chunkPos.push(e);let i=t.value.length-1;return this.last=t.value[i],this.lastFrom=t.from[i]+e,this.lastTo=t.to[i]+e,!0}finish(){return this.finishInner(ct.empty)}finishInner(e){if(this.from.length&&this.finishChunk(!1),0==this.chunks.length)return e;let t=ct.create(this.chunkPos,this.chunks,this.nextLayer?this.nextLayer.finishInner(e):e,this.setMaxPoint);return this.from=null,t}}function ht(e,t,i){let o=new Map;for(let t of e)for(let e=0;e=this.minPoint)break}}}setRangeIndex(e){if(e==this.layer.chunk[this.chunkIndex].value.length){if(this.chunkIndex++,this.skip)for(;this.chunkIndex=i&&o.push(new ut(s,t,i,n));return 1==o.length?o[0]:new pt(o)}get startSide(){return this.value?this.value.startSide:0}goto(e,t=-1e9){for(let i of this.heap)i.goto(e,t);for(let e=this.heap.length>>1;e>=0;e--)mt(this.heap,e);return this.next(),this}forward(e,t){for(let i of this.heap)i.forward(e,t);for(let e=this.heap.length>>1;e>=0;e--)mt(this.heap,e);(this.to-e||this.value.endSide-t)<0&&this.next()}next(){if(0==this.heap.length)this.from=this.to=1e9,this.value=null,this.rank=-1;else{let e=this.heap[0];this.from=e.from,this.to=e.to,this.value=e.value,this.rank=e.rank,e.value&&e.next(),mt(this.heap,0)}}}function mt(e,t){for(let i=e[t];;){let o=1+(t<<1);if(o>=e.length)break;let n=e[o];if(o+1=0&&(n=e[o+1],o++),i.compare(n)<0)break;e[o]=i,e[t]=n,t=o}}class gt{constructor(e,t,i){this.minPoint=i,this.active=[],this.activeTo=[],this.activeRank=[],this.minActive=-1,this.point=null,this.pointFrom=0,this.pointRank=0,this.to=-1e9,this.endSide=0,this.openStart=-1,this.cursor=pt.from(e,t,i)}goto(e,t=-1e9){return this.cursor.goto(e,t),this.active.length=this.activeTo.length=this.activeRank.length=0,this.minActive=-1,this.to=e,this.endSide=t,this.openStart=-1,this.next(),this}forward(e,t){for(;this.minActive>-1&&(this.activeTo[this.minActive]-e||this.active[this.minActive].endSide-t)<0;)this.removeActive(this.minActive);this.cursor.forward(e,t)}removeActive(e){yt(this.active,e),yt(this.activeTo,e),yt(this.activeRank,e),this.minActive=vt(this.active,this.activeTo)}addActive(e){let t=0,{value:i,to:o,rank:n}=this.cursor;for(;t0;)t++;wt(this.active,t,i),wt(this.activeTo,t,o),wt(this.activeRank,t,n),e&&wt(e,t,this.cursor.from),this.minActive=vt(this.active,this.activeTo)}next(){let e=this.to,t=this.point;this.point=null;let i=this.openStart<0?[]:null;for(;;){let o=this.minActive;if(o>-1&&(this.activeTo[o]-this.cursor.from||this.active[o].endSide-this.cursor.startSide)<0){if(this.activeTo[o]>e){this.to=this.activeTo[o],this.endSide=this.active[o].endSide;break}this.removeActive(o),i&&yt(i,o)}else{if(!this.cursor.value){this.to=this.endSide=1e9;break}if(this.cursor.from>e){this.to=this.cursor.from,this.endSide=this.cursor.startSide;break}{let e=this.cursor.value;if(e.point){if(!(t&&this.cursor.to==this.to&&this.cursor.from=0&&i[t]=0&&!(this.activeRank[i]e||this.activeTo[i]==e&&this.active[i].endSide>=this.point.endSide)&&t.push(this.active[i]);return t.reverse()}openEnd(e){let t=0;for(let i=this.activeTo.length-1;i>=0&&this.activeTo[i]>e;i--)t++;return t}}function ft(e,t,i,o,n,s){e.goto(t),i.goto(o);let r=o+n,a=o,l=o-t,c=!!s.boundChange;for(let t=!1;;){let o=e.to+l-i.to,n=o||e.endSide-i.endSide,d=n<0?e.to+l:i.to,h=Math.min(d,r);if(e.point||i.point?(e.point&&i.point&&st(e.point,i.point)&&bt(e.activeForPoint(e.to),i.activeForPoint(i.to))||s.comparePoint(a,h,e.point,i.point),t=!1):(t&&s.boundChange(a),h>a&&!bt(e.active,i.active)&&s.compareRange(a,h,e.active,i.active),c&&hr)break;a=d,n<=0&&e.next(),n>=0&&i.next()}}function bt(e,t){if(e.length!=t.length)return!1;for(let i=0;i=t;i--)e[i+1]=e[i];e[t]=i}function vt(e,t){let i=-1,o=1e9;for(let n=0;ne.map(e=>t.replace(/&/,e))).reduce((e,t)=>e.concat(t)),r,s);else if(r&&"object"==typeof r){if(!l)throw new RangeError("The value of a property ("+i+") should be a primitive value.");n(o(i),r,a,c)}else null!=r&&a.push(i.replace(/_.*/,"").replace(/[A-Z]/g,e=>"-"+e.toLowerCase())+": "+r+";")}(a.length||c)&&s.push((!i||l||r?e:e.map(i)).join(", ")+" {"+a.join(" ")+"}")}for(let t in e)n(o(t),e[t],this.rules)}getRules(){return this.rules.join("\n")}static newName(){let e=kt[Ct]||1;return kt[Ct]=e+1,"ͼ"+e.toString(36)}static mount(e,t,i){let o=e[xt],n=i&&i.nonce;o?n&&o.setNonce(n):o=new Et(e,n),o.mount(Array.isArray(t)?t:[t],e)}}let Tt=new Map;class Et{constructor(e,t){let i=e.ownerDocument||e,o=i.defaultView;if(!e.head&&e.adoptedStyleSheets&&o.CSSStyleSheet){let t=Tt.get(i);if(t)return e[xt]=t;this.sheet=new o.CSSStyleSheet,Tt.set(i,this)}else this.styleTag=i.createElement("style"),t&&this.styleTag.setAttribute("nonce",t);this.modules=[],e[xt]=this}mount(e,t){let i=this.sheet,o=0,n=0;for(let t=0;t-1&&(this.modules.splice(r,1),n--,r=-1),-1==r){if(this.modules.splice(n++,0,s),i)for(let e=0;e",191:"?",192:"~",219:"{",220:"|",221:"}",222:'"'};"undefined"!=typeof navigator&&/Mac/.test(navigator.platform),"undefined"!=typeof navigator&&/MSIE \d|Trident\/(?:[7-9]|\d{2,})\..*rv:(\d+)/.exec(navigator.userAgent);for(var It=0;It<10;It++)Mt[48+It]=Mt[96+It]=String(It);for(It=1;It<=24;It++)Mt[It+111]="F"+It;for(It=65;It<=90;It++)Mt[It]=String.fromCharCode(It+32),At[It]=String.fromCharCode(It);for(var Dt in Mt)At.hasOwnProperty(Dt)||(At[Dt]=Mt[Dt]);let Ot="undefined"!=typeof navigator?navigator:{userAgent:"",vendor:"",platform:""},Bt="undefined"!=typeof document?document:{documentElement:{style:{}}};const Lt=/Edge\/(\d+)/.exec(Ot.userAgent),Pt=/MSIE \d/.test(Ot.userAgent),Nt=/Trident\/(?:[7-9]|\d{2,})\..*rv:(\d+)/.exec(Ot.userAgent),Rt=!!(Pt||Nt||Lt),Ft=!Rt&&/gecko\/(\d+)/i.test(Ot.userAgent),qt=!Rt&&/Chrome\/(\d+)/.exec(Ot.userAgent),_t="webkitFontSmoothing"in Bt.documentElement.style,zt=!Rt&&/Apple Computer/.test(Ot.vendor),Vt=zt&&(/Mobile\/\w+/.test(Ot.userAgent)||Ot.maxTouchPoints>2);var Wt={mac:Vt||/Mac/.test(Ot.platform),windows:/Win/.test(Ot.platform),linux:/Linux|X11/.test(Ot.platform),ie:Rt,ie_version:Pt?Bt.documentMode||6:Nt?+Nt[1]:Lt?+Lt[1]:0,gecko:Ft,gecko_version:Ft?+(/Firefox\/(\d+)/.exec(Ot.userAgent)||[0,0])[1]:0,chrome:!!qt,chrome_version:qt?+qt[1]:0,ios:Vt,android:/Android\b/.test(Ot.userAgent),webkit:_t,webkit_version:_t?+(/\bAppleWebKit\/(\d+)/.exec(Ot.userAgent)||[0,0])[1]:0,safari:zt,safari_version:zt?+(/\bVersion\/(\d+(\.\d+)?)/.exec(Ot.userAgent)||[0,0])[1]:0,tabSize:null!=Bt.documentElement.style.tabSize?"tab-size":"-moz-tab-size"};function Ht(e,t){for(let i in e)"class"==i&&t.class?t.class+=" "+e.class:"style"==i&&t.style?t.style+=";"+e.style:t[i]=e[i];return t}const $t=Object.create(null);function Ut(e,t,i){if(e==t)return!0;e||(e=$t),t||(t=$t);let o=Object.keys(e),n=Object.keys(t);if(o.length-(i&&o.indexOf(i)>-1?1:0)!=n.length-(i&&n.indexOf(i)>-1?1:0))return!1;for(let s of o)if(s!=i&&(-1==n.indexOf(s)||e[s]!==t[s]))return!1;return!0}function jt(e,t,i){let o=!1;if(t)for(let n in t)i&&n in i||(o=!0,"style"==n?e.style.cssText="":e.removeAttribute(n));if(i)for(let n in i)t&&t[n]==i[n]||(o=!0,"style"==n?e.style.cssText=i[n]:e.setAttribute(n,i[n]));return o}function Yt(e){let t=Object.create(null);for(let i=0;i0?3e8:-4e8:t>0?1e8:-1e8,new Qt(e,t,t,i,e.widget||null,!1)}static replace(e){let t,i,o=!!e.block;if(e.isBlockGap)t=-5e8,i=4e8;else{let{start:n,end:s}=ei(e,o);t=(n?o?-3e8:-1:5e8)-1,i=1+(s?o?2e8:1:-6e8)}return new Qt(e,t,i,o,e.widget||null,!0)}static line(e){return new Xt(e)}static set(e,t=!1){return ct.of(e,t)}hasHeight(){return!!this.widget&&this.widget.estimatedHeight>-1}}Kt.none=ct.empty;class Jt extends Kt{constructor(e){let{start:t,end:i}=ei(e);super(t?-1:5e8,i?1:-6e8,null,e),this.tagName=e.tagName||"span",this.attrs=e.class&&e.attributes?Ht(e.attributes,{class:e.class}):e.class?{class:e.class}:e.attributes||$t}eq(e){return this==e||e instanceof Jt&&this.tagName==e.tagName&&Ut(this.attrs,e.attrs)}range(e,t=e){if(e>=t)throw new RangeError("Mark decorations may not be empty");return super.range(e,t)}}Jt.prototype.point=!1;class Xt extends Kt{constructor(e){super(-2e8,-2e8,null,e)}eq(e){return e instanceof Xt&&this.spec.class==e.spec.class&&Ut(this.spec.attributes,e.spec.attributes)}range(e,t=e){if(t!=e)throw new RangeError("Line decoration ranges must be zero-length");return super.range(e,t)}}Xt.prototype.mapMode=ie.TrackBefore,Xt.prototype.point=!0;class Qt extends Kt{constructor(e,t,i,o,n,s){super(t,i,n,e),this.block=o,this.isReplace=s,this.mapMode=o?t<=0?ie.TrackBefore:ie.TrackAfter:ie.TrackDel}get type(){return this.startSide!=this.endSide?Zt.WidgetRange:this.startSide<=0?Zt.WidgetBefore:Zt.WidgetAfter}get heightRelevant(){return this.block||!!this.widget&&(this.widget.estimatedHeight>=5||this.widget.lineBreaks>0)}eq(e){return e instanceof Qt&&(t=this.widget,i=e.widget,t==i||!!(t&&i&&t.compare(i)))&&this.block==e.block&&this.startSide==e.startSide&&this.endSide==e.endSide;var t,i}range(e,t=e){if(this.isReplace&&(e>t||e==t&&this.startSide>0&&this.endSide<=0))throw new RangeError("Invalid range for replacement decoration");if(!this.isReplace&&t!=e)throw new RangeError("Widget decorations can only have zero-length ranges");return super.range(e,t)}}function ei(e,t=!1){let{inclusiveStart:i,inclusiveEnd:o}=e;return null==i&&(i=e.inclusive),null==o&&(o=e.inclusive),{start:null!=i?i:t,end:null!=o?o:t}}function ti(e,t,i,o=0){let n=i.length-1;n>=0&&i[n]+o>=e?i[n]=Math.max(i[n],t):i.push(e,t)}Qt.prototype.point=!0;class ii extends nt{constructor(e,t){super(),this.tagName=e,this.attributes=t}eq(e){return e==this||e instanceof ii&&this.tagName==e.tagName&&Ut(this.attributes,e.attributes)}static create(e){return new ii(e.tagName,e.attributes||$t)}static set(e,t=!1){return ct.of(e,t)}}function oi(e){let t;return t=11==e.nodeType?e.getSelection?e:e.ownerDocument:e,t.getSelection()}function ni(e,t){return!!t&&(e==t||e.contains(1!=t.nodeType?t.parentNode:t))}function si(e,t){if(!t.anchorNode)return!1;try{return ni(e,t.anchorNode)}catch(e){return!1}}function ri(e){return 3==e.nodeType?wi(e,0,e.nodeValue.length).getClientRects():1==e.nodeType?e.getClientRects():[]}function ai(e,t,i,o){return!!i&&(di(e,t,i,o,-1)||di(e,t,i,o,1))}function li(e){for(var t=0;;t++)if(!(e=e.previousSibling))return t}function ci(e){return 1==e.nodeType&&/^(DIV|P|LI|UL|OL|BLOCKQUOTE|DD|DT|H\d|SECTION|PRE)$/.test(e.nodeName)}function di(e,t,i,o,n){for(;;){if(e==i&&t==o)return!0;if(t==(n<0?0:hi(e))){if("DIV"==e.nodeName)return!1;let i=e.parentNode;if(!i||1!=i.nodeType)return!1;t=li(e)+(n<0?0:1),e=i}else{if(1!=e.nodeType)return!1;if(1==(e=e.childNodes[t+(n<0?-1:0)]).nodeType&&"false"==e.contentEditable)return!1;t=n<0?hi(e):0}}}function hi(e){return 3==e.nodeType?e.nodeValue.length:e.childNodes.length}function ui(e,t){let i=t?e.left:e.right;return{left:i,right:i,top:e.top,bottom:e.bottom}}function pi(e){let t=e.visualViewport;return t?{left:0,right:t.width,top:0,bottom:t.height}:{left:0,right:e.innerWidth,top:0,bottom:e.innerHeight}}function mi(e,t){let i=t.width/e.offsetWidth,o=t.height/e.offsetHeight;return(i>.995&&i<1.005||!isFinite(i)||Math.abs(t.width-e.offsetWidth)<1)&&(i=1),(o>.995&&o<1.005||!isFinite(o)||Math.abs(t.height-e.offsetHeight)<1)&&(o=1),{scaleX:i,scaleY:o}}ii.prototype.startSide=ii.prototype.endSide=-1;class gi{constructor(){this.anchorNode=null,this.anchorOffset=0,this.focusNode=null,this.focusOffset=0}eq(e){return this.anchorNode==e.anchorNode&&this.anchorOffset==e.anchorOffset&&this.focusNode==e.focusNode&&this.focusOffset==e.focusOffset}setRange(e){let{anchorNode:t,focusNode:i}=e;this.set(t,Math.min(e.anchorOffset,t?hi(t):0),i,Math.min(e.focusOffset,i?hi(i):0))}set(e,t,i,o){this.anchorNode=e,this.anchorOffset=t,this.focusNode=i,this.focusOffset=o}}let fi,bi=null;function yi(e){if(e.setActive)return e.setActive();if(bi)return e.focus(bi);let t=[];for(let i=e;i&&(t.push(i,i.scrollTop,i.scrollLeft),i!=i.ownerDocument);i=i.parentNode);if(e.focus(null==bi?{get preventScroll(){return bi={preventScroll:!0},!0}}:void 0),!bi){bi=!1;for(let e=0;eMath.max(1,e.scrollHeight-e.clientHeight-4)}function xi(e,t){for(let i=e,o=t;;){if(3==i.nodeType&&o>0)return{node:i,offset:o};if(1==i.nodeType&&o>0){if("false"==i.contentEditable)return null;i=i.childNodes[o-1],o=hi(i)}else{if(!i.parentNode||ci(i))return null;o=li(i),i=i.parentNode}}}function ki(e,t){for(let i=e,o=t;;){if(3==i.nodeType&&o=26&&(bi=!1);class Si{constructor(e,t,i=!0){this.node=e,this.offset=t,this.precise=i}static before(e,t){return new Si(e.parentNode,li(e),t)}static after(e,t){return new Si(e.parentNode,li(e)+1,t)}}var Ti=function(e){return e[e.LTR=0]="LTR",e[e.RTL=1]="RTL",e}(Ti||(Ti={}));const Ei=Ti.LTR,Mi=Ti.RTL;function Ai(e){let t=[];for(let i=0;i=t){if(r.level==i)return s;(n<0||(0!=o?o<0?r.fromt:e[n].level>r.level))&&(n=s)}}if(n<0)throw new RangeError("Index out of range");return n}}function Ri(e,t){if(e.length!=t.length)return!1;for(let i=0;il&&r.push(new Ni(l,m.from,u)),_i(e,m.direction==Ei!=!(u%2)?o+1:o,n,m.inner,m.from,m.to,r),l=m.to}p=m.to}else{if(p==i||(t?Fi[p]!=a:Fi[p]==a))break;p++}h?qi(e,l,p,o+1,n,h,r):lt;){let i=!0,d=!1;if(!c||l>s[c-1].to){let e=Fi[l-1];e!=a&&(i=!1,d=16==e)}let h=i||1!=a?null:[],u=i?o:o+1,p=l;e:for(;;)if(c&&p==s[c-1].to){if(d)break e;let m=s[--c];if(!i)for(let e=m.from,i=c;;){if(e==t)break e;if(!i||s[i-1].to!=e){if(Fi[e-1]==a)break e;break}e=s[--i].from}if(h)h.push(m);else{m.to=0;e-=3)if(Bi[e+1]==-i){let t=Bi[e+2],i=2&t?n:4&t?1&t?s:n:0;i&&(Fi[r]=Fi[Bi[e]]=i),a=e;break}}else{if(189==Bi.length)break;Bi[a++]=r,Bi[a++]=t,Bi[a++]=l}else if(2==(o=Fi[r])||1==o){let e=o==n;l=e?0:1;for(let t=a-3;t>=0;t-=3){let i=Bi[t+2];if(2&i)break;if(e)Bi[t+2]|=2;else{if(4&i)break;Bi[t+2]|=4}}}}}(e,n,s,o,a),function(e,t,i,o){for(let n=0,s=o;n<=i.length;n++){let r=n?i[n-1].to:e,a=nl;)t==s&&(t=i[--o].from,s=o?i[o-1].to:e),Fi[--t]=d;l=r}else s=r,l++}}}(n,s,o,a),qi(e,n,s,t,i,o,r)}function zi(e){return[new Ni(0,e,0)]}let Vi="";function Wi(e,t,i,o,n){var s;let r=o.head-e.from,a=Ni.find(t,r,null!==(s=o.bidiLevel)&&void 0!==s?s:-1,o.assoc),l=t[a],c=l.side(n,i);if(r==c){let e=a+=n?1:-1;if(e<0||e>=t.length)return null;l=t[a=e],r=l.side(!n,i),c=l.side(n,i)}let d=ee(e.text,r,l.forward(n,i));(dl.to)&&(d=c),Vi=e.text.slice(Math.min(r,d),Math.max(r,d));let h=a==(n?t.length-1:0)?null:t[a+(n?1:-1)];return h&&d==c&&h.level+(n?0:1)e.some(e=>e)}),eo=ge.define({combine:e=>e.some(e=>e)}),to=ge.define();class io{constructor(e,t="nearest",i="nearest",o=5,n=5,s=!1){this.range=e,this.y=t,this.x=i,this.yMargin=o,this.xMargin=n,this.isSnapshot=s}map(e){return e.empty?this:new io(this.range.map(e),this.y,this.x,this.yMargin,this.xMargin,this.isSnapshot)}clip(e){return this.range.to<=e.doc.length?this:new io(ue.cursor(e.doc.length),this.y,this.x,this.yMargin,this.xMargin,this.isSnapshot)}}const oo=Ue.define({map:(e,t)=>e.map(t)}),no=Ue.define();function so(e,t,i){let o=e.facet(Yi);o.length?o[0](t):window.onerror&&window.onerror(String(t),i,void 0,void 0,t)||(i?console.error(i+":",t):console.error(t))}const ro=ge.define({combine:e=>!e.length||e[0]});let ao=0;const lo=ge.define({combine:e=>e.filter((t,i)=>{for(let o=0;o{let t=[];return s&&t.push(mo.of(t=>{let i=t.plugin(e);return i?s(i):Kt.none})),n&&t.push(n(e)),t})}static fromClass(e,t){return co.define((t,i)=>new e(t,i),t)}}class ho{constructor(e){this.spec=e,this.mustUpdate=null,this.value=null}get plugin(){return this.spec&&this.spec.plugin}update(e){if(this.value){if(this.mustUpdate){let e=this.mustUpdate;if(this.mustUpdate=null,this.value.update)try{this.value.update(e)}catch(t){if(so(e.state,t,"CodeMirror plugin crashed"),this.value.destroy)try{this.value.destroy()}catch(e){}this.deactivate()}}}else if(this.spec)try{this.value=this.spec.plugin.create(e,this.spec.arg)}catch(t){so(e.state,t,"CodeMirror plugin crashed"),this.deactivate()}return this}destroy(e){var t;if(null===(t=this.value)||void 0===t?void 0:t.destroy)try{this.value.destroy()}catch(t){so(e.state,t,"CodeMirror plugin crashed")}}deactivate(){this.spec=this.value=null}}const uo=ge.define(),po=ge.define(),mo=ge.define(),go=ge.define(),fo=ge.define(),bo=ge.define(),yo=ge.define();function wo(e,t){let i=e.state.facet(yo);if(!i.length)return i;let o=i.map(t=>t instanceof Function?t(e):t),n=[];return ct.spans(o,t.from,t.to,{point(){},span(e,i,o,s){let r=e-t.from,a=i-t.from,l=n;for(let e=o.length-1;e>=0;e--,s--){let i,n=o[e].spec.bidiIsolate;if(null==n&&(n=Hi(t.text,r,a)),s>0&&l.length&&(i=l[l.length-1]).to==r&&i.direction==n)i.to=a,l=i.inner;else{let e={from:r,to:a,direction:n,inner:[]};l.push(e),l=e.inner}}}}),n}const vo=ge.define();function Co(e){let t=0,i=0,o=0,n=0;for(let s of e.state.facet(vo)){let r=s(e);r&&(null!=r.left&&(t=Math.max(t,r.left)),null!=r.right&&(i=Math.max(i,r.right)),null!=r.top&&(o=Math.max(o,r.top)),null!=r.bottom&&(n=Math.max(n,r.bottom)))}return{left:t,right:i,top:o,bottom:n}}const xo=ge.define();class ko{constructor(e,t,i,o){this.fromA=e,this.toA=t,this.fromB=i,this.toB=o}join(e){return new ko(Math.min(this.fromA,e.fromA),Math.max(this.toA,e.toA),Math.min(this.fromB,e.fromB),Math.max(this.toB,e.toB))}addToSet(e){let t=e.length,i=this;for(;t>0;t--){let o=e[t-1];if(!(o.fromA>i.toA)){if(o.toAo.push(new ko(e,t,i,n))),this.changedRanges=o}static create(e,t,i){return new So(e,t,i)}get viewportChanged(){return(4&this.flags)>0}get viewportMoved(){return(8&this.flags)>0}get heightChanged(){return(2&this.flags)>0}get geometryChanged(){return this.docChanged||(18&this.flags)>0}get focusChanged(){return(1&this.flags)>0}get docChanged(){return!this.changes.empty}get selectionSet(){return this.transactions.some(e=>e.selection)}get empty(){return 0==this.flags&&0==this.transactions.length}}const To=[];class Eo{constructor(e,t,i=0){this.dom=e,this.length=t,this.flags=i,this.parent=null,e.cmTile=this}get breakAfter(){return 1&this.flags}get children(){return To}isWidget(){return!1}get isHidden(){return!1}isComposite(){return!1}isLine(){return!1}isText(){return!1}isBlock(){return!1}get domAttrs(){return null}sync(e){if(this.flags|=2,4&this.flags){this.flags&=-5;let e=this.domAttrs;e&&function(e,t){for(let i=e.attributes.length-1;i>=0;i--){let o=e.attributes[i].name;null==t[o]&&e.removeAttribute(o)}for(let i in t){let o=t[i];"style"==i?e.style.cssText=o:e.getAttribute(i)!=o&&e.setAttribute(i,o)}}(this.dom,e)}}toString(){return this.constructor.name+(this.children.length?`(${this.children})`:"")+(this.breakAfter?"#":"")}destroy(){this.parent=null}setDOM(e){this.dom=e,e.cmTile=this}get posAtStart(){return this.parent?this.parent.posBefore(this):0}get posAtEnd(){return this.posAtStart+this.length}posBefore(e,t=this.posAtStart){let i=t;for(let t of this.children){if(t==e)return i;i+=t.length+t.breakAfter}throw new RangeError("Invalid child in posBefore")}posAfter(e){return this.posBefore(e)+e.length}covers(e){return!0}coordsIn(e,t){return null}domPosFor(e,t){let i=li(this.dom),o=this.length?e>0:t>0;return new Si(this.parent.dom,i+(o?1:0),0==e||e==this.length)}markDirty(e){this.flags&=-3,e&&(this.flags|=4),this.parent&&2&this.parent.flags&&this.parent.markDirty(!1)}get overrideDOMText(){return null}get root(){for(let e=this;e;e=e.parent)if(e instanceof Io)return e;return null}static get(e){return e.cmTile}}class Mo extends Eo{constructor(e){super(e,0),this._children=[]}isComposite(){return!0}get children(){return this._children}get lastChild(){return this.children.length?this.children[this.children.length-1]:null}append(e){this.children.push(e),e.parent=this}sync(e){if(2&this.flags)return;super.sync(e);let t,i=this.dom,o=null,n=(null==e?void 0:e.node)==i?e:null,s=0;for(let r of this.children){if(r.sync(e),s+=r.length+r.breakAfter,t=o?o.nextSibling:i.firstChild,n&&t!=r.dom&&(n.written=!0),r.dom.parentNode==i)for(;t&&t!=r.dom;)t=Ao(t);else i.insertBefore(r.dom,t);o=r.dom}for(t=o?o.nextSibling:i.firstChild,n&&t&&(n.written=!0);t;)t=Ao(t);this.length=s}}function Ao(e){let t=e.nextSibling;return e.parentNode.removeChild(e),t}class Io extends Mo{constructor(e,t){super(t),this.view=e}owns(e){for(;e;e=e.parent)if(e==this)return!0;return!1}isBlock(){return!0}nearest(e){for(;;){if(!e)return null;let t=Eo.get(e);if(t&&this.owns(t))return t;e=e.parentNode}}blockTiles(e){for(let t=[],i=this,o=0,n=0;;)if(o==i.children.length){if(!t.length)return;i=i.parent,i.breakAfter&&n++,o=t.pop()}else{let s=i.children[o++];if(s instanceof Do)t.push(o),i=s,o=0;else{let t=n+s.length,i=e(s,n);if(void 0!==i)return i;n=t+s.breakAfter}}}resolveBlock(e,t){let i,o,n=-1,s=-1;if(this.blockTiles((r,a)=>{let l=a+r.length;if(e>=a&&e<=l){if(r.isWidget()&&t>=-1&&t<=1){if(32&r.flags)return!0;16&r.flags&&(i=void 0)}(ae||e==a&&(t>1?r.length:r.covers(-1)))&&(!o||!r.isWidget()&&o.isWidget())&&(o=r,s=e-a)}}),!i&&!o)throw new Error("No tile at position "+e);return i&&t<0||!o?{tile:i,offset:n}:{tile:o,offset:s}}}class Do extends Mo{constructor(e,t){super(e),this.wrapper=t}isBlock(){return!0}covers(e){return!!this.children.length&&(e<0?this.children[0].covers(-1):this.lastChild.covers(1))}get domAttrs(){return this.wrapper.attributes}static of(e,t){let i=new Do(t||document.createElement(e.tagName),e);return t||(i.flags|=4),i}}class Oo extends Mo{constructor(e,t){super(e),this.attrs=t}isLine(){return!0}static start(e,t,i){let o=new Oo(t||document.createElement("div"),e);return t&&i||(o.flags|=4),o}get domAttrs(){return this.attrs}resolveInline(e,t,i){let o=null,n=-1,s=null,r=-1;!function e(a,l){for(let c=0,d=0;c=l&&(h.isComposite()?e(h,l-d):(!s||s.isHidden&&(t>0||i&&Bo(s,h)))&&(u>l||32&h.flags)?(s=h,r=l-d):(di&&(e=i);let o=e,n=e,s=0;0==e&&t<0||e==i&&t>=0?Wt.chrome||Wt.gecko||(e?(o--,s=1):n=0)?0:r.length-1];return Wt.safari&&!s&&0==a.width&&(a=Array.prototype.find.call(r,e=>e.width)||a),s?ui(a,s<0):a||null}static of(e,t){let i=new Po(t||document.createTextNode(e),e);return t||(i.flags|=2),i}}class No extends Eo{constructor(e,t,i,o){super(e,t,o),this.widget=i}isWidget(){return!0}get isHidden(){return this.widget.isHidden}covers(e){return!(48&this.flags)&&(this.flags&(e<0?64:128))>0}coordsIn(e,t){return this.coordsInWidget(e,t,!1)}coordsInWidget(e,t,i){let o=this.widget.coordsAt(this.dom,e,t);if(o)return o;if(i)return ui(this.dom.getBoundingClientRect(),this.length?0==e:t<=0);{let t=this.dom.getClientRects(),i=null;if(!t.length)return null;let o=!!(16&this.flags)||!(32&this.flags)&&e>0;for(let n=o?t.length-1:0;i=t[n],!(e>0?0==n:n==t.length-1||i.top0;)if(o.isComposite())if(s){if(!e)break;i&&i.break(),e--,s=!1}else if(n==o.children.length){if(!e&&!r.length)break;i&&i.leave(o),s=!!o.breakAfter,({tile:o,index:n}=r.pop()),n++}else{let a=o.children[n],l=a.breakAfter;!(t>0?a.length<=e:a.length=0;e--){let i=t.marks[e],n=o.lastChild;if(n instanceof Lo&&n.mark.eq(i.mark))n.dom!=i.dom&&n.setDOM(jo(i.dom)),o=n;else{if(this.cache.reused.get(i)){let e=Eo.get(i.dom);e&&e.setDOM(jo(i.dom))}let e=Lo.of(i.mark,i.dom);o.append(e),o=e}this.cache.reused.set(i,2)}let n=Eo.get(e.text);n&&this.cache.reused.set(n,2);let s=new Po(e.text,e.text.nodeValue);s.flags|=8,o.append(s)}addInlineWidget(e,t,i){let o=this.afterWidget&&48&e.flags&&(48&this.afterWidget.flags)==(48&e.flags);o||this.flushBuffer();let n=this.ensureMarks(t,i);o||16&e.flags||n.append(this.getBuffer(1)),n.append(e),this.pos+=e.length,this.afterWidget=e}addMark(e,t,i){this.flushBuffer(),this.ensureMarks(t,i).append(e),this.pos+=e.length,this.afterWidget=null}addBlockWidget(e){this.getBlockPos().append(e),this.pos+=e.length,this.lastBlock=e,this.endLine()}continueWidget(e){(this.afterWidget||this.lastBlock).length+=e,this.pos+=e}addLineStart(e,t){var i;e||(e=Uo);let o=Oo.start(e,t||(null===(i=this.cache.find(Oo))||void 0===i?void 0:i.dom),!!t);this.getBlockPos().append(this.lastBlock=this.curLine=o)}addLine(e){this.getBlockPos().append(e),this.pos+=e.length,this.lastBlock=e,this.endLine()}addBreak(){this.lastBlock.flags|=1,this.endLine(),this.pos++}addLineStartIfNotCovered(e){this.blockPosCovered()||this.addLineStart(e)}ensureLine(e){this.curLine||this.addLineStart(e)}ensureMarks(e,t){var i;let o=this.curLine;for(let n=e.length-1;n>=0;n--){let s,r=e[n];if(t>0&&(s=o.lastChild)&&s instanceof Lo&&s.mark.eq(r))o=s,t--;else{let e=Lo.of(r,null===(i=this.cache.find(Lo,e=>e.mark.eq(r)))||void 0===i?void 0:i.dom);o.append(e),o=e,t=0}}return o}endLine(){if(this.curLine){this.flushBuffer();let e=this.curLine.lastChild;e&&$o(this.curLine,!1)&&("BR"==e.dom.nodeName||!e.isWidget()||Wt.ios&&$o(this.curLine,!0))||this.curLine.append(this.cache.findWidget(Go,0,32)||new No(Go.toDOM(),0,Go,32)),this.curLine=this.afterWidget=null}}updateBlockWrappers(){this.wrapperPos>this.pos+1e4&&(this.blockWrappers.goto(this.pos),this.wrappers.length=0);for(let e=this.wrappers.length-1;e>=0;e--)this.wrappers[e].to=this.pos){let t=new qo(e.from,e.to,e.value,e.rank),i=this.wrappers.length;for(;i>0&&(this.wrappers[i-1].rank-t.rank||this.wrappers[i-1].to-t.to)<0;)i--;this.wrappers.splice(i,0,t)}this.wrapperPos=this.pos}getBlockPos(){var e;this.updateBlockWrappers();let t=this.root;for(let i of this.wrappers){let o=t.lastChild;if(i.frome.wrapper.eq(i.wrapper)))||void 0===e?void 0:e.dom);t.append(o),t=o}}return t}blockPosCovered(){let e=this.lastBlock;return null!=e&&!e.breakAfter&&(!e.isWidget()||(160&e.flags)>0)}getBuffer(e){let t=2|(e<0?16:32),i=this.cache.find(Ro,void 0,1);return i&&(i.flags=t),i||new Ro(t)}flushBuffer(){!this.afterWidget||32&this.afterWidget.flags||(this.afterWidget.parent.append(this.getBuffer(-1)),this.afterWidget=null)}}class zo{constructor(e){this.skipCount=0,this.text="",this.textOff=0,this.cursor=e.iter()}skip(e){this.textOff+e<=this.text.length?this.textOff+=e:(this.skipCount+=e-(this.text.length-this.textOff),this.text="",this.textOff=0)}next(e){if(this.textOff==this.text.length){let{value:t,lineBreak:i,done:o}=this.cursor.next(this.skipCount);if(this.skipCount=0,o)throw new Error("Ran out of text content when drawing inline views");this.text=t;let n=this.textOff=Math.min(e,t.length);return i?null:t.slice(0,n)}let t=Math.min(this.text.length,this.textOff+e),i=this.text.slice(this.textOff,t);return this.textOff=t,i}}const Vo=[No,Oo,Po,Lo,Ro,Do,Io];for(let e=0;e[]),this.index=Vo.map(()=>0),this.reused=new Map}add(e){let t=e.constructor.bucket,i=this.buckets[t];i.length<6?i.push(e):i[this.index[t]=(this.index[t]+1)%6]=e}find(e,t,i=2){let o=e.bucket,n=this.buckets[o],s=this.index[o];for(let e=n.length-1;e>=0;e--){let r=(e+s)%n.length,a=n[r];if((!t||t(a))&&!this.reused.has(a))return n.splice(r,1),r{if(this.cache.add(e),e.isComposite())return!1},enter:e=>this.cache.add(e),leave:()=>{},break:()=>{}}}run(e,t){let i=t&&this.getCompositionContext(t.text);for(let o=0,n=0,s=0;;){let r=so){let e=a-o;this.preserve(e,!s,!r),o=a,n+=e}if(!r)break;t&&r.fromA<=t.range.fromA&&r.toA>=t.range.toA?(this.forward(r.fromA,t.range.fromA,t.range.fromA1;i--){let o=i==e.parents.length?e.tile:e.parents[i].tile;o instanceof Lo&&t.push(o.mark)}return t}(this.old),n=this.openMarks;this.old.advance(e,i?1:-1,{skip:(e,t,i)=>{if(e.isWidget())if(this.openWidget)this.builder.continueWidget(i-t);else{let s=i>0||t{e.isLine()?this.builder.addLineStart(e.attrs,this.cache.maybeReuse(e)):(this.cache.add(e),e instanceof Lo&&o.unshift(e.mark)),this.openWidget=!1},leave:e=>{e.isLine()?o.length&&(o.length=n=0):e instanceof Lo&&(o.shift(),n=Math.min(n,o.length))},break:()=>{this.builder.addBreak(),this.openWidget=!1}}),this.text.skip(e)}emit(e,t){let i=null,o=this.builder,n=0,s=ct.spans(this.decorations,e,t,{point:(e,t,s,r,a,l)=>{if(s instanceof Qt){if(this.disallowBlockEffectsFor[l]){if(s.block)throw new RangeError("Block decorations may not be specified via plugins");if(t>this.view.state.doc.lineAt(e).to)throw new RangeError("Decorations that replace line breaks may not be specified via plugins")}if(n=r.length,a>r.length)o.continueWidget(t-e);else{let n=s.widget||(s.block?Yo.block:Yo.inline),l=function(e){let t=e.isReplace?(e.startSide<0?64:0)|(e.endSide>0?128:0):e.startSide>0?32:16;e.block&&(t|=256);return t}(s),c=this.cache.findWidget(n,t-e,l)||No.of(n,this.view,t-e,l);s.block?(s.startSide>0&&o.addLineStartIfNotCovered(i),o.addBlockWidget(c)):(o.ensureLine(i),o.addInlineWidget(c,r,a))}i=null}else i=function(e,t){let i=t.spec.attributes,o=t.spec.class;if(!i&&!o)return e;e||(e={class:"cm-line"});i&&Ht(i,e);o&&(e.class+=" "+o);return e}(i,s);t>e&&this.text.skip(t-e)},span:(e,t,n,s)=>{for(let r=e;rn,this.openMarks=s}forward(e,t,i=1){t-e<=10?this.old.advance(t-e,i,this.reuseWalker):(this.old.advance(5,-1,this.reuseWalker),this.old.advance(t-e-10,-1),this.old.advance(5,i,this.reuseWalker))}getCompositionContext(e){let t=[],i=null;for(let o=e.parentNode;;o=o.parentNode){let e=Eo.get(o);if(o==this.view.contentDOM)break;e instanceof Lo?t.push(e):(null==e?void 0:e.isLine())?i=e:"DIV"!=o.nodeName||i||o==this.view.contentDOM?t.push(Lo.of(new Jt({tagName:o.nodeName.toLowerCase(),attributes:Yt(o)}),o)):i=new Oo(o,Uo)}return{line:i,marks:t}}}function $o(e,t){let i=e=>{for(let o of e.children)if((t?o.isText():o.length)||i(o))return!0;return!1};return i(e)}const Uo={class:"cm-line"};function jo(e){let t=Eo.get(e);return t&&t.setDOM(e.cloneNode()),e}class Yo extends Gt{constructor(e){super(),this.tag=e}eq(e){return e.tag==this.tag}toDOM(){return document.createElement(this.tag)}updateDOM(e){return e.nodeName.toLowerCase()==this.tag}get isHidden(){return!0}}Yo.inline=new Yo("span"),Yo.block=new Yo("div");const Go=new class extends Gt{toDOM(){return document.createElement("br")}get isHidden(){return!0}get editable(){return!0}};class Zo{constructor(e){this.view=e,this.decorations=[],this.blockWrappers=[],this.dynamicDecorationMap=[!1],this.domChanged=null,this.hasComposition=null,this.editContextFormatting=Kt.none,this.lastCompositionAfterCursor=!1,this.minWidth=0,this.minWidthFrom=0,this.minWidthTo=0,this.impreciseAnchor=null,this.impreciseHead=null,this.forceSelection=!1,this.lastUpdate=Date.now(),this.updateDeco(),this.tile=new Io(e,e.contentDOM),this.updateInner([new ko(0,0,0,e.state.doc.length)],null)}update(e){var t;let i=e.changedRanges;this.minWidth>0&&i.length&&(i.every(({fromA:e,toA:t})=>tthis.minWidthTo)?(this.minWidthFrom=e.changes.mapPos(this.minWidthFrom,1),this.minWidthTo=e.changes.mapPos(this.minWidthTo,1)):this.minWidth=this.minWidthFrom=this.minWidthTo=0),this.updateEditContextFormatting(e);let o=-1;this.view.inputState.composing>=0&&!this.view.observer.editContext&&((null===(t=this.domChanged)||void 0===t?void 0:t.newSel)?o=this.domChanged.newSel.head:function(e,t){let i=!1;t&&e.iterChangedRanges((e,o)=>{et.from&&(i=!0)});return i}(e.changes,this.hasComposition)||e.selectionSet||(o=e.state.selection.main.head));let n=o>-1?function(e,t,i){let o=Jo(e,i);if(!o)return null;let{node:n,from:s,to:r}=o,a=n.nodeValue;if(/[\n\r]/.test(a))return null;if(e.state.doc.sliceString(o.from,o.to)!=a)return null;let l=t.invertedDesc;return{range:new ko(l.mapPos(s),l.mapPos(r),s,r),text:n}}(this.view,e.changes,o):null;if(this.domChanged=null,this.hasComposition){let{from:t,to:o}=this.hasComposition;i=new ko(t,o,e.changes.mapPos(t,-1),e.changes.mapPos(o,1)).addToSet(i.slice())}this.hasComposition=n?{from:n.range.fromB,to:n.range.toB}:null,(Wt.ie||Wt.chrome)&&!n&&e&&e.state.doc.lines!=e.startState.doc.lines&&(this.forceSelection=!0);let s=this.decorations,r=this.blockWrappers;this.updateDeco();let a=function(e,t,i){let o=new Xo;return ct.compare(e,t,i,o),o.changes}(s,this.decorations,e.changes);a.length&&(i=ko.extendWithRanges(i,a));let l=function(e,t,i){let o=new Qo;return ct.compare(e,t,i,o),o.changes}(r,this.blockWrappers,e.changes);return l.length&&(i=ko.extendWithRanges(i,l)),n&&!i.some(e=>e.fromA<=n.range.fromA&&e.toA>=n.range.toA)&&(i=n.range.addToSet(i.slice())),!(2&this.tile.flags&&0==i.length)&&(this.updateInner(i,n),e.transactions.length&&(this.lastUpdate=Date.now()),!0)}updateInner(e,t){this.view.viewState.mustMeasureContent=!0;let{observer:i}=this.view;i.ignore(()=>{if(t||e.length){let i=this.tile,o=new Ho(this.view,i,this.blockWrappers,this.decorations,this.dynamicDecorationMap);this.tile=o.run(e,t),Ko(i,o.cache.reused)}this.tile.dom.style.height=this.view.viewState.contentHeight/this.view.scaleY+"px",this.tile.dom.style.flexBasis=this.minWidth?this.minWidth+"px":"";let o=Wt.chrome||Wt.ios?{node:i.selectionRange.focusNode,written:!1}:void 0;this.tile.sync(o),!o||!o.written&&i.selectionRange.focusNode==o.node&&this.tile.dom.contains(o.node)||(this.forceSelection=!0),this.tile.dom.style.height=""});let o=[];if(this.view.viewport.from||this.view.viewport.to-1)&&si(i,this.view.observer.selectionRange)&&!(o&&i.contains(o));if(!(n||t||s))return;let r=this.forceSelection;this.forceSelection=!1;let a,l,c=this.view.state.selection.main;if(c.empty?l=a=this.inlineDOMNearPos(c.anchor,c.assoc||1):(l=this.inlineDOMNearPos(c.head,c.head==c.from?1:-1),a=this.inlineDOMNearPos(c.anchor,c.anchor==c.from?1:-1)),Wt.gecko&&c.empty&&!this.hasComposition&&(1==(d=a).node.nodeType&&d.node.firstChild&&(0==d.offset||"false"==d.node.childNodes[d.offset-1].contentEditable)&&(d.offset==d.node.childNodes.length||"false"==d.node.childNodes[d.offset].contentEditable))){let e=document.createTextNode("");this.view.observer.ignore(()=>a.node.insertBefore(e,a.node.childNodes[a.offset]||null)),a=l=new Si(e,0),r=!0}var d;let h=this.view.observer.selectionRange;!r&&h.focusNode&&(ai(a.node,a.offset,h.anchorNode,h.anchorOffset)&&ai(l.node,l.offset,h.focusNode,h.focusOffset)||this.suppressWidgetCursorChange(h,c))||(this.view.observer.ignore(()=>{Wt.android&&Wt.chrome&&i.contains(h.focusNode)&&function(e,t){for(let i=e;i&&i!=t;i=i.assignedSlot||i.parentNode)if(1==i.nodeType&&"false"==i.contentEditable)return!0;return!1}(h.focusNode,i)&&(i.blur(),i.focus({preventScroll:!0}));let e=oi(this.view.root);if(e)if(c.empty){if(Wt.gecko){let e=(t=a.node,n=a.offset,1!=t.nodeType?0:(n&&"false"==t.childNodes[n-1].contentEditable?1:0)|(nc.head&&([a,l]=[l,a]),t.setEnd(l.node,l.offset),t.setStart(a.node,a.offset),e.removeAllRanges(),e.addRange(t)}else;var t,n;s&&this.view.root.activeElement==i&&(i.blur(),o&&o.focus())}),this.view.observer.setSelectionRange(a,l)),this.impreciseAnchor=a.precise?null:new Si(h.anchorNode,h.anchorOffset),this.impreciseHead=l.precise?null:new Si(h.focusNode,h.focusOffset)}suppressWidgetCursorChange(e,t){return this.hasComposition&&t.empty&&ai(e.focusNode,e.focusOffset,e.anchorNode,e.anchorOffset)&&this.posFromDOM(e.focusNode,e.focusOffset)==t.head}enforceCursorAssoc(){if(this.hasComposition)return;let{view:e}=this,t=e.state.selection.main,i=oi(e.root),{anchorNode:o,anchorOffset:n}=e.observer.selectionRange;if(!(i&&t.empty&&t.assoc&&i.modify))return;let s=this.lineAt(t.head,t.assoc);if(!s)return;let r=s.posAtStart;if(t.head==r||t.head==r+s.length)return;let a=this.coordsAt(t.head,-1),l=this.coordsAt(t.head,1);if(!a||!l||a.bottom>l.top)return;let c=this.domAtPos(t.head+t.assoc,t.assoc);i.collapse(c.node,c.offset),i.modify("move",t.assoc<0?"forward":"backward","lineboundary"),e.observer.readSelectionRange();let d=e.observer.selectionRange;e.docView.posFromDOM(d.anchorNode,d.anchorOffset)!=t.from&&i.collapse(o,n)}posFromDOM(e,t){let i=this.tile.nearest(e);if(!i)return 2&this.tile.dom.compareDocumentPosition(e)?0:this.view.state.doc.length;let o=i.posAtStart;if(!i.isComposite())return i.isText()?e==i.dom?o+t:o+(t?i.length:0):o;{let n;if(e==i.dom)n=i.dom.childNodes[t];else{let o=0==hi(e)?0:0==t?-1:1;for(;;){let t=e.parentNode;if(t==i.dom)break;0==o&&t.firstChild!=t.lastChild&&(o=e==t.firstChild?-1:1),e=t}n=o<0?e:e.nextSibling}if(n==i.dom.firstChild)return o;for(;n&&!Eo.get(n);)n=n.nextSibling;if(!n)return o+i.length;for(let e=0,t=o;;e++){let o=i.children[e];if(o.dom==n)return t;t+=o.length+o.breakAfter}}}domAtPos(e,t){let{tile:i,offset:o}=this.tile.resolveBlock(e,t);return i.isWidget()?i.domPosFor(e,t):i.domIn(o,t)}inlineDOMNearPos(e,t){let i,o,n=-1,s=!1,r=-1,a=!1;return this.tile.blockTiles((t,l)=>{if(t.isWidget()){if(32&t.flags&&l>=e)return!0;16&t.flags&&(s=!0)}else{let c=l+t.length;if(l<=e&&(i=t,n=e-l,s=c=e&&!o&&(o=t,r=e-l,a=l>e),l>e&&o)return!0}}),i||o?(s&&o?i=null:a&&i&&(o=null),i&&t<0||!o?i.domIn(n,t):o.domIn(r,t)):this.domAtPos(e,t)}coordsAt(e,t){let{tile:i,offset:o}=this.tile.resolveBlock(e,t);return i.isWidget()?i.widget instanceof en?null:i.coordsInWidget(o,t,!0):i.coordsIn(o,t)}lineAt(e,t){let{tile:i}=this.tile.resolveBlock(e,t);return i.isLine()?i:null}coordsForChar(e){let{tile:t,offset:i}=this.tile.resolveBlock(e,1);if(!t.isLine())return null;return function e(t,i){if(t.isComposite())for(let o of t.children){if(o.length>=i){let t=e(o,i);if(t)return t}if((i-=o.length)<0)break}else if(t.isText()&&iMath.max(this.view.scrollDOM.clientWidth,this.minWidth)+1,r=-1,a=this.view.textDirection==Ti.LTR,l=0,c=(e,d,h)=>{for(let u=0;uo);u++){let o=e.children[u],p=d+o.length,m=o.dom.getBoundingClientRect(),{height:g}=m;if(h&&!u&&(l+=m.top-h.top),o instanceof Do)p>i&&c(o,d,m);else if(d>=i&&(l>0&&t.push(-l),t.push(g+l),l=0,s)){let e=o.dom.lastChild,t=e?ri(e):[];if(t.length){let e=t[t.length-1],i=a?e.right-m.left:m.right-e.left;i>r&&(r=i,this.minWidth=n,this.minWidthFrom=d,this.minWidthTo=p)}}h&&u==e.children.length-1&&(l+=h.bottom-m.bottom),d=p+o.breakAfter}};return c(this.tile,0,null),t}textDirectionAt(e){let{tile:t}=this.tile.resolveBlock(e,1);return"rtl"==getComputedStyle(t.dom).direction?Ti.RTL:Ti.LTR}measureTextSize(){let e=this.tile.blockTiles(e=>{if(e.isLine()&&e.children.length&&e.length<=20){let t,i=0;for(let o of e.children){if(!o.isText()||/[^ -~]/.test(o.text))return;let e=ri(o.dom);if(1!=e.length)return;i+=e[0].width,t=e[0].height}if(i)return{lineHeight:e.dom.getBoundingClientRect().height,charWidth:i/e.length,textHeight:t}}});if(e)return e;let t,i,o,n=document.createElement("div");return n.className="cm-line",n.style.width="99999px",n.style.position="absolute",n.textContent="abc def ghi jkl mno pqr stu",this.view.observer.ignore(()=>{this.tile.dom.appendChild(n);let e=ri(n.firstChild)[0];t=n.getBoundingClientRect().height,i=e&&e.width?e.width/27:7,o=e&&e.height?e.height:t,n.remove()}),{lineHeight:t,charWidth:i,textHeight:o}}computeBlockGapDeco(){let e=[],t=this.view.viewState;for(let i=0,o=0;;o++){let n=o==t.viewports.length?null:t.viewports[o],s=n?n.from-1:this.view.state.doc.length;if(s>i){let o=(t.lineBlockAt(s).bottom-t.lineBlockAt(i).top)/this.view.scaleY;e.push(Kt.replace({widget:new en(o),block:!0,inclusive:!0,isBlockGap:!0}).range(i,s))}if(!n)break;i=n.to+1}return Kt.set(e)}updateDeco(){let e=1,t=this.view.state.facet(mo).map(t=>(this.dynamicDecorationMap[e++]="function"==typeof t)?t(this.view):t),i=!1,o=this.view.state.facet(fo).map((e,t)=>{let o="function"==typeof e;return o&&(i=!0),o?e(this.view):e});for(o.length&&(this.dynamicDecorationMap[e++]=i,t.push(ct.join(o))),this.decorations=[this.editContextFormatting,...t,this.computeBlockGapDeco(),this.view.viewState.lineGapDeco];e"function"==typeof e?e(this.view):e)}scrollIntoView(e){if(e.isSnapshot){let t=this.view.viewState.lineBlockAt(e.range.head);return this.view.scrollDOM.scrollTop=t.top-e.yMargin,void(this.view.scrollDOM.scrollLeft=e.xMargin)}for(let t of this.view.state.facet(to))try{if(t(this.view,e.range,e))return!0}catch(e){so(this.view.state,e,"scroll handler")}let t,{range:i}=e,o=this.coordsAt(i.head,i.empty?i.assoc:i.head>i.anchor?-1:1);if(!o)return;!i.empty&&(t=this.coordsAt(i.anchor,i.anchor>i.head?-1:1))&&(o={left:Math.min(o.left,t.left),top:Math.min(o.top,t.top),right:Math.max(o.right,t.right),bottom:Math.max(o.bottom,t.bottom)});let n=Co(this.view),s={left:o.left-n.left,top:o.top-n.top,right:o.right+n.right,bottom:o.bottom+n.bottom},{offsetWidth:r,offsetHeight:a}=this.view.scrollDOM;!function(e,t,i,o,n,s,r,a){let l=e.ownerDocument,c=l.defaultView||window;for(let d=e,h=!1;d&&!h;)if(1==d.nodeType){let e,u=d==l.body,p=1,m=1;if(u)e=pi(c);else{if(/^(fixed|sticky)$/.test(getComputedStyle(d).position)&&(h=!0),d.scrollHeight<=d.clientHeight&&d.scrollWidth<=d.clientWidth){d=d.assignedSlot||d.parentNode;continue}let t=d.getBoundingClientRect();({scaleX:p,scaleY:m}=mi(d,t)),e={left:t.left,right:t.left+d.clientWidth*p,top:t.top,bottom:t.top+d.clientHeight*m}}let g=0,f=0;if("nearest"==n)t.top0&&t.bottom>e.bottom+f&&(f=t.bottom-e.bottom+r)):t.bottom>e.bottom&&(f=t.bottom-e.bottom+r,i<0&&t.top-f0&&t.right>e.right+g&&(g=t.right-e.right+s)):t.right>e.right&&(g=t.right-e.right+s,i<0&&t.lefte.bottom||t.lefte.right)&&(t={left:Math.max(t.left,e.left),right:Math.min(t.right,e.right),top:Math.max(t.top,e.top),bottom:Math.min(t.bottom,e.bottom)}),d=d.assignedSlot||d.parentNode}else{if(11!=d.nodeType)break;d=d.host}}(this.view.scrollDOM,s,i.heade.isWidget()||e.children.some(t);return t(this.tile.resolveBlock(e,1).tile)}destroy(){Ko(this.tile)}}function Ko(e,t){let i=null==t?void 0:t.get(e);if(1!=i){null==i&&e.destroy();for(let i of e.children)Ko(i,t)}}function Jo(e,t){let i=e.observer.selectionRange;if(!i.focusNode)return null;let o=xi(i.focusNode,i.focusOffset),n=ki(i.focusNode,i.focusOffset),s=o||n;if(n&&o&&n.node!=o.node){let t=Eo.get(n.node);if(!t||t.isText()&&t.text!=n.node.nodeValue)s=n;else if(e.docView.lastCompositionAfterCursor){let e=Eo.get(o.node);!e||e.isText()&&e.text!=o.node.nodeValue||(s=n)}}if(e.docView.lastCompositionAfterCursor=s!=o,!s)return null;let r=t-s.offset;return{from:r,to:r+s.node.nodeValue.length,node:s.node}}let Xo=class{constructor(){this.changes=[]}compareRange(e,t){ti(e,t,this.changes)}comparePoint(e,t){ti(e,t,this.changes)}boundChange(e){ti(e,e,this.changes)}};class Qo{constructor(){this.changes=[]}compareRange(e,t){ti(e,t,this.changes)}comparePoint(){}boundChange(e){ti(e,e,this.changes)}}class en extends Gt{constructor(e){super(),this.height=e}toDOM(){let e=document.createElement("div");return e.className="cm-gap",this.updateDOM(e),e}eq(e){return e.height==this.height}updateDOM(e){return e.style.height=this.height+"px",!0}get editable(){return!0}get estimatedHeight(){return this.height}ignoreEvent(){return!1}}function tn(e,t,i,o,n){let s=Math.round((o-t.left)*e.defaultCharacterWidth);if(e.lineWrapping&&i.height>1.5*e.defaultLineHeight){let t=e.viewState.heightOracle.textHeight;s+=Math.floor((n-i.top-.5*(e.defaultLineHeight-t))/t)*e.viewState.heightOracle.lineLength}let r=e.state.sliceDoc(i.from,i.to);return i.from+function(e,t,i,o){for(let o=0,n=0;;){if(n>=t)return o;if(o==e.length)break;n+=9==e.charCodeAt(o)?i-n%i:1,o=ee(e,o)}return!0===o?-1:e.length}(r,s,e.state.tabSize)}function on(e,t,i,o){let n=function(e,t,i){let o=e.lineBlockAt(t);if(Array.isArray(o.type)){let e;for(let n of o.type){if(n.from>t)break;if(!(n.tot)return n;e&&(n.type!=Zt.Text||e.type==n.type&&!(i<0?n.fromt))||(e=n)}}return e||o}return o}(e,t.head,t.assoc||-1),s=o&&n.type==Zt.Text&&(e.lineWrapping||n.widgetLineBreaks)?e.coordsAtPos(t.assoc<0&&t.head>n.from?t.head-1:t.head):null;if(s){let t=e.dom.getBoundingClientRect(),o=e.textDirectionAt(n.from),r=e.posAtCoords({x:i==(o==Ti.LTR)?t.right-1:t.left+1,y:(s.top+s.bottom)/2});if(null!=r)return ue.cursor(r,i?-1:1)}return ue.cursor(i?n.to:n.from,i?-1:1)}function nn(e,t,i,o){let n=e.state.doc.lineAt(t.head),s=e.bidiSpans(n),r=e.textDirectionAt(n.from);for(let a=t,l=null;;){let t=Wi(n,s,r,a,i),c=Vi;if(!t){if(n.number==(i?e.state.doc.lines:1))return a;c="\n",n=e.state.doc.line(n.number+(i?1:-1)),s=e.bidiSpans(n),t=e.visualLineSide(n,!i)}if(l){if(!l(c))return a}else{if(!o)return t;l=o(c)}a=t}}function sn(e,t,i){for(;;){let o=0;for(let n of e)n.between(t-1,t+1,(e,n,s)=>{if(t>e&&tt(e)),i.from,t.head>i.from?-1:1);return o==i.from?i:ue.cursor(o,oe.viewState.docHeight)return new ln(e.state.doc.length,-1);if(n=e.elementAtHeight(c),null==o)break;if(n.type==Zt.Text){let t=e.docView.coordsAt(o<0?n.from:n.to,o);if(t&&(o<0?t.top<=c+r:t.bottom>=c+r))break}let t=e.viewState.heightOracle.textHeight/2;c=o>0?n.bottom+t:n.top-t}if(e.viewport.from>=n.to||e.viewport.to<=n.from){if(i)return null;if(n.type==Zt.Text){let t=tn(e,s,n,a,l);return new ln(t,t==n.from?1:-1)}}if(n.type!=Zt.Text)return c<(n.top+n.bottom)/2?new ln(n.from,1):new ln(n.to,-1);let d=e.docView.lineAt(n.from,2);return d&&d.length==n.length||(d=e.docView.lineAt(n.from,-2)),dn(e,d,n.from,a,l)}function dn(e,t,i,o,n){let s=-1,r=null,a=1e9,l=1e9,c=n,d=n,h=(e,t)=>{for(let i=0;io?h.left-o:h.rightn?h.top-n:h.bottom=c&&(c=Math.min(h.top,c),d=Math.max(h.bottom,d),p=0),(s<0||(p-l||u-a)<0)&&(s>=0&&l&&a=c+2?l=0:(s=t,a=u,l=p,r=h))}};if(t.isText()){for(let e=0;e(r.left+r.right)/2==(hn(e,s+i)==Ti.LTR)?new ln(i+ee(t.text,s),-1):new ln(i+s,1)}{if(!t.length)return new ln(i,1);for(let e=0;e(r.left+r.right)/2==(hn(e,s+i)==Ti.LTR)?new ln(d+c.length,-1):new ln(d,1)}}function hn(e,t){let i=e.state.doc.lineAt(t);return e.bidiSpans(i)[Ni.find(e.bidiSpans(i),t-i.from,-1,1)].dir}const un="￿";class pn{constructor(e,t){this.points=e,this.view=t,this.text="",this.lineSeparator=t.state.facet(ot.lineSeparator)}append(e){this.text+=e}lineBreak(){this.text+=un}readRange(e,t){if(!e)return this;let i=e.parentNode;for(let o=e;;){this.findPointBefore(i,o);let e=this.text.length;this.readNode(o);let n=Eo.get(o),s=o.nextSibling;if(s==t){(null==n?void 0:n.breakAfter)&&!s&&i!=this.view.contentDOM&&this.lineBreak();break}let r=Eo.get(s);(n&&r?n.breakAfter:(n?n.breakAfter:ci(o))||ci(s)&&("BR"!=o.nodeName||(null==n?void 0:n.isWidget()))&&this.text.length>e)&&!gn(s,t)&&this.lineBreak(),o=s}return this.findPointBefore(i,t),this}readTextNode(e){let t=e.nodeValue;for(let i of this.points)i.node==e&&(i.pos=this.text.length+Math.min(i.offset,t.length));for(let i=0,o=this.lineSeparator?null:/\r\n?|\n/g;;){let n,s=-1,r=1;if(this.lineSeparator?(s=t.indexOf(this.lineSeparator,i),r=this.lineSeparator.length):(n=o.exec(t))&&(s=n.index,r=n[0].length),this.append(t.slice(i,s<0?t.length:s)),s<0)break;if(this.lineBreak(),r>1)for(let t of this.points)t.node==e&&t.pos>this.text.length&&(t.pos-=r-1);i=s+r}}readNode(e){let t=Eo.get(e),i=t&&t.overrideDOMText;if(null!=i){this.findPointInside(e,i.length);for(let e=i.iter();!e.next().done;)e.lineBreak?this.lineBreak():this.append(e.value)}else 3==e.nodeType?this.readTextNode(e):"BR"==e.nodeName?e.nextSibling&&this.lineBreak():1==e.nodeType&&this.readRange(e.firstChild,null)}findPointBefore(e,t){for(let i of this.points)i.node==e&&e.childNodes[i.offset]==t&&(i.pos=this.text.length)}findPointInside(e,t){for(let i of this.points)(3==e.nodeType?i.node==e:e.contains(i.node))&&(i.pos=this.text.length+(mn(e,i.node,i.offset)?t:0))}}function mn(e,t,i){for(;;){if(!t||i-1;let{impreciseHead:n,impreciseAnchor:s}=e.docView;if(e.state.readOnly&&t>-1)this.newSel=null;else if(t>-1&&(this.bounds=yn(e.docView.tile,t,i,0))){let t=n||s?[]:function(e){let t=[];if(e.root.activeElement!=e.contentDOM)return t;let{anchorNode:i,anchorOffset:o,focusNode:n,focusOffset:s}=e.observer.selectionRange;i&&(t.push(new fn(i,o)),n==i&&s==o||t.push(new fn(n,s)));return t}(e),i=new pn(t,e);i.readRange(this.bounds.startDOM,this.bounds.endDOM),this.text=i.text,this.newSel=function(e,t){if(0==e.length)return null;let i=e[0].pos,o=2==e.length?e[1].pos:i;return i>-1&&o>-1?ue.single(i+t,o+t):null}(t,this.bounds.from)}else{let t=e.observer.selectionRange,i=n&&n.node==t.focusNode&&n.offset==t.focusOffset||!ni(e.contentDOM,t.focusNode)?e.state.selection.main.head:e.docView.posFromDOM(t.focusNode,t.focusOffset),o=s&&s.node==t.anchorNode&&s.offset==t.anchorOffset||!ni(e.contentDOM,t.anchorNode)?e.state.selection.main.anchor:e.docView.posFromDOM(t.anchorNode,t.anchorOffset),r=e.viewport;if((Wt.ios||Wt.chrome)&&e.state.selection.main.empty&&i!=o&&(r.from>0||r.to-1&&e.state.selection.ranges.length>1?this.newSel=e.state.selection.replaceRange(ue.range(o,i)):this.newSel=ue.single(o,i)}}}function yn(e,t,i,o){if(e.isComposite()){let n=-1,s=-1,r=-1,a=-1;for(let l=0,c=o,d=o;li)return yn(o,t,i,c);if(h>=t&&-1==n&&(n=l,s=c),c>i&&o.dom.parentNode==e.dom){r=l,a=d;break}d=h,c=h+o.breakAfter}return{from:s,to:a<0?o+e.length:a,startDOM:(n?e.children[n-1].dom.nextSibling:null)||e.dom.firstChild,endDOM:r=0?e.children[r].dom:null}}return e.isText()?{from:o,to:o+e.length,startDOM:e.dom,endDOM:e.dom.nextSibling}:null}function wn(e,t){let i,{newSel:o}=t,n=e.state.selection.main,s=e.inputState.lastKeyTime>Date.now()-100?e.inputState.lastKeyCode:-1;if(t.bounds){let{from:o,to:r}=t.bounds,a=n.from,l=null;(8===s||Wt.android&&t.text.length=n.from&&i.to<=n.to&&(i.from!=n.from||i.to!=n.to)&&n.to-n.from-(i.to-i.from)<=4?i={from:n.from,to:n.to,insert:e.state.doc.slice(n.from,i.from).append(i.insert).append(e.state.doc.slice(i.to,n.to))}:e.state.doc.lineAt(n.from).toDate.now()-50?i={from:n.from,to:n.to,insert:e.state.toText(e.inputState.insertingText)}:Wt.chrome&&i&&i.from==i.to&&i.from==n.head&&"\n "==i.insert.toString()&&e.lineWrapping&&(o&&(o=ue.single(o.main.anchor-1,o.main.head-1)),i={from:n.from,to:n.to,insert:$.of([" "])}),i)return vn(e,i,o,s);if(o&&!xn(o,n)){let t=!1,i="select";return e.inputState.lastSelectionTime>Date.now()-50&&("select"==e.inputState.lastSelectionOrigin&&(t=!0),i=e.inputState.lastSelectionOrigin,"select.pointer"==i&&(o=rn(e.state.facet(bo).map(t=>t(e)),o))),e.dispatch({selection:o,scrollIntoView:t,userEvent:i}),!0}return!1}function vn(e,t,i,o=-1){if(Wt.ios&&e.inputState.flushIOSKey(t))return!0;let n=e.state.selection.main;if(Wt.android&&(t.to==n.to&&(t.from==n.from||t.from==n.from-1&&" "==e.state.sliceDoc(t.from,n.from))&&1==t.insert.length&&2==t.insert.lines&&vi(e.contentDOM,"Enter",13)||(t.from==n.from-1&&t.to==n.to&&0==t.insert.length||8==o&&t.insert.lengthn.head)&&vi(e.contentDOM,"Backspace",8)||t.from==n.from&&t.to==n.to+1&&0==t.insert.length&&vi(e.contentDOM,"Delete",46)))return!0;let s,r=t.insert.toString();e.inputState.composing>=0&&e.inputState.composing++;let a=()=>s||(s=function(e,t,i){let o,n=e.state,s=n.selection.main,r=-1;if(t.from==t.to&&t.froms.to){let i=t.fromt(e)),o,i);t.from==a&&(r=a)}if(r>-1)o={changes:t,selection:ue.cursor(t.from+t.insert.length,-1)};else if(t.from>=s.from&&t.to<=s.to&&t.to-t.from>=(s.to-s.from)/3&&(!i||i.main.empty&&i.main.from==t.from+t.insert.length)&&e.inputState.composing<0){let i=s.fromt.to?n.sliceDoc(t.to,s.to):"";o=n.replaceSelection(e.state.toText(i+t.insert.sliceString(0,void 0,e.state.lineBreak)+r))}else{let r=n.changes(t),a=i&&i.main.to<=r.newLength?i.main:void 0;if(n.selection.ranges.length>1&&(e.inputState.composing>=0||e.inputState.compositionPendingChange)&&t.to<=s.to+10&&t.to>=s.to-10){let l,c=e.state.sliceDoc(t.from,t.to),d=i&&Jo(e,i.main.head);if(d){let e=t.insert.length-(t.to-t.from);l={from:d.from,to:d.to-e}}else l=e.state.doc.lineAt(s.head);let h=s.to-t.to;o=n.changeByRange(i=>{if(i.from==s.from&&i.to==s.to)return{changes:r,range:a||i.map(r)};let o=i.to-h,d=o-c.length;if(e.state.sliceDoc(d,o)!=c||o>=l.from&&d<=l.to)return{range:i};let u=n.changes({from:d,to:o,insert:t.insert}),p=i.to-s.to;return{changes:u,range:a?ue.range(Math.max(0,a.anchor+p),Math.max(0,a.head+p)):i.map(u)}})}else o={changes:r,selection:a&&n.selection.replaceRange(a)}}let a="input.type";(e.composing||e.inputState.compositionPendingChange&&e.inputState.compositionEndedAt>Date.now()-50)&&(e.inputState.compositionPendingChange=!1,a+=".compose",e.inputState.compositionFirstChange&&(a+=".start",e.inputState.compositionFirstChange=!1));return n.update(o,{userEvent:a,scrollIntoView:!0})}(e,t,i));return e.state.facet(Zi).some(i=>i(e,t.from,t.to,r,a))||e.dispatch(a()),!0}function Cn(e,t,i,o){let n=Math.min(e.length,t.length),s=0;for(;s0&&a>0&&e.charCodeAt(r-1)==t.charCodeAt(a-1);)r--,a--;if("end"==o){i-=r+Math.max(0,s-Math.min(r,a))-s}if(r=r?s-i:0,a=s+(a-r),r=s}else if(a=a?s-i:0,r=s+(r-a),a=s}return{from:s,toA:r,toB:a}}function xn(e,t){return t.head==e.main.head&&t.anchor==e.main.anchor}class kn{setSelectionOrigin(e){this.lastSelectionOrigin=e,this.lastSelectionTime=Date.now()}constructor(e){this.view=e,this.lastKeyCode=0,this.lastKeyTime=0,this.lastTouchTime=0,this.lastFocusTime=0,this.lastScrollTop=0,this.lastScrollLeft=0,this.pendingIOSKey=void 0,this.tabFocusMode=-1,this.lastSelectionOrigin=null,this.lastSelectionTime=0,this.lastContextMenu=0,this.scrollHandlers=[],this.handlers=Object.create(null),this.composing=-1,this.compositionFirstChange=null,this.compositionEndedAt=0,this.compositionPendingKey=!1,this.compositionPendingChange=!1,this.insertingText="",this.insertingTextAt=0,this.mouseSelection=null,this.draggedContent=null,this.handleEvent=this.handleEvent.bind(this),this.notifiedFocused=e.hasFocus,Wt.safari&&e.contentDOM.addEventListener("input",()=>null),Wt.gecko&&function(e){Yn.has(e)||(Yn.add(e),e.addEventListener("copy",()=>{}),e.addEventListener("cut",()=>{}))}(e.contentDOM.ownerDocument)}handleEvent(e){(function(e,t){if(!t.bubbles)return!0;if(t.defaultPrevented)return!1;for(let i,o=t.target;o!=e.contentDOM;o=o.parentNode)if(!o||11==o.nodeType||(i=Eo.get(o))&&i.isWidget()&&!i.isHidden&&i.widget.ignoreEvent(t))return!1;return!0})(this.view,e)&&!this.ignoreDuringComposition(e)&&("keydown"==e.type&&this.keydown(e)||(0!=this.view.updateState?Promise.resolve().then(()=>this.runHandlers(e.type,e)):this.runHandlers(e.type,e)))}runHandlers(e,t){let i=this.handlers[e];if(i){for(let e of i.observers)e(this.view,t);for(let e of i.handlers){if(t.defaultPrevented)break;if(e(this.view,t)){t.preventDefault();break}}}}ensureHandlers(e){let t=Tn(e),i=this.handlers,o=this.view.contentDOM;for(let e in t)if("scroll"!=e){let n=!t[e].handlers.length,s=i[e];s&&n!=!s.handlers.length&&(o.removeEventListener(e,this.handleEvent),s=null),s||o.addEventListener(e,this.handleEvent,{passive:n})}for(let e in i)"scroll"==e||t[e]||o.removeEventListener(e,this.handleEvent);this.handlers=t}keydown(e){if(this.lastKeyCode=e.keyCode,this.lastKeyTime=Date.now(),9==e.keyCode&&this.tabFocusMode>-1&&(!this.tabFocusMode||Date.now()<=this.tabFocusMode))return!0;if(this.tabFocusMode>0&&27!=e.keyCode&&An.indexOf(e.keyCode)<0&&(this.tabFocusMode=-1),Wt.android&&Wt.chrome&&!e.synthetic&&(13==e.keyCode||8==e.keyCode))return this.view.observer.delayAndroidKey(e.key,e.keyCode),!0;let t;return!Wt.ios||e.synthetic||e.altKey||e.metaKey||!((t=En.find(t=>t.keyCode==e.keyCode))&&!e.ctrlKey||Mn.indexOf(e.key)>-1&&e.ctrlKey&&!e.shiftKey)?(229!=e.keyCode&&this.view.observer.forceFlush(),!1):(this.pendingIOSKey=t||e,setTimeout(()=>this.flushIOSKey(),250),!0)}flushIOSKey(e){let t=this.pendingIOSKey;return!!t&&(!("Enter"==t.key&&e&&e.from0||!!(Wt.safari&&!Wt.ios&&this.compositionPendingKey&&Date.now()-this.compositionEndedAt<100)&&(this.compositionPendingKey=!1,!0))}startMouseSelection(e){this.mouseSelection&&this.mouseSelection.destroy(),this.mouseSelection=e}update(e){this.view.observer.update(e),this.mouseSelection&&this.mouseSelection.update(e),this.draggedContent&&e.docChanged&&(this.draggedContent=this.draggedContent.map(e.changes)),e.transactions.length&&(this.lastKeyCode=this.lastSelectionTime=0)}destroy(){this.mouseSelection&&this.mouseSelection.destroy()}}function Sn(e,t){return(i,o)=>{try{return t.call(e,o,i)}catch(e){so(i.state,e)}}}function Tn(e){let t=Object.create(null);function i(e){return t[e]||(t[e]={observers:[],handlers:[]})}for(let t of e){let e=t.spec,o=e&&e.plugin.domEventHandlers,n=e&&e.plugin.domEventObservers;if(o)for(let e in o){let n=o[e];n&&i(e).handlers.push(Sn(t.value,n))}if(n)for(let e in n){let o=n[e];o&&i(e).observers.push(Sn(t.value,o))}}for(let e in On)i(e).handlers.push(On[e]);for(let e in Bn)i(e).observers.push(Bn[e]);return t}const En=[{key:"Backspace",keyCode:8,inputType:"deleteContentBackward"},{key:"Enter",keyCode:13,inputType:"insertParagraph"},{key:"Enter",keyCode:13,inputType:"insertLineBreak"},{key:"Delete",keyCode:46,inputType:"deleteContentForward"}],Mn="dthko",An=[16,17,18,20,91,92,224,225];function In(e){return.7*Math.max(0,e)+8}class Dn{constructor(e,t,i,o){this.view=e,this.startEvent=t,this.style=i,this.mustSelect=o,this.scrollSpeed={x:0,y:0},this.scrolling=-1,this.lastEvent=t,this.scrollParents=function(e){let t,i,o=e.ownerDocument;for(let n=e.parentNode;n&&!(n==o.body||t&&i);)if(1==n.nodeType)!i&&n.scrollHeight>n.clientHeight&&(i=n),!t&&n.scrollWidth>n.clientWidth&&(t=n),n=n.assignedSlot||n.parentNode;else{if(11!=n.nodeType)break;n=n.host}return{x:t,y:i}}(e.contentDOM),this.atoms=e.state.facet(bo).map(t=>t(e));let n=e.contentDOM.ownerDocument;n.addEventListener("mousemove",this.move=this.move.bind(this)),n.addEventListener("mouseup",this.up=this.up.bind(this)),this.extend=t.shiftKey,this.multiple=e.state.facet(ot.allowMultipleSelections)&&function(e,t){let i=e.state.facet($i);return i.length?i[0](t):Wt.mac?t.metaKey:t.ctrlKey}(e,t),this.dragging=!(!function(e,t){let{main:i}=e.state.selection;if(i.empty)return!1;let o=oi(e.root);if(!o||0==o.rangeCount)return!0;let n=o.getRangeAt(0).getClientRects();for(let e=0;e=t.clientX&&i.top<=t.clientY&&i.bottom>=t.clientY)return!0}return!1}(e,t)||1!=Vn(t))&&null}start(e){!1===this.dragging&&this.select(e)}move(e){if(0==e.buttons)return this.destroy();if(this.dragging||null==this.dragging&&(t=this.startEvent,i=e,Math.max(Math.abs(t.clientX-i.clientX),Math.abs(t.clientY-i.clientY))<10))return;var t,i;this.select(this.lastEvent=e);let o=0,n=0,s=0,r=0,a=this.view.win.innerWidth,l=this.view.win.innerHeight;this.scrollParents.x&&({left:s,right:a}=this.scrollParents.x.getBoundingClientRect()),this.scrollParents.y&&({top:r,bottom:l}=this.scrollParents.y.getBoundingClientRect());let c=Co(this.view);e.clientX-c.left<=s+6?o=-In(s-e.clientX):e.clientX+c.right>=a-6&&(o=In(e.clientX-a)),e.clientY-c.top<=r+6?n=-In(r-e.clientY):e.clientY+c.bottom>=l-6&&(n=In(e.clientY-l)),this.setScrollSpeed(o,n)}up(e){null==this.dragging&&this.select(this.lastEvent),this.dragging||e.preventDefault(),this.destroy()}destroy(){this.setScrollSpeed(0,0);let e=this.view.contentDOM.ownerDocument;e.removeEventListener("mousemove",this.move),e.removeEventListener("mouseup",this.up),this.view.inputState.mouseSelection=this.view.inputState.draggedContent=null}setScrollSpeed(e,t){this.scrollSpeed={x:e,y:t},e||t?this.scrolling<0&&(this.scrolling=setInterval(()=>this.scroll(),50)):this.scrolling>-1&&(clearInterval(this.scrolling),this.scrolling=-1)}scroll(){let{x:e,y:t}=this.scrollSpeed;e&&this.scrollParents.x&&(this.scrollParents.x.scrollLeft+=e,e=0),t&&this.scrollParents.y&&(this.scrollParents.y.scrollTop+=t,t=0),(e||t)&&this.view.win.scrollBy(e,t),!1===this.dragging&&this.select(this.lastEvent)}select(e){let{view:t}=this,i=rn(this.atoms,this.style.get(e,this.extend,this.multiple));!this.mustSelect&&i.eq(t.state.selection,!1===this.dragging)||this.view.dispatch({selection:i,userEvent:"select.pointer"}),this.mustSelect=!1}update(e){e.transactions.some(e=>e.isUserEvent("input.type"))?this.destroy():this.style.update(e)&&setTimeout(()=>this.select(this.lastEvent),20)}}const On=Object.create(null),Bn=Object.create(null),Ln=Wt.ie&&Wt.ie_version<15||Wt.ios&&Wt.webkit_version<604;function Pn(e,t,i){for(let o of e.facet(t))i=o(i,e);return i}function Nn(e,t){t=Pn(e.state,Ji,t);let i,{state:o}=e,n=1,s=o.toText(t),r=s.lines==o.selection.ranges.length;if(null!=Hn&&o.selection.ranges.every(e=>e.empty)&&Hn==s.toString()){let e=-1;i=o.changeByRange(i=>{let a=o.doc.lineAt(i.from);if(a.from==e)return{range:i};e=a.from;let l=o.toText((r?s.line(n++).text:t)+o.lineBreak);return{changes:{from:a.from,insert:l},range:ue.cursor(i.from+l.length)}})}else i=r?o.changeByRange(e=>{let t=s.line(n++);return{changes:{from:e.from,to:e.to,insert:t.text},range:ue.cursor(e.from+t.length)}}):o.replaceSelection(s);e.dispatch(i,{userEvent:"input.paste",scrollIntoView:!0})}function Rn(e,t,i,o){if(1==o)return ue.cursor(t,i);if(2==o)return function(e,t,i=1){let o=e.charCategorizer(t),n=e.doc.lineAt(t),s=t-n.from;if(0==n.length)return ue.cursor(t);0==s?i=1:s==n.length&&(i=-1);let r=s,a=s;i<0?r=ee(n.text,s,!1):a=ee(n.text,s);let l=o(n.text.slice(r,a));for(;r>0;){let e=ee(n.text,r,!1);if(o(n.text.slice(e,r))!=l)break;r=e}for(;a{e.inputState.lastScrollTop=e.scrollDOM.scrollTop,e.inputState.lastScrollLeft=e.scrollDOM.scrollLeft},On.keydown=(e,t)=>(e.inputState.setSelectionOrigin("select"),27==t.keyCode&&0!=e.inputState.tabFocusMode&&(e.inputState.tabFocusMode=Date.now()+2e3),!1),Bn.touchstart=(e,t)=>{e.inputState.lastTouchTime=Date.now(),e.inputState.setSelectionOrigin("select.pointer")},Bn.touchmove=e=>{e.inputState.setSelectionOrigin("select.pointer")},On.mousedown=(e,t)=>{if(e.observer.flush(),e.inputState.lastTouchTime>Date.now()-2e3)return!1;let i=null;for(let o of e.state.facet(ji))if(i=o(e,t),i)break;if(i||0!=t.button||(i=function(e,t){let i=e.posAndSideAtCoords({x:t.clientX,y:t.clientY},!1),o=Vn(t),n=e.state.selection;return{update(e){e.docChanged&&(i.pos=e.changes.mapPos(i.pos),n=n.map(e.changes))},get(t,s,r){let a,l=e.posAndSideAtCoords({x:t.clientX,y:t.clientY},!1),c=Rn(e,l.pos,l.assoc,o);if(i.pos!=l.pos&&!s){let t=Rn(e,i.pos,i.assoc,o),n=Math.min(t.from,c.from),s=Math.max(t.to,c.to);c=n1&&(a=function(e,t){for(let i=0;i=t)return ue.create(e.ranges.slice(0,i).concat(e.ranges.slice(i+1)),e.mainIndex==i?0:e.mainIndex-(e.mainIndex>i?1:0))}return null}(n,l.pos))?a:r?n.addRange(c):ue.create([c])}}}(e,t)),i){let o=!e.hasFocus;e.inputState.startMouseSelection(new Dn(e,t,i,o)),o&&e.observer.ignore(()=>{yi(e.contentDOM);let t=e.root.activeElement;t&&!t.contains(e.contentDOM)&&t.blur()});let n=e.inputState.mouseSelection;if(n)return n.start(t),!1===n.dragging}else e.inputState.setSelectionOrigin("select.pointer");return!1};const Fn=Wt.ie&&Wt.ie_version<=11;let qn=null,_n=0,zn=0;function Vn(e){if(!Fn)return e.detail;let t=qn,i=zn;return qn=e,zn=Date.now(),_n=!t||i>Date.now()-400&&Math.abs(t.clientX-e.clientX)<2&&Math.abs(t.clientY-e.clientY)<2?(_n+1)%3:1}function Wn(e,t,i,o){if(!(i=Pn(e.state,Ji,i)))return;let n=e.posAtCoords({x:t.clientX,y:t.clientY},!1),{draggedContent:s}=e.inputState,r=o&&s&&function(e,t){let i=e.state.facet(Ui);return i.length?i[0](t):Wt.mac?!t.altKey:!t.ctrlKey}(e,t)?{from:s.from,to:s.to}:null,a={from:n,insert:i},l=e.state.changes(r?[r,a]:a);e.focus(),e.dispatch({changes:l,selection:{anchor:l.mapPos(n,-1),head:l.mapPos(n,1)},userEvent:r?"move.drop":"input.drop"}),e.inputState.draggedContent=null}On.dragstart=(e,t)=>{let{selection:{main:i}}=e.state;if(t.target.draggable){let o=e.docView.tile.nearest(t.target);if(o&&o.isWidget()){let e=o.posAtStart,t=e+o.length;(e>=i.to||t<=i.from)&&(i=ue.range(e,t))}}let{inputState:o}=e;return o.mouseSelection&&(o.mouseSelection.dragging=!0),o.draggedContent=i,t.dataTransfer&&(t.dataTransfer.setData("Text",Pn(e.state,Xi,e.state.sliceDoc(i.from,i.to))),t.dataTransfer.effectAllowed="copyMove"),!1},On.dragend=e=>(e.inputState.draggedContent=null,!1),On.drop=(e,t)=>{if(!t.dataTransfer)return!1;if(e.state.readOnly)return!0;let i=t.dataTransfer.files;if(i&&i.length){let o=Array(i.length),n=0,s=()=>{++n==i.length&&Wn(e,t,o.filter(e=>null!=e).join(e.state.lineBreak),!1)};for(let e=0;e{/[\x00-\x08\x0e-\x1f]{2}/.test(t.result)||(o[e]=t.result),s()},t.readAsText(i[e])}return!0}{let i=t.dataTransfer.getData("Text");if(i)return Wn(e,t,i,!0),!0}return!1},On.paste=(e,t)=>{if(e.state.readOnly)return!0;e.observer.flush();let i=Ln?null:t.clipboardData;return i?(Nn(e,i.getData("text/plain")||i.getData("text/uri-list")),!0):(function(e){let t=e.dom.parentNode;if(!t)return;let i=t.appendChild(document.createElement("textarea"));i.style.cssText="position: fixed; left: -10000px; top: 10px",i.focus(),setTimeout(()=>{e.focus(),i.remove(),Nn(e,i.value)},50)}(e),!1)};let Hn=null;On.copy=On.cut=(e,t)=>{let i=oi(e.root);if(i&&!si(e.contentDOM,i))return!1;let{text:o,ranges:n,linewise:s}=function(e){let t=[],i=[],o=!1;for(let o of e.selection.ranges)o.empty||(t.push(e.sliceDoc(o.from,o.to)),i.push(o));if(!t.length){let n=-1;for(let{from:o}of e.selection.ranges){let s=e.doc.lineAt(o);s.number>n&&(t.push(s.text),i.push({from:s.from,to:Math.min(e.doc.length,s.to+1)})),n=s.number}o=!0}return{text:Pn(e,Xi,t.join(e.lineBreak)),ranges:i,linewise:o}}(e.state);if(!o&&!s)return!1;Hn=s?o:null,"cut"!=t.type||e.state.readOnly||e.dispatch({changes:n,scrollIntoView:!0,userEvent:"delete.cut"});let r=Ln?null:t.clipboardData;return r?(r.clearData(),r.setData("text/plain",o),!0):(function(e,t){let i=e.dom.parentNode;if(!i)return;let o=i.appendChild(document.createElement("textarea"));o.style.cssText="position: fixed; left: -10000px; top: 10px",o.value=t,o.focus(),o.selectionEnd=t.length,o.selectionStart=0,setTimeout(()=>{o.remove(),e.focus()},50)}(e,o),!1)};const $n=We.define();function Un(e,t){let i=[];for(let o of e.facet(Ki)){let n=o(e,t);n&&i.push(n)}return i.length?e.update({effects:i,annotations:$n.of(!0)}):null}function jn(e){setTimeout(()=>{let t=e.hasFocus;if(t!=e.inputState.notifiedFocused){let i=Un(e.state,t);i?e.dispatch(i):e.update([])}},10)}Bn.focus=e=>{e.inputState.lastFocusTime=Date.now(),e.scrollDOM.scrollTop||!e.inputState.lastScrollTop&&!e.inputState.lastScrollLeft||(e.scrollDOM.scrollTop=e.inputState.lastScrollTop,e.scrollDOM.scrollLeft=e.inputState.lastScrollLeft),jn(e)},Bn.blur=e=>{e.observer.clearSelectionRange(),jn(e)},Bn.compositionstart=Bn.compositionupdate=e=>{e.observer.editContext||(null==e.inputState.compositionFirstChange&&(e.inputState.compositionFirstChange=!0),e.inputState.composing<0&&(e.inputState.composing=0))},Bn.compositionend=e=>{e.observer.editContext||(e.inputState.composing=-1,e.inputState.compositionEndedAt=Date.now(),e.inputState.compositionPendingKey=!0,e.inputState.compositionPendingChange=e.observer.pendingRecords().length>0,e.inputState.compositionFirstChange=null,Wt.chrome&&Wt.android?e.observer.flushSoon():e.inputState.compositionPendingChange?Promise.resolve().then(()=>e.observer.flush()):setTimeout(()=>{e.inputState.composing<0&&e.docView.hasComposition&&e.update([])},50))},Bn.contextmenu=e=>{e.inputState.lastContextMenu=Date.now()},On.beforeinput=(e,t)=>{var i,o;if("insertText"!=t.inputType&&"insertCompositionText"!=t.inputType||(e.inputState.insertingText=t.data,e.inputState.insertingTextAt=Date.now()),"insertReplacementText"==t.inputType&&e.observer.editContext){let o=null===(i=t.dataTransfer)||void 0===i?void 0:i.getData("text/plain"),n=t.getTargetRanges();if(o&&n.length){let t=n[0],i=e.posAtDOM(t.startContainer,t.startOffset),s=e.posAtDOM(t.endContainer,t.endOffset);return vn(e,{from:i,to:s,insert:e.state.toText(o)},null),!0}}let n;if(Wt.chrome&&Wt.android&&(n=En.find(e=>e.inputType==t.inputType))&&(e.observer.delayAndroidKey(n.key,n.keyCode),"Backspace"==n.key||"Delete"==n.key)){let t=(null===(o=window.visualViewport)||void 0===o?void 0:o.height)||0;setTimeout(()=>{var i;((null===(i=window.visualViewport)||void 0===i?void 0:i.height)||0)>t+10&&e.hasFocus&&(e.contentDOM.blur(),e.focus())},100)}return Wt.ios&&"deleteContentForward"==t.inputType&&e.observer.flushSoon(),Wt.safari&&"insertText"==t.inputType&&e.inputState.composing>=0&&setTimeout(()=>Bn.compositionend(e,t),20),!1};const Yn=new Set;const Gn=["pre-wrap","normal","pre-line","break-spaces"];let Zn=!1;function Kn(){Zn=!1}class Jn{constructor(e){this.lineWrapping=e,this.doc=$.empty,this.heightSamples={},this.lineHeight=14,this.charWidth=7,this.textHeight=14,this.lineLength=30}heightForGap(e,t){let i=this.doc.lineAt(t).number-this.doc.lineAt(e).number+1;return this.lineWrapping&&(i+=Math.max(0,Math.ceil((t-e-i*this.lineLength*.5)/this.lineLength))),this.lineHeight*i}heightForLine(e){if(!this.lineWrapping)return this.lineHeight;return(1+Math.max(0,Math.ceil((e-this.lineLength)/Math.max(1,this.lineLength-5))))*this.lineHeight}setDoc(e){return this.doc=e,this}mustRefreshForWrapping(e){return Gn.indexOf(e)>-1!=this.lineWrapping}mustRefreshForHeights(e){let t=!1;for(let i=0;i-1,a=Math.abs(t-this.lineHeight)>.3||this.lineWrapping!=r||Math.abs(i-this.charWidth)>.1;if(this.lineWrapping=r,this.lineHeight=t,this.charWidth=i,this.textHeight=o,this.lineLength=n,a){this.heightSamples={};for(let e=0;e0}set outdated(e){this.flags=(e?2:0)|-3&this.flags}setHeight(e){this.height!=e&&(Math.abs(this.height-e)>ts&&(Zn=!0),this.height=e)}replace(e,t,i){return is.of(i)}decomposeLeft(e,t){t.push(this)}decomposeRight(e,t){t.push(this)}applyChanges(e,t,i,o){let n=this,s=i.doc;for(let r=o.length-1;r>=0;r--){let{fromA:a,toA:l,fromB:c,toB:d}=o[r],h=n.lineAt(a,es.ByPosNoHeight,i.setDoc(t),0,0),u=h.to>=l?h:n.lineAt(l,es.ByPosNoHeight,i,0,0);for(d+=u.to-l,l=u.to;r>0&&h.from<=o[r-1].toA;)a=o[r-1].fromA,c=o[r-1].fromB,r--,a2*n){let n=e[t-1];n.break?e.splice(--t,1,n.left,null,n.right):e.splice(--t,1,n.left,n.right),i+=1+n.break,o-=n.size}else{if(!(n>2*o))break;{let t=e[i];t.break?e.splice(i,1,t.left,null,t.right):e.splice(i,1,t.left,t.right),i+=2+t.break,n-=t.size}}else if(o=n&&s(this.lineAt(0,es.ByPos,i,o,n))}setMeasuredHeight(e){let t=e.heights[e.index++];t<0?(this.spaceAbove=-t,t=e.heights[e.index++]):this.spaceAbove=0,this.setHeight(t)}updateHeight(e,t=0,i=!1,o){return o&&o.from<=t&&o.more&&this.setMeasuredHeight(o),this.outdated=!1,this}toString(){return`block(${this.length})`}}class rs extends ss{constructor(e,t,i){super(e,t,null),this.collapsed=0,this.widgetHeight=0,this.breaks=0,this.spaceAbove=i}mainBlock(e,t){return new Qn(t,this.length,e+this.spaceAbove,this.height-this.spaceAbove,this.breaks)}replace(e,t,i){let o=i[0];return 1==i.length&&(o instanceof rs||o instanceof as&&4&o.flags)&&Math.abs(this.length-o.length)<10?(o instanceof as?o=new rs(o.length,this.height,this.spaceAbove):o.height=this.height,this.outdated||(o.outdated=!1),o):is.of(i)}updateHeight(e,t=0,i=!1,o){return o&&o.from<=t&&o.more?this.setMeasuredHeight(o):(i||this.outdated)&&(this.spaceAbove=0,this.setHeight(Math.max(this.widgetHeight,e.heightForLine(this.length-this.collapsed))+this.breaks*e.lineHeight)),this.outdated=!1,this}toString(){return`line(${this.length}${this.collapsed?-this.collapsed:""}${this.widgetHeight?":"+this.widgetHeight:""})`}}class as extends is{constructor(e){super(e,0)}heightMetrics(e,t){let i,o=e.doc.lineAt(t).number,n=e.doc.lineAt(t+this.length).number,s=n-o+1,r=0;if(e.lineWrapping){let t=Math.min(this.height,e.lineHeight*s);i=t/s,this.length>s+1&&(r=(this.height-t)/(this.length-s-1))}else i=this.height/s;return{firstLine:o,lastLine:n,perLine:i,perChar:r}}blockAt(e,t,i,o){let{firstLine:n,lastLine:s,perLine:r,perChar:a}=this.heightMetrics(t,o);if(t.lineWrapping){let n=o+(e0){let e=i[i.length-1];e instanceof as?i[i.length-1]=new as(e.length+o):i.push(null,new as(o-1))}if(e>0){let t=i[0];t instanceof as?i[0]=new as(e+t.length):i.unshift(new as(e-1),null)}return is.of(i)}decomposeLeft(e,t){t.push(new as(e-1),null)}decomposeRight(e,t){t.push(null,new as(this.length-e-1))}updateHeight(e,t=0,i=!1,o){let n=t+this.length;if(o&&o.from<=t+this.length&&o.more){let i=[],s=Math.max(t,o.from),r=-1;for(o.from>t&&i.push(new as(o.from-t-1).updateHeight(e,t));s<=n&&o.more;){let t=e.doc.lineAt(s).length;i.length&&i.push(null);let n=o.heights[o.index++],a=0;n<0&&(a=-n,n=o.heights[o.index++]),-1==r?r=n:Math.abs(n-r)>=ts&&(r=-2);let l=new rs(t,n,a);l.outdated=!1,i.push(l),s+=t+1}s<=n&&i.push(null,new as(n-s).updateHeight(e,s));let a=is.of(i);return(r<0||Math.abs(a.height-this.height)>=ts||Math.abs(r-this.heightMetrics(e,t).perLine)>=ts)&&(Zn=!0),os(this,a)}return(i||this.outdated)&&(this.setHeight(e.heightForGap(t,t+this.length)),this.outdated=!1),this}toString(){return`gap(${this.length})`}}class ls extends is{constructor(e,t,i){super(e.length+t+i.length,e.height+i.height,t|(e.outdated||i.outdated?2:0)),this.left=e,this.right=i,this.size=e.size+i.size}get break(){return 1&this.flags}blockAt(e,t,i,o){let n=i+this.left.height;return er))return l;let c=t==es.ByPosNoHeight?es.ByPosNoHeight:es.ByPos;return a?l.join(this.right.lineAt(r,c,i,s,r)):this.left.lineAt(r,c,i,o,n).join(l)}forEachLine(e,t,i,o,n,s){let r=o+this.left.height,a=n+this.left.length+this.break;if(this.break)e=a&&this.right.forEachLine(e,t,i,r,a,s);else{let l=this.lineAt(a,es.ByPos,i,o,n);e=e&&l.from<=t&&s(l),t>l.to&&this.right.forEachLine(l.to+1,t,i,r,a,s)}}replace(e,t,i){let o=this.left.length+this.break;if(tthis.left.length)return this.balanced(this.left,this.right.replace(e-o,t-o,i));let n=[];e>0&&this.decomposeLeft(e,n);let s=n.length;for(let e of i)n.push(e);if(e>0&&cs(n,s-1),t=i&&t.push(null)),e>i&&this.right.decomposeLeft(e-i,t)}decomposeRight(e,t){let i=this.left.length,o=i+this.break;if(e>=o)return this.right.decomposeRight(e-o,t);e2*t.size||t.size>2*e.size?is.of(this.break?[e,null,t]:[e,t]):(this.left=os(this.left,e),this.right=os(this.right,t),this.setHeight(e.height+t.height),this.outdated=e.outdated||t.outdated,this.size=e.size+t.size,this.length=e.length+this.break+t.length,this)}updateHeight(e,t=0,i=!1,o){let{left:n,right:s}=this,r=t+n.length+this.break,a=null;return o&&o.from<=t+n.length&&o.more?a=n=n.updateHeight(e,t,i,o):n.updateHeight(e,t,i),o&&o.from<=r+s.length&&o.more?a=s=s.updateHeight(e,r,i,o):s.updateHeight(e,r,i),a?this.balanced(n,s):(this.height=this.left.height+this.right.height,this.outdated=!1,this)}toString(){return this.left+(this.break?" ":"-")+this.right}}function cs(e,t){let i,o;null==e[t]&&(i=e[t-1])instanceof as&&(o=e[t+1])instanceof as&&e.splice(t-1,3,new as(i.length+1+o.length))}class ds{constructor(e,t){this.pos=e,this.oracle=t,this.nodes=[],this.lineStart=-1,this.lineEnd=-1,this.covering=null,this.writtenTo=e}get isCovered(){return this.covering&&this.nodes[this.nodes.length-1]==this.covering}span(e,t){if(this.lineStart>-1){let e=Math.min(t,this.lineEnd),i=this.nodes[this.nodes.length-1];i instanceof rs?i.length+=e-this.pos:(e>this.pos||!this.isCovered)&&this.nodes.push(new rs(e-this.pos,-1,0)),this.writtenTo=e,t>e&&(this.nodes.push(null),this.writtenTo++,this.lineStart=-1)}this.pos=t}point(e,t,i){if(e=5)&&this.addLineDeco(o,n,s)}else t>e&&this.span(e,t);this.lineEnd>-1&&this.lineEnd-1)return;let{from:e,to:t}=this.oracle.doc.lineAt(this.pos);this.lineStart=e,this.lineEnd=t,this.writtenToe&&this.nodes.push(new rs(this.pos-e,-1,0)),this.writtenTo=this.pos}blankContent(e,t){let i=new as(t-e);return this.oracle.doc.lineAt(e).to==t&&(i.flags|=4),i}ensureLine(){this.enterLine();let e=this.nodes.length?this.nodes[this.nodes.length-1]:null;if(e instanceof rs)return e;let t=new rs(0,-1,0);return this.nodes.push(t),t}addBlock(e){this.enterLine();let t=e.deco;t&&t.startSide>0&&!this.isCovered&&this.ensureLine(),this.nodes.push(e),this.writtenTo=this.pos=this.pos+e.length,t&&t.endSide>0&&(this.covering=e)}addLineDeco(e,t,i){let o=this.ensureLine();o.length+=i,o.collapsed+=i,o.widgetHeight=Math.max(o.widgetHeight,e),o.breaks+=t,this.writtenTo=this.pos=this.pos+i}finish(e){let t=0==this.nodes.length?null:this.nodes[this.nodes.length-1];!(this.lineStart>-1)||t instanceof rs||this.isCovered?(this.writtenToi.clientHeight||i.scrollWidth>i.clientWidth)&&"visible"!=o.overflow){let o=i.getBoundingClientRect();s=Math.max(s,o.left),r=Math.min(r,o.right),a=Math.max(a,o.top),l=Math.min(t==e.parentNode?n.innerHeight:l,o.bottom)}t="absolute"==o.position||"fixed"==o.position?i.offsetParent:i.parentNode}else{if(11!=t.nodeType)break;t=t.host}return{left:s-i.left,right:Math.max(s,r)-i.left,top:a-(i.top+t),bottom:Math.max(a,l)-(i.top+t)}}function ps(e,t){let i=e.getBoundingClientRect();return{left:0,right:i.right-i.left,top:t,bottom:i.bottom-(i.top+t)}}class ms{constructor(e,t,i,o){this.from=e,this.to=t,this.size=i,this.displaySize=o}static same(e,t){if(e.length!=t.length)return!1;for(let i=0;i"function"!=typeof e&&"cm-lineWrapping"==e.class);this.heightOracle=new Jn(t),this.stateDeco=Cs(e),this.heightMap=is.empty().applyChanges(this.stateDeco,$.empty,this.heightOracle.setDoc(e.doc),[new ko(0,0,0,e.doc.length)]);for(let e=0;e<2&&(this.viewport=this.getViewport(0,null),this.updateForViewport());e++);this.updateViewportLines(),this.lineGaps=this.ensureLineGaps([]),this.lineGapDeco=Kt.set(this.lineGaps.map(e=>e.draw(this,!1))),this.computeVisibleRanges()}updateForViewport(){let e=[this.viewport],{main:t}=this.state.selection;for(let i=0;i<=1;i++){let o=i?t.head:t.anchor;if(!e.some(({from:e,to:t})=>o>=e&&o<=t)){let{from:t,to:i}=this.lineBlockAt(o);e.push(new bs(t,i))}}return this.viewports=e.sort((e,t)=>e.from-t.from),this.updateScaler()}updateScaler(){let e=this.scaler;return this.scaler=this.heightMap.height<=7e6?vs:new xs(this.heightOracle,this.heightMap,this.viewports),e.eq(this.scaler)?0:2}updateViewportLines(){this.viewportLines=[],this.heightMap.forEachLine(this.viewport.from,this.viewport.to,this.heightOracle.setDoc(this.state.doc),0,0,e=>{this.viewportLines.push(ks(e,this.scaler))})}update(e,t=null){this.state=e.state;let i=this.stateDeco;this.stateDeco=Cs(this.state);let o=e.changedRanges,n=ko.extendWithRanges(o,function(e,t,i){let o=new hs;return ct.compare(e,t,i,o,0),o.changes}(i,this.stateDeco,e?e.changes:ne.empty(this.state.doc.length))),s=this.heightMap.height,r=this.scrolledToBottom?null:this.scrollAnchorAt(this.scrollTop);Kn(),this.heightMap=this.heightMap.applyChanges(this.stateDeco,e.startState.doc,this.heightOracle.setDoc(this.state.doc),n),(this.heightMap.height!=s||Zn)&&(e.flags|=2),r?(this.scrollAnchorPos=e.changes.mapPos(r.from,-1),this.scrollAnchorHeight=r.top):(this.scrollAnchorPos=-1,this.scrollAnchorHeight=s);let a=n.length?this.mapViewport(this.viewport,e.changes):this.viewport;(t&&(t.range.heada.to)||!this.viewportIsAppropriate(a))&&(a=this.getViewport(0,t));let l=a.from!=this.viewport.from||a.to!=this.viewport.to;this.viewport=a,e.flags|=this.updateForViewport(),(l||!e.changes.empty||2&e.flags)&&this.updateViewportLines(),(this.lineGaps.length||this.viewport.to-this.viewport.from>4e3)&&this.updateLineGaps(this.ensureLineGaps(this.mapLineGaps(this.lineGaps,e.changes))),e.flags|=this.computeVisibleRanges(e.changes),t&&(this.scrollTarget=t),!this.mustEnforceCursorAssoc&&(e.selectionSet||e.focusChanged)&&e.view.lineWrapping&&e.state.selection.main.empty&&e.state.selection.main.assoc&&!e.state.facet(eo)&&(this.mustEnforceCursorAssoc=!0)}measure(e){let t=e.contentDOM,i=window.getComputedStyle(t),o=this.heightOracle,n=i.whiteSpace;this.defaultTextDirection="rtl"==i.direction?Ti.RTL:Ti.LTR;let s=this.heightOracle.mustRefreshForWrapping(n)||this.mustMeasureContent,r=t.getBoundingClientRect(),a=s||this.mustMeasureContent||this.contentDOMHeight!=r.height;this.contentDOMHeight=r.height,this.mustMeasureContent=!1;let l=0,c=0;if(r.width&&r.height){let{scaleX:e,scaleY:i}=mi(t,r);(e>.005&&Math.abs(this.scaleX-e)>.005||i>.005&&Math.abs(this.scaleY-i)>.005)&&(this.scaleX=e,this.scaleY=i,l|=16,s=a=!0)}let d=(parseInt(i.paddingTop)||0)*this.scaleY,h=(parseInt(i.paddingBottom)||0)*this.scaleY;this.paddingTop==d&&this.paddingBottom==h||(this.paddingTop=d,this.paddingBottom=h,l|=18),this.editorWidth!=e.scrollDOM.clientWidth&&(o.lineWrapping&&(a=!0),this.editorWidth=e.scrollDOM.clientWidth,l|=16);let u=e.scrollDOM.scrollTop*this.scaleY;this.scrollTop!=u&&(this.scrollAnchorHeight=-1,this.scrollTop=u),this.scrolledToBottom=Ci(e.scrollDOM);let p=(this.printing?ps:us)(t,this.paddingTop),m=p.top-this.pixelViewport.top,g=p.bottom-this.pixelViewport.bottom;this.pixelViewport=p;let f=this.pixelViewport.bottom>this.pixelViewport.top&&this.pixelViewport.right>this.pixelViewport.left;if(f!=this.inView&&(this.inView=f,f&&(a=!0)),!this.inView&&!this.scrollTarget&&!function(e){let t=e.getBoundingClientRect(),i=e.ownerDocument.defaultView||window;return t.left0&&t.top0}(e.dom))return 0;let b=r.width;if(this.contentDOMWidth==b&&this.editorHeight==e.scrollDOM.clientHeight||(this.contentDOMWidth=r.width,this.editorHeight=e.scrollDOM.clientHeight,l|=16),a){let t=e.docView.measureVisibleLineHeights(this.viewport);if(o.mustRefreshForHeights(t)&&(s=!0),s||o.lineWrapping&&Math.abs(b-this.contentDOMWidth)>o.charWidth){let{lineHeight:i,charWidth:r,textHeight:a}=e.docView.measureTextSize();s=i>0&&o.refresh(n,i,r,a,Math.max(5,b/r),t),s&&(e.docView.minWidth=0,l|=16)}m>0&&g>0?c=Math.max(m,g):m<0&&g<0&&(c=Math.min(m,g)),Kn();for(let i of this.viewports){let n=i.from==this.viewport.from?t:e.docView.measureVisibleLineHeights(i);this.heightMap=(s?is.empty().applyChanges(this.stateDeco,$.empty,this.heightOracle,[new ko(0,0,0,e.state.doc.length)]):this.heightMap).updateHeight(o,0,s,new Xn(i.from,n))}Zn&&(l|=2)}let y=!this.viewportIsAppropriate(this.viewport,c)||this.scrollTarget&&(this.scrollTarget.range.headthis.viewport.to);return y&&(2&l&&(l|=this.updateScaler()),this.viewport=this.getViewport(c,this.scrollTarget),l|=this.updateForViewport()),(2&l||y)&&this.updateViewportLines(),(this.lineGaps.length||this.viewport.to-this.viewport.from>4e3)&&this.updateLineGaps(this.ensureLineGaps(s?[]:this.lineGaps,e)),l|=this.computeVisibleRanges(),this.mustEnforceCursorAssoc&&(this.mustEnforceCursorAssoc=!1,e.docView.enforceCursorAssoc()),l}get visibleTop(){return this.scaler.fromDOM(this.pixelViewport.top)}get visibleBottom(){return this.scaler.fromDOM(this.pixelViewport.bottom)}getViewport(e,t){let i=.5-Math.max(-.5,Math.min(.5,e/1e3/2)),o=this.heightMap,n=this.heightOracle,{visibleTop:s,visibleBottom:r}=this,a=new bs(o.lineAt(s-1e3*i,es.ByHeight,n,0,0).from,o.lineAt(r+1e3*(1-i),es.ByHeight,n,0,0).to);if(t){let{head:e}=t.range;if(ea.to){let i,s=Math.min(this.editorHeight,this.pixelViewport.bottom-this.pixelViewport.top),r=o.lineAt(e,es.ByPos,n,0,0);i="center"==t.y?(r.top+r.bottom)/2-s/2:"start"==t.y||"nearest"==t.y&&e=r+Math.max(10,Math.min(i,250)))&&o>s-2e3&&n>1,s=o<<1;if(this.defaultTextDirection!=Ti.LTR&&!i)return[];let r=[],a=(o,s,l,c)=>{if(s-oo&&ee.from>=l.from&&e.to<=l.to&&Math.abs(e.from-o)e.fromt));if(!u){if(se.from<=s&&e.to>=s)){let e=t.moveToLineBoundary(ue.cursor(s),!1,!0).head;e>o&&(s=e)}let e=this.gapSize(l,o,s,c);u=new ms(o,s,e,i||e<2e6?e:2e6)}r.push(u)},l=t=>{if(t.lengthn&&(o.push({from:n,to:e}),s+=e-n),n=t}},20),n2e6)for(let i of e)i.from>=t.from&&i.fromt.from&&a(t.from,r,t,n),le.draw(this,this.heightOracle.lineWrapping))))}computeVisibleRanges(e){let t=this.stateDeco;this.lineGaps.length&&(t=t.concat(this.lineGapDeco));let i=[];ct.spans(t,this.viewport.from,this.viewport.to,{span(e,t){i.push({from:e,to:t})},point(){}},20);let o=0;if(i.length!=this.visibleRanges.length)o=12;else for(let t=0;t=this.viewport.from&&e<=this.viewport.to&&this.viewportLines.find(t=>t.from<=e&&t.to>=e)||ks(this.heightMap.lineAt(e,es.ByPos,this.heightOracle,0,0),this.scaler)}lineBlockAtHeight(e){return e>=this.viewportLines[0].top&&e<=this.viewportLines[this.viewportLines.length-1].bottom&&this.viewportLines.find(t=>t.top<=e&&t.bottom>=e)||ks(this.heightMap.lineAt(this.scaler.fromDOM(e),es.ByHeight,this.heightOracle,0,0),this.scaler)}scrollAnchorAt(e){let t=this.lineBlockAtHeight(e+8);return t.from>=this.viewport.from||this.viewportLines[0].top-e>200?t:this.viewportLines[0]}elementAtHeight(e){return ks(this.heightMap.blockAt(this.scaler.fromDOM(e),this.heightOracle,0,0),this.scaler)}get docHeight(){return this.scaler.toDOM(this.heightMap.height)}get contentHeight(){return this.docHeight+this.paddingTop+this.paddingBottom}}class bs{constructor(e,t){this.from=e,this.to=t}}function ys({total:e,ranges:t},i){if(i<=0)return t[0].from;if(i>=1)return t[t.length-1].to;let o=Math.floor(e*i);for(let e=0;;e++){let{from:i,to:n}=t[e],s=n-i;if(o<=s)return i+o;o-=s}}function ws(e,t){let i=0;for(let{from:o,to:n}of e.ranges){if(t<=n){i+=t-o;break}i+=n-o}return i/e.total}const vs={toDOM:e=>e,fromDOM:e=>e,scale:1,eq(e){return e==this}};function Cs(e){let t=e.facet(mo).filter(e=>"function"!=typeof e),i=e.facet(fo).filter(e=>"function"!=typeof e);return i.length&&t.push(ct.join(i)),t}class xs{constructor(e,t,i){let o=0,n=0,s=0;this.viewports=i.map(({from:i,to:n})=>{let s=t.lineAt(i,es.ByPos,e,0,0).top,r=t.lineAt(n,es.ByPos,e,0,0).bottom;return o+=r-s,{from:i,to:n,top:s,bottom:r,domTop:0,domBottom:0}}),this.scale=(7e6-o)/(t.height-o);for(let e of this.viewports)e.domTop=s+(e.top-n)*this.scale,s=e.domBottom=e.domTop+(e.bottom-e.top),n=e.bottom}toDOM(e){for(let t=0,i=0,o=0;;t++){let n=tt.from==e.viewports[i].from&&t.to==e.viewports[i].to))}}function ks(e,t){if(1==t.scale)return e;let i=t.toDOM(e.top),o=t.toDOM(e.bottom);return new Qn(e.from,e.length,i,o-i,Array.isArray(e._content)?e._content.map(e=>ks(e,t)):e._content)}const Ss=ge.define({combine:e=>e.join(" ")}),Ts=ge.define({combine:e=>e.indexOf(!0)>-1}),Es=St.newName(),Ms=St.newName(),As=St.newName(),Is={"&light":"."+Ms,"&dark":"."+As};function Ds(e,t,i){return new St(t,{finish:t=>/&/.test(t)?t.replace(/&\w*/,t=>{if("&"==t)return e;if(!i||!i[t])throw new RangeError(`Unsupported selector: ${t}`);return i[t]}):e+" "+t})}const Os=Ds("."+Es,{"&":{position:"relative !important",boxSizing:"border-box","&.cm-focused":{outline:"1px dotted #212121"},display:"flex !important",flexDirection:"column"},".cm-scroller":{display:"flex !important",alignItems:"flex-start !important",fontFamily:"monospace",lineHeight:1.4,height:"100%",overflowX:"auto",position:"relative",zIndex:0,overflowAnchor:"none"},".cm-content":{margin:0,flexGrow:2,flexShrink:0,display:"block",whiteSpace:"pre",wordWrap:"normal",boxSizing:"border-box",minHeight:"100%",padding:"4px 0",outline:"none","&[contenteditable=true]":{WebkitUserModify:"read-write-plaintext-only"}},".cm-lineWrapping":{whiteSpace_fallback:"pre-wrap",whiteSpace:"break-spaces",wordBreak:"break-word",overflowWrap:"anywhere",flexShrink:1},"&light .cm-content":{caretColor:"black"},"&dark .cm-content":{caretColor:"white"},".cm-line":{display:"block",padding:"0 2px 0 6px"},".cm-layer":{position:"absolute",left:0,top:0,contain:"size style","& > *":{position:"absolute"}},"&light .cm-selectionBackground":{background:"#d9d9d9"},"&dark .cm-selectionBackground":{background:"#222"},"&light.cm-focused > .cm-scroller > .cm-selectionLayer .cm-selectionBackground":{background:"#d7d4f0"},"&dark.cm-focused > .cm-scroller > .cm-selectionLayer .cm-selectionBackground":{background:"#233"},".cm-cursorLayer":{pointerEvents:"none"},"&.cm-focused > .cm-scroller > .cm-cursorLayer":{animation:"steps(1) cm-blink 1.2s infinite"},"@keyframes cm-blink":{"0%":{},"50%":{opacity:0},"100%":{}},"@keyframes cm-blink2":{"0%":{},"50%":{opacity:0},"100%":{}},".cm-cursor, .cm-dropCursor":{borderLeft:"1.2px solid black",marginLeft:"-0.6px",pointerEvents:"none"},".cm-cursor":{display:"none"},"&dark .cm-cursor":{borderLeftColor:"#ddd"},".cm-dropCursor":{position:"absolute"},"&.cm-focused > .cm-scroller > .cm-cursorLayer .cm-cursor":{display:"block"},".cm-iso":{unicodeBidi:"isolate"},".cm-announced":{position:"fixed",top:"-10000px"},"@media print":{".cm-announced":{display:"none"}},"&light .cm-activeLine":{backgroundColor:"#cceeff44"},"&dark .cm-activeLine":{backgroundColor:"#99eeff33"},"&light .cm-specialChar":{color:"red"},"&dark .cm-specialChar":{color:"#f78"},".cm-gutters":{flexShrink:0,display:"flex",height:"100%",boxSizing:"border-box",zIndex:200},".cm-gutters-before":{insetInlineStart:0},".cm-gutters-after":{insetInlineEnd:0},"&light .cm-gutters":{backgroundColor:"#f5f5f5",color:"#6c6c6c",border:"0px solid #ddd","&.cm-gutters-before":{borderRightWidth:"1px"},"&.cm-gutters-after":{borderLeftWidth:"1px"}},"&dark .cm-gutters":{backgroundColor:"#333338",color:"#ccc"},".cm-gutter":{display:"flex !important",flexDirection:"column",flexShrink:0,boxSizing:"border-box",minHeight:"100%",overflow:"hidden"},".cm-gutterElement":{boxSizing:"border-box"},".cm-lineNumbers .cm-gutterElement":{padding:"0 3px 0 5px",minWidth:"20px",textAlign:"right",whiteSpace:"nowrap"},"&light .cm-activeLineGutter":{backgroundColor:"#e2f2ff"},"&dark .cm-activeLineGutter":{backgroundColor:"#222227"},".cm-panels":{boxSizing:"border-box",position:"sticky",left:0,right:0,zIndex:300},"&light .cm-panels":{backgroundColor:"#f5f5f5",color:"black"},"&light .cm-panels-top":{borderBottom:"1px solid #ddd"},"&light .cm-panels-bottom":{borderTop:"1px solid #ddd"},"&dark .cm-panels":{backgroundColor:"#333338",color:"white"},".cm-dialog":{padding:"2px 19px 4px 6px",position:"relative","& label":{fontSize:"80%"}},".cm-dialog-close":{position:"absolute",top:"3px",right:"4px",backgroundColor:"inherit",border:"none",font:"inherit",fontSize:"14px",padding:"0"},".cm-tab":{display:"inline-block",overflow:"hidden",verticalAlign:"bottom"},".cm-widgetBuffer":{verticalAlign:"text-top",height:"1em",width:0,display:"inline"},".cm-placeholder":{color:"#888",display:"inline-block",verticalAlign:"top",userSelect:"none"},".cm-highlightSpace":{backgroundImage:"radial-gradient(circle at 50% 55%, #aaa 20%, transparent 5%)",backgroundPosition:"center"},".cm-highlightTab":{backgroundImage:'url(\'data:image/svg+xml,\')',backgroundSize:"auto 100%",backgroundPosition:"right 90%",backgroundRepeat:"no-repeat"},".cm-trailingSpace":{backgroundColor:"#ff332255"},".cm-button":{verticalAlign:"middle",color:"inherit",fontSize:"70%",padding:".2em 1em",borderRadius:"1px"},"&light .cm-button":{backgroundImage:"linear-gradient(#eff1f5, #d9d9df)",border:"1px solid #888","&:active":{backgroundImage:"linear-gradient(#b4b4b4, #d0d3d6)"}},"&dark .cm-button":{backgroundImage:"linear-gradient(#393939, #111)",border:"1px solid #888","&:active":{backgroundImage:"linear-gradient(#111, #333)"}},".cm-textfield":{verticalAlign:"middle",color:"inherit",fontSize:"70%",border:"1px solid silver",padding:".2em .5em"},"&light .cm-textfield":{backgroundColor:"white"},"&dark .cm-textfield":{border:"1px solid #555",backgroundColor:"inherit"}},Is),Bs={childList:!0,characterData:!0,subtree:!0,attributes:!0,characterDataOldValue:!0},Ls=Wt.ie&&Wt.ie_version<=11;class Ps{constructor(e){this.view=e,this.active=!1,this.editContext=null,this.selectionRange=new gi,this.selectionChanged=!1,this.delayedFlush=-1,this.resizeTimeout=-1,this.queue=[],this.delayedAndroidKey=null,this.flushingAndroidKey=-1,this.lastChange=0,this.scrollTargets=[],this.intersection=null,this.resizeScroll=null,this.intersecting=!1,this.gapIntersection=null,this.gaps=[],this.printQuery=null,this.parentCheck=-1,this.dom=e.contentDOM,this.observer=new MutationObserver(t=>{for(let e of t)this.queue.push(e);(Wt.ie&&Wt.ie_version<=11||Wt.ios&&e.composing)&&t.some(e=>"childList"==e.type&&e.removedNodes.length||"characterData"==e.type&&e.oldValue.length>e.target.nodeValue.length)?this.flushSoon():this.flush()}),!window.EditContext||!Wt.android||!1===e.constructor.EDIT_CONTEXT||Wt.chrome&&Wt.chrome_version<126||(this.editContext=new Fs(e),e.state.facet(ro)&&(e.contentDOM.editContext=this.editContext.editContext)),Ls&&(this.onCharData=e=>{this.queue.push({target:e.target,type:"characterData",oldValue:e.prevValue}),this.flushSoon()}),this.onSelectionChange=this.onSelectionChange.bind(this),this.onResize=this.onResize.bind(this),this.onPrint=this.onPrint.bind(this),this.onScroll=this.onScroll.bind(this),window.matchMedia&&(this.printQuery=window.matchMedia("print")),"function"==typeof ResizeObserver&&(this.resizeScroll=new ResizeObserver(()=>{var e;(null===(e=this.view.docView)||void 0===e?void 0:e.lastUpdate){this.parentCheck<0&&(this.parentCheck=setTimeout(this.listenForScroll.bind(this),1e3)),e.length>0&&e[e.length-1].intersectionRatio>0!=this.intersecting&&(this.intersecting=!this.intersecting,this.intersecting!=this.view.inView&&this.onScrollChanged(document.createEvent("Event")))},{threshold:[0,.001]}),this.intersection.observe(this.dom),this.gapIntersection=new IntersectionObserver(e=>{e.length>0&&e[e.length-1].intersectionRatio>0&&this.onScrollChanged(document.createEvent("Event"))},{})),this.listenForScroll(),this.readSelectionRange()}onScrollChanged(e){this.view.inputState.runHandlers("scroll",e),this.intersecting&&this.view.measure()}onScroll(e){this.intersecting&&this.flush(!1),this.editContext&&this.view.requestMeasure(this.editContext.measureReq),this.onScrollChanged(e)}onResize(){this.resizeTimeout<0&&(this.resizeTimeout=setTimeout(()=>{this.resizeTimeout=-1,this.view.requestMeasure()},50))}onPrint(e){("change"!=e.type&&e.type||e.matches)&&(this.view.viewState.printing=!0,this.view.measure(),setTimeout(()=>{this.view.viewState.printing=!1,this.view.requestMeasure()},500))}updateGaps(e){if(this.gapIntersection&&(e.length!=this.gaps.length||this.gaps.some((t,i)=>t!=e[i]))){this.gapIntersection.disconnect();for(let t of e)this.gapIntersection.observe(t);this.gaps=e}}onSelectionChange(e){let t=this.selectionChanged;if(!this.readSelectionRange()||this.delayedAndroidKey)return;let{view:i}=this,o=this.selectionRange;if(i.state.facet(ro)?i.root.activeElement!=this.dom:!si(this.dom,o))return;let n=o.anchorNode&&i.docView.tile.nearest(o.anchorNode);n&&n.isWidget()&&n.widget.ignoreEvent(e)?t||(this.selectionChanged=!1):(Wt.ie&&Wt.ie_version<=11||Wt.android&&Wt.chrome)&&!i.state.selection.main.empty&&o.focusNode&&ai(o.focusNode,o.focusOffset,o.anchorNode,o.anchorOffset)?this.flushSoon():this.flush(!1)}readSelectionRange(){let{view:e}=this,t=oi(e.root);if(!t)return!1;let i=Wt.safari&&11==e.root.nodeType&&e.root.activeElement==this.dom&&function(e,t){if(t.getComposedRanges){let i=t.getComposedRanges(e.root)[0];if(i)return Rs(e,i)}let i=null;function o(e){e.preventDefault(),e.stopImmediatePropagation(),i=e.getTargetRanges()[0]}return e.contentDOM.addEventListener("beforeinput",o,!0),e.dom.ownerDocument.execCommand("indent"),e.contentDOM.removeEventListener("beforeinput",o,!0),i?Rs(e,i):null}(this.view,t)||t;if(!i||this.selectionRange.eq(i))return!1;let o=si(this.dom,i);return o&&!this.selectionChanged&&e.inputState.lastFocusTime>Date.now()-200&&e.inputState.lastTouchTime{let e=this.delayedAndroidKey;if(e){this.clearDelayedAndroidKey(),this.view.inputState.lastKeyCode=e.keyCode,this.view.inputState.lastKeyTime=Date.now(),!this.flush()&&e.force&&vi(this.dom,e.key,e.keyCode)}};this.flushingAndroidKey=this.view.win.requestAnimationFrame(e)}this.delayedAndroidKey&&"Enter"!=e||(this.delayedAndroidKey={key:e,keyCode:t,force:this.lastChange{this.delayedFlush=-1,this.flush()}))}forceFlush(){this.delayedFlush>=0&&(this.view.win.cancelAnimationFrame(this.delayedFlush),this.delayedFlush=-1),this.flush()}pendingRecords(){for(let e of this.observer.takeRecords())this.queue.push(e);return this.queue}processRecords(){let e=this.pendingRecords();e.length&&(this.queue=[]);let t=-1,i=-1,o=!1;for(let n of e){let e=this.readMutation(n);e&&(e.typeOver&&(o=!0),-1==t?({from:t,to:i}=e):(t=Math.min(e.from,t),i=Math.max(e.to,i)))}return{from:t,to:i,typeOver:o}}readChange(){let{from:e,to:t,typeOver:i}=this.processRecords(),o=this.selectionChanged&&si(this.dom,this.selectionRange);if(e<0&&!o)return null;e>-1&&(this.lastChange=Date.now()),this.view.inputState.lastFocusTime=0,this.selectionChanged=!1;let n=new bn(this.view,e,t,i);return this.view.docView.domChanged={newSel:n.newSel?n.newSel.main:null},n}flush(e=!0){if(this.delayedFlush>=0||this.delayedAndroidKey)return!1;e&&this.readSelectionRange();let t=this.readChange();if(!t)return this.view.requestMeasure(),!1;let i=this.view.state,o=wn(this.view,t);return this.view.state==i&&(t.domChanged||t.newSel&&!xn(this.view.state.selection,t.newSel.main))&&this.view.update([]),o}readMutation(e){let t=this.view.docView.tile.nearest(e.target);if(!t||t.isWidget())return null;if(t.markDirty("attributes"==e.type),"childList"==e.type){let i=Ns(t,e.previousSibling||e.target.previousSibling,-1),o=Ns(t,e.nextSibling||e.target.nextSibling,1);return{from:i?t.posAfter(i):t.posAtStart,to:o?t.posBefore(o):t.posAtEnd,typeOver:!1}}return"characterData"==e.type?{from:t.posAtStart,to:t.posAtEnd,typeOver:e.target.nodeValue==e.oldValue}:null}setWindow(e){e!=this.win&&(this.removeWindowListeners(this.win),this.win=e,this.addWindowListeners(this.win))}addWindowListeners(e){e.addEventListener("resize",this.onResize),this.printQuery?this.printQuery.addEventListener?this.printQuery.addEventListener("change",this.onPrint):this.printQuery.addListener(this.onPrint):e.addEventListener("beforeprint",this.onPrint),e.addEventListener("scroll",this.onScroll),e.document.addEventListener("selectionchange",this.onSelectionChange)}removeWindowListeners(e){e.removeEventListener("scroll",this.onScroll),e.removeEventListener("resize",this.onResize),this.printQuery?this.printQuery.removeEventListener?this.printQuery.removeEventListener("change",this.onPrint):this.printQuery.removeListener(this.onPrint):e.removeEventListener("beforeprint",this.onPrint),e.document.removeEventListener("selectionchange",this.onSelectionChange)}update(e){this.editContext&&(this.editContext.update(e),e.startState.facet(ro)!=e.state.facet(ro)&&(e.view.contentDOM.editContext=e.state.facet(ro)?this.editContext.editContext:null))}destroy(){var e,t,i;this.stop(),null===(e=this.intersection)||void 0===e||e.disconnect(),null===(t=this.gapIntersection)||void 0===t||t.disconnect(),null===(i=this.resizeScroll)||void 0===i||i.disconnect();for(let e of this.scrollTargets)e.removeEventListener("scroll",this.onScroll);this.removeWindowListeners(this.win),clearTimeout(this.parentCheck),clearTimeout(this.resizeTimeout),this.win.cancelAnimationFrame(this.delayedFlush),this.win.cancelAnimationFrame(this.flushingAndroidKey),this.editContext&&(this.view.contentDOM.editContext=null,this.editContext.destroy())}}function Ns(e,t,i){for(;t;){let o=Eo.get(t);if(o&&o.parent==e)return o;let n=t.parentNode;t=n!=e.dom?n:i>0?t.nextSibling:t.previousSibling}return null}function Rs(e,t){let i=t.startContainer,o=t.startOffset,n=t.endContainer,s=t.endOffset,r=e.docView.domAtPos(e.state.selection.main.anchor,1);return ai(r.node,r.offset,n,s)&&([i,o,n,s]=[n,s,i,o]),{anchorNode:i,anchorOffset:o,focusNode:n,focusOffset:s}}class Fs{constructor(e){this.from=0,this.to=0,this.pendingContextChange=null,this.handlers=Object.create(null),this.composing=null,this.resetRange(e.state);let t=this.editContext=new window.EditContext({text:e.state.doc.sliceString(this.from,this.to),selectionStart:this.toContextPos(Math.max(this.from,Math.min(this.to,e.state.selection.main.anchor))),selectionEnd:this.toContextPos(e.state.selection.main.head)});this.handlers.textupdate=i=>{let o=e.state.selection.main,{anchor:n,head:s}=o,r=this.toEditorPos(i.updateRangeStart),a=this.toEditorPos(i.updateRangeEnd);e.inputState.composing>=0&&!this.composing&&(this.composing={contextBase:i.updateRangeStart,editorBase:r,drifted:!1});let l=a-r>i.text.length;r==this.from&&nthis.to&&(a=n);let c=Cn(e.state.sliceDoc(r,a),i.text,(l?o.from:o.to)-r,l?"end":null);if(!c){let t=ue.single(this.toEditorPos(i.selectionStart),this.toEditorPos(i.selectionEnd));return void(xn(t,o)||e.dispatch({selection:t,userEvent:"select"}))}let d={from:c.from+r,to:c.toA+r,insert:$.of(i.text.slice(c.from,c.toB).split("\n"))};if((Wt.mac||Wt.android)&&d.from==s-1&&/^\. ?$/.test(i.text)&&"off"==e.contentDOM.getAttribute("autocorrect")&&(d={from:r,to:a,insert:$.of([i.text.replace("."," ")])}),this.pendingContextChange=d,!e.state.readOnly){let t=this.to-this.from+(d.to-d.from+d.insert.length);vn(e,d,ue.single(this.toEditorPos(i.selectionStart,t),this.toEditorPos(i.selectionEnd,t)))}this.pendingContextChange&&(this.revertPending(e.state),this.setSelection(e.state)),d.from=0&&!/[\\p{Alphabetic}\\p{Number}_]/.test(t.text.slice(Math.max(0,i.updateRangeStart-1),Math.min(t.text.length,i.updateRangeStart+1)))&&this.handlers.compositionend(i)},this.handlers.characterboundsupdate=i=>{let o=[],n=null;for(let t=this.toEditorPos(i.rangeStart),s=this.toEditorPos(i.rangeEnd);t{let i=[];for(let e of t.getTextFormats()){let t=e.underlineStyle,o=e.underlineThickness;if(!/none/i.test(t)&&!/none/i.test(o)){let n=this.toEditorPos(e.rangeStart),s=this.toEditorPos(e.rangeEnd);if(n{e.inputState.composing<0&&(e.inputState.composing=0,e.inputState.compositionFirstChange=!0)},this.handlers.compositionend=()=>{if(e.inputState.composing=-1,e.inputState.compositionFirstChange=null,this.composing){let{drifted:t}=this.composing;this.composing=null,t&&this.reset(e.state)}};for(let e in this.handlers)t.addEventListener(e,this.handlers[e]);this.measureReq={read:e=>{this.editContext.updateControlBounds(e.contentDOM.getBoundingClientRect());let t=oi(e.root);t&&t.rangeCount&&this.editContext.updateSelectionBounds(t.getRangeAt(0).getBoundingClientRect())}}}applyEdits(e){let t=0,i=!1,o=this.pendingContextChange;return e.changes.iterChanges((n,s,r,a,l)=>{if(i)return;let c=l.length-(s-n);if(o&&s>=o.to){if(o.from==n&&o.to==s&&o.insert.eq(l))return o=this.pendingContextChange=null,t+=c,void(this.to+=c);o=null,this.revertPending(e.state)}if(n+=t,(s+=t)<=this.from)this.from+=c,this.to+=c;else if(nthis.to||this.to-this.from+l.length>3e4)return void(i=!0);this.editContext.updateText(this.toContextPos(n),this.toContextPos(s),l.toString()),this.to+=c}t+=c}),o&&!i&&this.revertPending(e.state),!i}update(e){let t=this.pendingContextChange,i=e.startState.selection.main;this.composing&&(this.composing.drifted||!e.changes.touchesRange(i.from,i.to)&&e.transactions.some(e=>!e.isUserEvent("input.type")&&e.changes.touchesRange(this.from,this.to)))?(this.composing.drifted=!0,this.composing.editorBase=e.changes.mapPos(this.composing.editorBase)):this.applyEdits(e)&&this.rangeIsValid(e.state)?(e.docChanged||e.selectionSet||t)&&this.setSelection(e.state):(this.pendingContextChange=null,this.reset(e.state)),(e.geometryChanged||e.docChanged||e.selectionSet)&&e.view.requestMeasure(this.measureReq)}resetRange(e){let{head:t}=e.selection.main;this.from=Math.max(0,t-1e4),this.to=Math.min(e.doc.length,t+1e4)}reset(e){this.resetRange(e),this.editContext.updateText(0,this.editContext.text.length,e.doc.sliceString(this.from,this.to)),this.setSelection(e)}revertPending(e){let t=this.pendingContextChange;this.pendingContextChange=null,this.editContext.updateText(this.toContextPos(t.from),this.toContextPos(t.from+t.insert.length),e.doc.sliceString(t.from,t.to))}setSelection(e){let{main:t}=e.selection,i=this.toContextPos(Math.max(this.from,Math.min(this.to,t.anchor))),o=this.toContextPos(t.head);this.editContext.selectionStart==i&&this.editContext.selectionEnd==o||this.editContext.updateSelection(i,o)}rangeIsValid(e){let{head:t}=e.selection.main;return!(this.from>0&&t-this.from<500||this.to3e4)}toEditorPos(e,t=this.to-this.from){e=Math.min(e,t);let i=this.composing;return i&&i.drifted?i.editorBase+(e-i.contextBase):e+this.from}toContextPos(e){let t=this.composing;return t&&t.drifted?t.contextBase+(e-t.editorBase):e-this.from}destroy(){for(let e in this.handlers)this.editContext.removeEventListener(e,this.handlers[e])}}class qs{get state(){return this.viewState.state}get viewport(){return this.viewState.viewport}get visibleRanges(){return this.viewState.visibleRanges}get inView(){return this.viewState.inView}get composing(){return!!this.inputState&&this.inputState.composing>0}get compositionStarted(){return!!this.inputState&&this.inputState.composing>=0}get root(){return this._root}get win(){return this.dom.ownerDocument.defaultView||window}constructor(e={}){var t;this.plugins=[],this.pluginMap=new Map,this.editorAttrs={},this.contentAttrs={},this.bidiCache=[],this.destroyed=!1,this.updateState=2,this.measureScheduled=-1,this.measureRequests=[],this.contentDOM=document.createElement("div"),this.scrollDOM=document.createElement("div"),this.scrollDOM.tabIndex=-1,this.scrollDOM.className="cm-scroller",this.scrollDOM.appendChild(this.contentDOM),this.announceDOM=document.createElement("div"),this.announceDOM.className="cm-announced",this.announceDOM.setAttribute("aria-live","polite"),this.dom=document.createElement("div"),this.dom.appendChild(this.announceDOM),this.dom.appendChild(this.scrollDOM),e.parent&&e.parent.appendChild(this.dom);let{dispatch:i}=e;this.dispatchTransactions=e.dispatchTransactions||i&&(e=>e.forEach(e=>i(e,this)))||(e=>this.update(e)),this.dispatch=this.dispatch.bind(this),this._root=e.root||function(e){for(;e;){if(e&&(9==e.nodeType||11==e.nodeType&&e.host))return e;e=e.assignedSlot||e.parentNode}return null}(e.parent)||document,this.viewState=new fs(e.state||ot.create(e)),e.scrollTo&&e.scrollTo.is(oo)&&(this.viewState.scrollTarget=e.scrollTo.value.clip(this.viewState.state)),this.plugins=this.state.facet(lo).map(e=>new ho(e));for(let e of this.plugins)e.update(this);this.observer=new Ps(this),this.inputState=new kn(this),this.inputState.ensureHandlers(this.plugins),this.docView=new Zo(this),this.mountStyles(),this.updateAttrs(),this.updateState=0,this.requestMeasure(),(null===(t=document.fonts)||void 0===t?void 0:t.ready)&&document.fonts.ready.then(()=>{this.viewState.mustMeasureContent=!0,this.requestMeasure()})}dispatch(...e){let t=1==e.length&&e[0]instanceof je?e:1==e.length&&Array.isArray(e[0])?e[0]:[this.state.update(...e)];this.dispatchTransactions(t,this)}update(e){if(0!=this.updateState)throw new Error("Calls to EditorView.update are not allowed while an update is in progress");let t,i=!1,o=!1,n=this.state;for(let t of e){if(t.startState!=n)throw new RangeError("Trying to update state with a transaction that doesn't start from the previous state.");n=t.state}if(this.destroyed)return void(this.viewState.state=n);let s=this.hasFocus,r=0,a=null;e.some(e=>e.annotation($n))?(this.inputState.notifiedFocused=s,r=1):s!=this.inputState.notifiedFocused&&(this.inputState.notifiedFocused=s,a=Un(n,s),a||(r=1));let l=this.observer.delayedAndroidKey,c=null;if(l?(this.observer.clearDelayedAndroidKey(),c=this.observer.readChange(),(c&&!this.state.doc.eq(n.doc)||!this.state.selection.eq(n.selection))&&(c=null)):this.observer.clear(),n.facet(ot.phrases)!=this.state.facet(ot.phrases))return this.setState(n);t=So.create(this,n,e),t.flags|=r;let d=this.viewState.scrollTarget;try{this.updateState=2;for(let t of e){if(d&&(d=d.map(t.changes)),t.scrollIntoView){let{main:e}=t.state.selection;d=new io(e.empty?e:ue.cursor(e.head,e.head>e.anchor?-1:1))}for(let e of t.effects)e.is(oo)&&(d=e.value.clip(this.state))}this.viewState.update(t,d),this.bidiCache=Vs.update(this.bidiCache,t.changes),t.empty||(this.updatePlugins(t),this.inputState.update(t)),i=this.docView.update(t),this.state.facet(xo)!=this.styleModules&&this.mountStyles(),o=this.updateAttrs(),this.showAnnouncements(e),this.docView.updateSelection(i,e.some(e=>e.isUserEvent("select.pointer")))}finally{this.updateState=0}if(t.startState.facet(Ss)!=t.state.facet(Ss)&&(this.viewState.mustMeasureContent=!0),(i||o||d||this.viewState.mustEnforceCursorAssoc||this.viewState.mustMeasureContent)&&this.requestMeasure(),i&&this.docViewUpdate(),!t.empty)for(let e of this.state.facet(Gi))try{e(t)}catch(e){so(this.state,e,"update listener")}(a||c)&&Promise.resolve().then(()=>{a&&this.state==a.startState&&this.dispatch(a),c&&!wn(this,c)&&l.force&&vi(this.contentDOM,l.key,l.keyCode)})}setState(e){if(0!=this.updateState)throw new Error("Calls to EditorView.setState are not allowed while an update is in progress");if(this.destroyed)return void(this.viewState.state=e);this.updateState=2;let t=this.hasFocus;try{for(let e of this.plugins)e.destroy(this);this.viewState=new fs(e),this.plugins=e.facet(lo).map(e=>new ho(e)),this.pluginMap.clear();for(let e of this.plugins)e.update(this);this.docView.destroy(),this.docView=new Zo(this),this.inputState.ensureHandlers(this.plugins),this.mountStyles(),this.updateAttrs(),this.bidiCache=[]}finally{this.updateState=0}t&&this.focus(),this.requestMeasure()}updatePlugins(e){let t=e.startState.facet(lo),i=e.state.facet(lo);if(t!=i){let o=[];for(let n of i){let i=t.indexOf(n);if(i<0)o.push(new ho(n));else{let t=this.plugins[i];t.mustUpdate=e,o.push(t)}}for(let t of this.plugins)t.mustUpdate!=e&&t.destroy(this);this.plugins=o,this.pluginMap.clear()}else for(let t of this.plugins)t.mustUpdate=e;for(let e=0;e-1&&this.win.cancelAnimationFrame(this.measureScheduled),this.observer.delayedAndroidKey)return this.measureScheduled=-1,void this.requestMeasure();this.measureScheduled=0,e&&this.observer.forceFlush();let t=null,i=this.scrollDOM,o=i.scrollTop*this.scaleY,{scrollAnchorPos:n,scrollAnchorHeight:s}=this.viewState;Math.abs(o-this.viewState.scrollTop)>1&&(s=-1),this.viewState.scrollAnchorHeight=-1;try{for(let e=0;;e++){if(s<0)if(Ci(i))n=-1,s=this.viewState.heightMap.height;else{let e=this.viewState.scrollAnchorAt(o);n=e.from,s=e.top}this.updateState=1;let r=this.viewState.measure(this);if(!r&&!this.measureRequests.length&&null==this.viewState.scrollTarget)break;if(e>5){console.warn(this.measureRequests.length?"Measure loop restarted more than 5 times":"Viewport failed to stabilize");break}let a=[];4&r||([this.measureRequests,a]=[a,this.measureRequests]);let l=a.map(e=>{try{return e.read(this)}catch(e){return so(this.state,e),zs}}),c=So.create(this,this.state,[]),d=!1;c.flags|=r,t?t.flags|=r:t=c,this.updateState=2,c.empty||(this.updatePlugins(c),this.inputState.update(c),this.updateAttrs(),d=this.docView.update(c),d&&this.docViewUpdate());for(let e=0;e1||e<-1){o+=e,i.scrollTop=o/this.scaleY,s=-1;continue}}}break}}}finally{this.updateState=0,this.measureScheduled=-1}if(t&&!t.empty)for(let e of this.state.facet(Gi))e(t)}get themeClasses(){return Es+" "+(this.state.facet(Ts)?As:Ms)+" "+this.state.facet(Ss)}updateAttrs(){let e=Ws(this,uo,{class:"cm-editor"+(this.hasFocus?" cm-focused ":" ")+this.themeClasses}),t={spellcheck:"false",autocorrect:"off",autocapitalize:"off",writingsuggestions:"false",translate:"no",contenteditable:this.state.facet(ro)?"true":"false",class:"cm-content",style:`${Wt.tabSize}: ${this.state.tabSize}`,role:"textbox","aria-multiline":"true"};this.state.readOnly&&(t["aria-readonly"]="true"),Ws(this,po,t);let i=this.observer.ignore(()=>{let i=jt(this.contentDOM,this.contentAttrs,t),o=jt(this.dom,this.editorAttrs,e);return i||o});return this.editorAttrs=e,this.contentAttrs=t,i}showAnnouncements(e){let t=!0;for(let i of e)for(let e of i.effects)if(e.is(qs.announce)){t&&(this.announceDOM.textContent=""),t=!1,this.announceDOM.appendChild(document.createElement("div")).textContent=e.value}}mountStyles(){this.styleModules=this.state.facet(xo);let e=this.state.facet(qs.cspNonce);St.mount(this.root,this.styleModules.concat(Os).reverse(),e?{nonce:e}:void 0)}readMeasured(){if(2==this.updateState)throw new Error("Reading the editor layout isn't allowed during an update");0==this.updateState&&this.measureScheduled>-1&&this.measure(!1)}requestMeasure(e){if(this.measureScheduled<0&&(this.measureScheduled=this.win.requestAnimationFrame(()=>this.measure())),e){if(this.measureRequests.indexOf(e)>-1)return;if(null!=e.key)for(let t=0;tt.plugin==e)||null),t&&t.update(this).value}get documentTop(){return this.contentDOM.getBoundingClientRect().top+this.viewState.paddingTop}get documentPadding(){return{top:this.viewState.paddingTop,bottom:this.viewState.paddingBottom}}get scaleX(){return this.viewState.scaleX}get scaleY(){return this.viewState.scaleY}elementAtHeight(e){return this.readMeasured(),this.viewState.elementAtHeight(e)}lineBlockAtHeight(e){return this.readMeasured(),this.viewState.lineBlockAtHeight(e)}get viewportLineBlocks(){return this.viewState.viewportLines}lineBlockAt(e){return this.viewState.lineBlockAt(e)}get contentHeight(){return this.viewState.contentHeight}moveByChar(e,t,i){return an(this,e,nn(this,e,t,i))}moveByGroup(e,t){return an(this,e,nn(this,e,t,t=>function(e,t,i){let o=e.state.charCategorizer(t),n=o(i);return e=>{let t=o(e);return n==Qe.Space&&(n=t),n==t}}(this,e.head,t)))}visualLineSide(e,t){let i=this.bidiSpans(e),o=this.textDirectionAt(e.from),n=i[t?i.length-1:0];return ue.cursor(n.side(t,o)+e.from,n.forward(!t,o)?1:-1)}moveToLineBoundary(e,t,i=!0){return on(this,e,t,i)}moveVertically(e,t,i){return an(this,e,function(e,t,i,o){let n=t.head,s=i?1:-1;if(n==(i?e.state.doc.length:0))return ue.cursor(n,t.assoc);let r,a=t.goalColumn,l=e.contentDOM.getBoundingClientRect(),c=e.coordsAtPos(n,t.assoc||-1),d=e.documentTop;if(c)null==a&&(a=c.left-l.left),r=s<0?c.top:c.bottom;else{let t=e.viewState.lineBlockAt(n);null==a&&(a=Math.min(l.right-l.left,e.defaultCharacterWidth*(n-t.from))),r=(s<0?t.top:t.bottom)+d}let h=cn(e,{x:l.left+a,y:r+(null!=o?o:e.viewState.heightOracle.textHeight>>1)*s},!1,s);return ue.cursor(h.pos,h.assoc,void 0,a)}(this,e,t,i))}domAtPos(e,t=1){return this.docView.domAtPos(e,t)}posAtDOM(e,t=0){return this.docView.posFromDOM(e,t)}posAtCoords(e,t=!0){this.readMeasured();let i=cn(this,e,t);return i&&i.pos}posAndSideAtCoords(e,t=!0){return this.readMeasured(),cn(this,e,t)}coordsAtPos(e,t=1){this.readMeasured();let i=this.docView.coordsAt(e,t);if(!i||i.left==i.right)return i;let o=this.state.doc.lineAt(e),n=this.bidiSpans(o);return ui(i,n[Ni.find(n,e-o.from,-1,t)].dir==Ti.LTR==t>0)}coordsForChar(e){return this.readMeasured(),this.docView.coordsForChar(e)}get defaultCharacterWidth(){return this.viewState.heightOracle.charWidth}get defaultLineHeight(){return this.viewState.heightOracle.lineHeight}get textDirection(){return this.viewState.defaultTextDirection}textDirectionAt(e){return!this.state.facet(Qi)||ethis.viewport.to?this.textDirection:(this.readMeasured(),this.docView.textDirectionAt(e))}get lineWrapping(){return this.viewState.heightOracle.lineWrapping}bidiSpans(e){if(e.length>_s)return zi(e.length);let t,i=this.textDirectionAt(e.from);for(let o of this.bidiCache)if(o.from==e.from&&o.dir==i&&(o.fresh||Ri(o.isolates,t=wo(this,e))))return o.order;t||(t=wo(this,e));let o=function(e,t,i){if(!e)return[new Ni(0,0,t==Mi?1:0)];if(t==Ei&&!i.length&&!Pi.test(e))return zi(e.length);if(i.length)for(;e.length>Fi.length;)Fi[Fi.length]=256;let o=[],n=t==Ei?0:1;return _i(e,n,n,i,0,e.length,o),o}(e.text,i,t);return this.bidiCache.push(new Vs(e.from,e.to,i,t,!0,o)),o}get hasFocus(){var e;return(this.dom.ownerDocument.hasFocus()||Wt.safari&&(null===(e=this.inputState)||void 0===e?void 0:e.lastContextMenu)>Date.now()-3e4)&&this.root.activeElement==this.contentDOM}focus(){this.observer.ignore(()=>{yi(this.contentDOM),this.docView.updateSelection()})}setRoot(e){this._root!=e&&(this._root=e,this.observer.setWindow((9==e.nodeType?e:e.ownerDocument).defaultView||window),this.mountStyles())}destroy(){this.root.activeElement==this.contentDOM&&this.contentDOM.blur();for(let e of this.plugins)e.destroy(this);this.plugins=[],this.inputState.destroy(),this.docView.destroy(),this.dom.remove(),this.observer.destroy(),this.measureScheduled>-1&&this.win.cancelAnimationFrame(this.measureScheduled),this.destroyed=!0}static scrollIntoView(e,t={}){return oo.of(new io("number"==typeof e?ue.cursor(e):e,t.y,t.x,t.yMargin,t.xMargin))}scrollSnapshot(){let{scrollTop:e,scrollLeft:t}=this.scrollDOM,i=this.viewState.scrollAnchorAt(e);return oo.of(new io(ue.cursor(i.from),"start","start",i.top-e,t,!0))}setTabFocusMode(e){null==e?this.inputState.tabFocusMode=this.inputState.tabFocusMode<0?0:-1:"boolean"==typeof e?this.inputState.tabFocusMode=e?0:-1:0!=this.inputState.tabFocusMode&&(this.inputState.tabFocusMode=Date.now()+e)}static domEventHandlers(e){return co.define(()=>({}),{eventHandlers:e})}static domEventObservers(e){return co.define(()=>({}),{eventObservers:e})}static theme(e,t){let i=St.newName(),o=[Ss.of(i),xo.of(Ds(`.${i}`,e))];return t&&t.dark&&o.push(Ts.of(!0)),o}static baseTheme(e){return Ae.lowest(xo.of(Ds("."+Es,e,Is)))}static findFromDOM(e){var t;let i=e.querySelector(".cm-content"),o=i&&Eo.get(i)||Eo.get(e);return(null===(t=null==o?void 0:o.root)||void 0===t?void 0:t.view)||null}}qs.styleModule=xo,qs.inputHandler=Zi,qs.clipboardInputFilter=Ji,qs.clipboardOutputFilter=Xi,qs.scrollHandler=to,qs.focusChangeEffect=Ki,qs.perLineTextDirection=Qi,qs.exceptionSink=Yi,qs.updateListener=Gi,qs.editable=ro,qs.mouseSelectionStyle=ji,qs.dragMovesSelection=Ui,qs.clickAddsSelectionRange=$i,qs.decorations=mo,qs.blockWrappers=go,qs.outerDecorations=fo,qs.atomicRanges=bo,qs.bidiIsolatedRanges=yo,qs.scrollMargins=vo,qs.darkTheme=Ts,qs.cspNonce=ge.define({combine:e=>e.length?e[0]:""}),qs.contentAttributes=po,qs.editorAttributes=uo,qs.lineWrapping=qs.contentAttributes.of({class:"cm-lineWrapping"}),qs.announce=Ue.define();const _s=4096,zs={};class Vs{constructor(e,t,i,o,n,s){this.from=e,this.to=t,this.dir=i,this.isolates=o,this.fresh=n,this.order=s}static update(e,t){if(t.empty&&!e.some(e=>e.fresh))return e;let i=[],o=e.length?e[e.length-1].dir:Ti.LTR;for(let n=Math.max(0,e.length-10);n=0;n--){let t=o[n],s="function"==typeof t?t(e):t;s&&Ht(s,i)}return i}class Hs extends nt{compare(e){return this==e||this.constructor==e.constructor&&this.eq(e)}eq(e){return!1}destroy(e){}}Hs.prototype.elementClass="",Hs.prototype.toDOM=void 0,Hs.prototype.mapMode=ie.TrackBefore,Hs.prototype.startSide=Hs.prototype.endSide=-1,Hs.prototype.point=!0;let $s=0;class Us{constructor(e,t,i,o){this.name=e,this.set=t,this.base=i,this.modified=o,this.id=$s++}toString(){let{name:e}=this;for(let t of this.modified)t.name&&(e=`${t.name}(${e})`);return e}static define(e,t){let i="string"==typeof e?e:"?";if(e instanceof Us&&(t=e),null==t?void 0:t.base)throw new Error("Can not derive from a modified tag");let o=new Us(i,[],null,[]);if(o.set.push(o),t)for(let e of t.set)o.set.push(e);return o}static defineModifier(e){let t=new Ys(e);return e=>e.modified.indexOf(t)>-1?e:Ys.get(e.base||e,e.modified.concat(t).sort((e,t)=>e.id-t.id))}}let js=0;class Ys{constructor(e){this.name=e,this.instances=[],this.id=js++}static get(e,t){if(!t.length)return e;let i=t[0].instances.find(i=>{return i.base==e&&(o=t,n=i.modified,o.length==n.length&&o.every((e,t)=>e==n[t]));var o,n});if(i)return i;let o=[],n=new Us(e.name,o,e,t);for(let e of t)e.instances.push(n);let s=function(e){let t=[[]];for(let i=0;it.length-e.length)}(t);for(let t of e.set)if(!t.modified.length)for(let e of s)o.push(Ys.get(t,e));return n}}function Gs(e){let t=Object.create(null);for(let i in e){let o=e[i];Array.isArray(o)||(o=[o]);for(let e of i.split(" "))if(e){let i=[],n=2,s=e;for(let t=0;;){if("..."==s&&t>0&&t+3==e.length){n=1;break}let o=/^"(?:[^"\\]|\\.)*?"|[^\/!]+/.exec(s);if(!o)throw new RangeError("Invalid path: "+e);if(i.push("*"==o[0]?"":'"'==o[0][0]?JSON.parse(o[0]):o[0]),t+=o[0].length,t==e.length)break;let r=e[t++];if(t==e.length&&"!"==r){n=0;break}if("/"!=r)throw new RangeError("Invalid path: "+e);s=e.slice(t)}let r=i.length-1,a=i[r];if(!a)throw new RangeError("Invalid path: "+e);let l=new Ks(o,n,r>0?i.slice(0,r):null);t[a]=l.sort(t[a])}}return Zs.add(t)}const Zs=new s({combine(e,t){let i,o,n;for(;e||t;){if(!e||t&&e.depth>=t.depth?(n=t,t=t.next):(n=e,e=e.next),i&&i.mode==n.mode&&!n.context&&!i.context)continue;let s=new Ks(n.tags,n.mode,n.context);i?i.next=s:o=s,i=s}return o}});class Ks{constructor(e,t,i,o){this.tags=e,this.mode=t,this.context=i,this.next=o}get opaque(){return 0==this.mode}get inherit(){return 1==this.mode}sort(e){return!e||e.depth{let t=n;for(let o of e)for(let e of o.set){let o=i[e.id];if(o){t=t?t+" "+o:o;break}}return t},scope:o}}Ks.empty=new Ks([],2,null);const Xs=Us.define,Qs=Xs(),er=Xs(),tr=Xs(er),ir=Xs(er),or=Xs(),nr=Xs(or),sr=Xs(or),rr=Xs(),ar=Xs(rr),lr=Xs(),cr=Xs(),dr=Xs(),hr=Xs(dr),ur=Xs(),pr={comment:Qs,lineComment:Xs(Qs),blockComment:Xs(Qs),docComment:Xs(Qs),name:er,variableName:Xs(er),typeName:tr,tagName:Xs(tr),propertyName:ir,attributeName:Xs(ir),className:Xs(er),labelName:Xs(er),namespace:Xs(er),macroName:Xs(er),literal:or,string:nr,docString:Xs(nr),character:Xs(nr),attributeValue:Xs(nr),number:sr,integer:Xs(sr),float:Xs(sr),bool:Xs(or),regexp:Xs(or),escape:Xs(or),color:Xs(or),url:Xs(or),keyword:lr,self:Xs(lr),null:Xs(lr),atom:Xs(lr),unit:Xs(lr),modifier:Xs(lr),operatorKeyword:Xs(lr),controlKeyword:Xs(lr),definitionKeyword:Xs(lr),moduleKeyword:Xs(lr),operator:cr,derefOperator:Xs(cr),arithmeticOperator:Xs(cr),logicOperator:Xs(cr),bitwiseOperator:Xs(cr),compareOperator:Xs(cr),updateOperator:Xs(cr),definitionOperator:Xs(cr),typeOperator:Xs(cr),controlOperator:Xs(cr),punctuation:dr,separator:Xs(dr),bracket:hr,angleBracket:Xs(hr),squareBracket:Xs(hr),paren:Xs(hr),brace:Xs(hr),content:rr,heading:ar,heading1:Xs(ar),heading2:Xs(ar),heading3:Xs(ar),heading4:Xs(ar),heading5:Xs(ar),heading6:Xs(ar),contentSeparator:Xs(rr),list:Xs(rr),quote:Xs(rr),emphasis:Xs(rr),strong:Xs(rr),link:Xs(rr),monospace:Xs(rr),strikethrough:Xs(rr),inserted:Xs(),deleted:Xs(),changed:Xs(),invalid:Xs(),meta:ur,documentMeta:Xs(ur),annotation:Xs(ur),processingInstruction:Xs(ur),definition:Us.defineModifier("definition"),constant:Us.defineModifier("constant"),function:Us.defineModifier("function"),standard:Us.defineModifier("standard"),local:Us.defineModifier("local"),special:Us.defineModifier("special")};for(let e in pr){let t=pr[e];t instanceof Us&&(t.name=e)}var mr;Js([{tag:pr.link,class:"tok-link"},{tag:pr.heading,class:"tok-heading"},{tag:pr.emphasis,class:"tok-emphasis"},{tag:pr.strong,class:"tok-strong"},{tag:pr.keyword,class:"tok-keyword"},{tag:pr.atom,class:"tok-atom"},{tag:pr.bool,class:"tok-bool"},{tag:pr.url,class:"tok-url"},{tag:pr.labelName,class:"tok-labelName"},{tag:pr.inserted,class:"tok-inserted"},{tag:pr.deleted,class:"tok-deleted"},{tag:pr.literal,class:"tok-literal"},{tag:pr.string,class:"tok-string"},{tag:pr.number,class:"tok-number"},{tag:[pr.regexp,pr.escape,pr.special(pr.string)],class:"tok-string2"},{tag:pr.variableName,class:"tok-variableName"},{tag:pr.local(pr.variableName),class:"tok-variableName tok-local"},{tag:pr.definition(pr.variableName),class:"tok-variableName tok-definition"},{tag:pr.special(pr.variableName),class:"tok-variableName2"},{tag:pr.definition(pr.propertyName),class:"tok-propertyName tok-definition"},{tag:pr.typeName,class:"tok-typeName"},{tag:pr.namespace,class:"tok-namespace"},{tag:pr.className,class:"tok-className"},{tag:pr.macroName,class:"tok-macroName"},{tag:pr.propertyName,class:"tok-propertyName"},{tag:pr.operator,class:"tok-operator"},{tag:pr.comment,class:"tok-comment"},{tag:pr.meta,class:"tok-meta"},{tag:pr.invalid,class:"tok-invalid"},{tag:pr.punctuation,class:"tok-punctuation"}]);const gr=new s,fr=new s;class br{constructor(e,t,i=[],o=""){this.data=e,this.name=o,ot.prototype.hasOwnProperty("tree")||Object.defineProperty(ot.prototype,"tree",{get(){return wr(this)}}),this.parser=t,this.extension=[Ar.of(this),ot.languageData.of((e,t,i)=>{let o=yr(e,t,i),n=o.type.prop(gr);if(!n)return[];let s=e.facet(n),r=o.type.prop(fr);if(r){let n=o.resolve(t-o.from,i);for(let t of r)if(t.test(n,e)){let i=e.facet(t.facet);return"replace"==t.type?i:i.concat(s)}}return s})].concat(i)}isActiveAt(e,t,i=-1){return yr(e,t,i).type.prop(gr)==this.data}findRegions(e){let t=e.facet(Ar);if((null==t?void 0:t.data)==this.data)return[{from:0,to:e.doc.length}];if(!t||!t.allowsNesting)return[];let i=[],o=(e,t)=>{if(e.prop(gr)==this.data)return void i.push({from:t,to:t+e.length});let n=e.prop(s.mounted);if(n){if(n.tree.prop(gr)==this.data){if(n.overlay)for(let e of n.overlay)i.push({from:e.from+t,to:e.to+t});else i.push({from:t,to:t+e.length});return}if(n.overlay){let e=i.length;if(o(n.tree,n.overlay[0].from+t),i.length>e)return}}for(let i=0;i=this.cursorPos?this.doc.sliceString(e,t):this.string.slice(e-i,t-i)}}let Cr=null;class xr{constructor(e,t,i=[],o,n,s,r,a){this.parser=e,this.state=t,this.fragments=i,this.tree=o,this.treeLen=n,this.viewport=s,this.skipped=r,this.scheduleOn=a,this.parse=null,this.tempSkipped=[]}static create(e,t,i){return new xr(e,t,[],u.empty,0,i,[],null)}startParse(){return this.parser.startParse(new vr(this.state.doc),this.fragments)}work(e,t){return null!=t&&t>=this.state.doc.length&&(t=void 0),this.tree!=u.empty&&this.isDone(null!=t?t:this.state.doc.length)?(this.takeTree(),!0):this.withContext(()=>{var i;if("number"==typeof e){let t=Date.now()+e;e=()=>Date.now()>t}for(this.parse||(this.parse=this.startParse()),null!=t&&(null==this.parse.stoppedAt||this.parse.stoppedAt>t)&&t=this.treeLen&&((null==this.parse.stoppedAt||this.parse.stoppedAt>e)&&this.parse.stopAt(e),this.withContext(()=>{for(;!(t=this.parse.advance()););}),this.treeLen=e,this.tree=t,this.fragments=this.withoutTempSkipped(D.addTree(this.tree,this.fragments,!0)),this.parse=null)}withContext(e){let t=Cr;Cr=this;try{return e()}finally{Cr=t}}withoutTempSkipped(e){for(let t;t=this.tempSkipped.pop();)e=kr(e,t.from,t.to);return e}changes(e,t){let{fragments:i,tree:o,treeLen:n,viewport:s,skipped:r}=this;if(this.takeTree(),!e.empty){let t=[];if(e.iterChangedRanges((e,i,o,n)=>t.push({fromA:e,toA:i,fromB:o,toB:n})),i=D.applyChanges(i,t),o=u.empty,n=0,s={from:e.mapPos(s.from,-1),to:e.mapPos(s.to,1)},this.skipped.length){r=[];for(let t of this.skipped){let i=e.mapPos(t.from,1),o=e.mapPos(t.to,-1);ie.from&&(this.fragments=kr(this.fragments,i,o),this.skipped.splice(t--,1))}return!(this.skipped.length>=t)&&(this.reset(),!0)}reset(){this.parse&&(this.takeTree(),this.parse=null)}skipUntilInView(e,t){this.skipped.push({from:e,to:t})}static getSkippingParser(e){return new class extends O{createParse(t,i,o){let n=o[0].from,s=o[o.length-1].to;return{parsedPos:n,advance(){let t=Cr;if(t){for(let e of o)t.tempSkipped.push(e);e&&(t.scheduleOn=t.scheduleOn?Promise.all([t.scheduleOn,e]):e)}return this.parsedPos=s,new u(l.none,[],[],s-n)},stoppedAt:null,stopAt(){}}}}}isDone(e){e=Math.min(e,this.state.doc.length);let t=this.fragments;return this.treeLen>=e&&t.length&&0==t[0].from&&t[0].to>=e}static get(){return Cr}}function kr(e,t,i){return D.applyChanges(e,[{fromA:t,toA:i,fromB:t,toB:i}])}class Sr{constructor(e){this.context=e,this.tree=e.tree}apply(e){if(!e.docChanged&&this.tree==this.context.tree)return this;let t=this.context.changes(e.changes,e.state),i=this.context.treeLen==e.startState.doc.length?void 0:Math.max(e.changes.mapPos(this.context.treeLen),t.viewport.to);return t.work(20,i)||t.takeTree(),new Sr(t)}static init(e){let t=Math.min(3e3,e.doc.length),i=xr.create(e.facet(Ar).parser,e,{from:0,to:t});return i.work(20,t)||i.takeTree(),new Sr(i)}}br.state=xe.define({create:Sr.init,update(e,t){for(let e of t.effects)if(e.is(br.setState))return e.value;return t.startState.facet(Ar)!=t.state.facet(Ar)?Sr.init(t.state):e.apply(t)}});let Tr=e=>{let t=setTimeout(()=>e(),500);return()=>clearTimeout(t)};"undefined"!=typeof requestIdleCallback&&(Tr=e=>{let t=-1,i=setTimeout(()=>{t=requestIdleCallback(e,{timeout:400})},100);return()=>t<0?clearTimeout(i):cancelIdleCallback(t)});const Er="undefined"!=typeof navigator&&(null===(mr=navigator.scheduling)||void 0===mr?void 0:mr.isInputPending)?()=>navigator.scheduling.isInputPending():null,Mr=co.fromClass(class{constructor(e){this.view=e,this.working=null,this.workScheduled=0,this.chunkEnd=-1,this.chunkBudget=-1,this.work=this.work.bind(this),this.scheduleWork()}update(e){let t=this.view.state.field(br.state).context;(t.updateViewport(e.view.viewport)||this.view.viewport.to>t.treeLen)&&this.scheduleWork(),(e.docChanged||e.selectionSet)&&(this.view.hasFocus&&(this.chunkBudget+=50),this.scheduleWork()),this.checkAsyncSchedule(t)}scheduleWork(){if(this.working)return;let{state:e}=this.view,t=e.field(br.state);t.tree==t.context.tree&&t.context.isDone(e.doc.length)||(this.working=Tr(this.work))}work(e){this.working=null;let t=Date.now();if(this.chunkEndo+1e3,a=n.context.work(()=>Er&&Er()||Date.now()>s,o+(r?0:1e5));this.chunkBudget-=Date.now()-t,(a||this.chunkBudget<=0)&&(n.context.takeTree(),this.view.dispatch({effects:br.setState.of(new Sr(n.context))})),this.chunkBudget>0&&(!a||r)&&this.scheduleWork(),this.checkAsyncSchedule(n.context)}checkAsyncSchedule(e){e.scheduleOn&&(this.workScheduled++,e.scheduleOn.then(()=>this.scheduleWork()).catch(e=>so(this.view.state,e)).then(()=>this.workScheduled--),e.scheduleOn=null)}destroy(){this.working&&this.working()}isWorking(){return!!(this.working||this.workScheduled>0)}},{eventHandlers:{focus(){this.scheduleWork()}}}),Ar=ge.define({combine:e=>e.length?e[0]:null,enables:e=>[br.state,Mr,qs.contentAttributes.compute([e],t=>{let i=t.facet(e);return i&&i.name?{"data-language":i.name}:{}})]});pr.meta,pr.link,pr.heading,pr.emphasis,pr.strong,pr.strikethrough,pr.keyword,pr.atom,pr.bool,pr.url,pr.contentSeparator,pr.labelName,pr.literal,pr.inserted,pr.string,pr.deleted,pr.regexp,pr.escape,pr.string,pr.variableName,pr.variableName,pr.typeName,pr.namespace,pr.className,pr.variableName,pr.macroName,pr.propertyName,pr.comment,pr.invalid;const Ir=Object.create(null),Dr=[l.none],Or=[],Br=Object.create(null),Lr=Object.create(null);for(let[e,t]of[["variable","variableName"],["variable-2","variableName.special"],["string-2","string.special"],["def","variableName.definition"],["tag","tagName"],["attribute","attributeName"],["type","typeName"],["builtin","variableName.standard"],["qualifier","modifier"],["error","invalid"],["header","heading"],["property","propertyName"]])Lr[e]=Nr(Ir,t);function Pr(e,t){Or.indexOf(e)>-1||(Or.push(e),console.warn(t))}function Nr(e,t){let i=[];for(let o of t.split(" ")){let t=[];for(let i of o.split(".")){let o=e[i]||pr[i];o?"function"==typeof o?t.length?t=t.map(o):Pr(i,`Modifier ${i} used at start of tag`):t.length?Pr(i,`Tag ${i} used as modifier`):t=Array.isArray(o)?o:[o]:Pr(i,`Unknown highlighting tag ${i}`)}for(let e of t)i.push(e)}if(!i.length)return 0;let o=t.replace(/ /g,"_"),n=o+" "+i.map(e=>e.id),s=Br[n];if(s)return s.id;let r=Br[n]=l.define({id:Dr.length,name:o,props:[Gs({[o]:i})]});return Dr.push(r),r.id}function Rr(e){let t=Date.now().toString(36);return t+=Math.random().toString(36).substr(3,e),t}function Fr(e,t,i,o){let n,s={index:-1,subindex:-1},r=o;return i?r.forEach((e,i)=>{if("SubmenuCommands"in e&&(n=e.SubmenuCommands.findIndex(e=>e.id==t.id),n>=0))return s={index:i,subindex:n},s}):(n=r.findIndex(e=>e.id==t.id),s={index:n,subindex:-1}),s}function qr(e,t){let i,o=t.getLine(t.getCursor().line),n="";const s=/^(\>*(\[[!\w]+\])?\s*)#+\s/;let r;const a=o.match(s);a&&(r=a[0].trim()),e==r||""==e?i=o.replace(s,"$1"):(i=o.replace(/^\s*(#*|\>|\-|\d+\.)\s*/m,""),i=e+" "+i),n=""!=i?t.getRange(t.getCursor(),{line:t.getCursor().line,ch:o.length}):t.getRange(t.getCursor(),{line:t.getCursor().line,ch:0}),t.setLine(t.getCursor().line,i),t.setCursor({line:t.getCursor().line,ch:Number(i.length-n.length)})}function _r(e,t){if(!t)return;const i=t.getSelection();if(!i||""===i.trim())return void this.plugin.setLastExecutedCommand("editing-toolbar:change-font-color");const o=/]+["']?>(.*?)<\/font>/gms,n=o.test(i);if(s=i,new RegExp(`^(.+)<\\/font>$`,"ms").test(s.trim()))return;var s;const r=i.replace(o,(t,i)=>i.split("\n").map(t=>t.trim()?`${t}`:t).join("\n")),a=r===i?i.split("\n").map(t=>t.trim()?`${t}`:t).join("\n"):r,l=t.listSelections().map(t=>{const i=n?0:``.length;return t.anchor.line([\s\S]*?)<\/mark>/g.test(i);if(((e,t)=>{const i=t.replace(/([()[{*+.$^\\|?])/g,"\\$1");return new RegExp(`^([sS]+)<\\/mark>$`).test(e.trim())})(i,e))return;let n;n=o?i.replace(/(background:)(?:#[0-9a-fA-F]{3,6}|rgba?\([^)]+\))/gi,`$1${e}`):i.split("\n").map(t=>t.trim()?`${t}`:t).join("\n");const s=t.listSelections().map(t=>{const i=o?0:``.length;return t.anchor.line=0?e.getLine(o).trim():"";if(o<0||!/^\s*\d+\.\s/.test(n)||(n.match(/^\s*/)?.[0].length||0)0;){const t=e.getLine(i-1);if(!/^\s*\d+\.\s/.test(t.trim()))break;i--}for(;o{"OrderedList"===e.name&&(l=e.to)}}),l>=0){const e=o.offsetToPos(l).line+1;e=0?o.getLine(p).trim():"";if(m&&!/^\s*$/.test(m)&&!m.includes("ㅤ")&&(u.push(""),u.push("ㅤ")),c)u.push(...t);else{let e={},i=-1;for(const o of t){const t=o.trim(),n=/^\d+\.\s/.test(t),s=o.match(/^\s*/)?.[0]||"";if(n){const o=s.length;e[o]=o!==i?1:(e[o]||1)+1,u.push(`${s}${e[o]}. ${t.replace(/^\d+\.\s/,"")}`),i=o}else u.push(o),i=-1}}o.replaceRange(u.join("\n"),{line:i,ch:0},{line:i+t.length-1,ch:o.getLine(i+t.length-1).length})}function Hr(e,t,i){const o=[];for(let n=t;n<=i;n++)o.push(e.getLine(n));Wr(o,t,e)}let $r;Ti.RTL,Ti.LTR;const Ur=t=>{$r=e.requireApiVersion("0.15.0")?activeWindow.document:window.document;["top","following","fixed"].forEach(e=>{$r.querySelectorAll(`.editingToolbarModalBar[data-toolbar-style="${e}"]`).forEach(e=>{t?(e.style.display="",e.style.visibility="visible"):e.style.display="none"})});const i=$r.getElementById("editingToolbarModalBar");i&&(t?(i.style.display="",i.style.visibility="visible"):i.style.display="none")},jr=t=>{$r=e.requireApiVersion("0.15.0")?activeWindow.document:window.document,$r.documentElement.style.setProperty("--toolbar-vertical-offset",`${t.verticalPosition}px`)},Yr=t=>{$r=e.requireApiVersion("0.15.0")?activeWindow.document:window.document,$r.documentElement.style.setProperty("--toolbar-horizontal-offset",`${t.horizontalPosition}px`)};var Gr={"Editing Toolbar Append Method":"Editing Toolbar Append Method","Choose where Editing Toolbar will append upon regeneration. To see the change, hit the refresh button below, or in the status bar menu.":"Choose where Editing Toolbar will append upon regeneration. To see the change, hit the refresh button below, or in the status bar menu.","Editing Toolbar aesthetic":"Editing Toolbar aesthetic","Choose between a glass morphism, tiny and default style for Editing Toolbar. To see the change, hit the refresh button below, or in the status bar menu.":"Choose between a glass morphism, tiny and default style for Editing Toolbar. To see the change, hit the refresh button below, or in the status bar menu.","Editing Toolbar position":"Editing Toolbar position","Choose between fixed position or cursor following mode.":"Choose between fixed position, cursor following or Top mode.","Editing Toolbar Columns":"Editing Toolbar Columns","Choose the number of columns per row to display on Editing Toolbar.":"Choose the number of columns per row to display on Editing Toolbar.","Editing Toolbar refresh":"Editing Toolbar refresh","Editing Toolbar Commands":"Editing Toolbar Commands","Add a command onto Editing Toolbar from Obsidian's commands library. To reorder the commands, drag and drop the command items. To delete them, use the delete buttom to the right of the command item. Editing Toolbar will not automaticaly refresh after reordering commands. Use the refresh button above.":"Add a command onto Editing Toolbar from Obsidian's commands library. To reorder the commands, drag and drop the command items. To delete them, use the delete buttom to the right of the command item. Editing Toolbar will not automaticaly refresh after reordering commands. Use the refresh button above.","Format Brush Off!":"Format Brush Off!","Hide & Show":"Hide & Show","Editing Toolbar will only refresh automatically after you have either added or deleted a command from it. To see UI changes to editingToolbar (above settings changes) use the refresh button. If you forget to refresh in settings, no worries. There is also a refresh button in the editingToolbar status bar menu.":"Editing Toolbar will only refresh automatically after you have either added or deleted a command from it. To see UI changes to editingToolbar (above settings changes) use the refresh button. If you forget to refresh in settings, no worries. There is also a refresh button in the editingToolbar status bar menu.","Font-Color formatting brush ON!":"Font-Color formatting brush ON!",More:"More","Font Colors":"Font Colors","Format Brush":"Format Brush","Background Color":"Background color",Refresh:"Refresh",Add:"Add",Delete:"Delete","Change Command Name":"Change Command Name","Change Submenu Name":"Change Submenu Name","Button Submenu":"Button Submenu","Dropdown Menu":"Dropdown Menu","Menu type changed to":"Menu type changed to","Add Submenu":"Add Submenu","Add Separator":"Add Separator","Enter the icon code, it looks like .... format":"Enter the icon code, it looks like .... format","Please enter a new name: ":"Please enter a new name: ","Drag the slider to move the position":"Drag the slider to move the position","Plugin Settings":"Plugin Settings","Background-color formatting brush ON!":"Background-color formatting brush ON!\nClick the mouse middle or right key to close the formatting-brush","Clear formatting brush ON!":"Clear formatting brush ON!","Clear formatting brush ON!\nClick the mouse middle or right key to close the formatting-brush":"Clear formatting brush ON!\nClick the mouse middle or right key to close the formatting-brush","The toolbar is displayed when the mouse moves over it, otherwise it is automatically hidden":"The toolbar is displayed when the mouse moves over it, otherwise it is automatically hidden","Editing Toolbar Auto-hide":"Editing Toolbar Auto-hide","Editing Toolbar Centred Display":"Editing Toolbar Centred Display","Whether the toolbar is centred or full-width, the default is full-width.":"Whether the toolbar is centred or full-width, the default is full-width.","Custom Backgroud Color":"Custom Backgroud Color","Custom Font Color":"Custom Font Color","🎨 Set Custom Background":"🎨 Set Custom Background","🖌️ Set Custom Font Color":"🖌️ Set Custom Font Color","Click on the picker to adjust the color":"Click on the picker to adjust the color","Mobile Enabled or Not":"Mobile Enabled or Not","Whether to enable the plugin for the mobile client, the default is enabled.":"Whether to enable the plugin for the mobile client, the default is enabled.","Whether to enable on mobile devices with device width less than 768px.":"Whether to enable on mobile devices with device width less than 768px, the default is disable.",Reset:"Reset",Fix:"Fix","Fix Editing Toolbar":"Fix Editing Toolbar",General:"General",Appearance:"Appearance",Commands:"Commands","Choose between fixed position or cursor following mode":"Choose between fixed position, cursor following or Top mode.","Add and manage commands":"Add and manage commands","Choose where Editing Toolbar will append upon regeneration.":"Choose where Editing Toolbar will append upon regeneration.","Whether to enable on mobile devices with device width less than 768px":"Whether to enable on mobile devices with device width less than 768px","Choose between a glass morphism, tiny and default style.":"Choose between a glass morphism, tiny and default style.","Refresh Toolbar":"Refresh Toolbar","Add Command":"Add Command",Settings:"Settings","Position Style":"Position Style",Columns:"Columns","Drag to Adjust Position":"Drag to Adjust Position","Vertical Position":"Vertical Position","Horizontal Position":"Horizontal Position","Toolbar Position":"Toolbar Position","Choose an icon":"Choose an icon","Search for an icon...":"Search for an icon...",All:"All",Obsidian:"Obsidian",Glyph:"Glyph",Custom:"Custom","Choose a command":"Choose a command","The command":"The command","already exists":"already exists","Enter the icon code, format as .... ":"Enter the icon code, format as .... ","No matching icons found":"No matching icons found","Custom Commands":"Custom Commands","Toolbar Commands":"Toolbar Commands",ID:"ID",Prefix:"Prefix",Suffix:"Suffix",Pattern:"Pattern","Custom Format Commands":"Custom Format Commands","Add, edit or delete custom format commands.":"Add, edit or delete custom format commands.",Edit:"Edit","Command ID":"Command ID",'Unique identifier, no spaces, e.g.: "my-custom-format"':'Unique identifier, no spaces, e.g.: "my-custom-format"',"Displayed name in toolbar and menu":"Displayed name in toolbar and menu","Add content before selected text":"Add content before selected text","Add content after selected text":"Add content after selected text","Character offset of cursor after formatting":"Character offset of cursor after formatting","Line offset of cursor after formatting":"Line offset of cursor after formatting","Whether to insert at the beginning of the next line":"Whether to insert at the beginning of the next line","Command icon (click to select)":"Command icon (click to select)","Choose Icon":"Choose Icon",Save:"Save",Cancel:"Cancel","Edit Custom Command":"Edit Custom Command","Add Custom Command":"Add Custom Command","Command ID and command name cannot be empty":"Command ID and command name cannot be empty","Command ID cannot contain spaces":"Command ID cannot contain spaces",'Command ID "${this.commandId}" already exists':'Command ID "${this.commandId}" already exists',"Cursor Position Offset":"Cursor Position Offset","Line Offset":"Line Offset","Line Head Format":"Line Head Format",Icon:"Icon","Command Name":"Command Name","Are you sure you want to restore all settings to default? This will lose all your custom configurations.":"Are you sure you want to restore all settings to default? This will lose all your custom configurations.","Restore default":"Restore default","Restore default settings":"Restore default settings","🔄Restore default settings":"🔄Restore default settings","🔧Data repair":"🔧Data repair","Command IDs have been successfully repaired!":"Command IDs have been successfully repaired!","No command IDs need to be repaired":"No command IDs need to be repaired","Error repairing command IDs, please check the console for details":"Error repairing command IDs, please check the console for details","Error restoring default settings, please check the console for details":"Error restoring default settings, please check the console for details","Successfully restored default settings!":"Successfully restored default settings!",Close:"Close",Tips:"Tips","This update changed the ID of some commands, please click this button to repair the commands to ensure the toolbar works properly":"This update changed the ID of some commands, please click this button to repair the commands to ensure the toolbar works properly","Repair command ID":"Repair command ID","This will reset all your custom configurations":"This will reset all your custom configurations","Notice:":"Notice:","This update rebuilds the entire code, reducing resource consumption":"This update rebuilds the entire code, reducing resource consumption","Optimized mobile usage, added canvas support, and added custom commands":"Optimized mobile usage, added canvas support, and added custom commands","⚠️This update is not compatible with 2.x version command ids, please click [Repair command] to be compatible":"⚠️This update is not compatible with 2.x version command ids, please click [Repair command] to be compatible","⚠️If you want to restore the default settings, please click [Restore default settings]":"⚠️If you want to restore the default settings, please click [Restore default settings]","Please execute a editingToolbar format command first, then enable the format brush":"Please execute a editingToolbar format command first, then enable the format brush","Format brush ON! Select text to apply【":"Format brush ON! Select text to apply【","】format":"】format\nClick the mouse right key to close the formatting-brush","Add to Toolbar":"Add to Toolbar","This command is already in the toolbar.":"This command is already in the toolbar.","Command added to toolbar":"Command added to toolbar","Add this command to the toolbar.":"Add this command to the toolbar.","Callout Type":"Callout Type",Title:"Title","Optional, leave blank for default title":"Optional, leave blank for default title","Input title":"Input title","Collapse State":"Collapse State",Open:"Open",Closed:"Closed",Content:"Content",Insert:"Insert",Default:"Default","Input content":"Input content","Link Text":"Link Text","Link Alias":"Link Alias","Link URL":"Link URL","Embed Content":"Embed Content","Image Size":"Image Size","Insert New Line":"Insert New Line","Paste and Parse":"Paste and Parse","URL Format Error":"URL Format Error","Image Width":"Image Width","Image Height":"Image Height","If it is an image, turn on":"If it is an image, turn on","Insert a link on the next line":"Insert a link on the next line","Link Title(optional)":"Link Title(optional)",Alias:"Alias",Optional:"Optional","Default 0, format will keep the text selected":"Default 0, format will keep the text selected","to insert":"to insert","Latest Changes":"Latest Changes","📋View full changelog":"📋View full changelog","Open changelog":"Open changelog","Loading changelog...":"Loading changelog...","Open the complete changelog in your browser":"Open the complete changelog in your browser","Enable Multiple Configurations":"Enable Multiple Configurations","Enable different command configurations for each position style (following, top, fixed).":"Enable different command configurations for each position style (following, top, fixed).","Currently editing commands for":"Currently editing commands for","position style":"position style","Current Configuration":"Current Configuration","Switch between different command configurations.":"Switch between different command configurations.","Following Style":"Following Style","Top Style":"Top Style","Fixed Style":"Fixed Style","Mobile Style":"Mobile Style",configuration:"configuration","Deploy command to configurations":"Deploy command to configurations","All Configurations":"All Configurations",Deploy:"Deploy","Command deployed to selected configurations":"Command deployed to selected configurations","No configuration selected for deployment":"No configuration selected for deployment","Command already exists in selected configurations":"Command already exists in selected configurations","Command deployed to: ":"Command deployed to: ","Command Deleted":"Command Deleted","Confirm Delete?":"Confirm Delete?",Confirm:"Confirm","Are you sure you want to restore all settings to default? But custom commands will be preserved.":"Are you sure you want to restore all settings to default? But custom commands will be preserved.","Successfully restored default settings! (Custom commands preserved)":"Successfully restored default settings! (Custom commands preserved)","This will reset all your custom configurations, but custom commands will be preserved":"This will reset all your custom configurations, but custom commands will be preserved","Import/Export":"Import/Export","Export Configuration":"Export Configuration","Export your toolbar configuration to share with others.":"Export your toolbar configuration to share with others.",Export:"Export","Import Configuration":"Import Configuration","Import toolbar configuration from JSON.":"Import toolbar configuration from JSON.",Import:"Import","Usage Instructions":"Usage Instructions","Export: Generate a JSON configuration that you can save or share.":"Export: Generate a JSON configuration that you can save or share.","Import: Paste a previously exported JSON configuration.":"Import: Paste a previously exported JSON configuration.","You can choose to export all settings, only toolbar commands, or only custom commands":"You can choose to export all settings, only toolbar commands, or only custom commands","When importing, the plugin will only update the settings included in the import data":"When importing, the plugin will only update the settings included in the import data","Warning: Importing configuration will overwrite your current settings. Consider exporting your current configuration first as a backup.":"Warning: Importing configuration will overwrite your current settings. Consider exporting your current configuration first as a backup.","Export Type":"Export Type","Choose what to export":"Choose what to export","All Settings":"All Settings","Toolbar Commands Only":"Toolbar Commands Only","Custom Commands Only":"Custom Commands Only","Export Content":"Export Content","Copy this content to share with others":"Copy this content to share with others","Loading...":"Loading...","Copy to Clipboard":"Copy to Clipboard","Configuration copied to clipboard":"Configuration copied to clipboard","Failed to copy configuration":"Failed to copy configuration","Paste the configuration JSON here":"Paste the configuration JSON here","Paste configuration here...":"Paste configuration here...","Invalid import data":"Invalid import data","Configuration imported successfully":"Configuration imported successfully","No valid configuration found in import data":"No valid configuration found in import data","Failed to import configuration. Invalid format.":"Failed to import configuration. Invalid format.","Import Mode":"Import Mode","Choose how to import the configuration":"Choose how to import the configuration","Update Mode (Add new items and update existing ones)":"Update Mode (Add new items and update existing ones)","Overwrite Mode (Replace all settings with imported ones)":"Overwrite Mode (Replace all settings with imported ones)","Configuration imported successfully (Overwrite mode)":"Configuration imported successfully (Overwrite mode)","Configuration imported successfully (Update mode)":"Configuration imported successfully (Update mode)","Warning: Overwrite mode will completely replace your current settings with the imported ones. Consider exporting your current configuration first as a backup.":"Warning: Overwrite mode will completely replace your current settings with the imported ones. Consider exporting your current configuration first as a backup.","Warning: Update mode will add new items and update existing ones based on the imported configuration.":"Warning: Update mode will add new items and update existing ones based on the imported configuration.","Add Format Command":"Add Format Command",Regex:"Regex","Prefix/Suffix":"Prefix/Suffix","Insert Special Char":"Insert Special Char","Add Regex Command":"Add Regex Command","Switch Regex Command Window":"Switch Regex Command Window","Please select text first":"Please select text first","Current line is empty, please select text or move to a non-empty line":"Current line is empty, please select text or move to a non-empty line","Use current line for regex commands":"Use current line for regex commands","When no text is selected, regex commands will use the current line instead of clipboard content":"When no text is selected, regex commands will use the current line instead of clipboard content","The selected text does not meet the condition requirements":"The selected text does not meet the condition requirements","Regex command execution error: ":"Regex command execution error: ","Copy code":"Copy code","Copied!":"Copied!","Explain the syntax of JavaScript regular expressions":"Explain the syntax of JavaScript regular expressions","Apply regular expression replacement":"Apply regular expression replacement","Conditional matching":"Conditional matching","Complete regular expression code (copy to AI for explanation)":"Complete regular expression code (copy to AI for explanation)","Error: ":"Error: ","Regex pattern cannot be empty":"Regex pattern cannot be empty","Command already exists":"Command already exists","Choose icon":"Choose icon","URL to Markdown link":"URL to Markdown link","Convert MM/DD/YYYY to YYYY-MM-DD":"Convert MM/DD/YYYY to YYYY-MM-DD","Add bold to keywords":"Add bold to keywords","Format phone number":"Format phone number","Remove extra spaces":"Remove extra spaces","Convert HTML bold tags to Markdown format":"Convert HTML bold tags to Markdown format","Convert quoted text to quote block":"Convert quoted text to quote block","Convert CSV to Markdown table row":"Convert CSV to Markdown table row","Add uniform alias to Markdown links":"Add uniform alias to Markdown links","Delete empty lines (multiline mode)":"Delete empty lines (multiline mode)","Add list symbol to each line (multiline mode)":"Add list symbol to each line (multiline mode)","If the text contains important, set the text highlight (conditional format)":"If the text contains important, set the text highlight (conditional format)","Matching pattern":"Matching pattern","Regex pattern to match":"Regex pattern to match","Replacement pattern (use $1, $2, etc. to reference capture groups)":"Replacement pattern (use $1, $2, etc. to reference capture groups)","Ignore case":"Ignore case","Global replace":"Global replace","Multiline mode":"Multiline mode","Use condition":"Use condition","Condition pattern":"Condition pattern","Only apply custom command when text matches the condition":"Only apply custom command when text matches the condition","Must exist regular expression or text":"Must exist regular expression or text","Replacement pattern":"Replacement pattern","Match case-insensitive":"Match case-insensitive","^ and $ match the start and end of each line":"^ and $ match the start and end of each line","Replace all matches":"Replace all matches",Command:"Command","Input example text to view the formatting effect of the command...":"Input example text to view the formatting effect of the command...",Description:"Description","[Example]":"[Example]","[Requirements]":"[Requirements]","[Output]":"[Output]","AI question template:":"AI question template:","I need to convert the url to a markdown format link":"I need to convert the url to a markdown format link","For example, convert https://example.com to [https://example.com](https://example.com)":"For example, convert https://example.com to [https://example.com](https://example.com)","Use js regular expression to implement, and output the parameters in the following format (the result does not need to be escaped with json)":"Use js regular expression to implement, and output the parameters in the following format (the result does not need to be escaped with json)","[Description]":"[Description]","How to use AI to get regular expressions?":"How to use AI to get regular expressions?","Regular expression examples":"Regular expression examples","Edit regular expression command":"Edit regular expression command","Add regular expression command":"Add regular expression command","Result: ":"Result: ","Example text:":"Example text:",Preview:"Preview",Result:"Result","Please select text or copy text to clipboard first":"Please select text or copy text to clipboard first","Overwrite Import":"Overwrite Import","Update Import":"Update Import","Importing configuration...":"Importing configuration...","Following Style Only":"Following Style Only","Top Style Only":"Top Style Only","Fixed Style Only":"Fixed Style Only","Mobile Style Only":"Mobile Style Only","Unknown import type":"Unknown import type","All Toolbar Commands":"All Toolbar Commands","Initialize Commands":"Initialize Commands","Copy commands from the main menu configuration":"Copy commands from the main menu configuration","Initialize commands to default settings":"Initialize commands to default settings","Reset Commands":"Reset Commands","Commands reset successfully":"Commands reset successfully","Following style commands initialized from current menu commands":"Following style commands initialized from current menu commands","Commands initialized successfully":"Commands initialized successfully","Reset to Menu Commands":"Reset to Menu Commands","Are you sure you want to reset the current configuration?":"Are you sure you want to reset the current configuration?","Following style commands successfully initialized":"Following style commands successfully initialized","Top style commands successfully initialized":"Top style commands successfully initialized","Fixed style commands successfully initialized":"Fixed style commands successfully initialized","Mobile style commands successfully initialized":"Mobile style commands successfully initialized","Reset commands to default settings":"Reset commands to default settings",Clear:"Clear","Remove all commands from this configuration.":"Remove all commands from this configuration.","Are you sure you want to clear all commands under the current style?":"Are you sure you want to clear all commands under the current style?","Current style commands have been cleared":"Current style commands have been cleared","Manage Commands":"Manage Commands","Reset or clear all commands in this configuration":"Reset or clear all commands in this configuration","One-click Clear":"One-click Clear","Import Commands from Other Styles":"Import Commands from Other Styles","Copy commands from another style configuration.":"Copy commands from another style configuration.","Main menu only":"Main menu only","This import will update:":"This import will update:","Custom commands":"Custom commands","Toolbar commands":"Toolbar commands","General settings":"General settings","Please paste configuration data first":"Please paste configuration data first","Invalid import data format":"Invalid import data format","Import From":"Import From","This import will:":"This import will:","Update general settings":"Update general settings","Update Main Menu Commands":"Update Main Menu Commands","Update Custom Commands":"Update Custom Commands","Update Following Style Commands":"Update Following Style Commands","Update Top Style Commands":"Update Top Style Commands","Update Fixed Style Commands":"Update Fixed Style Commands","Update Mobile Style Commands":"Update Mobile Style Commands","Clear all Main Menu Commands":"Clear all Main Menu Commands","Clear all Custom Commands":"Clear all Custom Commands","Clear all Following Style Commands":"Clear all Following Style Commands","Clear all Top Style Commands":"Clear all Top Style Commands","Clear all Fixed Style Commands":"Clear all Fixed Style Commands","Clear all Mobile Style Commands":"Clear all Mobile Style Commands","Overwrite Mode (Replace settings with imported ones)":"Overwrite Mode (Replace settings with imported ones)","Warning: Overwrite mode will replace existing settings with imported ones.":"Warning: Overwrite mode will replace existing settings with imported ones.","Warning: Update mode will add new items and update existing ones.":"Warning: Update mode will add new items and update existing ones.","Enable Multiple Config":"Enable Multiple Config","Set Multiple Config to:":"Set Multiple Config to:",Enable:"Enable",Disable:"Disable","Set Position Style to:":"Set Position Style to:",Following:"Following",Top:"Top",Fixed:"Fixed",Mobile:"Mobile","All commands":"All commands","⚠️ Overwrite mode will replace existing settings with imported ones.":"⚠️ Overwrite mode will replace existing settings with imported ones.","ℹ️ Update mode will merge imported settings with existing ones.":"ℹ️ Update mode will merge imported settings with existing ones.","Do you want to continue?":"Do you want to continue?","Imported settings:":"Imported settings:","Imported commands:":"Imported commands:","Disable toolbar for this view":"Disable toolbar for this view","Enable toolbar for this view":"Enable toolbar for this view","Manage all view types":"Manage all view types","Current View: ":"Current View: ","Appearance Style":"Appearance Style","Position Settings":"Position Settings","All commands have been removed.":"All commands have been removed.","Join the Community":"Join the Community","Share your toolbar settings and styles in our":"Share your toolbar settings and styles in our","Get inspired by what others have created or showcase your own customizations.":"Get inspired by what others have created or showcase your own customizations.","Toolbar Preview (With a hypothetical command configuration.)":"Toolbar Preview (With a hypothetical command configuration.)","Toolbar Theme":"Toolbar Theme","Select a preset toolbar theme, automatically setting the background color, icon color, and size for the selected style.":"Select a preset toolbar theme, automatically setting the background color, icon color, and size for the selected style.","Toolbar Background Color":"Toolbar Background Color","Set the background color of the toolbar.":"Set the background color of the toolbar.","Toolbar Icon Color":"Toolbar Icon Color","Set the color of the toolbar icon.":"Set the color of the toolbar icon.","Toolbar Icon Size":"Toolbar Icon Size","Set the size of the toolbar icon (px); default: 18px":"Set the size of the toolbar icon (px); default: 18px","Custom Theme":"Custom Theme","Fixed Position Offset":"Fixed Position Offset","Choose the offset of the Editing Toolbar in the fixed position.":"Choose the offset of the Editing Toolbar in the fixed position.","Renumber List":"Renumber List","Fetch Remote Title":"Fetch Remote Title","Please enter a URL first":"Please enter a URL first","Failed to fetch title for":"Failed to fetch title for","Link Title (optional)":"Link Title (optional)","Unable to detect editor width":"Unable to detect editor width","Fit Editor Width":"Fit Editor Width","Please execute a format command or select format text first, then enable the format brush":"Please execute a format command or select format text first, then enable the format brush","Use \\n to represent line breaks":"Use \\n to represent line breaks","Use ↵ to represent line breaks":"Use ↵ to represent line breaks","Top Toolbar":"Top Toolbar","Enable the toolbar positioned at the top.":"Enable the toolbar positioned at the top.","Following Toolbar":"Following Toolbar","Enable the toolbar that appears upon text selection.":"Enable the toolbar that appears upon text selection.","Fixed Toolbar":"Fixed Toolbar","Enable the toolbar whose position may be fixed where you please.":"Enable the toolbar whose position may be fixed where you please.","Toolbar Settings":"Toolbar Settings","Choose which toolbar style's appearance you want to edit.":"Choose which toolbar style's appearance you want to edit.","Vertical Split":"Vertical Split","Text Enhancement Tools":"Text Enhancement Tools","Get Plain Text":"Get Plain Text","Full Half Converter":"Full Half Converter","Insert Blank Lines":"Insert Blank Lines","Remove Blank Lines":"Remove Blank Lines","Split Lines":"Split Lines","Dedupe Lines":"Dedupe Lines","Add Prefix/Suffix":"Add Prefix/Suffix","Number Lines (Custom)":"Number Lines (Custom)","Trim Line Ends":"Trim Line Ends","Shrink Extra Spaces":"Shrink Extra Spaces","Remove All Whitespace":"Remove All Whitespace","Extract Between Strings":"Extract Between Strings","Merge Lines":"Merge Lines","List to Table":"List to Table","Table to List":"Table to List","Line Operations":"Line Operations","Text Processing":"Text Processing","Advanced Tools":"Advanced Tools","Enter prefix":"Enter prefix","Enter suffix":"Enter suffix",Delimiter:"Delimiter","Enter delimiter (e.g., comma, tab)":"Enter delimiter (e.g., comma, tab)","Column Number":"Column Number","Enter column number (starting from 1)":"Enter column number (starting from 1)","Start String":"Start String","Enter start string":"Enter start string","End String":"End String","Enter end string":"Enter end string","Number Lines Configuration":"Number Lines Configuration","Start Number":"Start Number",Step:"Step",Separator:"Separator","Merge Lines Settings":"Merge Lines Settings","Separator (leave empty for smart spacing)":"Separator (leave empty for smart spacing)","e.g., comma, pipe, arrow":"e.g., comma, pipe, arrow","Plain text copied to clipboard":"Plain text copied to clipboard","Whitespace cleaning completed":"Whitespace cleaning completed","List pattern detected, auto-split":"List pattern detected, auto-split","No obvious separator or list pattern detected":"No obvious separator or list pattern detected","Paste failed":"Paste failed","Detected Chinese context: converted to full-width symbols":"Detected Chinese context: converted to full-width symbols","Detected code/English context: converted to half-width symbols":"Detected code/English context: converted to half-width symbols","Please select text to dedupe first":"Please select text to dedupe first","Deduplication completed, remaining":"Deduplication completed, remaining",lines:"lines","Prefix/suffix added":"Prefix/suffix added","Please select text to number first":"Please select text to number first","Numbering completed: starting from":"Numbering completed: starting from","Please specify start or end string":"Please specify start or end string",Extracted:"Extracted",matches:"matches","No matches found":"No matches found","Extraction failed":"Extraction failed","Please select lines to merge first":"Please select lines to merge first","Merged with":"Merged with","Merge completed":"Merge completed",Item:"Item","Super conversion completed: context preserved and layout optimized":"Super conversion completed: context preserved and layout optimized","Please select a valid Markdown table":"Please select a valid Markdown table","Table converted to multi-level list":"Table converted to multi-level list"},Zr={"Editing Toolbar Append Method":"工具栏的附加方法。","Choose where Editing Toolbar will append upon regeneration. To see the change, hit the refresh button below, or in the status bar menu.":"工具栏在Obsidian中的追加的位置,只对固定和跟随模式有效。如果你遇到工具栏显示问题,可以选择body试试。请点击下面或者状态栏菜单中的刷新按钮生效。","Editing Toolbar aesthetic":"工具栏样式","Choose between a glass morphism, tiny and default style for Editing Toolbar. To see the change, hit the refresh button below, or in the status bar menu.":"样式有毛玻璃,简约和默认风格选择。请点击下面或者状态栏菜单中的刷新按钮生效。","Editing Toolbar position":"工具栏位置","Choose between fixed position or cursor following mode.":"在固定位置,光标跟随模式或者置顶模式之间进行选择。","Editing Toolbar Columns":"工具栏栏目数","Choose the number of columns per row to display on Editing Toolbar.":"选择在Editing Toolbar上显示的每行的列数。","Editing Toolbar refresh":"刷新工具栏","Editing Toolbar Commands":"在工具栏中添加命令","Add a command onto Editing Toolbar from Obsidian's commands library. To reorder the commands, drag and drop the command items. To delete them, use the delete buttom to the right of the command item. Editing Toolbar will not automaticaly refresh after reordering commands. Use the refresh button above.":"从Obsidian的命令库中添加一个命令到工具栏。要重新排列命令,可以拖放命令项。要删除它们,请使用命令项右边的删除按钮。图标选择Custom可以自定义图标","Format Brush Off!":"关闭格式刷!","Hide & Show":"隐藏 & 显示","Editing Toolbar will only refresh automatically after you have either added or deleted a command from it. To see UI changes to editingToolbar (above settings changes) use the refresh button. If you forget to refresh in settings, no worries. There is also a refresh button in the editingToolbar status bar menu.":"对外观的更改生效需要使用刷新按钮。如果你忘记在设置中刷新,在状态栏菜单中也有一个刷新按钮。","Font-Color formatting brush ON!":"字体颜色格式刷开启\n点击鼠标中键或者右键关闭格式刷",More:"更多","Font Colors":"字体颜色","Format Brush":"格式刷","Background Color":"背景颜色",Refresh:"刷新",Add:"添加",Delete:"删除","Change Command Name":"更改命令名称","Change Submenu Name":"更改子菜单名称","Button Submenu":"按钮子菜单","Dropdown Menu":"下拉菜单","Menu type changed to":"菜单类型已更改为","Add Submenu":"添加子菜单","Add Separator":"添加分割线","Enter the icon code, it looks like .... format":"输入图标代码,类似.... 格式","Please enter a new name: ":"请输入新名称:","Drag the slider to move the position":"拖动滑块来移动位置","Plugin Settings":"插件设置","Background-color formatting brush ON!":"开启背景色格式刷","Clear formatting brush ON!":"清除格式刷已开启","Clear formatting brush ON!\nClick the mouse middle or right key to close the formatting-brush":"清除格式刷已开启\n点击鼠标中键或者右键关闭格式刷","The toolbar is displayed when the mouse moves over it, otherwise it is automatically hidden":"当鼠标移到工具栏上方时,工具栏显示,否则自动隐藏","Editing Toolbar Auto-hide":"工具栏是否自动隐藏","Editing Toolbar Centred Display":"工具栏是否居中显示","Whether the toolbar is centred or full-width, the default is full-width.":"工具栏居中还是全宽显示,默认全宽显示","Custom Backgroud Color":"设置自定义背景色","Custom Font Color":"设置自定义字体颜色","🎨 Set Custom Background":"🎨 设置自定义背景","🖌️ Set Custom Font Color":"🖌️ 设置自定义字体颜色","Click on the picker to adjust the color":"点击选取器来调整颜色","Mobile Enabled or Not":"是否在移动端启用","Whether to enable on mobile devices with device width less than 768px.":"是否在设备宽度小于768的移动设备启用。默认不启用",Reset:"重置",Fix:"修复","Fix Editing Toolbar":"修复工具栏",General:"常规",Appearance:"外观",Commands:"命令","Choose between fixed position or cursor following mode":"选择固定位置或者光标跟随模式","Add and manage commands":"添加和管理命令","Choose where Editing Toolbar will append upon regeneration.":"选择工具栏在Obsidian中的追加的位置。","Whether to enable on mobile devices with device width less than 768px":"是否在移动设备中启用。默认不启用","Choose between a glass morphism, tiny and default style":"选择毛玻璃,简约和默认风格","Refresh Toolbar":"刷新工具栏","Add Command":"添加命令",Settings:"设置","Adjust Toolbar Position[Fixed mode]":"调整工具栏位置[固定模式]","Position Style":"位置样式",Columns:"列数","Drag to Adjust Position":"拖动调整位置","Vertical Position":"垂直位置","Horizontal Position":"水平位置","Toolbar Position":"工具栏位置","Choose an icon":"选择一个图标","Search for an icon...":"搜索图标...",All:"全部",Obsidian:"Obsidian",Glyph:"Glyph",Custom:"自定义","Choose a command":"选择一个命令","The command":"命令","already exists":"已存在","Enter the icon code, format as .... ":"输入图标代码,格式为 .... ","No matching icons found":"没有找到匹配的图标","Custom Commands":"自定义命令","Toolbar Commands":"工具栏命令",ID:"ID",Prefix:"前缀",Suffix:"后缀","Custom Format Commands":"自定义格式命令","Add, edit or delete custom format commands.":"添加、编辑或删除自定义格式命令",Edit:"编辑","Command ID":"命令ID",'Unique identifier, no spaces, e.g.: "my-custom-format"':'唯一标识符,不包含空格,例如:"my-custom-format"',"Displayed name in toolbar and menu":"在工具栏和菜单中显示的名称","Add content before selected text":"在选中的文本前添加内容","Add content after selected text":"在选中的文本后添加内容","Character offset of cursor after formatting":"格式化后光标的字符偏移量","Line offset of cursor after formatting":"格式化后光标的行偏移量","Whether to insert at the beginning of the next line":"是否在下一行首插入","Command icon (click to select)":"命令图标(点击选择)","Choose Icon":"选择图标",Save:"保存",Cancel:"取消","Edit Custom Command":"编辑自定义命令","Add Custom Command":"添加自定义命令","Command ID and command name cannot be empty":"命令ID和命令名称不能为空","Command ID cannot contain spaces":"命令ID不能包含空格",'Command ID "${this.commandId}" already exists':'命令ID "${this.commandId}" 已存在',"Command Name":"命令名称","Cursor Position Offset":"光标位置偏移量","Line Offset":"行偏移量","Line Head Format":"行首格式",Icon:"图标","Are you sure you want to restore all settings to default? This will lose all your custom configurations.":"确定要恢复所有设置为默认值吗?这将丢失您的所有自定义配置。","Restore default":"恢复默认值","Restore default settings":"恢复默认设置","🔄Restore default settings":"🔄恢复默认设置","🔧Data repair":"🔧数据修复","Command IDs have been successfully repaired!":"命令ID已成功修复!","No command IDs need to be repaired":"没有命令ID需要修复","Error repairing command IDs, please check the console for details":"修复命令ID时出错,请查看控制台了解详情","Error restoring default settings, please check the console for details":"恢复默认设置时出错,请查看控制台了解详情","Successfully restored default settings!":"已成功恢复默认设置!",Close:"关闭",Tips:"提示","This update changed the ID of some commands, please click this button to repair the commands to ensure the toolbar works properly":"此次更新更改了部分命令的ID,请点击此按钮修复命令以确保工具栏正常工作","Repair command ID":"修复命令ID","This will reset all your custom configurations":"这将重置您的所有自定义配置","Notice:":"注意","This update rebuilds the entire code, reducing resource consumption":"此次更新重构了全部代码,降低了资源占用","Optimized mobile usage, added canvas support, and added custom commands":"优化了移动端,增加了对canvas支持,增加了自定义命令","⚠️This update is not compatible with 2.x version command ids, please click [Repair command] to be compatible":"⚠️此次更新不兼容2.x旧版本命令id,请点击【修复命令】进行兼容","⚠️If you want to restore the default settings, please click [Restore default settings]":"⚠️如果想恢复默认设置,请点击【恢复默认设置】","Please execute a editingToolbar format command first, then enable the format brush":"请先执行一个格式命令,然后再启用格式刷","Format brush ON! Select text to apply【":"格式刷已开启\n选中文本应用【","】format":"】格式\n点击鼠标右键关闭格式刷","Add to Toolbar":"添加到工具栏","This command is already in the toolbar.":"该命令已存在于工具栏中","Command added to toolbar":"命令已添加到工具栏","Add this command to the toolbar.":"添加该命令到工具栏","Callout Type":"Callout 类型",Title:"标题","Optional, leave blank for default title":"可选,留空则使用默认标题","Input title":"输入标题","Collapse State":"折叠状态",Open:"展开",Closed:"折叠",Content:"内容",Insert:"插入",Default:"默认","Input content":"输入内容","Link Text":"链接文本","Link Alias":"链接别名","Link URL":"链接地址","Embed Content":"嵌入内容","Image Size":"图片尺寸","Insert New Line":"插入新行","Paste and Parse":"粘贴并解析","URL Format Error":"URL格式错误","Image Width":"图片宽度","Image Height":"图片高度","Insert a link on the next line":"在下一行插入链接","If it is an image, turn on":"如果是图片,请开启","Link Title(optional)":"链接标题(可选)",Alias:"别名",Optional:"可选","Default 0, format will keep the text selected":"默认0,格式化将保持文本选中","to insert":"插入","Latest Changes":"最新更新","📋View full changelog":"📋查看完整更新日志","Open changelog":"打开更新日志","Loading changelog...":"加载更新日志...","Open the complete changelog in your browser":"在浏览器中打开完整更新日志","Enable Multiple Configurations":"启用多配置","Enable different command configurations for each position style (following, top, fixed).":"启用每个位置样式的不同命令配置(following,top,fixed)","Currently editing commands for":"当前编辑的命令配置为:","position style":"样式","Current Configuration":"当前配置","Switch between different command configurations.":"切换不同的命令配置","Following Style":"跟随样式","Top Style":"顶部样式","Fixed Style":"固定样式","Mobile Style":"移动端样式",configuration:"配置","Deploy command to configurations":"部署命令到配置","All Configurations":"所有配置",Deploy:"部署","Command deployed to selected configurations":"命令已部署到选中的配置","No configuration selected for deployment":"没有选中的配置","Command already exists in selected configurations":"命令已存在于选中的配置","Command deployed to: ":"命令已部署到:","Command Deleted":"命令已删除","Confirm Delete?":"确认删除?","Are you sure you want to restore all settings to default? But custom commands will be preserved.":"您确定要将所有设置恢复为默认值吗?但自定义命令将被保留。","Successfully restored default settings! (Custom commands preserved)":"成功恢复默认设置!(自定义命令已保留)","This will reset all your custom configurations, but custom commands will be preserved":"这将重置您的所有自定义配置,但自定义命令将被保留","Import/Export":"导入/导出","Export Configuration":"导出配置","Export your toolbar configuration to share with others.":"导出您的工具栏配置以与他人共享",Export:"导出","Import Configuration":"导入配置","Import toolbar configuration from JSON.":"从JSON导入工具栏配置",Import:"导入","Usage Instructions":"使用说明","Export: Generate a JSON configuration that you can save or share.":"导出:生成可保存或共享的JSON配置","Import: Paste a previously exported JSON configuration.":"导入:粘贴先前导出的JSON配置","You can choose to export all settings, only toolbar commands, or only custom commands":"您可以选择导出所有设置、仅工具栏命令或仅自定义命令","When importing, the plugin will only update the settings included in the import data":"导入时,插件将仅更新导入数据中包含的设置","Warning: Importing configuration will overwrite your current settings. Consider exporting your current configuration first as a backup.":"警告:导入配置将覆盖您当前的设置。建议先导出当前配置作为备份。","Export Type":"导出类型","Choose what to export":"选择要导出的内容","All Settings":"所有设置","Toolbar Commands Only":"仅工具栏命令","Custom Commands Only":"仅自定义命令","Export Content":"导出内容","Copy this content to share with others":"复制此内容以与他人共享","Loading...":"加载中...","Copy to Clipboard":"复制到剪贴板","Configuration copied to clipboard":"配置已复制到剪贴板","Failed to copy configuration":"复制配置失败","Paste the configuration JSON here":"在此处粘贴配置JSON","Paste configuration here...":"在此处粘贴配置...","Invalid import data":"无效的导入数据","Configuration imported successfully":"配置导入成功","No valid configuration found in import data":"导入数据中未找到有效配置","Failed to import configuration. Invalid format.":"导入配置失败。格式无效。","Import Mode":"导入模式","Choose how to import the configuration":"选择如何导入配置","Update Mode (Add new items and update existing ones)":"更新模式(添加新项目并更新现有项目)","Overwrite Mode (Replace all settings with imported ones)":"覆盖模式(用导入的配置替换所有设置)","Configuration imported successfully (Overwrite mode)":"配置导入成功(覆盖模式)","Configuration imported successfully (Update mode)":"配置导入成功(更新模式)","Warning: Overwrite mode will completely replace your current settings with the imported ones. Consider exporting your current configuration first as a backup.":"警告:覆盖模式将完全替换您当前的设置与导入的设置。建议先导出当前配置作为备份。","Warning: Update mode will add new items and update existing ones based on the imported configuration.":"警告:更新模式将根据导入的配置添加新项目并更新现有项目。","Add Format Command":"添加格式命令",Regex:"正则","Prefix/Suffix":"前缀/后缀","Insert Special Char":"增加特殊符号","Add Regex Command":"添加正则表达式命令","Switch Regex Command Window":"切换到正则命令窗口","Please select text first":"请先选中文本","Current line is empty, please select text or move to a non-empty line":"当前行为空,请选中文本或移动到非空行","Use current line for regex commands":"正则命令使用当前行","When no text is selected, regex commands will use the current line instead of clipboard content":"当没有选中文本时,正则命令将使用当前行内容而不是剪贴板内容","The selected text does not meet the condition requirements":"选中的文本不满足条件要求","Regex command execution error: ":"正则表达式命令执行错误:","Copy code":"复制代码","Copied!":"已复制!","Explain the syntax of JavaScript regular expressions":"解释JavaScript正则表达式的语法","Apply regular expression replacement":"应用正则表达式替换","Conditional matching":"条件匹配","Complete regular expression code (copy to AI for explanation)":"完整正则表达式代码(复制到AI解释)","Error: ":"错误:","Regex pattern cannot be empty":"正则表达式不能为空","Command already exists":"命令已存在","Choose icon":"选择图标","URL to Markdown link":"URL转Markdown链接","Convert MM/DD/YYYY to YYYY-MM-DD":"将MM/DD/YYYY日期格式转换为YYYY-MM-DD","Add bold to keywords":"添加粗体到关键词","Format phone number":"格式化电话号码","Remove extra spaces":"删除多余空格","Convert HTML bold tags to Markdown format":"将HTML粗体标签转换为Markdown格式","Convert quoted text to quote block":"将引用的文本转换为引用块","Convert CSV to Markdown table row":"将CSV转换为Markdown表格行","Add uniform alias to Markdown links":"添加统一别名到Markdown链接","Delete empty lines (multiline mode)":"删除空行(多行模式)","Add list symbol to each line (multiline mode)":"添加列表符号到每行(多行模式)","If the text contains important, set the text highlight (conditional format)":"如果文本包含重要内容,设置文本高亮(条件格式)","Matching pattern":"匹配模式","Regex pattern to match":"正则表达式匹配","Replacement pattern (use $1, $2, etc. to reference capture groups)":"替换模式(使用$1, $2等引用捕获组)","Ignore case":"忽略大小写","Global replace":"全局替换","Multiline mode":"多行模式","Use condition":"使用条件","Condition pattern":"条件模式","Only apply custom command when text matches the condition":"仅在文本匹配条件时应用自定义命令","Must exist regular expression or text":"必须存在正则表达式或文本","Replacement pattern":"替换模式","Match case-insensitive":"匹配不区分大小写","^ and $ match the start and end of each line":"^ 和 $ 匹配每行的开始和结束","Replace all matches":"替换所有匹配",Command:"命令","Input example text to view the formatting effect of the command...":"输入示例文本以查看命令的格式化效果...",Description:"描述","[Example]":"[示例]","[Requirements]":"[要求]","[Output]":"[输出]","AI question template:":"AI问题模板:","I need to convert the url to a markdown format link":"我需要将URL转换为Markdown格式链接","For example, convert https://example.com to [https://example.com](https://example.com)":"例如,将https://example.com转换为[https://example.com](https://example.com)","Use js regular expression to implement, and output the parameters in the following format (the result does not need to be escaped with json)":"使用js正则表达式实现,并输出以下格式的参数(结果不需要用json转义)","[Description]":"[描述]","How to use AI to get regular expressions?":"如何使用AI获取正则表达式?","Regular expression examples":"正则表达式示例","Edit regular expression command":"编辑正则表达式命令","Add regular expression command":"添加正则表达式命令","Result:":"结果:","Example text:":"示例文本:",Preview:"预览",Result:"结果","Update Import":"增量导入","Overwrite Import":"覆盖导入","Importing configuration...":"正在导入配置...","Following Style Only":"仅Following样式","Top Style Only":"仅Top样式","Fixed Style Only":"仅Fixed样式","Mobile Style Only":"仅Mobile样式","Unknown import type":"未知导入类型","All Toolbar Commands":"所有工具栏命令","Following style commands successfully initialized":"Following样式初始化成功","Top style commands successfully initialized":"Top样式初始化成功","Fixed style commands successfully initialized":"Fixed样式初始化成功","Mobile style commands successfully initialized":"Mobile样式初始化成功","Commands initialized successfully":"命令初始化成功","Reset Commands":"重置命令","Are you sure you want to reset the current configuration?":"您确定要将当前配置进行重置吗?","Commands reset successfully":"命令重置成功","Initialize Commands":"初始化命令","Initialize commands to default settings":"初始化命令到默认设置","Reset commands to default settings":"重置命令到默认设置",Clear:"清除","Remove all commands from this configuration.":"清除当前样式下的所有命令","Are you sure you want to clear all commands under the current style?":"您确定要清除当前样式下的所有命令吗?","Current style commands have been cleared":"当前样式下的命令已清除","Manage Commands":"管理命令","Reset or clear all commands in this configuration":"重置或清除当前样式下的所有命令","Import Commands from Other Styles":"从其他样式导入命令","Copy commands from another style configuration.":"从另一个样式配置复制命令","Main menu only":"Main menu only","This import will update:":"此次导入将更新:","Custom commands":"自定义命令","Toolbar commands":"工具栏命令","All settings":"所有设置","Following style only":"跟随样式","Top style only":"顶部样式","Fixed style only":"固定样式","Mobile style only":"移动端样式","Main Menu Commands":"主菜单命令","Following Style Commands":"跟随样式命令","Top Style Commands":"顶部样式命令","Fixed Style Commands":"固定样式命令","Mobile Style Commands":"移动端样式命令","General settings":"常规设置","Please paste configuration data first":"请先粘贴配置数据","Invalid import data format":"无效的导入数据格式","Do you want to continue?":"您确定要继续吗?","Warning: Update mode will add new items and update existing ones.":"警告:更新模式将添加新项目并更新现有项目。","Warning: Overwrite mode will completely replace your current settings with the imported ones.":"警告:覆盖模式将完全替换您当前的设置与导入的设置。","Overwrite Mode (Replace settings with imported ones)":"覆盖模式(用导入的配置替换所有设置)","Warning: Overwrite mode will replace existing settings with imported ones.":"警告:覆盖模式将用导入的配置替换所有设置。","Enable Multiple Config":"启用多配置","One-click Clear":"一键清除","This import will:":"此次导入将:","Update general settings":"更新常规设置","Update Main Menu Commands":"更新主菜单命令","Update Custom Commands":"更新自定义命令","Update Following Style Commands":"更新跟随样式命令","Update Top Style Commands":"更新顶部样式命令","Update Fixed Style Commands":"更新固定样式命令","Clear all Main Menu Commands":"清除所有主菜单命令","Clear all Custom Commands":"清除所有自定义命令","Clear all Following Style Commands":"清除所有跟随样式命令","Clear all Top Style Commands":"清除所有顶部样式命令","Clear all Fixed Style Commands":"清除所有固定样式命令","Clear all Mobile Style Commands":"清除所有移动端样式命令","Set Multiple Config to:":"设置多配置为:",Enable:"启用",Disable:"禁用","Set Position Style to:":"设置位置样式为:",Following:"跟随",Top:"顶部",Fixed:"固定",Mobile:"移动端","All commands":"所有命令","⚠️ Overwrite mode will replace existing settings with imported ones.":"⚠️ 覆盖模式将用导入的配置替换所有设置。","ℹ️ Update mode will merge imported settings with existing ones.":"ℹ️ 更新模式将合并导入的设置与现有的设置。","Imported settings:":"导入的设置:","Imported commands:":"导入的命令:","Disable toolbar for this view":"禁用此视图的工具栏","Enable toolbar for this view":"启用此视图的工具栏","Manage all view types":"管理所有视图类型","Current View: ":"当前视图:","Appearance Style":"外观样式","Position Settings":"位置设置","Join the Community":"加入社区","Share your toolbar settings and styles in our":"分享您的工具栏设置和样式:","section!":"社区!","Get inspired by what others have created or showcase your own customizations.":"获取灵感或展示您的自定义设置。","Toolbar Preview (With a hypothetical command configuration.)":"工具栏预览(按钮仅供参考)","Toolbar Theme":"工具栏主题","Select a preset toolbar theme, automatically setting the background color, icon color, and size for the selected style.":"选择预设的工具栏主题,自动设置背景颜色、图标颜色和大小","Toolbar Background Color":"工具栏背景颜色","Set the background color of the toolbar.":"设置工具栏的背景颜色","Toolbar Icon Color":"工具栏图标颜色","Set the color of the toolbar icon.":"设置工具栏图标颜色","Toolbar Icon Size":"工具栏图标大小","Set the size of the toolbar icon (px); default: 18px":"设置工具栏图标大小(px)默认18px","Custom theme":"自定义主题","Fixed Position Offset":"固定位置偏移","Choose the offset of the Editing Toolbar in the fixed position.":"选择固定位置工具栏的偏移量。","Renumber List":"列表重新编号","Insert link":"插入链接","Please enter a URL first":"请先输入一个URL","Failed to fetch title for":"获取标题失败","Link Title (optional)":"链接标题(可选)","Unable to detect editor width":"无法检测编辑器宽度","Fit Editor Width":"自适应宽度","Fetch Remote Title":"获取URL标题","Please execute a format command or select format text first, then enable the format brush":"请先执行一个格式命令或选中带格式的文本,然后启用格式刷",Confirm:"确认","Use \\n to represent line breaks":"使用\\n表示换行符","Use ↵ to represent line breaks":"使用↵表示换行符","All commands have been removed.":"所有命令已被清除。","Top Toolbar":"顶部工具栏","Enable the toolbar positioned at the top.":"启用位于顶部的工具栏。","Following Toolbar":"跟随工具栏","Enable the toolbar that appears upon text selection.":"启用在选中文本时出现的工具栏。","Fixed Toolbar":"固定工具栏","Enable the toolbar whose position may be fixed where you please.":"启用可以固定在任意位置的工具栏。","Toolbar Settings":"工具栏设置","Choose which toolbar style's appearance you want to edit.":"选择要编辑外观的工具栏样式。","Vertical Split":"垂直分割","Text Enhancement Tools":"文本增强工具","Get Plain Text":"获取无语法文本","Full Half Converter":"全角半角转换","Insert Blank Lines":"插入空行","Remove Blank Lines":"删除空行","Split Lines":"拆分行","Dedupe Lines":"去除重复行","Add Prefix/Suffix":"添加前后缀","Number Lines (Custom)":"添加行号(自定义)","Trim Line Ends":"去除行首尾空格","Shrink Extra Spaces":"压缩多余空格","Remove All Whitespace":"移除所有空白","Extract Between Strings":"提取字符串之间内容","Merge Lines":"合并行","List to Table":"多级列表转表格","Table to List":"表格转多级列表","Line Operations":"行操作","Text Processing":"文本处理","Advanced Tools":"高级工具","Enter prefix":"输入前缀","Enter suffix":"输入后缀",Delimiter:"分隔符","Enter delimiter (e.g., comma, tab)":"输入分隔符(例如:逗号、制表符)","Column Number":"列号","Enter column number (starting from 1)":"输入列号(从1开始)","Start String":"起始字符串","Enter start string":"输入起始字符串","End String":"结束字符串","Enter end string":"输入结束字符串","Number Lines Configuration":"行号配置","Start Number":"起始数字",Step:"步长",Separator:"分隔符","Merge Lines Settings":"合并行设置","Separator (leave empty for smart spacing)":"分隔符 (留空则开启智能中英间距)","e.g., comma, pipe, arrow":"例如: , 或 | 或 →","Plain text copied to clipboard":"无语法文本已复制到剪贴板","Whitespace cleaning completed":"空白字符清洗完成","List pattern detected, auto-split":"检测到列表模式,已自动拆分","No obvious separator or list pattern detected":"未识别到明显的分隔符或列表模式","Paste failed":"粘贴失败","Detected Chinese context: converted to full-width symbols":"检测为中文语境:已转换为全角符号","Detected code/English context: converted to half-width symbols":"检测为代码/英文语境:已转换为半角符号","Please select text to dedupe first":"请先选择要去重的文本","Deduplication completed, remaining":"去重完成,剩余",lines:"行","Prefix/suffix added":"添加前后缀完成","Please select text to number first":"请先选择要编号的文本","Numbering completed: starting from":"已完成编号:从","Please specify start or end string":"请指定起始或结束字符串",Extracted:"提取了",matches:"个匹配项","No matches found":"未找到匹配项","Extraction failed":"提取失败","Please select lines to merge first":"请先选择要合并的行","Merged with":"已按","Merge completed":"已完成合并",Item:"项目","Super conversion completed: context preserved and layout optimized":"超级转换完成:已保留上下文并优化排版","Please select a valid Markdown table":"请先选择有效的 Markdown 表格","Table converted to multi-level list":"表格已还原为多级列表"},Kr={...Zr};const Jr={ar:{},cs:{},da:{},de:{},en:Gr,"en-gb":{"Editing Toolbar Append Method":"Editing Toolbar Append Method","Choose where Editing Toolbar will append upon regeneration. To see the change, hit the refresh button below, or in the status bar menu.":"Choose where Editing Toolbar will append upon regeneration. To see the change, hit the refresh button below, or in the status bar menu.","Editing Toolbar aesthetic":"Editing Toolbar aesthetic","Choose between a glass morphism, tiny and default style for Editing Toolbar. To see the change, hit the refresh button below, or in the status bar menu.":"Choose between a glass morphism, tiny and default style for Editing Toolbar. To see the change, hit the refresh button below, or in the status bar menu.","Editing Toolbar position":"Editing Toolbar position","Choose between fixed position or cursor following mode.":"Choose between fixed position, cursor following or Top mode.","Editing Toolbar Columns":"Editing Toolbar Columns","Choose the number of columns per row to display on Editing Toolbar.":"Choose the number of columns per row to display on Editing Toolbar.","Editing Toolbar refresh":"Editing Toolbar refresh","Editing Toolbar Commands":"Editing Toolbar Commands","Add a command onto Editing Toolbar from Obsidian's commands library. To reorder the commands, drag and drop the command items. To delete them, use the delete buttom to the right of the command item. Editing Toolbar will not automaticaly refresh after reordering commands. Use the refresh button above.":"Add a command onto Editing Toolbar from Obsidian's commands library. To reorder the commands, drag and drop the command items. To delete them, use the delete buttom to the right of the command item. Editing Toolbar will not automaticaly refresh after reordering commands. Use the refresh button above.","Format Brush Off!":"Format Brush Off!","Hide & Show":"Hide & Show","Editing Toolbar will only refresh automatically after you have either added or deleted a command from it. To see UI changes to editingToolbar (above settings changes) use the refresh button. If you forget to refresh in settings, no worries. There is also a refresh button in the editingToolbar status bar menu.":"Editing Toolbar will only refresh automatically after you have either added or deleted a command from it. To see UI changes to editingToolbar (above settings changes) use the refresh button. If you forget to refresh in settings, no worries. There is also a refresh button in the editingToolbar status bar menu.","Font-Color formatting brush ON!":"Font-Colour formatting brush ON!",More:"More","Font Colors":"Font Colours","Format Brush":"Format Brush","Background color":"Background colour",Refresh:"Refresh",Add:"Add",Delete:"Delete","Change Command Name":"Change Command Name","Add Submenu":"Add Submenu","Add Separator":"Add Separator","Enter the icon code, it looks like .... format":"Enter the icon code, it looks like .... format","Please enter a new name: ":"Please enter a new name: ","Drag the slider to move the position":"Drag the slider to move the position","Plugin Settings":"Plugin Settings","Background-color formatting brush ON!":"Background-colour formatting brush ON!\nClick the mouse middle or right key to close the formatting-brush","Clear formatting brush ON!":"Clear formatting brush ON!","Clear formatting brush ON!\nClick the mouse middle or right key to close the formatting-brush":"Clear formatting brush ON!\nClick the mouse middle or right key to close the formatting-brush","The toolbar is displayed when the mouse moves over it, otherwise it is automatically hidden":"The toolbar is displayed when the mouse moves over it, otherwise it is automatically hidden","Editing Toolbar Auto-hide":"Editing Toolbar Auto-hide","Editing Toolbar Centred Display":"Editing Toolbar Centred Display","Whether the toolbar is centred or full-width, the default is full-width.":"Whether the toolbar is centred or full-width, the default is full-width.","Custom Backgroud Color":"Custom Backgroud Colour","Custom Font Color":"Custom Font Colour","🎨 Set Custom Background":"🎨 Set Custom Background","🖌️ Set Custom Font Color":"🖌️ Set Custom Font Colour","Click on the picker to adjust the color":"Click on the picker to adjust the colour","Mobile Enabled or Not":"Mobile Enabled or Not","Whether to enable the plugin for the mobile client, the default is enabled.":"Whether to enable the plugin for the mobile client, the default is enabled.","Whether to enable on mobile devices with device width less than 768px.":"Whether to enable on mobile devices with device width less than 768px, the default is disable.",Reset:"Reset",Fix:"Fix","Fix Editing Toolbar":"Fix Editing Toolbar",General:"General",Appearance:"Appearance",Commands:"Commands","Choose between fixed position or cursor following mode":"Choose between fixed position, cursor following or Top mode.","Add and manage commands":"Add and manage commands","Choose where Editing Toolbar will append upon regeneration.":"Choose where Editing Toolbar will append upon regeneration.","Whether to enable on mobile devices with device width less than 768px":"Whether to enable on mobile devices with device width less than 768px","Choose between a glass morphism, tiny and default style.":"Choose between a glass morphism, tiny and default style.","Refresh Toolbar":"Refresh Toolbar","Add Command":"Add Command",Settings:"Settings","Position Style":"Position Style",Columns:"Columns","Drag to Adjust Position":"Drag to Adjust Position","Vertical Position":"Vertical Position","Horizontal Position":"Horizontal Position","Toolbar Position":"Toolbar Position","Choose an icon":"Choose an icon","Search for an icon...":"Search for an icon...",All:"All",Obsidian:"Obsidian",Glyph:"Glyph",Custom:"Custom","Choose a command":"Choose a command","The command":"The command","already exists":"already exists","Enter the icon code, format as .... ":"Enter the icon code, format as .... ","No matching icons found":"No matching icons found","Custom Commands":"Custom Commands","Toolbar Commands":"Toolbar Commands",ID:"ID",Prefix:"Prefix",Suffix:"Suffix",Pattern:"Pattern","Custom Format Commands":"Custom Format Commands","Add, edit or delete custom format commands.":"Add, edit or delete custom format commands.",Edit:"Edit","Command ID":"Command ID",'Unique identifier, no spaces, e.g.: "my-custom-format"':'Unique identifier, no spaces, e.g.: "my-custom-format"',"Displayed name in toolbar and menu":"Displayed name in toolbar and menu","Add content before selected text":"Add content before selected text","Add content after selected text":"Add content after selected text","Character offset of cursor after formatting":"Character offset of cursor after formatting","Line offset of cursor after formatting":"Line offset of cursor after formatting","Whether to insert at the beginning of the next line":"Whether to insert at the beginning of the next line","Command icon (click to select)":"Command icon (click to select)","Choose Icon":"Choose Icon",Save:"Save",Cancel:"Cancel","Edit Custom Command":"Edit Custom Command","Add Custom Command":"Add Custom Command","Command ID and command name cannot be empty":"Command ID and command name cannot be empty","Command ID cannot contain spaces":"Command ID cannot contain spaces",'Command ID "${this.commandId}" already exists':'Command ID "${this.commandId}" already exists',"Cursor Position Offset":"Cursor Position Offset","Line Offset":"Line Offset","Line Head Format":"Line Head Format",Icon:"Icon","Command Name":"Command Name","Are you sure you want to restore all settings to default? This will lose all your custom configurations.":"Are you sure you want to restore all settings to default? This will lose all your custom configurations.","Restore default":"Restore default","Restore default settings":"Restore default settings","🔄Restore default settings":"🔄Restore default settings","🔧Data repair":"🔧Data repair","Command IDs have been successfully repaired!":"Command IDs have been successfully repaired!","No command IDs need to be repaired":"No command IDs need to be repaired","Error repairing command IDs, please check the console for details":"Error repairing command IDs, please check the console for details","Error restoring default settings, please check the console for details":"Error restoring default settings, please check the console for details","Successfully restored default settings!":"Successfully restored default settings!",Close:"Close",Tips:"Tips","This update changed the ID of some commands, please click this button to repair the commands to ensure the toolbar works properly":"This update changed the ID of some commands, please click this button to repair the commands to ensure the toolbar works properly","Repair command ID":"Repair command ID","This will reset all your custom configurations":"This will reset all your custom configurations","Notice:":"Notice:","This update rebuilds the entire code, reducing resource consumption":"This update rebuilds the entire code, reducing resource consumption","Optimized mobile usage, added canvas support, and added custom commands":"Optimized mobile usage, added canvas support, and added custom commands","⚠️This update is not compatible with 2.x version command ids, please click [Repair command] to be compatible":"⚠️This update is not compatible with 2.x version command ids, please click [Repair command] to be compatible","⚠️If you want to restore the default settings, please click [Restore default settings]":"⚠️If you want to restore the default settings, please click [Restore default settings]","Please execute a editingToolbar format command first, then enable the format brush":"Please execute a editingToolbar format command first, then enable the format brush","Format brush ON! Select text to apply【":"Format brush ON! Select text to apply【","】format":"】format\nClick the mouse middle or right key to close the formatting-brush","Add to Toolbar":"Add to Toolbar","This command is already in the toolbar.":"This command is already in the toolbar.","Command added to toolbar":"Command added to toolbar","Add this command to the toolbar.":"Add this command to the toolbar.","Callout Type":"Callout Type",Title:"Title","Optional, leave blank for default title":"Optional, leave blank for default title","Input title":"Input title","Collapse State":"Collapse State",Open:"Open",Closed:"Closed",Content:"Content",Insert:"Insert",Default:"Default","Input content":"Input content","Link Text":"Link Text","Link Alias":"Link Alias","Link URL":"Link URL","Embed Content":"Embed Content","Image Size":"Image Size","Insert New Line":"Insert New Line","Paste and Parse":"Paste and Parse","URL Format Error":"URL Format Error","Image Width":"Image Width","Image Height":"Image Height","If it is an image, turn on":"If it is an image, turn on","Insert a link on the next line":"Insert a link on the next line","Link Title(optional)":"Link Title(optional)",Alias:"Alias",Optional:"Optional","Default 0, format will keep the text selected":"Default 0, format will keep the text selected","to insert":"to insert","Latest Changes":"Latest Changes","📋View full changelog":"📋View full changelog","Open changelog":"Open changelog","Loading changelog...":"Loading changelog...","Open the complete changelog in your browser":"Open the complete changelog in your browser","Enable Multiple Configurations":"Enable Multiple Configurations","Enable different command configurations for each position style (following, top, fixed).":"Enable different command configurations for each position style (following, top, fixed).","Currently editing commands for":"Currently editing commands for","position style":"position style","Current Configuration":"Current Configuration","Switch between different command configurations.":"Switch between different command configurations.","Following Style":"Following Style","Top Style":"Top Style","Fixed Style":"Fixed Style","Mobile Style":"Mobile Style",configuration:"configuration","Deploy command to configurations":"Deploy command to configurations","All Configurations":"All Configurations",Deploy:"Deploy","Command deployed to selected configurations":"Command deployed to selected configurations","No configuration selected for deployment":"No configuration selected for deployment","Command already exists in selected configurations":"Command already exists in selected configurations","Command deployed to: ":"Command deployed to: ","Command Deleted.":"Command Deleted.","Confirm Delete?":"Confirm Delete?",Confirm:"Confirm","Are you sure you want to restore all settings to default? But custom commands will be preserved.":"Are you sure you want to restore all settings to default? But custom commands will be preserved.","Successfully restored default settings! (Custom commands preserved)":"Successfully restored default settings! (Custom commands preserved)","This will reset all your custom configurations, but custom commands will be preserved":"This will reset all your custom configurations, but custom commands will be preserved","Import/Export":"Import/Export","Export Configuration":"Export Configuration","Export your toolbar configuration to share with others.":"Export your toolbar configuration to share with others.",Export:"Export","Import Configuration":"Import Configuration","Import toolbar configuration from JSON.":"Import toolbar configuration from JSON.",Import:"Import","Usage Instructions":"Usage Instructions","Export: Generate a JSON configuration that you can save or share.":"Export: Generate a JSON configuration that you can save or share.","Import: Paste a previously exported JSON configuration.":"Import: Paste a previously exported JSON configuration.","You can choose to export all settings, only toolbar commands, or only custom commands":"You can choose to export all settings, only toolbar commands, or only custom commands","When importing, the plugin will only update the settings included in the import data":"When importing, the plugin will only update the settings included in the import data","Warning: Importing configuration will overwrite your current settings. Consider exporting your current configuration first as a backup.":"Warning: Importing configuration will overwrite your current settings. Consider exporting your current configuration first as a backup.","Export Type":"Export Type","Choose what to export":"Choose what to export","All Settings":"All Settings","Toolbar Commands Only":"Toolbar Commands Only","Custom Commands Only":"Custom Commands Only","Export Content":"Export Content","Copy this content to share with others":"Copy this content to share with others","Loading...":"Loading...","Copy to Clipboard":"Copy to Clipboard","Configuration copied to clipboard":"Configuration copied to clipboard","Failed to copy configuration":"Failed to copy configuration","Paste the configuration JSON here":"Paste the configuration JSON here","Paste configuration here...":"Paste configuration here...","Invalid import data":"Invalid import data","Configuration imported successfully":"Configuration imported successfully","No valid configuration found in import data":"No valid configuration found in import data","Failed to import configuration. Invalid format.":"Failed to import configuration. Invalid format.","Import Mode":"Import Mode","Choose how to import the configuration":"Choose how to import the configuration","Update Mode (Add new items and update existing ones)":"Update Mode (Add new items and update existing ones)","Overwrite Mode (Replace all settings with imported ones)":"Overwrite Mode (Replace all settings with imported ones)","Configuration imported successfully (Overwrite mode)":"Configuration imported successfully (Overwrite mode)","Configuration imported successfully (Update mode)":"Configuration imported successfully (Update mode)","Warning: Overwrite mode will completely replace your current settings with the imported ones. Consider exporting your current configuration first as a backup.":"Warning: Overwrite mode will completely replace your current settings with the imported ones. Consider exporting your current configuration first as a backup.","Warning: Update mode will add new items and update existing ones based on the imported configuration.":"Warning: Update mode will add new items and update existing ones based on the imported configuration.","Add Format Command":"Add Format Command",Regex:"Regex","Prefix/Suffix":"Prefix/Suffix","Insert Special Char":"Insert Special Char","Add Regex Command":"Add Regex Command","Switch Regex Command Window":"Switch Regex Command Window","Please select text first":"Please select text first","The selected text does not meet the condition requirements":"The selected text does not meet the condition requirements","Regex command execution error: ":"Regex command execution error: ","Copy code":"Copy code","Copied!":"Copied!","Explain the syntax of JavaScript regular expressions":"Explain the syntax of JavaScript regular expressions","Apply regular expression replacement":"Apply regular expression replacement","Conditional matching":"Conditional matching","Complete regular expression code (copy to AI for explanation)":"Complete regular expression code (copy to AI for explanation)","Error: ":"Error: ","Regex pattern cannot be empty":"Regex pattern cannot be empty","Command already exists":"Command already exists","Choose icon":"Choose icon","URL to Markdown link":"URL to Markdown link","Convert MM/DD/YYYY to YYYY-MM-DD":"Convert MM/DD/YYYY to YYYY-MM-DD","Add bold to keywords":"Add bold to keywords","Format phone number":"Format phone number","Remove extra spaces":"Remove extra spaces","Convert HTML bold tags to Markdown format":"Convert HTML bold tags to Markdown format","Convert quoted text to quote block":"Convert quoted text to quote block","Convert CSV to Markdown table row":"Convert CSV to Markdown table row","Add uniform alias to Markdown links":"Add uniform alias to Markdown links","Delete empty lines (multiline mode)":"Delete empty lines (multiline mode)","Add list symbol to each line (multiline mode)":"Add list symbol to each line (multiline mode)","If the text contains important, set the text highlight (conditional format)":"If the text contains important, set the text highlight (conditional format)","Matching pattern":"Matching pattern","Regex pattern to match":"Regex pattern to match","Replacement pattern (use $1, $2, etc. to reference capture groups)":"Replacement pattern (use $1, $2, etc. to reference capture groups)","Ignore case":"Ignore case","Global replace":"Global replace","Multiline mode":"Multiline mode","Use condition":"Use condition","Condition pattern":"Condition pattern","Only apply custom command when text matches the condition":"Only apply custom command when text matches the condition","Must exist regular expression or text":"Must exist regular expression or text","Replacement pattern":"Replacement pattern","Match case-insensitive":"Match case-insensitive","^ and $ match the start and end of each line":"^ and $ match the start and end of each line","Replace all matches":"Replace all matches",Command:"Command","Input example text to view the formatting effect of the command...":"Input example text to view the formatting effect of the command...",Description:"Description","[Example]":"[Example]","[Requirements]":"[Requirements]","[Output]":"[Output]","AI question template:":"AI question template:","I need to convert the url to a markdown format link":"I need to convert the url to a markdown format link","For example, convert https://example.com to [https://example.com](https://example.com)":"For example, convert https://example.com to [https://example.com](https://example.com)","Use js regular expression to implement, and output the parameters in the following format (the result does not need to be escaped with json)":"Use js regular expression to implement, and output the parameters in the following format (the result does not need to be escaped with json)","[Description]":"[Description]","How to use AI to get regular expressions?":"How to use AI to get regular expressions?","Regular expression examples":"Regular expression examples","Edit regular expression command":"Edit regular expression command","Add regular expression command":"Add regular expression command","Result: ":"Result: ","Example text:":"Example text:",Preview:"Preview",Result:"Result","Please select text or copy text to clipboard first":"Please select text or copy text to clipboard first","Overwrite Import":"Overwrite Import","Update Import":"Update Import","Importing configuration...":"Importing configuration...","Following Style Only":"Following Style Only","Top Style Only":"Top Style Only","Fixed Style Only":"Fixed Style Only","Mobile Style Only":"Mobile Style Only","Unknown import type":"Unknown import type","All Toolbar Commands":"All Toolbar Commands","Initialize Commands":"Initialize Commands","Copy commands from the main menu configuration":"Copy commands from the main menu configuration","Initialize commands to default settings":"Initialize commands to default settings","Reset Commands":"Reset Commands","Commands reset successfully":"Commands reset successfully","Following style commands initialized from current menu commands":"Following style commands initialized from current menu commands","Commands initialized successfully":"Commands initialized successfully","Reset to Menu Commands":"Reset to Menu Commands","Are you sure you want to reset the current configuration?":"Are you sure you want to reset the current configuration?","Following style commands successfully initialized":"Following style commands successfully initialized","Top style commands successfully initialized":"Top style commands successfully initialized","Fixed style commands successfully initialized":"Fixed style commands successfully initialized","Mobile style commands successfully initialized":"Mobile style commands successfully initialized","Reset commands to default settings":"Reset commands to default settings",Clear:"Clear","Remove all commands from this configuration.":"Remove all commands from this configuration.","Are you sure you want to clear all commands under the current style?":"Are you sure you want to clear all commands under the current style?","Current style commands have been cleared":"Current style commands have been cleared","Manage Commands":"Manage Commands","Reset or clear all commands in this configuration":"Reset or clear all commands in this configuration","One-click Clear":"One-click Clear","Import Commands from Other Styles":"Import Commands from Other Styles","Copy commands from another style configuration.":"Copy commands from another style configuration.","Main menu only":"Main menu only","This import will update:":"This import will update:","Custom commands":"Custom commands","Toolbar commands":"Toolbar commands","General settings":"General settings","Please paste configuration data first":"Please paste configuration data first","Invalid import data format":"Invalid import data format","Import From":"Import From","This import will:":"This import will:","Update general settings":"Update general settings","Update Main Menu Commands":"Update Main Menu Commands","Update Custom Commands":"Update Custom Commands","Update Following Style Commands":"Update Following Style Commands","Update Top Style Commands":"Update Top Style Commands","Update Fixed Style Commands":"Update Fixed Style Commands","Update Mobile Style Commands":"Update Mobile Style Commands","Clear all Main Menu Commands":"Clear all Main Menu Commands","Clear all Custom Commands":"Clear all Custom Commands","Clear all Following Style Commands":"Clear all Following Style Commands","Clear all Top Style Commands":"Clear all Top Style Commands","Clear all Fixed Style Commands":"Clear all Fixed Style Commands","Clear all Mobile Style Commands":"Clear all Mobile Style Commands","Overwrite Mode (Replace settings with imported ones)":"Overwrite Mode (Replace settings with imported ones)","Warning: Overwrite mode will replace existing settings with imported ones.":"Warning: Overwrite mode will replace existing settings with imported ones.","Warning: Update mode will add new items and update existing ones.":"Warning: Update mode will add new items and update existing ones.","Enable Multiple Config":"Enable Multiple Config","Set Multiple Config to:":"Set Multiple Config to:",Enable:"Enable",Disable:"Disable","Set Position Style to:":"Set Position Style to:",Following:"Following",Top:"Top",Fixed:"Fixed",Mobile:"Mobile","All commands":"All commands","⚠️ Overwrite mode will replace existing settings with imported ones.":"⚠️ Overwrite mode will replace existing settings with imported ones.","ℹ️ Update mode will merge imported settings with existing ones.":"ℹ️ Update mode will merge imported settings with existing ones.","Do you want to continue?":"Do you want to continue?","Imported settings:":"Imported settings:","Imported commands:":"Imported commands:","Disable toolbar for this view":"Disable toolbar for this view","Enable toolbar for this view":"Enable toolbar for this view","Manage all view types":"Manage all view types","Current View: ":"Current View: ","Appearance Style":"Appearance Style","Position Settings":"Position Settings","All commands have been removed.":"All commands have been removed.","Join the Community":"Join the Community","Share your toolbar settings and styles in our":"Share your toolbar settings and styles in our","Get inspired by what others have created or showcase your own customizations.":"Get inspired by what others have created or showcase your own customisations.","Toolbar Preview (With a hypothetical command configuration.)":"Toolbar Preview (With a hypothetical command configuration.)","Toolbar Theme":"Toolbar Theme","Select a preset toolbar theme, automatically setting the background color, icon color, and size for the selected style.":"Select a preset toolbar theme, automatically setting the background colour, icon colour, and size for the selected style.","Toolbar Background Color":"Toolbar Background Colour","Set the background color of the toolbar.":"Set the background colour of the toolbar.","Toolbar Icon Color":"Toolbar Icon Colour","Set the color of the toolbar icon.":"Set the colour of the toolbar icon.","Toolbar Icon Size":"Toolbar Icon Size","Set the size of the toolbar icon (px); default: 18px":"Set the size of the toolbar icon (px); default: 18px","Custom Theme":"Custom Theme","Fixed Position Offset":"Fixed Position Offset","Choose the offset of the Editing Toolbar in the fixed position.":"Choose the offset of the Editing Toolbar in the fixed position.","Renumber List":"Renumber List","Fetch Remote Title":"Fetch Remote Title","Please enter a URL first":"Please enter a URL first","Failed to fetch title for":"Failed to fetch title for","Link Title (optional)":"Link Title (optional)","Unable to detect editor width":"Unable to detect editor width","Fit Editor Width":"Fit Editor Width","Please execute a format command or select format text first, then enable the format brush":"Please execute a format command or select format text first, then enable the format brush","Use \\n to represent line breaks":"Use \\n to represent line breaks","Use ↵ to represent line breaks":"Use ↵ to represent line breaks","Top Toolbar":"Top Toolbar","Enable the toolbar positioned at the top.":"Enable the toolbar positioned at the top.","Following Toolbar":"Following Toolbar","Enable the toolbar that appears upon text selection.":"Enable the toolbar that appears upon text selection.","Fixed Toolbar":"Fixed Toolbar","Enable the toolbar whose position may be fixed where you please.":"Enable the toolbar whose position may be fixed where you please.","Toolbar Settings":"Toolbar Settings","Choose which toolbar style's appearance you want to edit.":"Choose which toolbar style's appearance you want to edit.","Vertical Split":"Vertical Split"},es:{},fr:{},hi:{},id:{},it:{},ja:{},ko:{},nl:{},nn:{},pl:{},pt:{},"pt-br":{"Editing Toolbar Append Method":"Método de Inserção da Barra de Ferramentas","Choose where Editing Toolbar will append upon regeneration. To see the change, hit the refresh button below, or in the status bar menu.":"Escolha onde a Barra de Ferramentas será inserida ao regenerar. Para ver a alteração, clique no botão de atualização abaixo, ou no menu da barra de status.","Editing Toolbar aesthetic":"Estilo da Barra de Ferramentas","Choose between a glass morphism, tiny and default style for Editing Toolbar. To see the change, hit the refresh button below, or in the status bar menu.":"Escolha entre um estilo de vidro, pequeno e padrão para a Barra de Ferramentas. Para ver a alteração, clique no botão de atualização abaixo, ou no menu da barra de status.","Editing Toolbar position":"Posição da Barra de Ferramentas","Choose between fixed position or cursor following mode.":"Escolha entre posição fixa ou modo contextual.","Editing Toolbar Columns":"Colunas da Barra de Ferramentas","Choose the number of columns per row to display on Editing Toolbar.":"Escolha o número de colunas por linha para exibir na Barra de Ferramentas.","Editing Toolbar refresh":"Atualizar Barra de Ferramentas","Editing Toolbar Commands":"Comandos da Barra de Ferramentas","Add a command onto Editing Toolbar from Obsidian's commands library. To reorder the commands, drag and drop the command items. To delete them, use the delete buttom to the right of the command item. Editing Toolbar will not automaticaly refresh after reordering commands. Use the refresh button above.":"Adicione um comando na Barra de Ferramentas a partir da biblioteca de comandos do Obsidian. Para reordenar os comandos, arraste e solte os itens do comando. Para deletar, use o botão de deletar à direita do item do comando. A Barra de Ferramentas não atualizará automaticamente após reordenar os comandos. Use o botão de atualização acima.","Format Brush Off!":"Pincel de formatação desligado!","Hide & Show":"Ocultar & Mostrar","Editing Toolbar will only refresh automatically after you have either added or deleted a command from it. To see UI changes to editingToolbar (above settings changes) use the refresh button. If you forget to refresh in settings, no worries. There is also a refresh button in the editingToolbar status bar menu.":"A barra de edição só atualizará automaticamente após você ter adicionado ou deletado um comando dela. Para ver as alterações na interface do editingToolbar (alterações acima das configurações) use o botão de atualização. Se você esquecer de atualizar nas configurações, não se preocupe. Também há um botão de atualização na barra de status da Barra de Edição.","Font-Color formatting brush ON!":"Pincel de cor da fonte ativado!",More:"Mais","Font Colors":"Cores de Texto","Format Brush":"Pincel de formatação","Background Color":"Cor de Fundo",Refresh:"Atualizar",Add:"Adicionar",Delete:"Deletar","Change Command Name":"Alterar Nome do Comando","Add Submenu":"Adicionar Submenu","Add Separator":"Adicionar Separador","Enter the icon code, it looks like .... format":"Digite o código do ícone, parece com o formato .... ","Please enter a new name: ":"Por favor, digite um novo nome: ","Drag the slider to move the position":"Arraste o slider para mover a posição","Plugin Settings":"Configurações do Plugin","Background-color formatting brush ON!":"Pincel de cor de fundo ativado!\nClique com o botão do meio ou direito do mouse para sair do modo.","Clear formatting brush ON!":"Pincel de formatação ativado!","Clear formatting brush ON!\nClick the mouse middle or right key to close the formatting-brush":"Pincel de formatação ativado!\nClique com o botão do meio ou direito do mouse para sair do modo de formatação.","The toolbar is displayed when the mouse moves over it, otherwise it is automatically hidden":"A barra de ferramentas é exibida quando o mouse passa por cima dela, caso contrário, ela é automaticamente oculta.","Editing Toolbar Auto-hide":"Auto-ocultação da Barra de Ferramentas","Editing Toolbar Centred Display":"Exibição Centralizada da Barra de Ferramentas","Whether the toolbar is centred or full-width, the default is full-width.":"Define se a barra de ferramentas é centralizada ou ocupa toda a largura. O padrão é largura completa.","Custom Backgroud Color":"Cor de Fundo Personalizada","Custom Font Color":"Cor de Texto Personalizada","🎨 Set Custom Background":"🎨 Definir Cor de Fundo Personalizada","🖌️ Set Custom Font Color":"🖌️ Definir Cor de Texto Personalizada","Click on the picker to adjust the color":"Clique no seletor para ajustar a cor","Mobile Enabled or Not":"Habilitar em dispositivos móveis","Whether to enable the plugin for the mobile client, the default is enabled.":"Habilitar o plugin para dispositivos móveis, o padrão é habilitado.","Whether to enable on mobile devices with device width less than 768px.":"Habilitar o plugin para dispositivos móveis com largura de dispositivo menor que 768px, o padrão é desabilitado.",Reset:"Reiniciar",Fix:"Ajustar","Fix Editing Toolbar":"Ajustar Barra de Ferramentas",General:"Geral",Appearance:"Aparência",Commands:"Comandos","Choose between fixed position or cursor following mode":"Escolha entre posição fixa ou modo contextual.","Add and manage commands":"Adicionar e gerenciar comandos","Choose where Editing Toolbar will append upon regeneration.":"Escolha onde a Barra de Ferramentas será inserida ao regenerar.","Whether to enable on mobile devices with device width less than 768px":"Habilitar o plugin para dispositivos móveis com largura de dispositivo menor que 768px","Choose between a glass morphism, tiny and default style.":"Escolha entre um estilo de vidro, pequeno e padrão.","Refresh Toolbar":"Atualizar Barra de Ferramentas","Add Command":"Adicionar Comando",Settings:"Configurações","Position Style":"Estilo de Posição",Columns:"Colunas","Drag to Adjust Position":"Arraste para ajustar a posição","Vertical Position":"Posição Vertical","Horizontal Position":"Posição Horizontal","Toolbar Position":"Posição da Barra de Ferramentas","Choose an icon":"Escolha um ícone","Search for an icon...":"Pesquisar por um ícone...",All:"Todos",Obsidian:"Obsidian",Glyph:"Ícone",Custom:"Personalizado","Choose a command":"Escolha um comando","The command":"O comando","already exists":"já existe","Enter the icon code, format as .... ":"Digite o código do ícone, formato como .... ","No matching icons found":"Nenhum ícone correspondente encontrado","Custom Commands":"Comandos Personalizados","Toolbar Commands":"Comandos da Barra de Ferramentas",ID:"ID",Prefix:"Prefixo",Suffix:"Sufixo",Pattern:"Padrão","Custom Format Commands":"Comandos de Formatação Personalizados","Add, edit or delete custom format commands.":"Adicionar, editar ou deletar comandos de formatação personalizados.",Edit:"Editar","Command ID":"ID do Comando",'Unique identifier, no spaces, e.g.: "my-custom-format"':'Identificador único, sem espaços, exemplo: "meu-comando-personalizado"',"Displayed name in toolbar and menu":"Nome exibido na barra de ferramentas e menu","Add content before selected text":"Adicionar conteúdo antes do texto selecionado","Add content after selected text":"Adicionar conteúdo depois do texto selecionado","Character offset of cursor after formatting":"Deslocamento do cursor após a formatação","Line offset of cursor after formatting":"Deslocamento da linha do cursor após a formatação","Whether to insert at the beginning of the next line":"Inserir no início da próxima linha","Command icon (click to select)":"Ícone do comando (clique para selecionar)","Choose Icon":"Escolha um ícone",Save:"Salvar",Cancel:"Cancelar","Edit Custom Command":"Editar Comando Personalizado","Add Custom Command":"Adicionar Comando Personalizado","Command ID and command name cannot be empty":"ID do Comando e nome do comando não podem ser vazios","Command ID cannot contain spaces":"ID do Comando não pode conter espaços",'Command ID "${this.commandId}" already exists':'ID do Comando "${this.commandId}" já existe',"Cursor Position Offset":"Deslocamento do cursor","Line Offset":"Deslocamento da linha","Line Head Format":"Formatação de linha inicial",Icon:"Ícone","Command Name":"Nome do Comando","Are you sure you want to restore all settings to default? This will lose all your custom configurations.":"Tem certeza que deseja restaurar todas as configurações para a configuração padrão? Isso irá apagar todas as suas configurações personalizadas.","Restore default":"Restaurar padrão","Restore default settings":"Restaurar configurações padrão","🔄Restore default settings":"🔄Restaurar configurações padrão","🔧Data repair":"🔧Reparar dados","Command IDs have been successfully repaired!":"IDs de comando foram reparadas com sucesso!","No command IDs need to be repaired":"Nenhuma ID de comando precisa ser reparada","Error repairing command IDs, please check the console for details":"Erro ao reparar IDs de comando, por favor verifique o console para mais detalhes","Error restoring default settings, please check the console for details":"Erro ao restaurar configurações padrão, por favor verifique o console para mais detalhes","Successfully restored default settings!":"Configurações padrão restauradas com sucesso!",Close:"Fechar",Tips:"Dicas","This update changed the ID of some commands, please click this button to repair the commands to ensure the toolbar works properly":"Esta atualização alterou o ID de alguns comandos. Clique neste botão para repará-los e garantir que a barra de ferramentas funcione corretamente.","Repair command ID":"Reparar ID do Comando","This will reset all your custom configurations":"Isso irá resetar todas as suas configurações personalizadas","Notice:":"Nota:","This update rebuilds the entire code, reducing resource consumption":"Esta atualização recompila todo o código, reduzindo o consumo de recursos","Optimized mobile usage, added canvas support, and added custom commands":"Otimizado para uso em dispositivos móveis, adicionando suporte para o canvas e adicionado comandos personalizados","⚠️This update is not compatible with 2.x version command ids, please click [Repair command] to be compatible":"⚠️Esta atualização não é compatível com IDs de comando da versão 2.x. Clique em [Reparar comando] para corrigir a compatibilidade.","⚠️If you want to restore the default settings, please click [Restore default settings]":"⚠️Se você quiser restaurar as configurações padrão, por favor clique em [Restaurar configurações padrão].","Please execute a editingToolbar format command first, then enable the format brush":"Execute um comando de formatação da barra de edição antes de ativar o pincel de formatação.","Format brush ON! Select text to apply【":"Pincel de formatação ativado! Selecione o texto para aplicar【","】format":"】\nClique com o botão do meio ou direito do mouse para sair do modo de formatação.","Add to Toolbar":"Adicionar à Barra de Edição","This command is already in the toolbar.":"Este comando já está na barra de ferramentas.","Command added to toolbar":"Comando adicionado à barra de ferramentas","Add this command to the toolbar.":"Adicionar este comando à barra de ferramentas.","Callout Type":"Tipo de Callout",Title:"Título","Optional, leave blank for default title":"Opcional, deixe em branco para o título padrão","Input title":"Digite o título","Collapse State":"Estado de Colapso",Open:"Abrir",Closed:"Fechado",Content:"Conteúdo",Insert:"Inserir",Default:"Padrão","Input content":"Digite o conteúdo","Link Text":"Texto do Link","Link Alias":"Alias do Link","Link URL":"URL do Link","Embed Content":"Conteúdo Embutido","Image Size":"Tamanho da Imagem","Insert New Line":"Inserir Nova Linha","Paste and Parse":"Colar e Analisar","URL Format Error":"Erro de Formato de URL","Image Width":"Largura da Imagem","Image Height":"Altura da Imagem","If it is an image, turn on":"Se for uma imagem, ative","Insert a link on the next line":"Inserir um link na próxima linha","Link Title(optional)":"Título do Link(opcional)",Alias:"Alias",Optional:"Opcional","Default 0, format will keep the text selected":"Padrão 0, o formato manterá o texto selecionado","to insert":"para inserir","Latest Changes":"Últimas Alterações","📋View full changelog":"📋Ver o registro de alterações completo","Open changelog":"Abrir registro de alterações","Loading changelog...":"Carregando registro de alterações...","Open the complete changelog in your browser":"Abrir o registro de alterações completo no seu navegador","Enable Multiple Configurations":"Habilitar Múltiplas Configurações","Enable different command configurations for each position style (following, top, fixed).":"Habilitar configurações de comandos diferentes para cada modo de posição (following, top, fixed).","Currently editing commands for":"Atualmente editando comandos para","position style":"estilo de posição","Current Configuration":"Configuração Atual","Switch between different command configurations.":"Trocar entre configurações de comando diferentes.","Following Style":"Estilo Contextual","Top Style":"Estilo de Topo","Fixed Style":"Estilo Fixo","Mobile Style":"Estilo Mobile",configuration:"configuração","Deploy command to configurations":"Implantar comando para configurações","All Configurations":"Todas as Configurações",Deploy:"Implantar","Command deployed to selected configurations":"Comando implantado para configurações selecionadas","No configuration selected for deployment":"Nenhuma configuração selecionada para implantação","Command already exists in selected configurations":"Comando já existe nas configurações selecionadas","Command deployed to: ":"Comando implantado para: ","Command Deleted":"Comando Deletado","Confirm Delete?":"Confirmar Deleção?",Confirm:"Confirmar","Are you sure you want to restore all settings to default? But custom commands will be preserved.":"Tem certeza que deseja restaurar todas as configurações para a configuração padrão? Mas os comandos personalizados serão preservados.","Successfully restored default settings! (Custom commands preserved)":"Configurações padrão restauradas com sucesso! (Comandos personalizados preservados)","This will reset all your custom configurations, but custom commands will be preserved":"Isso redefinirá todas as suas configurações personalizadas, mas os comandos personalizados serão preservados.","Import/Export":"Importar/Exportar","Export Configuration":"Exportar Configuração","Export your toolbar configuration to share with others.":"Exportar sua configuração da barra de ferramentas para compartilhar com outros.",Export:"Exportar","Import Configuration":"Configuração de Importação","Import toolbar configuration from JSON.":"Importar configuração da barra de ferramentas em formato JSON.",Import:"Importar","Usage Instructions":"Instruções de Uso","Export: Generate a JSON configuration that you can save or share.":"Exportar: Gerar uma configuração em formato JSON para salvar ou compartilhar.","Import: Paste a previously exported JSON configuration.":"Importar: Colar uma configuração em formato JSON exportada anteriormente.","You can choose to export all settings, only toolbar commands, or only custom commands":"Você pode escolher exportar todas as configurações, apenas comandos da barra de ferramentas, ou apenas comandos personalizados","When importing, the plugin will only update the settings included in the import data":"Ao importar, o plugin irá atualizar apenas as configurações incluídas nos dados de importação","Warning: Importing configuration will overwrite your current settings. Consider exporting your current configuration first as a backup.":"Aviso: A importação de configuração irá sobrescrever suas configurações atuais. Considere exportar sua configuração atual primeiro como backup.","Export Type":"Tipo de Exportação","Choose what to export":"Escolha o que exportar","All Settings":"Todas as Configurações","Toolbar Commands Only":"Apenas Comandos da Barra de Ferramentas","Custom Commands Only":"Apenas Comandos Personalizados","Export Content":"Conteúdo de Exportação","Copy this content to share with others":"Copiar este conteúdo para compartilhar com outros","Loading...":"Carregando...","Copy to Clipboard":"Copiar para a área de transferência","Configuration copied to clipboard":"Configuração copiada para a área de transferência","Failed to copy configuration":"Falha ao copiar configuração","Paste the configuration JSON here":"Colar a configuração JSON aqui","Paste configuration here...":"Colar configuração aqui...","Invalid import data":"Dados de importação inválidos","Configuration imported successfully":"Configuração importada com sucesso","No valid configuration found in import data":"Nenhuma configuração válida encontrada nos dados de importação","Failed to import configuration. Invalid format.":"Falha ao importar configuração. Formato inválido.","Import Mode":"Modo de Importação","Choose how to import the configuration":"Escolha como importar a configuração","Update Mode (Add new items and update existing ones)":"Modo de Atualização (Adicionar novos itens e atualizar os existentes)","Overwrite Mode (Replace all settings with imported ones)":"Modo de Sobrescrever (Substituir todas as configurações com as importadas)","Configuration imported successfully (Overwrite mode)":"Configuração importada com sucesso (Modo de Sobrescrever)","Configuration imported successfully (Update mode)":"Configuração importada com sucesso (Modo de Atualização)","Warning: Overwrite mode will completely replace your current settings with the imported ones. Consider exporting your current configuration first as a backup.":"Aviso: O modo de sobrescrever irá substituir todas as suas configurações atuais com as importadas. Considere exportar sua configuração atual primeiro como backup.","Warning: Update mode will add new items and update existing ones based on the imported configuration.":"Aviso: O modo de atualização irá adicionar novos itens e atualizar os existentes com base na configuração importada.","Add Format Command":"Adicionar formatação",Regex:"Regex","Prefix/Suffix":"Prefixo/Sufixo","Insert Special Char":"Inserir Caractere Especial","Add Regex Command":"Adicionar regex","Switch Regex Command Window":"Trocar para Janela de Comando de Regex","Please select text first":"Por favor selecione o texto primeiro","Current line is empty, please select text or move to a non-empty line":"A linha atual está vazia, por favor selecione o texto ou mova para uma linha não vazia","Use current line for regex commands":"Usar a linha atual para comandos de regex","When no text is selected, regex commands will use the current line instead of clipboard content":"Quando não houver texto selecionado, comandos de regex usarão a linha atual em vez do conteúdo da área de transferência","The selected text does not meet the condition requirements":"O texto selecionado não atende aos requisitos da condição","Regex command execution error: ":"Erro ao executar comando de regex: ","Copy code":"Copiar código","Copied!":"Copiado!","Explain the syntax of JavaScript regular expressions":"Explicar a sintaxe das expressões regulares em JavaScript","Apply regular expression replacement":"Aplicar substituição de expressão regular","Conditional matching":"Ocorrência Condicional","Complete regular expression code (copy to AI for explanation)":"Código de expressão regular completo (copiar para explicação com IA)","Error: ":"Erro: ","Regex pattern cannot be empty":"Padrão de regex não pode estar vazio","Command already exists":"Comando já existe","Choose icon":"Escolha um ícone","URL to Markdown link":"URL para Link Markdown","Convert MM/DD/YYYY to YYYY-MM-DD":"Converter MM/DD/YYYY para YYYY-MM-DD","Add bold to keywords":"Adicionar negrito a palavras-chave","Format phone number":"Formatar número de telefone","Remove extra spaces":"Remover espaços extra","Convert HTML bold tags to Markdown format":"Converter tags HTML de negrito para negrito em Markdown","Convert quoted text to quote block":"Converter texto citado para bloco de citação","Convert CSV to Markdown table row":"Converter CSV para linha de tabela Markdown","Add uniform alias to Markdown links":"Adicionar um alias uniforme aos links Markdown","Delete empty lines (multiline mode)":"Deletar linhas vazias (modo multilinha)","Add list symbol to each line (multiline mode)":"Adicionar símbolo de lista a cada linha (modo multilinha)","If the text contains important, set the text highlight (conditional format)":'Se o texto contiver "importante", aplicar destaque ao texto (formatação condicional)',"Matching pattern":"Padrão de correspondência","Regex pattern to match":"Padrão de regex a ser correspondido","Replacement pattern (use $1, $2, etc. to reference capture groups)":"Padrão de substituição (use $1, $2, etc. para referenciar grupos de captura)","Ignore case":"Ignorar maiúsculas e minúsculas","Global replace":"Substituir globalmente","Multiline mode":"Modo multilinha","Use condition":"Usar condição","Condition pattern":"Padrão de condição","Only apply custom command when text matches the condition":"Aplicar o comando personalizado apenas quando o texto corresponder à condição","Must exist regular expression or text":"Deve existir expressão regular ou texto","Replacement pattern":"Padrão de substituição","Match case-insensitive":"Ignorar maiúsculas e minúsculas","^ and $ match the start and end of each line":"^ e $ correspondem ao início e ao fim de cada linha","Replace all matches":"Substituir todas as ocorrências",Command:"Comando","Input example text to view the formatting effect of the command...":"Digite um texto de exemplo para visualizar o efeito do comando...",Description:"Descrição","[Example]":"[Exemplo]","[Requirements]":"[Requisitos]","[Output]":"[Saída]","AI question template:":"Modelo de pergunta para IA:","I need to convert the url to a markdown format link":"Preciso converter a URL para um link no formato Markdown","For example, convert https://example.com to [https://example.com](https://example.com)":"Por exemplo, converter https://exemplo.com para [https://exemplo.com](https://exemplo.com)","Use js regular expression to implement, and output the parameters in the following format (the result does not need to be escaped with json)":"Usar expressões regulares em JavaScript para implementar e gerar os parâmetros no formato abaixo (o resultado não precisa ser escapado em JSON).","[Description]":"[Descrição]","How to use AI to get regular expressions?":"Como usar IA para obter expressões regulares?","Regular expression examples":"Exemplos de expressões regulares","Edit regular expression command":"Editar comando de expressão regular","Add regular expression command":"Adicionar comando de expressão regular","Result: ":"Resultado: ","Example text:":"Texto de exemplo:",Preview:"Visualizar",Result:"Resultado","Please select text or copy text to clipboard first":"Por favor selecione o texto ou copie o texto para a área de transferência primeiro","Overwrite Import":"Sobrescrever Importação","Update Import":"Atualizar Importação","Importing configuration...":"Importando configuração...","Following Style Only":"Disponível apenas no modo contextual","Top Style Only":"Disponível apenas no modo de topo","Fixed Style Only":"Disponível apenas no modo fixo","Mobile Style Only":"Disponível apenas no modo mobile","Unknown import type":"Tipo de importação desconhecido","All Toolbar Commands":"Todos os Comandos da Barra de Ferramentas","Initialize Commands":"Inicializar Comandos","Copy commands from the main menu configuration":"Copiar comandos do menu principal","Initialize commands to default settings":"Inicializar comandos para configurações padrão","Reset Commands":"Resetar Comandos","Commands reset successfully":"Comandos resetados com sucesso","Following style commands initialized from current menu commands":"Comandos de estilo contextual inicializados a partir dos comandos do menu principal","Commands initialized successfully":"Comandos inicializados com sucesso","Reset to Menu Commands":"Resetar para Comandos do Menu","Are you sure you want to reset the current configuration?":"Tem certeza que deseja resetar a configuração atual?","Following style commands successfully initialized":"Comandos de estilo contextual inicializados com sucesso","Top style commands successfully initialized":"Comandos de estilo de topo inicializados com sucesso","Fixed style commands successfully initialized":"Comandos de estilo fixo inicializados com sucesso","Mobile style commands successfully initialized":"Comandos de estilo mobile inicializados com sucesso","Reset commands to default settings":"Resetar comandos para configurações padrão",Clear:"Limpar","Remove all commands from this configuration.":"Remover todos os comandos desta configuração.","Are you sure you want to clear all commands under the current style?":"Tem certeza que deseja limpar todos os comandos sob o estilo atual?","Current style commands have been cleared":"Comandos do estilo atual foram limpos","Manage Commands":"Gerenciar Comandos","Reset or clear all commands in this configuration":"Resetar ou limpar todos os comandos nesta configuração","One-click Clear":"Limpar com um clique","Import Commands from Other Styles":"Importar Comandos de Outros Estilos","Copy commands from another style configuration.":"Copiar comandos de outra configuração de estilo.","Main menu only":"Apenas para o menu principal","This import will update:":"Esta importação irá atualizar:","Custom commands":"Comandos Personalizados","Toolbar commands":"Comandos da Barra de Ferramentas","General settings":"Configurações Gerais","Please paste configuration data first":"Por favor coloque os dados da configuração primeiro","Invalid import data format":"Formato de dados de importação inválido","Import From":"Importar de","This import will:":"Esta importação irá:","Update general settings":"Atualizar configurações gerais","Update Main Menu Commands":"Atualizar Comandos do Menu Principal","Update Custom Commands":"Atualizar Comandos Personalizados","Update Following Style Commands":"Atualizar Comandos de Estilo Contextual","Update Top Style Commands":"Atualizar Comandos de Estilo de Topo","Update Fixed Style Commands":"Atualizar Comandos de Estilo Fixo","Update Mobile Style Commands":"Atualizar Comandos de Estilo Mobile","Clear all Main Menu Commands":"Limpar todos os Comandos do Menu Principal","Clear all Custom Commands":"Limpar todos os Comandos Personalizados","Clear all Following Style Commands":"Limpar todos os Comandos de Estilo Contextual","Clear all Top Style Commands":"Limpar todos os Comandos de Estilo de Topo","Clear all Fixed Style Commands":"Limpar todos os Comandos de Estilo Fixo","Clear all Mobile Style Commands":"Limpar todos os Comandos de Estilo Mobile","Overwrite Mode (Replace settings with imported ones)":"Modo de Sobrescrever (Substituir configurações com as importadas)","Warning: Overwrite mode will replace existing settings with imported ones.":"Aviso: O modo de sobrescrever irá substituir todas as suas configurações atuais com as importadas.","Warning: Update mode will add new items and update existing ones.":"Aviso: O modo de atualização irá adicionar novos itens e atualizar os existentes com base na configuração importada.","Enable Multiple Config":"Habilitar Múltiplas Configurações","Set Multiple Config to:":"Definir Múltiplas Configurações para:",Enable:"Habilitar",Disable:"Desabilitar","Set Position Style to:":"Definir Estilo de Posição para:",Following:"Contextual",Top:"Topo",Fixed:"Fixo",Mobile:"Mobile","All commands":"Todos os Comandos","⚠️ Overwrite mode will replace existing settings with imported ones.":"⚠️ O modo de sobrescrever irá substituir todas as suas configurações atuais com as importadas.","ℹ️ Update mode will merge imported settings with existing ones.":"ℹ️ O modo de atualização irá adicionar novos itens e atualizar os existentes com base na configuração importada.","Do you want to continue?":"Deseja continuar?","Imported settings:":"Configurações importadas:","Imported commands:":"Comandos importados:","Disable toolbar for this view":"Desabilitar barra de ferramentas para esta visualização","Enable toolbar for this view":"Habilitar barra de ferramentas para esta visualização","Manage all view types":"Gerenciar todos os tipos de visualização","Current View: ":"Visualização Atual: ","Appearance Style":"Estilo de Aparência","Position Settings":"Configurações de Posição","All commands have been removed.":"Todos os comandos foram removidos.","Join the Community":"Juntar-se à Comunidade","Share your toolbar settings and styles in our":"Compartilhe suas configurações e estilos da barra de ferramentas em nossa","Get inspired by what others have created or showcase your own customizations.":"Inspire-se com o que outros criaram ou mostre suas próprias personalizações.","Toolbar Preview (With a hypothetical command configuration.)":"Visualização da barra de ferramentas (com uma configuração de comandos hipotética).","Toolbar Theme":"Estilo da Barra de Ferramentas","Select a preset toolbar theme, automatically setting the background color, icon color, and size for the selected style.":"Selecione um estilo de barra de ferramentas pré-definido, automaticamente definindo a cor de fundo, cor do ícone e tamanho para o estilo selecionado.","Toolbar Background Color":"Cor de Fundo da Barra de Ferramentas","Set the background color of the toolbar.":"Definir a cor de fundo da barra de ferramentas.","Toolbar Icon Color":"Cor do Ícone da Barra de Ferramentas","Set the color of the toolbar icon.":"Definir a cor do ícone da barra de ferramentas.","Toolbar Icon Size":"Tamanho do Ícone da Barra de Ferramentas","Set the size of the toolbar icon (px); default: 18px":"Definir o tamanho do ícone da barra de ferramentas (px); padrão: 18px","Custom Theme":"Estilo Personalizado","Fixed Position Offset":"Deslocamento Fixo","Choose the offset of the Editing Toolbar in the fixed position.":"Escolha o deslocamento da Barra de Edição na posição fixa.","Renumber List":"Renumerar Lista","Fetch Remote Title":"Obter Título Remoto","Please enter a URL first":"Por favor digite uma URL primeiro","Failed to fetch title for":"Falha ao obter título para","Link Title (optional)":"Título do Link (opcional)","Unable to detect editor width":"Não foi possível detectar a largura do editor","Fit Editor Width":"Ajustar Largura do Editor","Please execute a format command or select format text first, then enable the format brush":"Execute um comando de formatação ou selecione um texto já formatado antes de ativar o pincel de formatação.","Use \\n to represent line breaks":"Use \\n para representar quebras de linha","Use ↵ to represent line breaks":"Use ↵ para representar quebras de linha","Top Toolbar":"Barra de Ferramentas de Topo","Enable the toolbar positioned at the top.":"Habilitar a barra de ferramentas posicionada no topo.","Following Toolbar":"Barra de Ferramentas Contextual","Enable the toolbar that appears upon text selection.":"Habilitar a barra de ferramentas que aparece ao selecionar texto.","Fixed Toolbar":"Barra de Ferramentas Fixa","Enable the toolbar whose position may be fixed where you please.":"Habilitar a barra de ferramentas cuja posição pode ser fixa onde você preferir.","Toolbar Settings":"Configurações da Barra de Ferramentas","Choose which toolbar style's appearance you want to edit.":"Escolha qual estilo de barra de ferramentas você deseja editar.","Vertical Split":"Divisão Vertical"},ro:{},ru:{},tr:{},"zh-cn":Zr,"zh-tw":Kr}[e.moment.locale()];function Xr(e){return Jr&&Jr[e]||Gr[e]}class Qr extends e.FuzzySuggestModal{constructor(e,t,i=!1,o,n){super(e.app),this.customCallback=null,this.plugin=e,this.command=t,this.issub=i,this.customCallback=o||null,this.setPlaceholder(Xr("Choose an icon")),this.currentEditingConfig=n||""}capitalJoin(e){return e.split(" ").map(e=>e[0].toUpperCase()+e.substring(1)).join(" ")}getItems(){return t}getItemText(e){return this.capitalJoin(e.replace("feather-","").replace("remix-","").replace("bx-","").replace(/([A-Z])/g," $1").trim().replace(/-/gi," "))}renderSuggestion(t,i){const o=createSpan({cls:"editingToolbarIconPick"});i.appendChild(o),e.setIcon(o,t.item),super.renderSuggestion(t,i)}async onChooseItem(e){if("Custom"===e)return this.customCallback?void new ea(this.app,this.plugin,{id:this.command.id,name:this.command.name,icon:""},this.issub,e=>{this.customCallback(e)}).open():void new ea(this.app,this.plugin,this.command,this.issub,null,this.currentEditingConfig).open();if(this.customCallback)return void this.customCallback(e);const t=this.plugin.getCurrentCommands(this.currentEditingConfig);if(this.command.icon){let i=Fr(this.plugin,this.command,this.issub,t);this.issub?t[i.index].SubmenuCommands[i.subindex].icon=e:t[i.index].icon=e,this.plugin.updateCurrentCommands(t,this.currentEditingConfig)}else this.command.icon=e,t.push(this.command),this.plugin.updateCurrentCommands(t,this.currentEditingConfig);await this.plugin.saveSettings(),setTimeout(()=>{dispatchEvent(new Event("editingToolbar-NewCommand"))},100),console.log(`%c命令 '${this.command.name}' 已添加到编辑工具栏`,"color: Violet")}}class ea extends e.Modal{constructor(e,t,i,o,n,s){super(e),this.customCallback=null,this.plugin=t,this.item=i,this.issub=o,this.customCallback=n||null,this.currentEditingConfig=s||"",this.containerEl.addClass("editingToolbar-Modal"),this.containerEl.addClass("customicon")}onOpen(){const{contentEl:e}=this;e.createEl("b",{text:Xr("Enter the icon code, format as .... ")});const t=document.createElement("textarea");t.className="wideInputPromptInputEl",t.placeholder="",t.value=this.item.icon||"",t.style.width="100%",t.style.height="200px",e.appendChild(t),t.addEventListener("input",async()=>{const e=t.value;if(this.customCallback)return void(this.item.icon=e);this.item.icon=e;const i=this.plugin.getCurrentCommands(this.currentEditingConfig),o=Fr(this.plugin,this.item,this.issub,i);if(this.issub){let t=o.subindex;-1===t?this.plugin.settings.menuCommands[o.index].SubmenuCommands.push(this.item):this.plugin.settings.menuCommands[o.index].SubmenuCommands[t].icon=e}else{let e=o.index;-1===e?this.plugin.settings.menuCommands.push(this.item):this.plugin.settings.menuCommands[e].icon=this.item.icon}await this.plugin.saveSettings()}),this.submitEnterCallback&&t.addEventListener("keydown",this.submitEnterCallback)}onClose(){const{contentEl:e}=this;e.empty(),this.customCallback?this.customCallback(this.item.icon||""):setTimeout(()=>{dispatchEvent(new Event("editingToolbar-NewCommand"))},100)}}class ta extends e.FuzzySuggestModal{constructor(e,t){super(e.app),this.plugin=e,this.app,this.setPlaceholder(Xr("Choose a command")),this.currentEditingConfig=t||""}getItems(){return app.commands.listCommands()}getItemText(e){return e.name}async onChooseItem(t){const i=this.plugin.getCurrentCommands(this.currentEditingConfig);i.findIndex(e=>e.id==t.id)>-1?new e.Notice(Xr("The command")+t.name+Xr("already exists"),3e3):t.icon?(i.push(t),this.plugin.updateCurrentCommands(i,this.currentEditingConfig),await this.plugin.saveSettings(),setTimeout(()=>{dispatchEvent(new Event("editingToolbar-NewCommand"))},100),console.log(`%c命令 '${t.name}' 已添加到编辑工具栏`,"color: Violet")):new Qr(this.plugin,t,!1,null,this.currentEditingConfig).open()}}class ia extends e.Modal{constructor(e,t,i,o,n){super(t.app),this.plugin=t,this.item=i,this.issub=o,this.currentEditingConfig=n||"",this.containerEl.addClass("editingToolbar-Modal"),this.containerEl.addClass("changename")}onOpen(){const{contentEl:t}=this;t.createEl("b",{text:Xr("Please enter a new name: ")});const i=new e.TextComponent(t);i.inputEl.classList.add("InputPromptInputEl"),i.setPlaceholder("").setValue(this.item.name??"").onChange(e.debounce(async e=>{const t=this.plugin.getCurrentCommands(this.currentEditingConfig);let i=Fr(this.plugin,this.item,this.issub,t);if(this.item.name=e,this.issub){let o=i.subindex;-1===o?t[i.index].SubmenuCommands.push(this.item):t[i.index].SubmenuCommands[o].name=e}else{let e=i.index;-1===e?t.push(this.item):t[e].name=this.item.name}this.plugin.updateCurrentCommands(t),await this.plugin.saveSettings()},100,!0)).inputEl.addEventListener("keydown",this.submitEnterCallback)}onClose(){const{contentEl:e}=this;e.empty(),setTimeout(()=>{dispatchEvent(new Event("editingToolbar-NewCommand"))},100)}}class oa extends e.Modal{constructor(e,t){super(t.app),this.needSave=!1,this.plugin=t,this.containerEl.addClass("editingToolbar-Modal")}onOpen(){const{contentEl:t}=this;t.createEl("p",{text:Xr("Drag the slider to move the position")});const i=t.createDiv({cls:"slider-container"}),o=i.createDiv({cls:"vertical-slider-container"});o.createEl("p",{text:Xr("Vertical Position")});const n=i.createDiv({cls:"horizontal-slider-container"});n.createEl("p",{text:Xr("Horizontal Position")});const s=i.createDiv({cls:"columns-slider-container"});s.createEl("p",{text:Xr("Editing Toolbar Columns")});const r=document.body.clientHeight,a=document.body.clientWidth,l=Math.floor(r/3),c=-Math.floor(r),d=Math.floor(a/2),h=-Math.floor(a/2),u=new e.SliderComponent(o).setLimits(c,l,5).setValue(this.plugin.settings.verticalPosition||0).onChange(e.debounce(e=>{this.needSave=!0,this.plugin.settings.verticalPosition=e,jr(this.plugin.settings)},100,!0)).setDynamicTooltip(),p=new e.SliderComponent(n).setLimits(h,d,10).setValue(this.plugin.settings.horizontalPosition||0).onChange(e.debounce(e=>{this.needSave=!0,this.plugin.settings.horizontalPosition=e,Yr(this.plugin.settings)},100,!0)).setDynamicTooltip(),m=new e.SliderComponent(s).setLimits(1,32,1).setValue(this.plugin.settings.cMenuNumRows||12).onChange(e.debounce(async e=>{this.needSave=!0,this.plugin.settings.cMenuNumRows=e,await this.plugin.saveSettings(),setTimeout(()=>{dispatchEvent(new Event("editingToolbar-NewCommand"))},100)},100,!0)).setDynamicTooltip();i.createDiv({cls:"reset-container"}).createEl("button",{text:Xr("Reset"),cls:"reset-button"}).addEventListener("click",()=>{this.needSave=!0,u.setValue(0),p.setValue(0),m.setValue(12),this.plugin.settings.verticalPosition=0,this.plugin.settings.horizontalPosition=0,this.plugin.settings.cMenuNumRows=12,jr(this.plugin.settings),Yr(this.plugin.settings)})}async onClose(){const{contentEl:e}=this;e.empty(),this.needSave&&await this.plugin.saveSettings()}}const na=["body","workspace"],sa=["default","tiny","glass","custom"],ra=["following","top","fixed"],aa={lastVersion:"0.0.0",aestheticStyle:"default",positionStyle:"top",menuCommands:[{id:"editing-toolbar:editor-undo",name:"Undo Edit",icon:"undo-glyph"},{id:"editing-toolbar:editor-redo",name:"Redo Edit",icon:"redo-glyph"},{id:"editing-toolbar:toggle-format-brush",name:"Format Brush",icon:"paintbrush"},{id:"editing-toolbar:format-eraser",name:"Clear Text Formatting",icon:"eraser"},{id:"editing-toolbar:header2-text",name:"Header 2",icon:"header-2"},{id:"editing-toolbar:header3-text",name:"Header 3",icon:"header-3"},{id:"SubmenuCommands-header",name:"submenu",icon:"header-n",SubmenuCommands:[{id:"editing-toolbar:header1-text",name:"Header 1",icon:"header-1"},{id:"editing-toolbar:header4-text",name:"Header 4",icon:"header-4"},{id:"editing-toolbar:header5-text",name:"Header 5",icon:"header-5"},{id:"editing-toolbar:header6-text",name:"Header 6",icon:"header-6"}]},{id:"editing-toolbar:toggle-bold",name:"Bold",icon:"bold-glyph"},{id:"editing-toolbar:toggle-italics",name:"Italic",icon:"italic-glyph"},{id:"editing-toolbar:toggle-strikethrough",name:"Strikethrough",icon:"strikethrough-glyph"},{id:"editing-toolbar:underline",name:"Underline",icon:"underline-glyph"},{id:"editing-toolbar:toggle-highlight",name:"Highlight",icon:"highlight-glyph"},{id:"SubmenuCommands-text-tools",name:"Text Tools",icon:"box",menuType:"dropdown",SubmenuCommands:[{id:"editing-toolbar:get-plain-text",name:"Get Plain Text",icon:"lucide-file-text"},{id:"editing-toolbar:smart-symbols",name:"Full Half Converter",icon:"lucide-at-sign"},{id:"editingToolbar-Divider-Line",name:"Line Operations",icon:"vertical-split"},{id:"editing-toolbar:insert-blank-lines",name:"Insert Blank Lines",icon:"lucide-space"},{id:"editing-toolbar:remove-blank-lines",name:"Remove Blank Lines",icon:"lucide-minimize-2"},{id:"editing-toolbar:split-lines",name:"Split Lines",icon:"lucide-split"},{id:"editing-toolbar:merge-lines",name:"Merge Lines",icon:"lucide-merge"},{id:"editing-toolbar:dedupe-lines",name:"Dedupe Lines",icon:"lucide-filter"},{id:"editingToolbar-Divider-Line",name:"Text Processing",icon:"vertical-split"},{id:"editing-toolbar:add-wrap",name:"Add Prefix/Suffix",icon:"lucide-wrap-text"},{id:"editing-toolbar:number-lines",name:"Number Lines (Custom)",icon:"lucide-list-ordered"},{id:"editing-toolbar:remove-whitespace-trim",name:"Trim Line Ends",icon:"lucide-scissors"},{id:"editing-toolbar:remove-whitespace-compress",name:"Shrink Extra Spaces",icon:"lucide-minimize"},{id:"editing-toolbar:remove-whitespace-all",name:"Remove All Whitespace",icon:"lucide-eraser"},{id:"editingToolbar-Divider-Line",name:"Advanced Tools",icon:"vertical-split"},{id:"editing-toolbar:list-to-table",name:"List to Table",icon:"lucide-table"},{id:"editing-toolbar:table-to-list",name:"Table to List",icon:"lucide-list"},{id:"editing-toolbar:extract-between",name:"Extract Between Strings",icon:"lucide-brackets"}]},{id:"SubmenuCommands-lucdf3en5",name:"submenu",icon:"edit",SubmenuCommands:[{id:"editing-toolbar:editor-cut",name:"Cut",icon:"lucide-scissors"},{id:"editing-toolbar:editor-copy",name:"Copy",icon:"lucide-copy"},{id:"editing-toolbar:editor-paste",name:"Paste",icon:"lucide-clipboard-type"},{id:"editing-toolbar:editor:swap-line-down",name:"Swap Line Down",icon:"lucide-corner-right-down"},{id:"editing-toolbar:editor:swap-line-up",name:"Swap Line Up",icon:"lucide-corner-right-up"}]},{id:"editing-toolbar:editor:attach-file",name:"Attach File",icon:"lucide-paperclip"},{id:"editing-toolbar:editor:insert-table",name:"Insert Table",icon:"lucide-table"},{id:"editing-toolbar:editor:cycle-list-checklist",name:"Cycle List and Checklist",icon:"check-circle"},{id:"SubmenuCommands-luc8efull",name:"submenu",icon:"message-square",SubmenuCommands:[{id:"editing-toolbar:editor:toggle-blockquote",name:"Blockquote",icon:"lucide-text-quote"},{id:"editing-toolbar:insert-callout",name:"Callout",icon:"lucide-quote"}]},{id:"SubmenuCommands-mdcmder",name:"submenu",icon:'',SubmenuCommands:[{id:"editing-toolbar:superscript",name:"Superscript",icon:"superscript-glyph"},{id:"editing-toolbar:subscript",name:"Subscript",icon:"subscript-glyph"},{id:"editing-toolbar:editor:toggle-code",name:"Inline Code",icon:"code-glyph"},{id:"editing-toolbar:codeblock",name:"Code Block",icon:"codeblock-glyph"},{id:"editing-toolbar:editor:insert-wikilink",name:"Wikilink",icon:''},{id:"editing-toolbar:editor:insert-embed",name:"Embed",icon:"note-glyph"},{id:"editing-toolbar:insert-link",name:"Link",icon:"link-glyph"},{id:"editing-toolbar:hrline",name:"Horizontal Divider",icon:''},{id:"editing-toolbar:toggle-inline-math",name:"Inline Math",icon:"lucide-sigma"},{id:"editing-toolbar:editor:insert-mathblock",name:"MathBlock",icon:"lucide-sigma-square"}]},{id:"SubmenuCommands-list",name:"submenu-list",icon:"bullet-list-glyph",SubmenuCommands:[{id:"editing-toolbar:editor:toggle-checklist-status",name:"Checklist",icon:"checkbox-glyph"},{id:"editing-toolbar:renumber-ordered-list",name:"Renumber Ordered List",icon:"list-restart"},{id:"editing-toolbar:toggle-numbered-list",name:"Ordered List",icon:''},{id:"editing-toolbar:toggle-bullet-list",name:"Unordered List",icon:''},{id:"editing-toolbar:undent-list",name:"Unindent List",icon:''},{id:"editing-toolbar:indent-list",name:"Indent list",icon:''}]},{id:"SubmenuCommands-aligin",name:"submenu-aligin",icon:'',SubmenuCommands:[{id:"editing-toolbar:justify",name:"Justify Text",icon:''},{id:"editing-toolbar:left",name:"Align Text Left",icon:''},{id:"editing-toolbar:center",name:"Center Text",icon:''},{id:"editing-toolbar:right",name:"Align Text Right",icon:''}]},{id:"editing-toolbar:change-font-color",name:"Change Font Color",icon:''},{id:"editing-toolbar:change-background-color",name:"Change Background Color",icon:''},{id:"editing-toolbar:fullscreen-focus",name:"Fullscreen Focus Mode",icon:"fullscreen"},{id:"editing-toolbar:workplace-fullscreen-focus",name:"Workplace Fullscreen",icon:"exit-fullscreen"}],followingCommands:[],topCommands:[],fixedCommands:[],mobileCommands:[],enableMultipleConfig:!1,enableTopToolbar:!1,enableFollowingToolbar:!1,enableFixedToolbar:!1,appendMethod:"workspace",shouldShowMenuOnSelect:!1,cMenuVisibility:!0,cMenuBottomValue:4.25,cMenuNumRows:12,cMenuWidth:610,cMenuFontColor:"#2DC26B",cMenuBackgroundColor:"#d3f8b6",autohide:!1,Iscentered:!1,custom_bg1:"#FFB78B8C",custom_bg2:"#CDF4698C",custom_bg3:"#A0CCF68C",custom_bg4:"#F0A7D88C",custom_bg5:"#ADEFEF8C",custom_fc1:"#D83931",custom_fc2:"#DE7802",custom_fc3:"#245BDB",custom_fc4:"#6425D0",custom_fc5:"#646A73",isLoadOnMobile:!1,horizontalPosition:0,verticalPosition:0,formatBrushes:{},customCommands:[],viewTypeSettings:{},appearanceByStyle:{top:{toolbarBackgroundColor:"rgba(var(--background-secondary-rgb), 0.7)",toolbarIconColor:"var(--text-normal)",toolbarIconSize:18,aestheticStyle:"default"},following:{toolbarBackgroundColor:"rgba(var(--background-secondary-rgb), 0.7)",toolbarIconColor:"var(--text-normal)",toolbarIconSize:18,aestheticStyle:"default"},fixed:{toolbarBackgroundColor:"rgba(var(--background-secondary-rgb), 0.7)",toolbarIconColor:"var(--text-normal)",toolbarIconSize:18,aestheticStyle:"default"},mobile:{toolbarBackgroundColor:"rgba(var(--background-secondary-rgb), 0.7)",toolbarIconColor:"var(--text-normal)",toolbarIconSize:18,aestheticStyle:"default"}},toolbarBackgroundColor:"rgba(var(--background-secondary-rgb), 0.7)",toolbarIconColor:"var(--text-normal)",toolbarIconSize:18,useCurrentLineForRegex:!1};class la{static isAllowedViewType(e,t){if(!e)return!1;const i=e.getViewType(),o=window.app?.plugins?.plugins?.["editing-toolbar"];if(o?.settings?.viewTypeSettings&&void 0!==o.settings.viewTypeSettings[i])return o.settings.viewTypeSettings[i];return(t||["markdown","canvas","thino_view","meld-encrypted-view"]).includes(i)}static isSourceMode(e){return!!e&&"source"===e.getMode?.()}}let ca;const da={markdown:".markdown-source-view",thino_view:".markdown-source-view",canvas:".canvas-wrapper",excalidraw:".view-header",image:".image-container",pdf:".view-content",meld_encrypted_view:".markdown-source-view"};function ha(t){ca=e.requireApiVersion("0.15.0")?activeWindow.document:window.document;const i=function(){const t=[];t.push(app.workspace.rootSplit);const i=app.workspace.floatingSplit;return i?.children.forEach(i=>{i instanceof e.WorkspaceWindow&&t.push(i)}),t}(),o=e=>{const t=e.querySelectorAll(".editingToolbarModalBar"),i=e.querySelectorAll(".editingToolbarPopoverBar");t.forEach(e=>{e.firstChild&&e.removeChild(e.firstChild),e.remove()}),i.forEach(e=>{e.firstChild&&e.removeChild(e.firstChild),e.remove()})};o(ca),i&&i.forEach(e=>{e?.containerEl&&o(e.containerEl)}),t&&t.clearToolbarCache()}function ua(t,i,o){ca=e.requireApiVersion("0.15.0")?activeWindow.document:window.document;const n=o||i.positionStyle||i.settings.positionStyle||"top";if("top"!==n){const e=i.getCachedToolbar(n);if(e)return e}const s=`.editingToolbarModalBar[data-toolbar-style="${n}"]`;let r=null;return r="top"===n?t.workspace.activeLeaf?.view.containerEl?.querySelector(s)||null:ca.querySelector(s),r&&"top"!==n&&i.setCachedToolbar(n,r),r||null}const pa=(e,t)=>t.reduce((e,t)=>e&&"undefined"!==e[t]?e[t]:void 0,e);function ma(e,t){return e&&void 0!==e[1][0]?t+e.flat(2).join("+").replace("Mod","Ctrl")+t:t+"–"+t}function ga(e,t,i=!0){let o=e.commands.findCommand(t),n=i?"*":"";if(o){let t=o.hotkeys?[[pa(o.hotkeys,[0,"modifiers"])],[pa(o.hotkeys,[0,"key"])]]:void 0,i=e.hotkeyManager.customKeys[o.id];var s=i?[[pa(i,[0,"modifiers"])],[pa(i,[0,"key"])]]:void 0;return s?ma(s,n):ma(t,"")}return"–"}function fa(e){return/<[^>]+>/g.test(e)}function ba(t,i,o){ca=e.requireApiVersion("0.15.0")?activeWindow.document:window.document;const n=i.commandsManager.getActiveEditor();let s=ua(t,i),r=s?.querySelector("#"+o);if(r){let e=r.rows,t=e.length;for(let s=1;s{t.style.fill=e})}else if("x-backgroundcolor-picker-table"==o){i.settings.cMenuBackgroundColor=e,zr(e,n),ca.querySelectorAll("#change-background-color-icon").forEach(t=>{t.style.fill=e})}i.saveSettings()}}}}}const ya=function(e){let t=e;if(/^(rgb|RGB)/.test(t)){let e=t.replace(/(?:\(|\)|rgb|RGB)*/g,"").split(","),i="#";for(let t=0;t\s*\[\![\w\s]*\]/m)){let e=i.split("\n"),o=[],n=!1,s=0,r=!1;for(let t=0;t+)\s*\[\!([\w\s]*)\]\s*(.*?)$/);if(!a||r)if(n){let e=i.match(/^(>+)\s*/);if(e&&e[1].length>=s){let e=i.replace(new RegExp(`^>{${s}}\\s*`),"");o.push(e)}else n=!1,o.push(i)}else o.push(i);else s=a[1].length,r=!0,a[3].trim()&&o.push(a[3].trim()),n=!0}return void t.replaceSelection(o.join("\n"))}i=i.replace(/(^#+\s|^#(?=\s)|^\>|^\- \[( |x)\]|^\+ |\<[^\<\>]+?\>|^1\. |^\s*\- |^\-+$|^\*+$)/gm,""),i=i.replace(/^[ ]+|[ ]+$/gm,""),i=i.replace(/\!?\[\[([^\[\]\|]*\|)*([^\(\)\[\]]+)\]\]/g,"$2"),i=i.replace(/\!?\[+([^\[\]\(\)]+)\]+\(([^\(\)]+)\)/g,"$1"),i=i.replace(/`([^`]+)`/g,"$1"),i=i.replace(/_([^_]+)_/g,"$1"),i=i.replace(/==([^=]+)==/g,"$1"),i=i.replace(/\*\*\*([^\*]+)\*\*\*/g,"$1"),i=i.replace(/\*\*?([^\*]+)\*\*?/g,"$1"),i=i.replace(/~~([^~]+)~~/g,"$1"),t.replaceSelection(i)}function Ca(t,i,o,n,s=!1){let r=ua(t,o,"following");const a=t.workspace.getActiveViewOfType(e.ItemView);if(!la.isAllowedViewType(a))return void(r&&(r.style.visibility="hidden"));if(!(o.settings.enableFollowingToolbar||!o.settings.enableTopToolbar&&!o.settings.enableFixedToolbar&&"following"===o.positionStyle))return;const l=a?.getViewType(),c="markdown"===l;let d=30;if(d="tiny"===o.settings.aestheticStyle?30:i+14,c)if(la.isSourceMode(a)){if(r){const e=s||n.somethingSelected();r.style.visibility=e?"visible":"hidden","visible"===r.style.visibility&&(r.style.height=d+"px",r.addClass("editingToolbarFlex"),r.removeClass("editingToolbarGrid"),function(e,t){const i=t.containerEl.getBoundingClientRect(),o=e.offsetWidth,n=e.offsetHeight,s=12,r=window.innerWidth,a=t.getCursor("from");t.getCursor("to");const l=t.coordsAtPos(a),c=ca.getElementsByClassName("mod-left-split")[0]?.clientWidth??0,d=ca.getElementsByClassName("side-dock-ribbon mod-left")[0]?.clientWidth??0,h=c+d;let u=l.left-h-28;u+o>r-h&&(u=r-h-o-s);u=Math.max(0,u);let p=function(e,t,i,o){const n=e.getCursor("from"),s=e.getCursor("to"),r=e.coordsAtPos(s),a=n.line===s.line;let l=t.top-o-10;if(a)l<=i.top&&(l=r.bottom+10);else{if(e.getCursor("head").ch==e.getCursor("from").ch)l=t.top-o-10,l<=i.top&&(l=i.top+2*o);else{const t=(e=>{let t,i=e.getCursor("head");if(e.getCursor("head").ch!==e.getCursor("from").ch&&(i.ch=Math.max(0,i.ch-1)),e.cursorCoords)t=e.cursorCoords(!0,"window");else{if(!e.coordsAtPos)return;{const o=e.posToOffset(i);t=e.cm.coordsAtPos?.(o)??e.coordsAtPos(o)}}return t})(e);l=t.bottom+10,l>=i.bottom-o&&(l=i.bottom-2*o)}}return l}(t,l,i,n);p=Math.max(0,p),e.style.left=`${u}px`,e.style.top=`${p}px`}(r,n))}}else r&&(r.style.visibility="hidden");else r&&(r.style.visibility="visible",r.style.height=d+"px",r.addClass("editingToolbarFlex"),r.removeClass("editingToolbarGrid"))}function xa(t,i,o){const n=i.settings;if(ca=e.requireApiVersion("0.15.0")?activeWindow.document:window.document,!o){const e=[];if(n.enableTopToolbar&&e.push("top"),n.enableFollowingToolbar&&e.push("following"),n.enableFixedToolbar&&e.push("fixed"),0===e.length){const t=i.positionStyle||i.settings.positionStyle||"top";e.push(t)}return void e.forEach(e=>{xa(t,i,e)})}const s=o;if(!n.cMenuVisibility){const e=ua(t,i,s);return void(e&&(e.style.display="none"))}const r=(n.appearanceByStyle||{})[s]||{},a=r.toolbarIconSize??i.toolbarIconSize??18,l=r.aestheticStyle??n.aestheticStyle??"default",c="custom"===l?r.toolbarBackgroundColor??n.toolbarBackgroundColor:void 0,d="custom"===l?r.toolbarIconColor??n.toolbarIconColor:void 0,h={default:"editingToolbarDefaultAesthetic",tiny:"editingToolbarTinyAesthetic",glass:"editingToolbarGlassAesthetic",custom:"editingToolbarCustomAesthetic"};!function(){function o(e,t){Object.values(h).forEach(t=>{e.removeClass(t)});const i=h[t]||h.default;e.addClass(i)}const r=()=>{let r=0,h=0,u=a+8,p=createEl("div");if(p)if(p.addClass("editingToolbarModalBar"),p.setAttribute("data-toolbar-style",s),"top"===s)p.className+=" top",n.autohide&&(p.className+=" autohide"),n.Iscentered&&(p.className+=" centered");else if("following"===s)p.style.visibility="hidden";else if("fixed"===s){const e=a||18,t=`left: calc(50% - calc(${n.cMenuNumRows*(e+10)}px / 2));\n bottom: 4.25em; \n grid-template-columns: repeat(${n.cMenuNumRows}, ${e+10}px);\n gap: ${(e-18)/4}px`;p.setAttribute("style",t)}p.setAttribute("id","editingToolbarModalBar");let m=createEl("div");if(m.addClass("editingToolbarpopover"),m.addClass("editingToolbarTinyAesthetic"),m.addClass("editingToolbarPopoverBar"),m.setAttribute("data-toolbar-style",s),m.setAttribute("id","editingToolbarPopoverBar"),m.style.visibility="hidden",m.style.height="0",o(p,l),o(m,l),c&&(p.style.setProperty("--editing-toolbar-background-color",c),m.style.setProperty("--editing-toolbar-background-color",c)),d&&(p.style.setProperty("--editing-toolbar-icon-color",d),m.style.setProperty("--editing-toolbar-icon-color",d)),a&&(p.style.setProperty("--toolbar-icon-size",`${a}px`),m.style.setProperty("--toolbar-icon-size",`${a}px`)),"top"===s){let e=t.workspace.activeLeaf.view.containerEl,i=null;const o=t.workspace.activeLeaf.view.getViewType(),n=da[o];if(n&&(i=e?.querySelector(n)),!i){const t=e?.querySelector(".view-content");if(t){const e=t.querySelectorAll(":scope > div");i=e.length>0?e[0]:t}}if(!i)return void console.log("Editing Toolbar: Failed to find target DOM element for toolbar insertion");e?.querySelector("#editingToolbarPopoverBar")||("excalidraw"==o?i.insertAdjacentElement("afterend",m):i.insertAdjacentElement("afterbegin",m)),"excalidraw"==o?i.insertAdjacentElement("afterend",p):i.insertAdjacentElement("afterbegin",p),h=i?.offsetWidth}else"body"==n.appendMethod?ca.body.appendChild(p):"workspace"==n.appendMethod&&ca.body?.querySelector(".mod-vertical.mod-root").insertAdjacentElement("afterbegin",p);let g=t.workspace.activeLeaf.view.containerEl?.querySelector("#editingToolbarPopoverBar");i.getCurrentCommands(s).forEach((o,a)=>{let l;if("SubmenuCommands"in o){let c;r>=h-7*u&&h>100?(i.setIS_MORE_Button(!0),c=new e.ButtonComponent(g)):c=new e.ButtonComponent(p),c.setClass("editingToolbarCommandsubItem"+a),a>=n.cMenuNumRows?c.setClass("editingToolbarSecond"):"top"!==s&&c.buttonEl.setAttribute("aria-label-position","top"),fa(o.icon)?c.buttonEl.innerHTML=o.icon:c.setIcon(o.icon),r+=u+2;if("dropdown"===(o.menuType||"submenu")){c.setClass("editingToolbarDropdownButton");let r=ga(t,o.id);l="–"==r?o.name:o.name+"("+r+")",c.setTooltip(l),c.onClick(r=>{const a=new e.Menu;o.SubmenuCommands.forEach(e=>{"editingToolbar-Divider-Line"===e.id?(a.addSeparator(),a.addItem(t=>{t.setTitle(Xr(e.name)).setIcon("").setDisabled(!0)})):a.addItem(o=>{const r=ga(t,e.id,!1),a=Xr(e.name),l="–"!==r?`${a}`:a;if(o.setTitle(l).setIcon(e.icon).onClick(()=>{t.commands.executeCommandById(e.id);const o=i.commandsManager.getActiveEditor(),r=o&&o.somethingSelected();0==n.cMenuVisibility?p.style.visibility="hidden":"following"===s?r||(p.style.visibility="hidden"):p.style.visibility="visible"}),"–"!==r){o.dom.createSpan({cls:"menu-item-hotkey"}).setText(r)}})}),a.dom.addClass("editing-toolbar-dropdown-menu"),a.showAtMouseEvent(r)})}else{let r=function(e){let t=createEl("div");return t.addClass(e),t}("subitem");r&&o.SubmenuCommands.forEach(o=>{let d=ga(t,o.id);l="–"==d?o.name:o.name+"("+d+")";let h=new e.ButtonComponent(r).setTooltip(l).setClass("menu-item").onClick(()=>{t.commands.executeCommandById(o.id);const e=i.commandsManager.getActiveEditor(),r=e&&e.somethingSelected();0==n.cMenuVisibility?p.style.visibility="hidden":"following"===s?r||(p.style.visibility="hidden"):p.style.visibility="visible"});a{t.commands.executeCommandById(o.id);const e=i.commandsManager.getActiveEditor(),r=e&&e.somethingSelected();0==n.cMenuVisibility?p.style.visibility="hidden":"following"===s?r||(p.style.visibility="hidden"):p.style.visibility="visible"}),fa(o.icon)?a.buttonEl.innerHTML=o.icon:a.setIcon(o.icon),r+=u;let l=createEl("div");if(l.addClass("subitem"),l){l.innerHTML=function(e){return`
\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
Theme Colors
Standard Colors
Custom Font Colors
\n
\n
`}(i),a.buttonEl.insertAdjacentElement("afterbegin",l),ba(t,i,"x-color-picker-table");let o=l.querySelector(".x-color-picker-wrapper");new e.ButtonComponent(o).setIcon("paintbrush").setTooltip(Xr("Format Brush")).onClick(()=>{wa(i),i.setEN_FontColor_Format_Brush(!0),i.Temp_Notice=new e.Notice(Xr("Font-Color formatting brush ON!"),0)}),new e.ButtonComponent(o).setIcon("palette").setTooltip(Xr("Custom Font Color")).onClick(()=>{t.setting.open(),t.setting.openTabById("editing-toolbar"),setTimeout(()=>{const e=t.setting.activeTab.containerEl.querySelector(".editing-toolbar-tabs");if(e){const i=e.children[1];i?.click(),setTimeout(()=>{let e=t.setting.activeTab.containerEl.querySelector(".custom_font");e&&e.addClass?.("toolbar-cta")},100)}},200)})}}else if("editing-toolbar:change-background-color"==o.id){let a=new e.ButtonComponent(p);a.setClass("editingToolbarCommandsubItem-font-color").setTooltip(Xr("Background Color")).onClick(()=>{t.commands.executeCommandById(o.id);const e=i.commandsManager.getActiveEditor(),r=e&&e.somethingSelected();0==n.cMenuVisibility?p.style.visibility="hidden":"following"===s?r||(p.style.visibility="hidden"):p.style.visibility="visible"}),fa(o.icon)?a.buttonEl.innerHTML=o.icon:a.setIcon(o.icon),r+=u;let l=createEl("div");if(l.addClass("subitem"),l){l.innerHTML=function(e){return`
\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
Translucent Colors
Highlighter Colors
Custom Colors
\n
\n
`}(i),a.buttonEl.insertAdjacentElement("afterbegin",l),ba(t,i,"x-backgroundcolor-picker-table");let o=l.querySelector(".x-color-picker-wrapper");new e.ButtonComponent(o).setIcon("paintbrush").setTooltip(Xr("Format Brush")).onClick(()=>{wa(i),i.setEN_BG_Format_Brush(!0),i.Temp_Notice=new e.Notice(Xr("Font-Color formatting brush ON!"),0)}),new e.ButtonComponent(o).setIcon("palette").setTooltip(Xr("Custom Backgroud Color")).onClick(()=>{t.setting.open(),t.setting.openTabById("editing-toolbar"),setTimeout(()=>{const e=t.setting.activeTab.containerEl.querySelector(".editing-toolbar-tabs");if(e){const i=e.children[1];i?.click(),setTimeout(()=>{let e=t.setting.activeTab.containerEl.querySelector(".custom_bg");e&&e.addClass?.("toolbar-cta")},100)}},200)})}}else{let c;r>=h-7*u&&h>100?(i.setIS_MORE_Button(!0),c=new e.ButtonComponent(g)):c=new e.ButtonComponent(p);let d=ga(t,o.id);l="–"==d?o.name:o.name+"("+d+")",c.setTooltip(l).onClick(()=>{t.commands.executeCommandById(o.id);const e=i.commandsManager.getActiveEditor(),r=e&&e.somethingSelected();0==n.cMenuVisibility?p.style.visibility="hidden":"following"===s?r||(p.style.visibility="hidden"):p.style.visibility="visible"}),c.setClass("editingToolbarCommandItem"),a>=n.cMenuNumRows?c.setClass("editingToolbarSecond"):"top"!==s&&c.buttonEl.setAttribute("aria-label-position","top"),"editingToolbar-Divider-Line"==o.id&&c.setClass("editingToolbar-Divider-Line"),fa(o.icon)?c.buttonEl.innerHTML=o.icon:c.setIcon(o.icon),r+=u}}),function(t,i,o){const n=t.workspace.getActiveViewOfType(e.ItemView);if(!la.isAllowedViewType(n))return;let s=n.containerEl.querySelector("#editingToolbarPopoverBar");if(!i.IS_MORE_Button)return;let r=o.createEl("span");r.addClass("more-menu");let a=new e.ButtonComponent(r);a.setClass("editingToolbarCommandItem").setTooltip(Xr("More")).onClick(()=>{"hidden"==s.style.visibility?(s.style.visibility="visible",s.style.height="32px"):(s.style.visibility="hidden",s.style.height="0")}),a.buttonEl.innerHTML='',i.setIS_MORE_Button(!1)}(t,i,p),Math.abs(i.settings.cMenuWidth-Number(r))>r+4&&(i.settings.cMenuWidth=Number(r),setTimeout(()=>{i.saveSettings()},100))};if(!i.isLoadMobile())return;const u=t.workspace.getActiveViewOfType(e.ItemView);if(la.isAllowedViewType(u)){const o=ua(t,i,s);if(o&&"top"!==s)return n.cMenuVisibility?"following"===s?(o.style.visibility="hidden",o.style.display=""):(o.style.visibility="visible",o.style.display=""):o.style.display="none",c&&o.style.setProperty("--editing-toolbar-background-color",c),d&&o.style.setProperty("--editing-toolbar-icon-color",d),void(a&&o.style.setProperty("--toolbar-icon-size",`${a}px`));if(r(),"top"!==s){const e=ua(t,i,s);e&&i.setCachedToolbar(s,e)}Yr(i.settings),jr(i.settings),function(t,i){ca=e.requireApiVersion("0.15.0")?activeWindow.document:window.document;const o=ca.querySelectorAll("#change-font-color-icon"),n=ca.querySelectorAll("#change-background-color-icon");o.length>0&&o.forEach(e=>{e.style.fill=t});n.length>0&&n.forEach(e=>{e.style.fill=i})} +/**! + * Sortable 1.15.6 + * @author RubaXa + * @author owenm + * @license MIT + */(n.cMenuFontColor,n.cMenuBackgroundColor)}}()}function ka(e,t){var i=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),i.push.apply(i,o)}return i}function Sa(e){for(var t=1;t=0||(n[i]=e[i]);return n}(e,t);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(e,i)&&(n[i]=e[i])}return n}function Ia(e){if("undefined"!=typeof window&&window.navigator)return!!navigator.userAgent.match(e)}var Da=Ia(/(?:Trident.*rv[ :]?11\.|msie|iemobile|Windows Phone)/i),Oa=Ia(/Edge/i),Ba=Ia(/firefox/i),La=Ia(/safari/i)&&!Ia(/chrome/i)&&!Ia(/android/i),Pa=Ia(/iP(ad|od|hone)/i),Na=Ia(/chrome/i)&&Ia(/android/i),Ra={capture:!1,passive:!1};function Fa(e,t,i){e.addEventListener(t,i,!Da&&Ra)}function qa(e,t,i){e.removeEventListener(t,i,!Da&&Ra)}function _a(e,t){if(t){if(">"===t[0]&&(t=t.substring(1)),e)try{if(e.matches)return e.matches(t);if(e.msMatchesSelector)return e.msMatchesSelector(t);if(e.webkitMatchesSelector)return e.webkitMatchesSelector(t)}catch(e){return!1}return!1}}function za(e){return e.host&&e!==document&&e.host.nodeType?e.host:e.parentNode}function Va(e,t,i,o){if(e){i=i||document;do{if(null!=t&&(">"===t[0]?e.parentNode===i&&_a(e,t):_a(e,t))||o&&e===i)return e;if(e===i)break}while(e=za(e))}return null}var Wa,Ha=/\s+/g;function $a(e,t,i){if(e&&t)if(e.classList)e.classList[i?"add":"remove"](t);else{var o=(" "+e.className+" ").replace(Ha," ").replace(" "+t+" "," ");e.className=(o+(i?" "+t:"")).replace(Ha," ")}}function Ua(e,t,i){var o=e&&e.style;if(o){if(void 0===i)return document.defaultView&&document.defaultView.getComputedStyle?i=document.defaultView.getComputedStyle(e,""):e.currentStyle&&(i=e.currentStyle),void 0===t?i:i[t];t in o||-1!==t.indexOf("webkit")||(t="-webkit-"+t),o[t]=i+("string"==typeof i?"":"px")}}function ja(e,t){var i="";if("string"==typeof e)i=e;else do{var o=Ua(e,"transform");o&&"none"!==o&&(i=o+" "+i)}while(!t&&(e=e.parentNode));var n=window.DOMMatrix||window.WebKitCSSMatrix||window.CSSMatrix||window.MSCSSMatrix;return n&&new n(i)}function Ya(e,t,i){if(e){var o=e.getElementsByTagName(t),n=0,s=o.length;if(i)for(;n=s:n<=s))return o;if(o===Ga())break;o=tl(o,!1)}return!1}function Ja(e,t,i,o){for(var n=0,s=0,r=e.children;s2&&void 0!==arguments[2]?arguments[2]:{},o=i.evt,n=Aa(i,ul);hl.pluginEvent.bind(sc)(e,t,Sa({dragEl:gl,parentEl:fl,ghostEl:bl,rootEl:yl,nextEl:wl,lastDownEl:vl,cloneEl:Cl,cloneHidden:xl,dragStarted:Nl,putSortable:Al,activeSortable:sc.active,originalEvent:o,oldIndex:kl,oldDraggableIndex:Tl,newIndex:Sl,newDraggableIndex:El,hideGhostForTarget:tc,unhideGhostForTarget:ic,cloneNowHidden:function(){xl=!0},cloneNowShown:function(){xl=!1},dispatchSortableEvent:function(e){ml({sortable:t,name:e,originalEvent:o})}},n))};function ml(e){!function(e){var t=e.sortable,i=e.rootEl,o=e.name,n=e.targetEl,s=e.cloneEl,r=e.toEl,a=e.fromEl,l=e.oldIndex,c=e.newIndex,d=e.oldDraggableIndex,h=e.newDraggableIndex,u=e.originalEvent,p=e.putSortable,m=e.extraEventProperties;if(t=t||i&&i[al]){var g,f=t.options,b="on"+o.charAt(0).toUpperCase()+o.substr(1);!window.CustomEvent||Da||Oa?(g=document.createEvent("Event")).initEvent(o,!0,!0):g=new CustomEvent(o,{bubbles:!0,cancelable:!0}),g.to=r||i,g.from=a||i,g.item=n||i,g.clone=s,g.oldIndex=l,g.newIndex=c,g.oldDraggableIndex=d,g.newDraggableIndex=h,g.originalEvent=u,g.pullMode=p?p.lastPutMode:void 0;var y=Sa(Sa({},m),hl.getEventProperties(o,t));for(var w in y)g[w]=y[w];i&&i.dispatchEvent(g),f[b]&&f[b].call(t,g)}}(Sa({putSortable:Al,cloneEl:Cl,targetEl:gl,rootEl:yl,oldIndex:kl,oldDraggableIndex:Tl,newIndex:Sl,newDraggableIndex:El},e))}var gl,fl,bl,yl,wl,vl,Cl,xl,kl,Sl,Tl,El,Ml,Al,Il,Dl,Ol,Bl,Ll,Pl,Nl,Rl,Fl,ql,_l,zl=!1,Vl=!1,Wl=[],Hl=!1,$l=!1,Ul=[],jl=!1,Yl=[],Gl="undefined"!=typeof document,Zl=Pa,Kl=Oa||Da?"cssFloat":"float",Jl=Gl&&!Na&&!Pa&&"draggable"in document.createElement("div"),Xl=function(){if(Gl){if(Da)return!1;var e=document.createElement("x");return e.style.cssText="pointer-events:auto","auto"===e.style.pointerEvents}}(),Ql=function(e,t){var i=Ua(e),o=parseInt(i.width)-parseInt(i.paddingLeft)-parseInt(i.paddingRight)-parseInt(i.borderLeftWidth)-parseInt(i.borderRightWidth),n=Ja(e,0,t),s=Ja(e,1,t),r=n&&Ua(n),a=s&&Ua(s),l=r&&parseInt(r.marginLeft)+parseInt(r.marginRight)+Za(n).width,c=a&&parseInt(a.marginLeft)+parseInt(a.marginRight)+Za(s).width;if("flex"===i.display)return"column"===i.flexDirection||"column-reverse"===i.flexDirection?"vertical":"horizontal";if("grid"===i.display)return i.gridTemplateColumns.split(" ").length<=1?"vertical":"horizontal";if(n&&r.float&&"none"!==r.float){var d="left"===r.float?"left":"right";return!s||"both"!==a.clear&&a.clear!==d?"horizontal":"vertical"}return n&&("block"===r.display||"flex"===r.display||"table"===r.display||"grid"===r.display||l>=o&&"none"===i[Kl]||s&&"none"===i[Kl]&&l+c>o)?"vertical":"horizontal"},ec=function(e){function t(e,i){return function(o,n,s,r){var a=o.options.group.name&&n.options.group.name&&o.options.group.name===n.options.group.name;if(null==e&&(i||a))return!0;if(null==e||!1===e)return!1;if(i&&"clone"===e)return e;if("function"==typeof e)return t(e(o,n,s,r),i)(o,n,s,r);var l=(i?o:n).options.group.name;return!0===e||"string"==typeof e&&e===l||e.join&&e.indexOf(l)>-1}}var i={},o=e.group;o&&"object"==Ta(o)||(o={name:o}),i.name=o.name,i.checkPull=t(o.pull,!0),i.checkPut=t(o.put),i.revertClone=o.revertClone,e.group=i},tc=function(){!Xl&&bl&&Ua(bl,"display","none")},ic=function(){!Xl&&bl&&Ua(bl,"display","")};Gl&&!Na&&document.addEventListener("click",function(e){if(Vl)return e.preventDefault(),e.stopPropagation&&e.stopPropagation(),e.stopImmediatePropagation&&e.stopImmediatePropagation(),Vl=!1,!1},!0);var oc=function(e){if(gl){e=e.touches?e.touches[0]:e;var t=(n=e.clientX,s=e.clientY,Wl.some(function(e){var t=e[al].options.emptyInsertThreshold;if(t&&!Xa(e)){var i=Za(e),o=n>=i.left-t&&n<=i.right+t,a=s>=i.top-t&&s<=i.bottom+t;return o&&a?r=e:void 0}}),r);if(t){var i={};for(var o in e)e.hasOwnProperty(o)&&(i[o]=e[o]);i.target=i.rootEl=t,i.preventDefault=void 0,i.stopPropagation=void 0,t[al]._onDragOver(i)}}var n,s,r},nc=function(e){gl&&gl.parentNode[al]._isOutsideThisEl(e.target)};function sc(e,t){if(!e||!e.nodeType||1!==e.nodeType)throw"Sortable: `el` must be an HTMLElement, not ".concat({}.toString.call(e));this.el=e,this.options=t=Ma({},t),e[al]=this;var i={group:null,sort:!0,disabled:!1,store:null,handle:null,draggable:/^[uo]l$/i.test(e.nodeName)?">li":">*",swapThreshold:1,invertSwap:!1,invertedSwapThreshold:null,removeCloneOnHide:!0,direction:function(){return Ql(e,this.options)},ghostClass:"sortable-ghost",chosenClass:"sortable-chosen",dragClass:"sortable-drag",ignore:"a, img",filter:null,preventOnFilter:!0,animation:0,easing:null,setData:function(e,t){e.setData("Text",t.textContent)},dropBubble:!1,dragoverBubble:!1,dataIdAttr:"data-id",delay:0,delayOnTouchOnly:!1,touchStartThreshold:(Number.parseInt?Number:window).parseInt(window.devicePixelRatio,10)||1,forceFallback:!1,fallbackClass:"sortable-fallback",fallbackOnBody:!1,fallbackTolerance:0,fallbackOffset:{x:0,y:0},supportPointer:!1!==sc.supportPointer&&"PointerEvent"in window&&(!La||Pa),emptyInsertThreshold:5};for(var o in hl.initializePlugins(this,e,i),i)!(o in t)&&(t[o]=i[o]);for(var n in ec(t),this)"_"===n.charAt(0)&&"function"==typeof this[n]&&(this[n]=this[n].bind(this));this.nativeDraggable=!t.forceFallback&&Jl,this.nativeDraggable&&(this.options.touchStartThreshold=1),t.supportPointer?Fa(e,"pointerdown",this._onTapStart):(Fa(e,"mousedown",this._onTapStart),Fa(e,"touchstart",this._onTapStart)),this.nativeDraggable&&(Fa(e,"dragover",this),Fa(e,"dragenter",this)),Wl.push(this.el),t.store&&t.store.get&&this.sort(t.store.get(this)||[]),Ma(this,ll())}function rc(e,t,i,o,n,s,r,a){var l,c,d=e[al],h=d.options.onMove;return!window.CustomEvent||Da||Oa?(l=document.createEvent("Event")).initEvent("move",!0,!0):l=new CustomEvent("move",{bubbles:!0,cancelable:!0}),l.to=t,l.from=e,l.dragged=i,l.draggedRect=o,l.related=n||t,l.relatedRect=s||Za(t),l.willInsertAfter=a,l.originalEvent=r,e.dispatchEvent(l),h&&(c=h.call(d,l,r)),c}function ac(e){e.draggable=!1}function lc(){jl=!1}function cc(e){for(var t=e.tagName+e.className+e.src+e.href+e.textContent,i=t.length,o=0;i--;)o+=t.charCodeAt(i);return o.toString(36)}function dc(e){return setTimeout(e,0)}function hc(e){return clearTimeout(e)}sc.prototype={constructor:sc,_isOutsideThisEl:function(e){this.el.contains(e)||e===this.el||(Rl=null)},_getDirection:function(e,t){return"function"==typeof this.options.direction?this.options.direction.call(this,e,t,gl):this.options.direction},_onTapStart:function(e){if(e.cancelable){var t=this,i=this.el,o=this.options,n=o.preventOnFilter,s=e.type,r=e.touches&&e.touches[0]||e.pointerType&&"touch"===e.pointerType&&e,a=(r||e).target,l=e.target.shadowRoot&&(e.path&&e.path[0]||e.composedPath&&e.composedPath()[0])||a,c=o.filter;if(function(e){Yl.length=0;var t=e.getElementsByTagName("input"),i=t.length;for(;i--;){var o=t[i];o.checked&&Yl.push(o)}}(i),!gl&&!(/mousedown|pointerdown/.test(s)&&0!==e.button||o.disabled)&&!l.isContentEditable&&(this.nativeDraggable||!La||!a||"SELECT"!==a.tagName.toUpperCase())&&!((a=Va(a,o.draggable,i,!1))&&a.animated||vl===a)){if(kl=Qa(a),Tl=Qa(a,o.draggable),"function"==typeof c){if(c.call(this,e,a,this))return ml({sortable:t,rootEl:l,name:"filter",targetEl:a,toEl:i,fromEl:i}),pl("filter",t,{evt:e}),void(n&&e.preventDefault())}else if(c&&(c=c.split(",").some(function(o){if(o=Va(l,o.trim(),i,!1))return ml({sortable:t,rootEl:o,name:"filter",targetEl:a,fromEl:i,toEl:i}),pl("filter",t,{evt:e}),!0})))return void(n&&e.preventDefault());o.handle&&!Va(l,o.handle,i,!1)||this._prepareDragStart(e,r,a)}}},_prepareDragStart:function(e,t,i){var o,n=this,s=n.el,r=n.options,a=s.ownerDocument;if(i&&!gl&&i.parentNode===s){var l=Za(i);if(yl=s,fl=(gl=i).parentNode,wl=gl.nextSibling,vl=i,Ml=r.group,sc.dragged=gl,Il={target:gl,clientX:(t||e).clientX,clientY:(t||e).clientY},Ll=Il.clientX-l.left,Pl=Il.clientY-l.top,this._lastX=(t||e).clientX,this._lastY=(t||e).clientY,gl.style["will-change"]="all",o=function(){pl("delayEnded",n,{evt:e}),sc.eventCanceled?n._onDrop():(n._disableDelayedDragEvents(),!Ba&&n.nativeDraggable&&(gl.draggable=!0),n._triggerDragStart(e,t),ml({sortable:n,name:"choose",originalEvent:e}),$a(gl,r.chosenClass,!0))},r.ignore.split(",").forEach(function(e){Ya(gl,e.trim(),ac)}),Fa(a,"dragover",oc),Fa(a,"mousemove",oc),Fa(a,"touchmove",oc),r.supportPointer?(Fa(a,"pointerup",n._onDrop),!this.nativeDraggable&&Fa(a,"pointercancel",n._onDrop)):(Fa(a,"mouseup",n._onDrop),Fa(a,"touchend",n._onDrop),Fa(a,"touchcancel",n._onDrop)),Ba&&this.nativeDraggable&&(this.options.touchStartThreshold=4,gl.draggable=!0),pl("delayStart",this,{evt:e}),!r.delay||r.delayOnTouchOnly&&!t||this.nativeDraggable&&(Oa||Da))o();else{if(sc.eventCanceled)return void this._onDrop();r.supportPointer?(Fa(a,"pointerup",n._disableDelayedDrag),Fa(a,"pointercancel",n._disableDelayedDrag)):(Fa(a,"mouseup",n._disableDelayedDrag),Fa(a,"touchend",n._disableDelayedDrag),Fa(a,"touchcancel",n._disableDelayedDrag)),Fa(a,"mousemove",n._delayedDragTouchMoveHandler),Fa(a,"touchmove",n._delayedDragTouchMoveHandler),r.supportPointer&&Fa(a,"pointermove",n._delayedDragTouchMoveHandler),n._dragStartTimer=setTimeout(o,r.delay)}}},_delayedDragTouchMoveHandler:function(e){var t=e.touches?e.touches[0]:e;Math.max(Math.abs(t.clientX-this._lastX),Math.abs(t.clientY-this._lastY))>=Math.floor(this.options.touchStartThreshold/(this.nativeDraggable&&window.devicePixelRatio||1))&&this._disableDelayedDrag()},_disableDelayedDrag:function(){gl&&ac(gl),clearTimeout(this._dragStartTimer),this._disableDelayedDragEvents()},_disableDelayedDragEvents:function(){var e=this.el.ownerDocument;qa(e,"mouseup",this._disableDelayedDrag),qa(e,"touchend",this._disableDelayedDrag),qa(e,"touchcancel",this._disableDelayedDrag),qa(e,"pointerup",this._disableDelayedDrag),qa(e,"pointercancel",this._disableDelayedDrag),qa(e,"mousemove",this._delayedDragTouchMoveHandler),qa(e,"touchmove",this._delayedDragTouchMoveHandler),qa(e,"pointermove",this._delayedDragTouchMoveHandler)},_triggerDragStart:function(e,t){t=t||"touch"==e.pointerType&&e,!this.nativeDraggable||t?this.options.supportPointer?Fa(document,"pointermove",this._onTouchMove):Fa(document,t?"touchmove":"mousemove",this._onTouchMove):(Fa(gl,"dragend",this),Fa(yl,"dragstart",this._onDragStart));try{document.selection?dc(function(){document.selection.empty()}):window.getSelection().removeAllRanges()}catch(e){}},_dragStarted:function(e,t){if(zl=!1,yl&&gl){pl("dragStarted",this,{evt:t}),this.nativeDraggable&&Fa(document,"dragover",nc);var i=this.options;!e&&$a(gl,i.dragClass,!1),$a(gl,i.ghostClass,!0),sc.active=this,e&&this._appendGhost(),ml({sortable:this,name:"start",originalEvent:t})}else this._nulling()},_emulateDragOver:function(){if(Dl){this._lastX=Dl.clientX,this._lastY=Dl.clientY,tc();for(var e=document.elementFromPoint(Dl.clientX,Dl.clientY),t=e;e&&e.shadowRoot&&(e=e.shadowRoot.elementFromPoint(Dl.clientX,Dl.clientY))!==t;)t=e;if(gl.parentNode[al]._isOutsideThisEl(e),t)do{if(t[al]){if(t[al]._onDragOver({clientX:Dl.clientX,clientY:Dl.clientY,target:e,rootEl:t})&&!this.options.dragoverBubble)break}e=t}while(t=za(t));ic()}},_onTouchMove:function(e){if(Il){var t=this.options,i=t.fallbackTolerance,o=t.fallbackOffset,n=e.touches?e.touches[0]:e,s=bl&&ja(bl,!0),r=bl&&s&&s.a,a=bl&&s&&s.d,l=Zl&&_l&&el(_l),c=(n.clientX-Il.clientX+o.x)/(r||1)+(l?l[0]-Ul[0]:0)/(r||1),d=(n.clientY-Il.clientY+o.y)/(a||1)+(l?l[1]-Ul[1]:0)/(a||1);if(!sc.active&&!zl){if(i&&Math.max(Math.abs(n.clientX-this._lastX),Math.abs(n.clientY-this._lastY))n.right+s||e.clientY>o.bottom&&e.clientX>o.left:e.clientY>n.bottom+s||e.clientX>o.right&&e.clientY>o.top}(e,n,this)&&!g.animated){if(g===gl)return O(!1);if(g&&s===e.target&&(r=g),r&&(i=Za(r)),!1!==rc(yl,s,gl,t,r,i,e,!!r))return D(),g&&g.nextSibling?s.insertBefore(gl,g.nextSibling):s.appendChild(gl),fl=s,B(),O(!0)}else if(g&&function(e,t,i){var o=Za(Ja(i.el,0,i.options,!0)),n=rl(i.el,i.options,bl),s=10;return t?e.clientXd+c*s/2:lh-ql)return-Fl}else if(l>d+c*(1-n)/2&&lh-c*s/2))return l>d+c/2?1:-1;return 0}(e,r,i,n,C?1:a.swapThreshold,null==a.invertedSwapThreshold?a.swapThreshold:a.invertedSwapThreshold,$l,Rl===r),0!==b){var T=Qa(gl);do{T-=b,w=fl.children[T]}while(w&&("none"===Ua(w,"display")||w===bl))}if(0===b||w===r)return O(!1);Rl=r,Fl=b;var E=r.nextElementSibling,M=!1,A=rc(yl,s,gl,t,r,i,e,M=1===b);if(!1!==A)return 1!==A&&-1!==A||(M=1===A),jl=!0,setTimeout(lc,30),D(),M&&!E?s.appendChild(gl):r.parentNode.insertBefore(gl,M?E:r),k&&nl(k,0,S-k.scrollTop),fl=gl.parentNode,void 0===y||$l||(ql=Math.abs(y-Za(r)[x])),B(),O(!0)}if(s.contains(gl))return O(!1)}return!1}function I(a,l){pl(a,p,Sa({evt:e,isOwner:d,axis:n?"vertical":"horizontal",revert:o,dragRect:t,targetRect:i,canSort:h,fromSortable:u,target:r,completed:O,onMove:function(i,o){return rc(yl,s,gl,t,i,Za(i),e,o)},changed:B},l))}function D(){I("dragOverAnimationCapture"),p.captureAnimationState(),p!==u&&u.captureAnimationState()}function O(t){return I("dragOverCompleted",{insertion:t}),t&&(d?c._hideClone():c._showClone(p),p!==u&&($a(gl,Al?Al.options.ghostClass:c.options.ghostClass,!1),$a(gl,a.ghostClass,!0)),Al!==p&&p!==sc.active?Al=p:p===sc.active&&Al&&(Al=null),u===p&&(p._ignoreWhileAnimating=r),p.animateAll(function(){I("dragOverAnimationComplete"),p._ignoreWhileAnimating=null}),p!==u&&(u.animateAll(),u._ignoreWhileAnimating=null)),(r===gl&&!gl.animated||r===s&&!r.animated)&&(Rl=null),a.dragoverBubble||e.rootEl||r===document||(gl.parentNode[al]._isOutsideThisEl(e.target),!t&&oc(e)),!a.dragoverBubble&&e.stopPropagation&&e.stopPropagation(),m=!0}function B(){Sl=Qa(gl),El=Qa(gl,a.draggable),ml({sortable:p,name:"change",toEl:s,newIndex:Sl,newDraggableIndex:El,originalEvent:e})}},_ignoreWhileAnimating:null,_offMoveEvents:function(){qa(document,"mousemove",this._onTouchMove),qa(document,"touchmove",this._onTouchMove),qa(document,"pointermove",this._onTouchMove),qa(document,"dragover",oc),qa(document,"mousemove",oc),qa(document,"touchmove",oc)},_offUpEvents:function(){var e=this.el.ownerDocument;qa(e,"mouseup",this._onDrop),qa(e,"touchend",this._onDrop),qa(e,"pointerup",this._onDrop),qa(e,"pointercancel",this._onDrop),qa(e,"touchcancel",this._onDrop),qa(document,"selectstart",this)},_onDrop:function(e){var t=this.el,i=this.options;Sl=Qa(gl),El=Qa(gl,i.draggable),pl("drop",this,{evt:e}),fl=gl&&gl.parentNode,Sl=Qa(gl),El=Qa(gl,i.draggable),sc.eventCanceled||(zl=!1,$l=!1,Hl=!1,clearInterval(this._loopId),clearTimeout(this._dragStartTimer),hc(this.cloneId),hc(this._dragStartId),this.nativeDraggable&&(qa(document,"drop",this),qa(t,"dragstart",this._onDragStart)),this._offMoveEvents(),this._offUpEvents(),La&&Ua(document.body,"user-select",""),Ua(gl,"transform",""),e&&(Nl&&(e.cancelable&&e.preventDefault(),!i.dropBubble&&e.stopPropagation()),bl&&bl.parentNode&&bl.parentNode.removeChild(bl),(yl===fl||Al&&"clone"!==Al.lastPutMode)&&Cl&&Cl.parentNode&&Cl.parentNode.removeChild(Cl),gl&&(this.nativeDraggable&&qa(gl,"dragend",this),ac(gl),gl.style["will-change"]="",Nl&&!zl&&$a(gl,Al?Al.options.ghostClass:this.options.ghostClass,!1),$a(gl,this.options.chosenClass,!1),ml({sortable:this,name:"unchoose",toEl:fl,newIndex:null,newDraggableIndex:null,originalEvent:e}),yl!==fl?(Sl>=0&&(ml({rootEl:fl,name:"add",toEl:fl,fromEl:yl,originalEvent:e}),ml({sortable:this,name:"remove",toEl:fl,originalEvent:e}),ml({rootEl:fl,name:"sort",toEl:fl,fromEl:yl,originalEvent:e}),ml({sortable:this,name:"sort",toEl:fl,originalEvent:e})),Al&&Al.save()):Sl!==kl&&Sl>=0&&(ml({sortable:this,name:"update",toEl:fl,originalEvent:e}),ml({sortable:this,name:"sort",toEl:fl,originalEvent:e})),sc.active&&(null!=Sl&&-1!==Sl||(Sl=kl,El=Tl),ml({sortable:this,name:"end",toEl:fl,originalEvent:e}),this.save())))),this._nulling()},_nulling:function(){pl("nulling",this),yl=gl=fl=bl=wl=Cl=vl=xl=Il=Dl=Nl=Sl=El=kl=Tl=Rl=Fl=Al=Ml=sc.dragged=sc.ghost=sc.clone=sc.active=null,Yl.forEach(function(e){e.checked=!0}),Yl.length=Ol=Bl=0},handleEvent:function(e){switch(e.type){case"drop":case"dragend":this._onDrop(e);break;case"dragenter":case"dragover":gl&&(this._onDragOver(e),function(e){e.dataTransfer&&(e.dataTransfer.dropEffect="move");e.cancelable&&e.preventDefault()}(e));break;case"selectstart":e.preventDefault()}},toArray:function(){for(var e,t=[],i=this.el.children,o=0,n=i.length,s=this.options;o{t.createEl("p",{text:e})});const i=t.createDiv("confirm-modal-buttons");new e.ButtonComponent(i).setButtonText(this.options.cancelText).onClick(()=>this.close()),new e.ButtonComponent(i).setButtonText(this.options.confirmText).setCta().onClick(async()=>{await this.options.onConfirm(),this.close()})}onClose(){const{contentEl:e}=this;e.empty()}static show(e,t){new Ec(e,t).open()}}class Mc extends e.Modal{constructor(e,t){super(e),this.changelogContent="",this.changelogLoaded=!1,this.plugin=t}async loadChangelog(){try{const t=await e.request({url:"https://raw.githubusercontent.com/PKM-er/obsidian-editing-toolbar/master/CHANGELOG.md",method:"GET"});if(!t)throw new Error("无法获取 Changelog 内容");{const e=t.split("\n");let i="",o=[],n=!1;for(const t of e)if(t.startsWith("## ")&&!i)i=t.substring(3).trim(),n=!0,o.push(t);else{if(t.startsWith("## ")&&n)break;n&&o.push(t)}this.changelogContent=o.join("\n")}}catch(e){console.error("加载 Changelog 时出错:",e),this.changelogContent="### 无法加载更新说明\n\n请[点击此处查看最新更新说明](https://github.com/PKM-er/obsidian-editing-toolbar/blob/master/CHANGELOG.md)"}this.changelogLoaded=!0,this.updateChangelogDisplay()}updateChangelogDisplay(){this.changelogContainer&&this.changelogContentEl&&this.changelogLoaded&&(this.changelogContentEl.empty(),e.MarkdownRenderer.renderMarkdown(this.changelogContent,this.changelogContentEl,"",this.plugin))}async fixCommandIds(){try{const t={"editor:toggle-numbered-list":"editing-toolbar:toggle-numbered-list","editor:toggle-bullet-list":"editing-toolbar:toggle-bullet-list","editor:toggle-highlight":"editing-toolbar:toggle-highlight","toggle-highlight":"editing-toolbar:toggle-highlight","editing-toolbar:editor:toggle-bold":"editing-toolbar:toggle-bold","editing-toolbar:editor:toggle-italics":"editing-toolbar:toggle-italics","editing-toolbar:editor:toggle-strikethrough":"editing-toolbar:toggle-strikethrough","editing-toolbar:editor:toggle-inline-math":"editing-toolbar:toggle-inline-math","editing-toolbar:editor:insert-callout":"editing-toolbar:insert-callout","editing-toolbar:editor:insert-link":"editing-toolbar:insert-link","cMenuToolbar-Divider-Line":"editingToolbar-Divider-Line"};let i=!1;const o=this.plugin.settings,n=e=>{e&&Array.isArray(e)&&e.forEach(e=>{e.id&&t[e.id]&&(e.id=t[e.id],i=!0),"editing-toolbar:format-eraser"===e.id&&(e.icon="eraser",i=!0),"editing-toolbar:change-font-color"===e.id&&(e.icon='',i=!0),e.SubmenuCommands&&n(e.SubmenuCommands)})},s=e=>{if(!e||!Array.isArray(e))return!1;for(const t of e){if("editing-toolbar:toggle-format-brush"===t.id)return!0;if(t.SubmenuCommands){if(s(t.SubmenuCommands))return!0}}return!1},r=e=>{if(!e||!Array.isArray(e))return!1;if(!s(e)&&e.length>=2){const t={id:"editing-toolbar:toggle-format-brush",name:"Format Brush",icon:"paintbrush"};return e.splice(2,0,t),!0}return!1},a=e=>{if(!e||!Array.isArray(e))return!1;for(const t of e)if("SubmenuCommands-text-tools"===t.id)return!0;return!1},l=e=>{if(!e||!Array.isArray(e))return!1;if(!a(e)){const t=aa.menuCommands.find(e=>"SubmenuCommands-text-tools"===e.id);if(t){const i=11;return e.length>=i?e.splice(i,0,t):e.push(t),!0}}return!1};o.menuCommands&&(n(o.menuCommands),r(o.menuCommands)&&(i=!0),l(o.menuCommands)&&(i=!0)),o.enableMultipleConfig&&(o.followingCommands&&(n(o.followingCommands),r(o.followingCommands)&&(i=!0)),o.topCommands&&(n(o.topCommands),r(o.topCommands)&&(i=!0),l(o.topCommands)&&(i=!0)),o.fixedCommands&&(n(o.fixedCommands),r(o.fixedCommands)&&(i=!0)),o.mobileCommands&&(n(o.mobileCommands),r(o.mobileCommands)&&(i=!0))),i?(await this.plugin.saveSettings(),new e.Notice(Xr("Command IDs have been successfully repaired!")),dispatchEvent(new Event("editingToolbar-NewCommand"))):new e.Notice(Xr("No command IDs need to be repaired"))}catch(t){console.error("修复命令ID时出错:",t),new e.Notice(Xr("Error repairing command IDs, please check the console for details"))}}async reloadPlugin(e){const{plugins:t}=this.app;try{await t.disablePlugin(e),await t.enablePlugin(e)}catch(e){console.error(e)}}async restoreDefaultSettings(){try{const t=this.plugin.settings.lastVersion,i=this.plugin.settings.customCommands;this.plugin.settings={...aa,lastVersion:t,customCommands:i},await this.plugin.saveSettings(),new e.Notice(Xr("Successfully restored default settings! (Custom commands preserved)")),this.reloadPlugin(this.plugin.manifest.id),this.close()}catch(t){console.error("恢复默认设置时出错:",t),new e.Notice(Xr("Error restoring default settings, please check the console for details"))}}onOpen(){const{contentEl:t}=this;t.createEl("h2",{text:this.plugin.manifest.version+"⚡Tips"}),t.createEl("p",{text:Xr("Notice:")});const i=t.createEl("ul");i.createEl("li",{text:Xr("⚠️This update is not compatible with 2.x version command ids, please click [Repair command] to be compatible")}),i.createEl("li",{text:Xr("⚠️If you want to restore the default settings, please click [Restore default settings]")}),this.changelogContainer=t.createDiv({cls:"changelog-container"}),this.changelogContainer.createEl("h3",{text:Xr("Latest Changes")}),this.changelogContentEl=this.changelogContainer.createDiv({cls:"changelog-content"}),this.changelogContentEl.setText(Xr("Loading changelog...")),setTimeout(()=>{this.loadChangelog()},100),new e.Setting(t).setName(Xr("🔧Data repair")).setDesc(Xr("This update changed the ID of some commands, please click this button to repair the commands to ensure the toolbar works properly")).addButton(e=>e.setButtonText(Xr("Repair command ID")).onClick(async()=>{await this.fixCommandIds()})),new e.Setting(t).setName(Xr("🔄Restore default settings")).setDesc(Xr("This will reset all your custom configurations, but custom commands will be preserved")).addButton(e=>e.setButtonText(Xr("Restore default")).onClick(async()=>{Ec.show(this.app,{message:Xr("Are you sure you want to restore all settings to default? But custom commands will be preserved."),onConfirm:async()=>{await this.restoreDefaultSettings()}})})),new e.Setting(t).setName(Xr("📋View full changelog")).setDesc(Xr("Open the complete changelog in your browser")).addButton(e=>e.setButtonText(Xr("Open changelog")).onClick(()=>{window.open("https://github.com/PKM-er/obsidian-editing-toolbar/blob/master/CHANGELOG.md","_blank")})),new e.Setting(t).addButton(e=>e.setButtonText(Xr("Close")).onClick(()=>{this.close()})),t.createEl("style",{text:"\n .changelog-container {\n margin-top: 20px;\n margin-bottom: 20px;\n padding: 10px;\n border: 1px solid var(--background-modifier-border);\n border-radius: 5px;\n max-height: 200px;\n overflow-y: auto;\n }\n .changelog-content {\n padding: 0 10px;\n }\n .changelog-content a {\n text-decoration: underline;\n }\n "})}onClose(){const{contentEl:e}=this;e.empty()}}function Ac(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e} +/*! Pickr 1.8.4 MIT | https://github.com/Simonwep/pickr */ +var Ic=function(e){var t={exports:{}};return e(t,t.exports),t.exports}(function(e,t){self,e.exports=(()=>{var e={d:(t,i)=>{for(var o in i)e.o(i,o)&&!e.o(t,o)&&Object.defineProperty(t,o,{enumerable:!0,get:i[o]})},o:(e,t)=>Object.prototype.hasOwnProperty.call(e,t),r:e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})}},t={};e.d(t,{default:()=>O});var i={};function o(e,t,i,o){let n=arguments.length>4&&void 0!==arguments[4]?arguments[4]:{};t instanceof HTMLCollection||t instanceof NodeList?t=Array.from(t):Array.isArray(t)||(t=[t]),Array.isArray(i)||(i=[i]);for(const s of t)for(const t of i)s[e](t,o,{capture:!1,...n});return Array.prototype.slice.call(arguments,1)}e.r(i),e.d(i,{adjustableInputNumbers:()=>d,createElementFromString:()=>r,createFromTemplate:()=>a,eventPath:()=>l,off:()=>s,on:()=>n,resolveElement:()=>c});const n=o.bind(null,"addEventListener"),s=o.bind(null,"removeEventListener");function r(e){const t=document.createElement("div");return t.innerHTML=e.trim(),t.firstElementChild}function a(e){const t=(e,t)=>{const i=e.getAttribute(t);return e.removeAttribute(t),i},i=function(e){let o=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const n=t(e,":obj"),s=t(e,":ref"),r=n?o[n]={}:o;s&&(o[s]=e);for(const o of Array.from(e.children)){const e=t(o,":arr"),n=i(o,e?{}:r);e&&(r[e]||(r[e]=[])).push(Object.keys(n).length?n:o)}return o};return i(r(e))}function l(e){let t=e.path||e.composedPath&&e.composedPath();if(t)return t;let i=e.target.parentElement;for(t=[e.target,i];i=i.parentElement;)t.push(i);return t.push(document,window),t}function c(e){return e instanceof Element?e:"string"==typeof e?e.split(/>>/g).reduce((e,t,i,o)=>(e=e.querySelector(t),i1&&void 0!==arguments[1]?arguments[1]:e=>e;function i(i){const o=[.001,.01,.1][Number(i.shiftKey||2*i.ctrlKey)]*(i.deltaY<0?1:-1);let n=0,s=e.selectionStart;e.value=e.value.replace(/[\d.]+/g,(e,i)=>i<=s&&i+e.length>=s?(s=i,t(Number(e),o,n)):(n++,e)),e.focus(),e.setSelectionRange(s,s),i.preventDefault(),e.dispatchEvent(new Event("input"))}n(e,"focus",()=>n(window,"wheel",i,{passive:!1})),n(e,"blur",()=>s(window,"wheel",i))}const{min:h,max:u,floor:p,round:m}=Math;function g(e,t,i){t/=100,i/=100;const o=p(e=e/360*6),n=e-o,s=i*(1-t),r=i*(1-n*t),a=i*(1-(1-n)*t),l=o%6;return[255*[i,r,s,s,a,i][l],255*[a,i,i,r,s,s][l],255*[s,s,a,i,i,r][l]]}function f(e,t,i){return g(e,t,i).map(e=>m(e).toString(16).padStart(2,"0"))}function b(e,t,i){const o=g(e,t,i),n=o[0]/255,s=o[1]/255,r=o[2]/255,a=h(1-n,1-s,1-r);return[100*(1===a?0:(1-n-a)/(1-a)),100*(1===a?0:(1-s-a)/(1-a)),100*(1===a?0:(1-r-a)/(1-a)),100*a]}function y(e,t,i){const o=(2-(t/=100))*(i/=100)/2;return 0!==o&&(t=1===o?0:o<.5?t*i/(2*o):t*i/(2-2*o)),[e,100*t,100*o]}function w(e,t,i){const o=h(e/=255,t/=255,i/=255),n=u(e,t,i),s=n-o;let r,a;if(0===s)r=a=0;else{a=s/n;const o=((n-e)/6+s/2)/s,l=((n-t)/6+s/2)/s,c=((n-i)/6+s/2)/s;e===n?r=c-l:t===n?r=1/3+o-c:i===n&&(r=2/3+l-o),r<0?r+=1:r>1&&(r-=1)}return[360*r,100*a,100*n]}function v(e,t,i,o){return t/=100,i/=100,[...w(255*(1-h(1,(e/=100)*(1-(o/=100))+o)),255*(1-h(1,t*(1-o)+o)),255*(1-h(1,i*(1-o)+o)))]}function C(e,t,i){t/=100;const o=2*(t*=(i/=100)<.5?i:1-i)/(i+t)*100,n=100*(i+t);return[e,isNaN(o)?0:o,n]}function x(e){return w(...e.match(/.{2}/g).map(e=>parseInt(e,16)))}function k(e){e=e.match(/^[a-zA-Z]+$/)?function(e){if("black"===e.toLowerCase())return"#000";const t=document.createElement("canvas").getContext("2d");return t.fillStyle=e,"#000"===t.fillStyle?null:t.fillStyle}(e):e;const t={cmyk:/^cmyk[\D]+([\d.]+)[\D]+([\d.]+)[\D]+([\d.]+)[\D]+([\d.]+)/i,rgba:/^((rgba)|rgb)[\D]+([\d.]+)[\D]+([\d.]+)[\D]+([\d.]+)[\D]*?([\d.]+|$)/i,hsla:/^((hsla)|hsl)[\D]+([\d.]+)[\D]+([\d.]+)[\D]+([\d.]+)[\D]*?([\d.]+|$)/i,hsva:/^((hsva)|hsv)[\D]+([\d.]+)[\D]+([\d.]+)[\D]+([\d.]+)[\D]*?([\d.]+|$)/i,hexa:/^#?(([\dA-Fa-f]{3,4})|([\dA-Fa-f]{6})|([\dA-Fa-f]{8}))$/i},i=e=>e.map(e=>/^(|\d+)\.\d+|\d+$/.test(e)?Number(e):void 0);let o;e:for(const n in t){if(!(o=t[n].exec(e)))continue;const s=e=>!!o[2]==("number"==typeof e);switch(n){case"cmyk":{const[,e,t,s,r]=i(o);if(e>100||t>100||s>100||r>100)break e;return{values:v(e,t,s,r),type:n}}case"rgba":{const[,,,e,t,r,a]=i(o);if(e>255||t>255||r>255||a<0||a>1||!s(a))break e;return{values:[...w(e,t,r),a],a:a,type:n}}case"hexa":{let[,e]=o;4!==e.length&&3!==e.length||(e=e.split("").map(e=>e+e).join(""));const t=e.substring(0,6);let i=e.substring(6);return i=i?parseInt(i,16)/255:void 0,{values:[...x(t),i],a:i,type:n}}case"hsla":{const[,,,e,t,r,a]=i(o);if(e>360||t>100||r>100||a<0||a>1||!s(a))break e;return{values:[...C(e,t,r),a],a:a,type:n}}case"hsva":{const[,,,e,t,r,a]=i(o);if(e>360||t>100||r>100||a<0||a>1||!s(a))break e;return{values:[e,t,r,a],a:a,type:n}}}}return{values:null,type:null}}function S(){const e=(e,t)=>function(){let i=arguments.length>0&&void 0!==arguments[0]?arguments[0]:-1;return t(~i?e.map(e=>Number(e.toFixed(i))):e)},t={h:arguments.length>0&&void 0!==arguments[0]?arguments[0]:0,s:arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,v:arguments.length>2&&void 0!==arguments[2]?arguments[2]:0,a:arguments.length>3&&void 0!==arguments[3]?arguments[3]:1,toHSVA(){const i=[t.h,t.s,t.v,t.a];return i.toString=e(i,e=>`hsva(${e[0]}, ${e[1]}%, ${e[2]}%, ${t.a})`),i},toHSLA(){const i=[...y(t.h,t.s,t.v),t.a];return i.toString=e(i,e=>`hsla(${e[0]}, ${e[1]}%, ${e[2]}%, ${t.a})`),i},toRGBA(){const i=[...g(t.h,t.s,t.v),t.a];return i.toString=e(i,e=>`rgba(${e[0]}, ${e[1]}, ${e[2]}, ${t.a})`),i},toCMYK(){const i=b(t.h,t.s,t.v);return i.toString=e(i,e=>`cmyk(${e[0]}%, ${e[1]}%, ${e[2]}%, ${e[3]}%)`),i},toHEXA(){const e=f(t.h,t.s,t.v),i=t.a>=1?"":Number((255*t.a).toFixed(0)).toString(16).toUpperCase().padStart(2,"0");return i&&e.push(i),e.toString=()=>`#${e.join("").toUpperCase()}`,e},clone:()=>S(t.h,t.s,t.v,t.a)};return t}const T=e=>Math.max(Math.min(e,1),0);function E(e){const t={options:Object.assign({lock:null,onchange:()=>0,onstop:()=>0},e),_keyboard(e){const{options:i}=t,{type:o,key:n}=e;if(document.activeElement===i.wrapper){const{lock:i}=t.options,s="ArrowUp"===n,r="ArrowRight"===n,a="ArrowDown"===n,l="ArrowLeft"===n;if("keydown"===o&&(s||r||a||l)){let o=0,n=0;"v"===i?o=s||r?1:-1:"h"===i?o=s||r?-1:1:(n=s?-1:a?1:0,o=l?-1:r?1:0),t.update(T(t.cache.x+.01*o),T(t.cache.y+.01*n)),e.preventDefault()}else n.startsWith("Arrow")&&(t.options.onstop(),e.preventDefault())}},_tapstart(e){n(document,["mouseup","touchend","touchcancel"],t._tapstop),n(document,["mousemove","touchmove"],t._tapmove),e.cancelable&&e.preventDefault(),t._tapmove(e)},_tapmove(e){const{options:i,cache:o}=t,{lock:n,element:s,wrapper:r}=i,a=r.getBoundingClientRect();let l=0,c=0;if(e){const t=e&&e.touches&&e.touches[0];l=e?(t||e).clientX:0,c=e?(t||e).clientY:0,la.left+a.width&&(l=a.left+a.width),ca.top+a.height&&(c=a.top+a.height),l-=a.left,c-=a.top}else o&&(l=o.x*a.width,c=o.y*a.height);"h"!==n&&(s.style.left=`calc(${l/a.width*100}% - ${s.offsetWidth/2}px)`),"v"!==n&&(s.style.top=`calc(${c/a.height*100}% - ${s.offsetHeight/2}px)`),t.cache={x:l/a.width,y:c/a.height};const d=T(l/a.width),h=T(c/a.height);switch(n){case"v":return i.onchange(d);case"h":return i.onchange(h);default:return i.onchange(d,h)}},_tapstop(){t.options.onstop(),s(document,["mouseup","touchend","touchcancel"],t._tapstop),s(document,["mousemove","touchmove"],t._tapmove)},trigger(){t._tapmove()},update(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0,i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;const{left:o,top:n,width:s,height:r}=t.options.wrapper.getBoundingClientRect();"h"===t.options.lock&&(i=e),t._tapmove({clientX:o+s*e,clientY:n+r*i})},destroy(){const{options:e,_tapstart:i,_keyboard:o}=t;s(document,["keydown","keyup"],o),s([e.wrapper,e.element],"mousedown",i),s([e.wrapper,e.element],"touchstart",i,{passive:!1})}},{options:i,_tapstart:o,_keyboard:r}=t;return n([i.wrapper,i.element],"mousedown",o),n([i.wrapper,i.element],"touchstart",o,{passive:!1}),n(document,["keydown","keyup"],r),t}function M(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};e=Object.assign({onchange:()=>0,className:"",elements:[]},e);const t=n(e.elements,"click",t=>{e.elements.forEach(i=>i.classList[t.target===i?"add":"remove"](e.className)),e.onchange(t),t.stopPropagation()});return{destroy:()=>s(...t)}}const A={variantFlipOrder:{start:"sme",middle:"mse",end:"ems"},positionFlipOrder:{top:"tbrl",right:"rltb",bottom:"btrl",left:"lrbt"},position:"bottom",margin:8},I=(e,t,i)=>{const{container:o,margin:n,position:s,variantFlipOrder:r,positionFlipOrder:a}={container:document.documentElement.getBoundingClientRect(),...A,...i},{left:l,top:c}=t.style;t.style.left="0",t.style.top="0";const d=e.getBoundingClientRect(),h=t.getBoundingClientRect(),u={t:d.top-h.height-n,b:d.bottom+n,r:d.right+n,l:d.left-h.width-n},p={vs:d.left,vm:d.left+d.width/2+-h.width/2,ve:d.left+d.width-h.width,hs:d.top,hm:d.bottom-d.height/2-h.height/2,he:d.bottom-h.height},[m,g="middle"]=s.split("-"),f=a[m],b=r[g],{top:y,left:w,bottom:v,right:C}=o;for(const e of f){const i="t"===e||"b"===e,o=u[e],[n,s]=i?["top","left"]:["left","top"],[r,a]=i?[h.height,h.width]:[h.width,h.height],[l,c]=i?[v,C]:[C,v],[d,m]=i?[y,w]:[w,y];if(!(ol))for(const r of b){const l=p[(i?"v":"h")+r];if(!(lc))return t.style[s]=l-h[s]+"px",t.style[n]=o-h[n]+"px",e+r}}return t.style.left=l,t.style.top=c,null};function D(e,t,i){return t in e?Object.defineProperty(e,t,{value:i,enumerable:!0,configurable:!0,writable:!0}):e[t]=i,e}class O{constructor(e){D(this,"_initializingActive",!0),D(this,"_recalc",!0),D(this,"_nanopop",null),D(this,"_root",null),D(this,"_color",S()),D(this,"_lastColor",S()),D(this,"_swatchColors",[]),D(this,"_setupAnimationFrame",null),D(this,"_eventListener",{init:[],save:[],hide:[],show:[],clear:[],change:[],changestop:[],cancel:[],swatchselect:[]}),this.options=e=Object.assign({...O.DEFAULT_OPTIONS},e);const{swatches:t,components:i,theme:o,sliders:n,lockOpacity:s,padding:r}=e;["nano","monolith"].includes(o)&&!n&&(e.sliders="h"),i.interaction||(i.interaction={});const{preview:a,opacity:l,hue:c,palette:d}=i;i.opacity=!s&&l,i.palette=d||a||l||c,this._preBuild(),this._buildComponents(),this._bindEvents(),this._finalBuild(),t&&t.length&&t.forEach(e=>this.addSwatch(e));const{button:h,app:u}=this._root;this._nanopop=((e,t,i)=>{const o="object"!=typeof e||e instanceof HTMLElement?{reference:e,popper:t,...i}:e;return{update(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:o;const{reference:t,popper:i}=Object.assign(o,e);if(!i||!t)throw new Error("Popper- or reference-element missing.");return I(t,i,o)}}})(h,u,{margin:r}),h.setAttribute("role","button"),h.setAttribute("aria-label",this._t("btn:toggle"));const p=this;this._setupAnimationFrame=requestAnimationFrame(function t(){if(!u.offsetWidth)return p._setupAnimationFrame=requestAnimationFrame(t);p.setColor(e.default),p._rePositioningPicker(),e.defaultRepresentation&&(p._representation=e.defaultRepresentation,p.setColorRepresentation(p._representation)),e.showAlways&&p.show(),p._initializingActive=!1,p._emit("init")})}_preBuild(){const{options:e}=this;for(const t of["el","container"])e[t]=c(e[t]);this._root=(e=>{const{components:t,useAsButton:i,inline:o,appClass:n,theme:s,lockOpacity:r}=e.options,l=e=>e?"":'style="display:none" hidden',c=t=>e._t(t),d=a(`\n
\n\n ${i?"":''}\n\n
\n
\n
\n \n
\n
\n\n
\n
\n
\n
\n\n
\n
\n
\n
\n\n
\n
\n
\n
\n
\n\n
\n\n
\n \n\n \n \n \n \n \n\n \n \n \n
\n
\n
\n `),h=d.interaction;return h.options.find(e=>!e.hidden&&!e.classList.add("active")),h.type=()=>h.options.find(e=>e.classList.contains("active")),d})(this),e.useAsButton&&(this._root.button=e.el),e.container.appendChild(this._root.root)}_finalBuild(){const e=this.options,t=this._root;if(e.container.removeChild(t.root),e.inline){const i=e.el.parentElement;e.el.nextSibling?i.insertBefore(t.app,e.el.nextSibling):i.appendChild(t.app)}else e.container.appendChild(t.app);e.useAsButton?e.inline&&e.el.remove():e.el.parentNode.replaceChild(t.root,e.el),e.disabled&&this.disable(),e.comparison||(t.button.style.transition="none",e.useAsButton||(t.preview.lastColor.style.transition="none")),this.hide()}_buildComponents(){const e=this,t=this.options.components,i=(e.options.sliders||"v").repeat(2),[o,n]=i.match(/^[vh]+$/g)?i:[],s=()=>this._color||(this._color=this._lastColor.clone()),r={palette:E({element:e._root.palette.picker,wrapper:e._root.palette.palette,onstop:()=>e._emit("changestop","slider",e),onchange(i,o){if(!t.palette)return;const n=s(),{_root:r,options:a}=e,{lastColor:l,currentColor:c}=r.preview;e._recalc&&(n.s=100*i,n.v=100-100*o,n.v<0&&(n.v=0),e._updateOutput("slider"));const d=n.toRGBA().toString(0);this.element.style.background=d,this.wrapper.style.background=`\n linear-gradient(to top, rgba(0, 0, 0, ${n.a}), transparent),\n linear-gradient(to left, hsla(${n.h}, 100%, 50%, ${n.a}), rgba(255, 255, 255, ${n.a}))\n `,a.comparison?a.useAsButton||e._lastColor||l.style.setProperty("--pcr-color",d):(r.button.style.setProperty("--pcr-color",d),r.button.classList.remove("clear"));const h=n.toHEXA().toString();for(const{el:t,color:i}of e._swatchColors)t.classList[h===i.toHEXA().toString()?"add":"remove"]("pcr-active");c.style.setProperty("--pcr-color",d)}}),hue:E({lock:"v"===n?"h":"v",element:e._root.hue.picker,wrapper:e._root.hue.slider,onstop:()=>e._emit("changestop","slider",e),onchange(i){if(!t.hue||!t.palette)return;const o=s();e._recalc&&(o.h=360*i),this.element.style.backgroundColor=`hsl(${o.h}, 100%, 50%)`,r.palette.trigger()}}),opacity:E({lock:"v"===o?"h":"v",element:e._root.opacity.picker,wrapper:e._root.opacity.slider,onstop:()=>e._emit("changestop","slider",e),onchange(i){if(!t.opacity||!t.palette)return;const o=s();e._recalc&&(o.a=Math.round(100*i)/100),this.element.style.background=`rgba(0, 0, 0, ${o.a})`,r.palette.trigger()}}),selectable:M({elements:e._root.interaction.options,className:"active",onchange(t){e._representation=t.target.getAttribute("data-type").toUpperCase(),e._recalc&&e._updateOutput("swatch")}})};this._components=r}_bindEvents(){const{_root:e,options:t}=this,i=[n(e.interaction.clear,"click",()=>this._clearColor()),n([e.interaction.cancel,e.preview.lastColor],"click",()=>{this.setHSVA(...(this._lastColor||this._color).toHSVA(),!0),this._emit("cancel")}),n(e.interaction.save,"click",()=>{!this.applyColor()&&!t.showAlways&&this.hide()}),n(e.interaction.result,["keyup","input"],e=>{this.setColor(e.target.value,!0)&&!this._initializingActive&&(this._emit("change",this._color,"input",this),this._emit("changestop","input",this)),e.stopImmediatePropagation()}),n(e.interaction.result,["focus","blur"],e=>{this._recalc="blur"===e.type,this._recalc&&this._updateOutput(null)}),n([e.palette.palette,e.palette.picker,e.hue.slider,e.hue.picker,e.opacity.slider,e.opacity.picker],["mousedown","touchstart"],()=>this._recalc=!0,{passive:!0})];if(!t.showAlways){const o=t.closeWithKey;i.push(n(e.button,"click",()=>this.isOpen()?this.hide():this.show()),n(document,"keyup",e=>this.isOpen()&&(e.key===o||e.code===o)&&this.hide()),n(document,["touchstart","mousedown"],t=>{this.isOpen()&&!l(t).some(t=>t===e.app||t===e.button)&&this.hide()},{capture:!0}))}if(t.adjustableNumbers){const t={rgba:[255,255,255,1],hsva:[360,100,100,1],hsla:[360,100,100,1],cmyk:[100,100,100,100]};d(e.interaction.result,(e,i,o)=>{const n=t[this.getColorRepresentation().toLowerCase()];if(n){const t=n[o],s=e+(t>=100?1e3*i:i);return s<=0?0:Number((s{o.isOpen()&&(t.closeOnScroll&&o.hide(),null===e?(e=setTimeout(()=>e=null,100),requestAnimationFrame(function t(){o._rePositioningPicker(),null!==e&&requestAnimationFrame(t)})):(clearTimeout(e),e=setTimeout(()=>e=null,100)))},{capture:!0}))}this._eventBindings=i}_rePositioningPicker(){const{options:e}=this;if(!e.inline&&!this._nanopop.update({container:document.body.getBoundingClientRect(),position:e.position})){const e=this._root.app,t=e.getBoundingClientRect();e.style.top=(window.innerHeight-t.height)/2+"px",e.style.left=(window.innerWidth-t.width)/2+"px"}}_updateOutput(e){const{_root:t,_color:i,options:o}=this;if(t.interaction.type()){const e=`to${t.interaction.type().getAttribute("data-type")}`;t.interaction.result.value="function"==typeof i[e]?i[e]().toString(o.outputPrecision):""}!this._initializingActive&&this._recalc&&this._emit("change",i,e,this)}_clearColor(){let e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];const{_root:t,options:i}=this;i.useAsButton||t.button.style.setProperty("--pcr-color","rgba(0, 0, 0, 0.15)"),t.button.classList.add("clear"),i.showAlways||this.hide(),this._lastColor=null,this._initializingActive||e||(this._emit("save",null),this._emit("clear"))}_parseLocalColor(e){const{values:t,type:i,a:o}=k(e),{lockOpacity:n}=this.options,s=void 0!==o&&1!==o;return t&&3===t.length&&(t[3]=void 0),{values:!t||n&&s?null:t,type:i}}_t(e){return this.options.i18n[e]||O.I18N_DEFAULTS[e]}_emit(e){for(var t=arguments.length,i=new Array(t>1?t-1:0),o=1;oe(...i,this))}on(e,t){return this._eventListener[e].push(t),this}off(e,t){const i=this._eventListener[e]||[],o=i.indexOf(t);return~o&&i.splice(o,1),this}addSwatch(e){const{values:t}=this._parseLocalColor(e);if(t){const{_swatchColors:e,_root:i}=this,o=S(...t),s=r(`

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 z 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�XkJs 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�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