From 9f8c5e5d797d2c708ffc948c00f56aead761013a Mon Sep 17 00:00:00 2001 From: Scott Rigby Date: Thu, 20 Nov 2025 17:04:11 -0500 Subject: [PATCH 1/6] feat(docs): split community docs into separate unversioned section - create new docusaurus plugin instance for unversioned community docs - move files from docs/community to community directory - change a few page names and weights for better organization - fix links and add helm 4 notice to i18n pages behind main - remove community sections from versioned docs (v2, v3) - migrate i18n community translations to new plugin structure - update internal links to point to /community paths - add netlify redirect for legacy /docs/community URLs - update navbar to show community as top-level item - fix breadcrumbs label in community section Signed-off-by: Scott Rigby --- CONTRIBUTING-ko.md | 2 +- README-ko.md | 2 +- README.md | 2 +- ...2020-08-13-helm-v2-deprecation-timeline.md | 3 +- {docs/community => community}/developers.md | 6 +- {docs/community => community}/history.mdx | 4 +- {docs/community => community}/index.mdx | 2 +- .../community => community}/localization.md | 2 +- {docs/community => community}/related.md | 2 +- .../release_checklist.md | 8 +- docs/chart_best_practices/dependencies.mdx | 2 +- docs/chart_template_guide/function_list.mdx | 2 +- .../functions_and_pipelines.mdx | 2 +- docs/chart_template_guide/values_files.mdx | 2 +- docs/community/localization.md | 206 -------- docs/faq/installing.mdx | 2 +- docs/faq/uninstalling.mdx | 2 +- docs/glossary/index.mdx | 2 +- docs/intro/CheatSheet.mdx | 2 +- docs/intro/using_helm.mdx | 2 +- docs/plugins/overview.md | 2 +- docs/topics/advanced.mdx | 2 +- docs/topics/charts.mdx | 2 +- docs/topics/plugins.mdx | 4 +- docs/topics/provenance.mdx | 2 +- docs/topics/registries.mdx | 2 +- docusaurus.config.js | 25 +- .../version-3/index.mdx | 2 +- .../version-3/index.mdx | 2 +- .../version-3/community/index.mdx | 13 - .../version-3/index.mdx | 2 +- .../current}/developers.md | 2 +- .../current/history.mdx} | 4 + .../current}/localization.md | 4 +- .../version-3/community/index.mdx | 14 - .../version-3/index.mdx | 2 +- ...2020-08-13-helm-v2-deprecation-timeline.md | 2 +- .../current}/developers.md | 0 .../current/history.mdx} | 4 + .../current}/localization.md | 4 +- .../current}/related.md | 0 .../current}/release_checklist.md | 4 +- .../version-3/community/index.mdx | 12 - .../version-3/index.mdx | 2 +- .../version-3/topics/plugins.md | 2 +- .../version-3/community/index.mdx | 13 - .../version-3/index.mdx | 2 +- .../version-3/index.mdx | 2 +- .../current}/developers.md | 2 +- .../current/history.mdx} | 4 + .../current}/localization.md | 0 .../current}/related.md | 0 .../current}/release_checklist.md | 4 +- .../version-3/community/index.mdx | 12 - .../version-3/index.mdx | 2 +- .../version-3/topics/plugins.md | 2 +- .../current}/developers.md | 2 +- .../current/history.mdx} | 4 + .../current}/localization.md | 0 .../current}/related.md | 0 .../current}/release_checklist.md | 4 +- .../version-3/community/index.mdx | 12 - .../version-3/index.mdx | 2 +- netlify.toml | 19 +- scripts/v3/add-netlify-redirects.js | 16 +- sidebars_community.js | 8 + src/components/HomeAbout/index.js | 11 +- src/theme/DocBreadcrumbs/index.js | 9 +- .../version-3/community/developers.md | 155 ------ versioned_docs/version-3/community/history.md | 34 -- versioned_docs/version-3/community/index.mdx | 14 - versioned_docs/version-3/community/related.md | 141 ----- .../version-3/community/release_checklist.md | 490 ------------------ versioned_docs/version-3/index.mdx | 2 +- versioned_docs/version-3/topics/plugins.md | 2 +- 75 files changed, 136 insertions(+), 1203 deletions(-) rename {docs/community => community}/developers.md (98%) rename {docs/community => community}/history.mdx (96%) rename {docs/community => community}/index.mdx (91%) rename {versioned_docs/version-3/community => community}/localization.md (99%) rename {docs/community => community}/related.md (99%) rename {docs/community => community}/release_checklist.md (99%) delete mode 100644 docs/community/localization.md delete mode 100644 i18n/fr/docusaurus-plugin-content-docs/version-3/community/index.mdx rename i18n/ja/{docusaurus-plugin-content-docs/version-3/community => docusaurus-plugin-content-docs-community/current}/developers.md (98%) rename i18n/ja/{docusaurus-plugin-content-docs/version-3/community/history.md => docusaurus-plugin-content-docs-community/current/history.mdx} (97%) rename i18n/ja/{docusaurus-plugin-content-docs/version-3/community => docusaurus-plugin-content-docs-community/current}/localization.md (98%) delete mode 100644 i18n/ja/docusaurus-plugin-content-docs/version-3/community/index.mdx rename i18n/ko/{docusaurus-plugin-content-docs/version-3/community => docusaurus-plugin-content-docs-community/current}/developers.md (100%) rename i18n/ko/{docusaurus-plugin-content-docs/version-3/community/history.md => docusaurus-plugin-content-docs-community/current/history.mdx} (96%) rename i18n/ko/{docusaurus-plugin-content-docs/version-3/community => docusaurus-plugin-content-docs-community/current}/localization.md (97%) rename i18n/ko/{docusaurus-plugin-content-docs/version-3/community => docusaurus-plugin-content-docs-community/current}/related.md (100%) rename i18n/ko/{docusaurus-plugin-content-docs/version-3/community => docusaurus-plugin-content-docs-community/current}/release_checklist.md (99%) delete mode 100644 i18n/ko/docusaurus-plugin-content-docs/version-3/community/index.mdx delete mode 100644 i18n/pt/docusaurus-plugin-content-docs/version-3/community/index.mdx rename i18n/uk/{docusaurus-plugin-content-docs/version-3/community => docusaurus-plugin-content-docs-community/current}/developers.md (94%) rename i18n/uk/{docusaurus-plugin-content-docs/version-3/community/history.md => docusaurus-plugin-content-docs-community/current/history.mdx} (97%) rename i18n/uk/{docusaurus-plugin-content-docs/version-3/community => docusaurus-plugin-content-docs-community/current}/localization.md (100%) rename i18n/uk/{docusaurus-plugin-content-docs/version-3/community => docusaurus-plugin-content-docs-community/current}/related.md (100%) rename i18n/uk/{docusaurus-plugin-content-docs/version-3/community => docusaurus-plugin-content-docs-community/current}/release_checklist.md (98%) delete mode 100644 i18n/uk/docusaurus-plugin-content-docs/version-3/community/index.mdx rename i18n/zh/{docusaurus-plugin-content-docs/version-3/community => docusaurus-plugin-content-docs-community/current}/developers.md (97%) rename i18n/zh/{docusaurus-plugin-content-docs/version-3/community/history.md => docusaurus-plugin-content-docs-community/current/history.mdx} (96%) rename i18n/zh/{docusaurus-plugin-content-docs/version-3/community => docusaurus-plugin-content-docs-community/current}/localization.md (100%) rename i18n/zh/{docusaurus-plugin-content-docs/version-3/community => docusaurus-plugin-content-docs-community/current}/related.md (100%) rename i18n/zh/{docusaurus-plugin-content-docs/version-3/community => docusaurus-plugin-content-docs-community/current}/release_checklist.md (98%) delete mode 100644 i18n/zh/docusaurus-plugin-content-docs/version-3/community/index.mdx create mode 100644 sidebars_community.js delete mode 100644 versioned_docs/version-3/community/developers.md delete mode 100644 versioned_docs/version-3/community/history.md delete mode 100644 versioned_docs/version-3/community/index.mdx delete mode 100644 versioned_docs/version-3/community/related.md delete mode 100644 versioned_docs/version-3/community/release_checklist.md diff --git a/CONTRIBUTING-ko.md b/CONTRIBUTING-ko.md index 67bbd7003c..113dab39fa 100644 --- a/CONTRIBUTING-ko.md +++ b/CONTRIBUTING-ko.md @@ -150,7 +150,7 @@ Date: Thu Feb 2 11:41:15 2018 -0800 2. 원하는 저장소를 포크하여 코드 변경 사항을 개발하고 테스트하세요. 3. 풀 리퀘스트를 보내주세요. -코딩 규약 및 표준은 [공식 개발자 문서](https://helm.sh/docs/community/developers/)에 설명되어 있습니다. +코딩 규약 및 표준은 [공식 개발자 문서](/community/developers)에 설명되어 있습니다. ## 풀 리퀘스트 diff --git a/README-ko.md b/README-ko.md index fa44abd5cb..e76b79ed6a 100755 --- a/README-ko.md +++ b/README-ko.md @@ -179,7 +179,7 @@ Helm의 사전 릴리스 버전이 GA로 승격될 때, 사전 릴리스 문서 **우리 사이트와 문서의 컨텐츠 번역을 환영합니다** 전 세계에서 Helm에 대한 접근을 확장하는 데 도움이 되도록 합니다. -Helm.sh는 여러 언어를 지원합니다. 해외 사용자를 위한 컨텐츠 번역과 구성 가이드는 [헬름 문서 현지화](https://helm.sh/docs/community/localization/)를 참조하세요. +Helm.sh는 여러 언어를 지원합니다. 해외 사용자를 위한 컨텐츠 번역과 구성 가이드는 [헬름 문서 현지화](/community/localization)를 참조하세요. --- diff --git a/README.md b/README.md index 05cd4bd4f6..a06c9a8aad 100755 --- a/README.md +++ b/README.md @@ -190,7 +190,7 @@ For more information about cutting new docs versions, see [Versioning](https://d **We welcome content translations** to our site and our docs, to help expand access to Helm around the world. -Helm.sh supports multiple languages. Please refer to the [Localizing Helm Documentation](https://helm.sh/docs/community/localization/) for a guide on translating and configuring content for international users. +Helm.sh supports multiple languages. Please refer to the [Localizing Helm Documentation](/community/localization) for a guide on translating and configuring content for international users. --- diff --git a/blog/2020-08-13-helm-v2-deprecation-timeline.md b/blog/2020-08-13-helm-v2-deprecation-timeline.md index a4dc5d831e..45fcdb1f76 100644 --- a/blog/2020-08-13-helm-v2-deprecation-timeline.md +++ b/blog/2020-08-13-helm-v2-deprecation-timeline.md @@ -41,5 +41,4 @@ _After November 13, 2020, you will see these changes:_ The community has found Helm v3 to be a vastly improved experience, and community resources like the [helm-2to3 plugin](https://github.com/helm/helm-2to3) are available to assist you in your essential migration. Please ensure that you migrate to Helm v3 before the November 13th deadline, as operating software which no longer receives security patches is a risk best avoided. -We want to take this moment to thank everyone in the community who has used Helm or contributed an issue or pull request to help improve it. Many great ideas that don’t fit into Helm itself have much success as [related ecosystem projects](https://helm.sh/docs/community/related/). Every time you submit updates to the docs, you’re helping others get started and be more effective with Helm. Thank you all! - +We want to take this moment to thank everyone in the community who has used Helm or contributed an issue or pull request to help improve it. Many great ideas that don’t fit into Helm itself have much success as [related ecosystem projects](/community/related). Every time you submit updates to the docs, you’re helping others get started and be more effective with Helm. Thank you all! diff --git a/docs/community/developers.md b/community/developers.md similarity index 98% rename from docs/community/developers.md rename to community/developers.md index a34a146cb4..9266d02c5e 100644 --- a/docs/community/developers.md +++ b/community/developers.md @@ -1,7 +1,7 @@ --- -title: Developer Guide +title: Developer Setup description: Instructions for setting up your environment for developing Helm. -sidebar_position: 1 +sidebar_position: 2 --- This guide explains how to set up your environment for developing on Helm. @@ -80,7 +80,7 @@ Since Helm 3, documentation has been moved to its own repository. When writing new features, please write accompanying documentation and submit it to the [helm-www](https://github.com/helm/helm-www) repository. -One exception: [Helm CLI output (in English)](/helm/index.mdx) is +One exception: [Helm CLI output (in English)](/docs/helm) is generated from the `helm` binary itself. See [Updating the Helm CLI Reference Docs](https://github.com/helm/helm-www#updating-the-helm-cli-reference-docs) for instructions on how to generate this output. When translated, the CLI output is not generated and can be found in `/content//docs/helm`. diff --git a/docs/community/history.mdx b/community/history.mdx similarity index 96% rename from docs/community/history.mdx rename to community/history.mdx index 47facbedba..767a7b78a6 100644 --- a/docs/community/history.mdx +++ b/community/history.mdx @@ -1,10 +1,10 @@ --- title: The History of the Project description: Provides a high-level overview of the project's history. -sidebar_position: 4 +sidebar_position: 5 --- -import Helm4 from "../_v4-in-progress.mdx" +import Helm4 from "/docs/_v4-in-progress.mdx" diff --git a/docs/community/index.mdx b/community/index.mdx similarity index 91% rename from docs/community/index.mdx rename to community/index.mdx index 7e1fc3e625..ea3db4f3db 100644 --- a/docs/community/index.mdx +++ b/community/index.mdx @@ -1,6 +1,6 @@ --- title: Community -sidebar_position: 8 +sidebar_position: 1 --- # Community Guides diff --git a/versioned_docs/version-3/community/localization.md b/community/localization.md similarity index 99% rename from versioned_docs/version-3/community/localization.md rename to community/localization.md index 57417fa019..596789d1e6 100644 --- a/versioned_docs/version-3/community/localization.md +++ b/community/localization.md @@ -2,7 +2,7 @@ title: "Localizing Helm Documentation" description: "Instructions for localizing the Helm documentation." aliases: ["/docs/localization/"] -sidebar_position: 5 +sidebar_position: 6 --- This guide explains how to localize the Helm documentation. diff --git a/docs/community/related.md b/community/related.md similarity index 99% rename from docs/community/related.md rename to community/related.md index 1b2a58b6a5..ef28d78de2 100644 --- a/docs/community/related.md +++ b/community/related.md @@ -1,7 +1,7 @@ --- title: Related Projects and Documentation description: third-party tools, plugins and documentation provided by the community! -sidebar_position: 3 +sidebar_position: 4 --- The Helm community has produced many extra tools, plugins, and documentation diff --git a/docs/community/release_checklist.md b/community/release_checklist.md similarity index 99% rename from docs/community/release_checklist.md rename to community/release_checklist.md index 2c64123449..016f873e38 100644 --- a/docs/community/release_checklist.md +++ b/community/release_checklist.md @@ -1,14 +1,14 @@ --- -title: Release Checklist +title: Maintainer Release Checklist description: Checklist for maintainers when releasing the next version of Helm. -sidebar_position: 2 +sidebar_position: 3 --- # A Maintainer's Guide to Releasing Helm Time for a new Helm release! As a Helm maintainer cutting a release, you are -the best person to [update this -release checklist](https://github.com/helm/helm-www/blob/main/content/en/docs/community/release_checklist.md) +the best person to update this +release checklist should your experiences vary from what's documented here. All releases will be of the form vX.Y.Z where X is the major version number, Y diff --git a/docs/chart_best_practices/dependencies.mdx b/docs/chart_best_practices/dependencies.mdx index e548bcf3f7..ca9c36b4cd 100644 --- a/docs/chart_best_practices/dependencies.mdx +++ b/docs/chart_best_practices/dependencies.mdx @@ -4,7 +4,7 @@ description: Covers best practices for Chart dependencies. sidebar_position: 4 --- -import Helm4 from "../_v4-in-progress.mdx" +import Helm4 from "/docs/_v4-in-progress.mdx" diff --git a/docs/chart_template_guide/function_list.mdx b/docs/chart_template_guide/function_list.mdx index 41eca4471f..68ee488d6d 100644 --- a/docs/chart_template_guide/function_list.mdx +++ b/docs/chart_template_guide/function_list.mdx @@ -4,7 +4,7 @@ description: A list of template functions available in Helm sidebar_position: 6 --- -import Helm4 from "../_v4-in-progress.mdx" +import Helm4 from "/docs/_v4-in-progress.mdx" diff --git a/docs/chart_template_guide/functions_and_pipelines.mdx b/docs/chart_template_guide/functions_and_pipelines.mdx index df2c4e2beb..7f79fbfa4a 100644 --- a/docs/chart_template_guide/functions_and_pipelines.mdx +++ b/docs/chart_template_guide/functions_and_pipelines.mdx @@ -4,7 +4,7 @@ description: Using functions in templates. sidebar_position: 5 --- -import Helm4 from "../_v4-in-progress.mdx" +import Helm4 from "/docs/_v4-in-progress.mdx" diff --git a/docs/chart_template_guide/values_files.mdx b/docs/chart_template_guide/values_files.mdx index 8748cb9a38..05f47d323f 100644 --- a/docs/chart_template_guide/values_files.mdx +++ b/docs/chart_template_guide/values_files.mdx @@ -4,7 +4,7 @@ description: Instructions on how to use the --values flag. sidebar_position: 4 --- -import Helm4 from "../_v4-in-progress.mdx" +import Helm4 from "/docs/_v4-in-progress.mdx" diff --git a/docs/community/localization.md b/docs/community/localization.md deleted file mode 100644 index 57417fa019..0000000000 --- a/docs/community/localization.md +++ /dev/null @@ -1,206 +0,0 @@ ---- -title: "Localizing Helm Documentation" -description: "Instructions for localizing the Helm documentation." -aliases: ["/docs/localization/"] -sidebar_position: 5 ---- - -This guide explains how to localize the Helm documentation. - -## Getting Started - -Contributions for translations use the same process as contributions for -documentation. Translations are supplied through [pull -requests](https://help.github.com/en/github/collaborating-with-issues-and-pull-requests/about-pull-requests) -to the [helm-www](https://github.com/helm/helm-www) git repository and pull -requests are reviewed by the team that manages the website. - -### Two-letter Language Code - -Documentation is organized by the [ISO 639-1 -standard](https://www.loc.gov/standards/iso639-2/php/code_list.php) for the -language codes. For example, the two-letter code for Korean is `ko`. - -In content and configuration you will find the language code in use. Here are 3 -examples: - -- In the `i18n` directory, there are subdirectories for each language code. The - localized content for the language is in each subdirectory. -- Localized content in each -- For each language, there is a `code.json` file for each language with - phrases used on the website. - -English, with a language code of `en`, is the default language and source for -translations. - -### Fork, Branch, Change, Pull Request - -To contribute translations start by [creating a -fork](https://help.github.com/en/github/getting-started-with-github/fork-a-repo) -of the [helm-www repository](https://github.com/helm/helm-www) on GitHub. You -will start by committing the changes to your fork. - -By default your fork will be set to work on the default branch known as `main`. -Please use branches to develop your changes and create pull requests. If you are -unfamiliar with branches you can [read about them in the GitHub -documentation](https://help.github.com/en/github/collaborating-with-issues-and-pull-requests/about-branches). - -Once you have a branch make changes to add translations and localize the content -to a language. - -Note, Helm uses a [Developers Certificate of -Origin](https://developercertificate.org/). All commits need to have signoff. -When making a commit you can use the `-s` or `--signoff` flag to use your Git -configured name and email address to signoff on the commit. More details are -available in the -[CONTRIBUTING.md](https://github.com/helm/helm-www/blob/main/CONTRIBUTING.md#sign-your-work) -file. - -When you are ready, create a [pull -request](https://help.github.com/en/github/collaborating-with-issues-and-pull-requests/about-pull-requests) -with the translation back to the helm-www repository. - -Once a pull request has been created one of the maintainers will review it. -Details on that process are in the -[CONTRIBUTING.md](https://github.com/helm/helm-www/blob/main/CONTRIBUTING.md) -file. - -## Translating Content - -Localizing all of the Helm content is a large task. It is ok to start small. The -translations can be expanded over time. - -The following describes the files/directories that are used to translate the docs content, blog content, and site elements in the Helm documentation site: - -- `i18n/` directory: - - `code.json` used for translating React code in the site (including the landing page) - - `i18n//docusaurus-plugin-content-blog` subdirectory with blog translations - - `i18n//docusaurus-plugin-content-docs` subdirectory with: - - Version subdirectories for docs content translations (eg `i18n//docusaurus-plugin-content-docs/version-3/`) - - JSON files for each version of the docs with translations for the categories in the sidebar (eg, `current.json`, `version-3.json`, etc) - - `i18n/docusaurus-theme-classic` subdirectory with `footer.json` and `navbar.json` files for translating the visible text in the site navbar and footer -- The `i18n` key in the `docusaurus.config.js` file lists all the locales and exposes config options for the locale dropdown in the site navbar - -For more information, see [i18n - Introduction](https://docusaurus.io/docs/i18n/introduction) in the Docusaurus docs. - -### Starting A New Language - -For a tutorial that walks you through how to translate site content, see [i18n - Tutorial](https://docusaurus.io/docs/i18n/tutorial) in the Docusaurus docs. - -To start a new language: - -1. If you haven't already, install dependencies: - - ``` - yarn install --frozen-lockfile - ``` - -1. Run the Docusaurus `write-translations` command. For example, to add the `fr` (French) locale: `yarn write-translations -- --locale fr`. This creates the required directory structure for the language and initializes the JSON translation files required to translate site elements like the navbar, footer, landing page, and sidebar. - - ``` - yarn write-translations --locale - ``` - -1. Do the minimum translations for the new language: - 1. Translate the `code.json` file. - 1. In the `i18n/docusaurus-theme-classic` subdirectory, translate the `footer.json` and `navbar.json` files. - 1. In the `docusaurus-plugin-content-blog/options.json`, translate the blog elements in the `options.json` file. -1. Add the language to the `i18n` key of the `docusaurus.config.js` file so that it appears in the dropdown in the navbar: - ```yaml - i18n: { - defaultLocale: 'en', - # add new language to this list of locales - locales: ['en', 'de', 'es', 'fr', 'gr', 'ja', 'ko', 'pt', 'ru', 'uk', 'zh'], - localeConfigs: { - en: { - htmlLang: 'en-us', - label: 'English', - }, - de: { - label: 'Deutsch', - }, - # new_lang { - # label: 'Navbar label', - # } - }, - }, - ``` -1. (Optional) Translate docs or blog content. See _Translating_ below. -1. Test your changes by starting the localized site in dev mode, specifying the locale: - - ``` - yarn start --locale fr - ``` - :::note - Each locale is a distinct standalone single-page application. You can only preview one locale at a time. It is not possible to preview all locales at the same time. - ::: - -### Translating - -Before you translate docs content, review the following best practices and guidelines: -* Translation tools can help with the process. This includes machine -generated translations. Machine generated translations should be edited or -otherwise reviewing for grammar and meaning by a native language speaker before -publishing. -* Do not add an untranslated copy of an English file to `i18n/[LANG]/plugin-content-docs` or `i18n/[LANG]/plugin-content-blog`. -Once a language exists on the site, any untranslated pages will redirect to -English automatically. Translation takes time, and you always want to be -translating the most current version of the docs, not an outdated fork. -* Make sure you remove any `aliases` lines from the header section. A line like -`aliases: ["/docs/using_helm/"]` does not belong in the translations. Those -are redirections for old links which don't exist for new pages. -* Add anchor IDs to any headings using the format `## Example Heading {#example-anchor-id}`. The anchor IDs must be English language and match the anchor IDs of the corresponding heading in the English doc page. For example, `## 后端存储 {#storage-backends}` matches `## Storage backends {#storage-backends}`. This ensures that any anchor links to the headings still work in the translated version of the page. For more information, see [Anchor links to headings](https://github.com/helm/helm-www/blob/main/ARCHITECTURAL_DECISIONS.md#anchor-links-to-headings) in `ARCHITECTURAL_DECISIONS.md`. - -To translate docs and blog content: -1. Make sure that target locale exists in the `i18n` directory. If it doesn't, see _Starting a New Language_ above. -1. Copy one or more markdown files that you want to translate from `/docs` or `/versioned_docs` to the appropriate version folder in `i18n//docusaurus-plugin-content-docs`. - For example, to translate `versioned_docs/version-3/example.md` into Korean: - ```sh - cp versioned_docs/version-3/topics/example.md i18n/ko/docusaurus-plugin-content-docs/version-3/topics/example.md - ``` -1. Copy one or more markdown files that you want to translate from `/blog` to `i18n//docusaurus-plugin-content-blog`. - For example, to translate `blog/2025-09-09-path-to-helm-v4.md` into Korean: - ```sh - cp blog/2025-09-09-path-to-helm-v4.md i18n/ko/docusaurus-plugin-content-blog/2025-09-09-path-to-helm-v4.md - ``` -1. If you haven't already, install dependencies: - - ``` - yarn install --frozen-lockfile - ``` - -1. Test your changes by starting the localized site in dev mode, specifying the locale: - - ``` - yarn start --locale ko - ``` - :::note - Each locale is a distinct standalone single-page application. You can only preview one locale at a time. It is not possible to preview all locales at the same time. - ::: - -## Navigating Between Languages - -Users navigate between languages in the locale dropdown in the site navbar. -The `i18n` key in the site global `docusaurus.config.js` file is where language navigation is configured. -To add a new language, add the locale using the [two-letter -language code](./localization/#two-letter-language-code) defined above. Example: - -```yaml -i18n: { - defaultLocale: 'en', - # add new language to this list of locales - locales: ['en', 'de', 'es', 'fr', 'gr', 'ja', 'ko', 'pt', 'ru', 'uk', 'zh'], - localeConfigs: { - en: { - htmlLang: 'en-us', - label: 'English', - }, - de: { - label: 'Deutsch', - }, - # new_lang { - # label: 'Navbar label', - # } - }, -}, -``` \ No newline at end of file diff --git a/docs/faq/installing.mdx b/docs/faq/installing.mdx index be6499e05a..ed86765981 100644 --- a/docs/faq/installing.mdx +++ b/docs/faq/installing.mdx @@ -3,7 +3,7 @@ title: Installing sidebar_position: 2 --- -import Helm4 from "../_v4-in-progress.mdx" +import Helm4 from "/docs/_v4-in-progress.mdx" diff --git a/docs/faq/uninstalling.mdx b/docs/faq/uninstalling.mdx index 4a17ccaf9b..db842fe2d6 100644 --- a/docs/faq/uninstalling.mdx +++ b/docs/faq/uninstalling.mdx @@ -3,7 +3,7 @@ title: Uninstalling sidebar_position: 3 --- -import Helm4 from "../_v4-in-progress.mdx" +import Helm4 from "/docs/_v4-in-progress.mdx" diff --git a/docs/glossary/index.mdx b/docs/glossary/index.mdx index 36c817352b..e1c70ab125 100644 --- a/docs/glossary/index.mdx +++ b/docs/glossary/index.mdx @@ -6,7 +6,7 @@ sidebar_position: 10 # Glossary -import Helm4 from "../_v4-in-progress.mdx" +import Helm4 from "/docs/_v4-in-progress.mdx" diff --git a/docs/intro/CheatSheet.mdx b/docs/intro/CheatSheet.mdx index 5d93794db9..082a433773 100644 --- a/docs/intro/CheatSheet.mdx +++ b/docs/intro/CheatSheet.mdx @@ -4,7 +4,7 @@ description: Helm cheatsheet sidebar_position: 4 --- -import Helm4 from "../_v4-in-progress.mdx" +import Helm4 from "/docs/_v4-in-progress.mdx" diff --git a/docs/intro/using_helm.mdx b/docs/intro/using_helm.mdx index b882d95562..fd4314b1f9 100755 --- a/docs/intro/using_helm.mdx +++ b/docs/intro/using_helm.mdx @@ -4,7 +4,7 @@ description: Explains the basics of Helm. sidebar_position: 3 --- -import Helm4 from "../_v4-in-progress.mdx" +import Helm4 from "/docs/_v4-in-progress.mdx" diff --git a/docs/plugins/overview.md b/docs/plugins/overview.md index 64c6a8e678..e3a4f6d7f5 100644 --- a/docs/plugins/overview.md +++ b/docs/plugins/overview.md @@ -28,7 +28,7 @@ The main reason is plugins that add `helm` CLI sub-commands can leverage Helm-sp Helm has build-in support for working with [Charts](/glossary/index.mdx#chart) and Plugins on your local filesystem or stored as artifacts in [OCI Registries](/topics/registries.mdx). Charts can additionally be stored in [HTTP repositories](/topics/chart_repository.md), and plugins can additionally be stored in VCS repositories like Git. -Helm Getter plugins allow you to extend this storage and download behavior to support other storage locations. There are community Getter plugins for storing Charts and Plugins in [s3 buckets](/community/related.md#helm-plugins), and elsewhere. You will want to use getter plugins if you need additional storage options for your Helm workflows. +Helm Getter plugins allow you to extend this storage and download behavior to support other storage locations. There are community Getter plugins for storing Charts and Plugins in [s3 buckets](/community/related#helm-plugins), and elsewhere. You will want to use getter plugins if you need additional storage options for your Helm workflows. ### PostRenderer plugins diff --git a/docs/topics/advanced.mdx b/docs/topics/advanced.mdx index 50c0775040..a324c0ba48 100644 --- a/docs/topics/advanced.mdx +++ b/docs/topics/advanced.mdx @@ -4,7 +4,7 @@ description: Explains various advanced features for Helm power users sidebar_position: 9 --- -import Helm4 from "../_v4-in-progress.mdx" +import Helm4 from "/docs/_v4-in-progress.mdx" diff --git a/docs/topics/charts.mdx b/docs/topics/charts.mdx index 74dfecab69..f9fdd55a89 100644 --- a/docs/topics/charts.mdx +++ b/docs/topics/charts.mdx @@ -4,7 +4,7 @@ description: Explains the chart format, and provides basic guidance for building sidebar_position: 1 --- -import Helm4 from "../_v4-in-progress.mdx" +import Helm4 from "/docs/_v4-in-progress.mdx" diff --git a/docs/topics/plugins.mdx b/docs/topics/plugins.mdx index fe82d287d2..7c3edc9aed 100644 --- a/docs/topics/plugins.mdx +++ b/docs/topics/plugins.mdx @@ -4,14 +4,14 @@ description: Introduces how to use and create plugins to extend Helm's functiona sidebar_position: 12 --- -import Helm4 from "../_v4-in-progress.mdx" +import Helm4 from "/docs/_v4-in-progress.mdx" A Helm plugin is a tool that can be accessed through the `helm` CLI, but which is not part of the built-in Helm codebase. -Existing plugins can be found on [related](/community/related.md#helm-plugins) section or by searching +Existing plugins can be found on [related](/community/related#helm-plugins) section or by searching [GitHub](https://github.com/search?q=topic%3Ahelm-plugin&type=Repositories). This guide explains how to use and create plugins. diff --git a/docs/topics/provenance.mdx b/docs/topics/provenance.mdx index c537504ed5..d1f5583833 100644 --- a/docs/topics/provenance.mdx +++ b/docs/topics/provenance.mdx @@ -4,7 +4,7 @@ description: Describes how to verify the integrity and origin of a Chart. sidebar_position: 5 --- -import Helm4 from "../_v4-in-progress.mdx" +import Helm4 from "/docs/_v4-in-progress.mdx" diff --git a/docs/topics/registries.mdx b/docs/topics/registries.mdx index ab1b231778..4b0484c21e 100644 --- a/docs/topics/registries.mdx +++ b/docs/topics/registries.mdx @@ -4,7 +4,7 @@ description: Describes how to use OCI for Chart distribution. sidebar_position: 7 --- -import Helm4 from "../_v4-in-progress.mdx" +import Helm4 from "/docs/_v4-in-progress.mdx" diff --git a/docusaurus.config.js b/docusaurus.config.js index c24972378b..957ff36535 100644 --- a/docusaurus.config.js +++ b/docusaurus.config.js @@ -139,6 +139,23 @@ const config = { ], ], + // Note @docusaurus/preset-classic already includes a docs plugin instance for us under "presets" + // See https://docusaurus.io/docs/docs-multi-instance#versioned-and-unversioned-doc + plugins: [ + [ + "@docusaurus/plugin-content-docs", + { + id: "community", + path: "community", + routeBasePath: "community", + sidebarPath: "./sidebars_community.js", + editLocalizedFiles: true, + editUrl: "https://github.com/helm/helm-www/blob/main/", + numberPrefixParser: false, + }, + ], + ], + themeConfig: /** @type {import('@docusaurus/preset-classic').ThemeConfig} */ ({ @@ -177,17 +194,13 @@ const config = { }, items: [ { to: "docs", label: "Docs", position: "left" }, + { to: "community", label: "Community", position: "left" }, + { to: "blog", label: "Blog", position: "left" }, { href: "https://artifacthub.io/", label: "Charts", position: "left", }, - { to: "blog", label: "Blog", position: "left" }, - { - href: "https://github.com/helm/community/", - label: "Community", - position: "left", - }, { type: "docsVersionDropdown", position: "right", diff --git a/i18n/de/docusaurus-plugin-content-docs/version-3/index.mdx b/i18n/de/docusaurus-plugin-content-docs/version-3/index.mdx index 6a824fa485..2ce4e67c3a 100644 --- a/i18n/de/docusaurus-plugin-content-docs/version-3/index.mdx +++ b/i18n/de/docusaurus-plugin-content-docs/version-3/index.mdx @@ -19,7 +19,7 @@ bestimmten Dingen zu suchen: - [Themenhandbücher](/topics/index.mdx) diskutieren Hauptthemen und Konzepte auf einem hohen Niveau und stellen nützliche Hintergrundinformationen und Erklärungen zur Verfügung. -- [Gemeinschaftshandbücher](/community/index.mdx) diskutieren Themen rund um die Helm Gemeinschaft. +- [Gemeinschaftshandbücher](/community) diskutieren Themen rund um die Helm Gemeinschaft. Starten Sie hier, wenn Sie mehr über den Entwicklungsprozess von Helm lernen möchten und wie Sie dazu beitragen können. - [Anleitungen](/howto/index.mdx) sind wie Rezepte. Sie werden durch die einzelnen Schritte diff --git a/i18n/es/docusaurus-plugin-content-docs/version-3/index.mdx b/i18n/es/docusaurus-plugin-content-docs/version-3/index.mdx index 4d27d3303f..7dfd858d44 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-3/index.mdx +++ b/i18n/es/docusaurus-plugin-content-docs/version-3/index.mdx @@ -21,7 +21,7 @@ organizado lo ayudará a saber dónde buscar ciertas cosas: - [Guías de temas](/topics/index.mdx) discute temas y conceptos clave a un nivel bastante alto y proporcionar información de antecedentes y explicaciones útiles. -- [Guías de la comunidad](/community/index.mdx) discute +- [Guías de la comunidad](/community) discute temas centrados en la comunidad de Helm. Comience aquí si desea obtener más información sobre el proceso de desarrollo de Helm y cómo puede contribuir. - [Guías prácticas](/howto/index.mdx) son recetas. Le diff --git a/i18n/fr/docusaurus-plugin-content-docs/version-3/community/index.mdx b/i18n/fr/docusaurus-plugin-content-docs/version-3/community/index.mdx deleted file mode 100644 index 9730755ba6..0000000000 --- a/i18n/fr/docusaurus-plugin-content-docs/version-3/community/index.mdx +++ /dev/null @@ -1,13 +0,0 @@ ---- -title: Communauté -sidebar_position: 7 ---- - -# Guide communautaire - -Apprenez ici l'ensemble des processus de développement du projet Helm et comment -vous pouvez y contribuer. - -import DocCardList from '@theme/DocCardList'; - - \ No newline at end of file diff --git a/i18n/fr/docusaurus-plugin-content-docs/version-3/index.mdx b/i18n/fr/docusaurus-plugin-content-docs/version-3/index.mdx index 8f49ea2f88..0c3f09b07f 100644 --- a/i18n/fr/docusaurus-plugin-content-docs/version-3/index.mdx +++ b/i18n/fr/docusaurus-plugin-content-docs/version-3/index.mdx @@ -14,7 +14,7 @@ pour vous aider à chercher: - [Les Tutoriels](/intro/index.mdx) vous guide à travers une série d'étapes pour créer votre premier tableau Helm. Commencez ici si vous êtes nouveau dans Helm. - [Les Guides thématiques](/topics/index.mdx) abordent des sujets et concepts clés à un niveau assez élevé et fournissent des informations de base et des explications utiles. -- [Le Guide de la communauté](/community/index.mdx) aborde des sujets centrés sur la communauté de Helm. Rendez-vous dessus si vous souhaitez en savoir plus sur le processus de développement de Helm en lui-même et comment vous pouvez y contribuer. +- [Le Guide de la communauté](/community) aborde des sujets centrés sur la communauté de Helm. Rendez-vous dessus si vous souhaitez en savoir plus sur le processus de développement de Helm en lui-même et comment vous pouvez y contribuer. - [Les Guides pratiques](/howto/index.mdx) sont des recettes. Ils vous guident à travers les étapes qui permettent de résoudre les problèmes clés et les cas d’utilisations. Ils sont plus avancés que les tutoriels et nécessitent une certaine connaissance du fonctionnement de Helm. import DocCardList from '@theme/DocCardList'; diff --git a/i18n/ja/docusaurus-plugin-content-docs/version-3/community/developers.md b/i18n/ja/docusaurus-plugin-content-docs-community/current/developers.md similarity index 98% rename from i18n/ja/docusaurus-plugin-content-docs/version-3/community/developers.md rename to i18n/ja/docusaurus-plugin-content-docs-community/current/developers.md index d76b1156db..59227640d0 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/version-3/community/developers.md +++ b/i18n/ja/docusaurus-plugin-content-docs-community/current/developers.md @@ -59,7 +59,7 @@ Helm 3では、Goバージョン1.13以降を使用することをお勧めし Helm 3以降、ドキュメントは独自のリポジトリに移動されました。 新しい機能を作成する場合は付属のドキュメントを作成して、[helm-www](https://github.com/helm/helm-www)にsubmitしてください。 -例外: [Helm CLI output (英語)](/helm/index.mdx) は `helm` のバイナリ自体から生成されます。 +例外: [Helm CLI output (英語)](/docs/helm) は `helm` のバイナリ自体から生成されます。 このoutputを生成する方法については[Updating the Helm CLI Reference Docs](https://github.com/helm/helm-www#updating-the-helm-cli-reference-docs) をご覧ください。 翻訳された場合、CLI出力は生成されず`/content//docs/helm`に生成されます。 diff --git a/i18n/ja/docusaurus-plugin-content-docs/version-3/community/history.md b/i18n/ja/docusaurus-plugin-content-docs-community/current/history.mdx similarity index 97% rename from i18n/ja/docusaurus-plugin-content-docs/version-3/community/history.md rename to i18n/ja/docusaurus-plugin-content-docs-community/current/history.mdx index df1ebd2862..fd425502a1 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/version-3/community/history.md +++ b/i18n/ja/docusaurus-plugin-content-docs-community/current/history.mdx @@ -4,6 +4,10 @@ description: プロジェクトの歴史の概要を提供します。 sidebar_position: 4 --- +import Helm4 from "/docs/_v4-in-progress.mdx" + + + Helm は [CNCF の Graduated プロジェクト](https://helm.sh/blog/celebrating-helms-cncf-graduation/)です。 Helm は、現在 [Helm Classic](https://github.com/helm/helm-classic) として知られているものとして始まりました。 diff --git a/i18n/ja/docusaurus-plugin-content-docs/version-3/community/localization.md b/i18n/ja/docusaurus-plugin-content-docs-community/current/localization.md similarity index 98% rename from i18n/ja/docusaurus-plugin-content-docs/version-3/community/localization.md rename to i18n/ja/docusaurus-plugin-content-docs-community/current/localization.md index 3892461807..eb7a1b6bdb 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/version-3/community/localization.md +++ b/i18n/ja/docusaurus-plugin-content-docs-community/current/localization.md @@ -10,7 +10,7 @@ sidebar_position: 5 翻訳への貢献にはドキュメントへの貢献と同様のプロセスを用います。翻訳は [helm-www](https://github.com/helm/helm-www) git リポジトリへの[プルリクエスト](https://help.github.com/ja/github/collaborating-with-issues-and-pull-requests/about-pull-requests)によって供給され、プルリクエストはウェブサイトの管理チームによってレビューされます。 -### 2文字言語コード +### 2文字言語コード {#two-letter-language-code} ドキュメントは [ISO 639-1 標準](https://www.loc.gov/standards/iso639-2/php/code_list.php) 言語コードによって管理されます。例えば、韓国語の2文字コードは `ko` です。 @@ -74,7 +74,7 @@ AM](https://user-images.githubusercontent.com/686194/81597103-035de600-937a-11ea サイトグローバルな [config.toml](https://github.com/helm/helm-www/blob/main/config.toml#L83L89) ファイルで言語ナビゲーションが設定されています。 -新たな言語を追加するには、上で定義した新たな[2文字言語コード](/community/localization.md#2文字言語コード)を追加する必要があります。例: +新たな言語を追加するには、上で定義した新たな[2文字言語コード](#two-letter-language-code)を追加する必要があります。例: ``` # Korean diff --git a/i18n/ja/docusaurus-plugin-content-docs/version-3/community/index.mdx b/i18n/ja/docusaurus-plugin-content-docs/version-3/community/index.mdx deleted file mode 100644 index 675bd1676f..0000000000 --- a/i18n/ja/docusaurus-plugin-content-docs/version-3/community/index.mdx +++ /dev/null @@ -1,14 +0,0 @@ ---- -title: コミュニティ -sidebar_position: 7 ---- - -# コミュニティガイド - -Helm プロジェクト自体の開発プロセスと、貢献方法については、 -こちらをご覧ください。 - - -import DocCardList from '@theme/DocCardList'; - - diff --git a/i18n/ja/docusaurus-plugin-content-docs/version-3/index.mdx b/i18n/ja/docusaurus-plugin-content-docs/version-3/index.mdx index 5956c4c9d7..e5a5e05e3e 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/version-3/index.mdx +++ b/i18n/ja/docusaurus-plugin-content-docs/version-3/index.mdx @@ -18,7 +18,7 @@ Helm には多くのドキュメントがあります。それがどのように Helm を初めて使用する場合は、ここから始めてください。 - [トピックガイド](/topics/index.mdx) では、主要なトピックと概念についてかなり高いレベルで説明し、 役立つ背景情報と説明を提供します。 -- [コミュニティガイド](/community/index.mdx) は、Helm のコミュニティを中心としたトピックについて話し合っています。 +- [コミュニティガイド](/community) は、Helm のコミュニティを中心としたトピックについて話し合っています。 Helm 自体の開発プロセスと貢献方法について詳しく知りたい場合は、 ここから始めてください。 - [How-to ガイド](/howto/index.mdx) はレシピです。 diff --git a/i18n/ko/docusaurus-plugin-content-blog/2020-08-13-helm-v2-deprecation-timeline.md b/i18n/ko/docusaurus-plugin-content-blog/2020-08-13-helm-v2-deprecation-timeline.md index e67034ee3f..96fae9c7b0 100644 --- a/i18n/ko/docusaurus-plugin-content-blog/2020-08-13-helm-v2-deprecation-timeline.md +++ b/i18n/ko/docusaurus-plugin-content-blog/2020-08-13-helm-v2-deprecation-timeline.md @@ -40,4 +40,4 @@ _2020년 11월 13일 이후로 다음과 같은 변경사항이 적용된다._ 커뮤니티는 헬름 v3가 훨씬 개선된 환경임을 확인했으며, [helm-2to3 플러그인](https://github.com/helm/helm-2to3)과 같은 커뮤니티 리소스를 사용하여 필수 마이그레이션을 지원할 수 있다. 더 이상 보안 패치가 제공되지 않는 소프트웨어를 운영하게 되는 위험을 피하는 가장 좋은 방법은, 11월 13일 이전에 헬름 v3로의 마이그레이션을 완료하는 것이다. -이 자리를 빌어, 헬름을 사용하거나 개선을 위해 문제를 제기하거나 요청을 제출한 커뮤니티의 모든 분들께 감사드린다. 여러 훌륭한 아이디어들이 헬름에는 맞지 않더라도 [관련 생태계의 프로젝트](https://helm.sh/docs/community/related/)에서 많은 성공을 거두었다. 문서에 대한 업데이트를 제출할 때마다 다른 사용자들이 헬름을 시작하고 더 효과적으로 사용하는 데 도움이 된다. 모두들 감사합니다! +이 자리를 빌어, 헬름을 사용하거나 개선을 위해 문제를 제기하거나 요청을 제출한 커뮤니티의 모든 분들께 감사드린다. 여러 훌륭한 아이디어들이 헬름에는 맞지 않더라도 [관련 생태계의 프로젝트](/community/related)에서 많은 성공을 거두었다. 문서에 대한 업데이트를 제출할 때마다 다른 사용자들이 헬름을 시작하고 더 효과적으로 사용하는 데 도움이 된다. 모두들 감사합니다! diff --git a/i18n/ko/docusaurus-plugin-content-docs/version-3/community/developers.md b/i18n/ko/docusaurus-plugin-content-docs-community/current/developers.md similarity index 100% rename from i18n/ko/docusaurus-plugin-content-docs/version-3/community/developers.md rename to i18n/ko/docusaurus-plugin-content-docs-community/current/developers.md diff --git a/i18n/ko/docusaurus-plugin-content-docs/version-3/community/history.md b/i18n/ko/docusaurus-plugin-content-docs-community/current/history.mdx similarity index 96% rename from i18n/ko/docusaurus-plugin-content-docs/version-3/community/history.md rename to i18n/ko/docusaurus-plugin-content-docs-community/current/history.mdx index 1581e916e2..efee0227c4 100644 --- a/i18n/ko/docusaurus-plugin-content-docs/version-3/community/history.md +++ b/i18n/ko/docusaurus-plugin-content-docs-community/current/history.mdx @@ -4,6 +4,10 @@ description: 프로젝트의 연혁에 대한 개요를 설명한다. sidebar_position: 4 --- +import Helm4 from "/docs/_v4-in-progress.mdx" + + + 헬름 3는 [인큐베이션(incubation) 최종단계](https://github.com/cncf/toc/blob/main/process/graduation_criteria.adoc)에 있는 [CNCF 프로젝트](https://www.cncf.io/projects/)이다. 헬름은, 2015년에 시작되어 KubeCon에서 소개된 바 있는 [헬름 클래식](https://github.com/helm/helm-classic)이라 하는 멋진 프로젝트에서 시작되었다. diff --git a/i18n/ko/docusaurus-plugin-content-docs/version-3/community/localization.md b/i18n/ko/docusaurus-plugin-content-docs-community/current/localization.md similarity index 97% rename from i18n/ko/docusaurus-plugin-content-docs/version-3/community/localization.md rename to i18n/ko/docusaurus-plugin-content-docs-community/current/localization.md index d016a4f83f..ee6cdcf84d 100644 --- a/i18n/ko/docusaurus-plugin-content-docs/version-3/community/localization.md +++ b/i18n/ko/docusaurus-plugin-content-docs-community/current/localization.md @@ -14,7 +14,7 @@ sidebar_position: 5 를 통해 [helm-www](https://github.com/helm/helm-www) 깃 저장소에 제공되며 풀 리퀘스트는 웹사이트를 관리하는 팀이 검토한다. -### 두 글자 언어 코드 +### 두 글자 언어 코드 {#two-letter-language-code} 문서는 언어 코드를 [ISO 639-1 표준](https://www.loc.gov/standards/iso639-2/php/code_list.php)으로 구성한다. @@ -120,7 +120,7 @@ AM](https://user-images.githubusercontent.com/686194/81597103-035de600-937a-11ea 파일에서 언어 변경을 구성한다. 새로운 언어를 추가하려면 위에서 정의한 [두 글자 -언어 코드](/community/localization.md#두-글자-언어-코드)를 사용하여 새로운 매개 변수 집합을 +언어 코드](#two-letter-language-code)를 사용하여 새로운 매개 변수 집합을 추가하자. 예: ``` diff --git a/i18n/ko/docusaurus-plugin-content-docs/version-3/community/related.md b/i18n/ko/docusaurus-plugin-content-docs-community/current/related.md similarity index 100% rename from i18n/ko/docusaurus-plugin-content-docs/version-3/community/related.md rename to i18n/ko/docusaurus-plugin-content-docs-community/current/related.md diff --git a/i18n/ko/docusaurus-plugin-content-docs/version-3/community/release_checklist.md b/i18n/ko/docusaurus-plugin-content-docs-community/current/release_checklist.md similarity index 99% rename from i18n/ko/docusaurus-plugin-content-docs/version-3/community/release_checklist.md rename to i18n/ko/docusaurus-plugin-content-docs-community/current/release_checklist.md index d1e1524c5c..9de8492819 100644 --- a/i18n/ko/docusaurus-plugin-content-docs/version-3/community/release_checklist.md +++ b/i18n/ko/docusaurus-plugin-content-docs-community/current/release_checklist.md @@ -8,7 +8,7 @@ sidebar_position: 2 새로운 헬름을 출시할 시간이다! 릴리스를 끊는 헬름 유지관리자로서, 자신의 경험이 여기에 문서화된 내용과 다른 점이 있다면 -[이 릴리스 체크리스트를 업데이트](https://github.com/helm/helm-www/blob/main/content/ko/docs/community/release_checklist.md)하기에 +이 릴리스 체크리스트를 업데이트하기에 딱 맞는 사람이다. 모든 릴리스는 vX.Y.Z 형식이다. @@ -456,7 +456,7 @@ make sign ## 10. 문서 업데이트 -[헬름 웹 사이트 문서 섹션](https://helm.sh/docs)에는 +[헬름 웹 사이트 문서 섹션](/docs)에는 문서의 헬름 버전이 나열된다. 사이트에서 주, 부, 패치 버전을 업데이트해야 한다. 다음 부 릴리스 날짜도 사이트에 게시되며 업데이트해야 한다. diff --git a/i18n/ko/docusaurus-plugin-content-docs/version-3/community/index.mdx b/i18n/ko/docusaurus-plugin-content-docs/version-3/community/index.mdx deleted file mode 100644 index e47789291a..0000000000 --- a/i18n/ko/docusaurus-plugin-content-docs/version-3/community/index.mdx +++ /dev/null @@ -1,12 +0,0 @@ ---- -title: 커뮤니티 -sidebar_position: 7 ---- - -# 커뮤니티 가이드 - -여기서 헬름 프로젝트 자체에 관한 개발 과정과 기여하는 방법을 알아보세요. - -import DocCardList from '@theme/DocCardList'; - - \ No newline at end of file diff --git a/i18n/ko/docusaurus-plugin-content-docs/version-3/index.mdx b/i18n/ko/docusaurus-plugin-content-docs/version-3/index.mdx index 1eac524e5e..b4ec48c017 100644 --- a/i18n/ko/docusaurus-plugin-content-docs/version-3/index.mdx +++ b/i18n/ko/docusaurus-plugin-content-docs/version-3/index.mdx @@ -19,7 +19,7 @@ description: "문서 구성에 관해 알아야 할 모든 것" 헬름이 처음이라면 여기서 시작하자. - [주제 가이드](/topics/index.mdx)는 대략의 핵심 주제와 개념을 다루며 유용한 배경 정보와 설명을 제공한다. -- [커뮤니티 가이드](/community/index.mdx)는 헬름 커뮤니터와 관련된 주제를 다룬다. +- [커뮤니티 가이드](/community)는 헬름 커뮤니터와 관련된 주제를 다룬다. 헬름 자체의 개발 과정이나 기여하는 방법을 알아보려면 여기서 시작하자. - [방법 가이드](/howto/index.mdx)는 일종의 요리법(recipes)이다. 주요 문제 및 사용 사례들을 다루는 절차를 안내한다. diff --git a/i18n/ko/docusaurus-plugin-content-docs/version-3/topics/plugins.md b/i18n/ko/docusaurus-plugin-content-docs/version-3/topics/plugins.md index 185c76b715..ef57b6df14 100644 --- a/i18n/ko/docusaurus-plugin-content-docs/version-3/topics/plugins.md +++ b/i18n/ko/docusaurus-plugin-content-docs/version-3/topics/plugins.md @@ -8,7 +8,7 @@ sidebar_position: 12 기본 제공 헬름 코드 베이스에 포함되지는 않는다. 기존 플러그인은 -[관련](/community/related.md#helm-plugins) 섹션 또는 +[관련](/community/related#helm-plugins) 섹션 또는 [GitHub](https://github.com/search?q=topic%3Ahelm-plugin&type=Repositories)을 검색하여 찾을 수 있다. 이 가이드에서는 플러그인을 사용하고 만드는 방법을 설명한다. diff --git a/i18n/pt/docusaurus-plugin-content-docs/version-3/community/index.mdx b/i18n/pt/docusaurus-plugin-content-docs/version-3/community/index.mdx deleted file mode 100644 index c7ed766649..0000000000 --- a/i18n/pt/docusaurus-plugin-content-docs/version-3/community/index.mdx +++ /dev/null @@ -1,13 +0,0 @@ ---- -title: Comunidade -sidebar_position: 7 ---- - -# Guias da Comunidade - -Aprenda aqui sobre o processo de desenvolvimento do projeto Helm em si -e como você pode contribuir. - -import DocCardList from '@theme/DocCardList'; - - \ No newline at end of file diff --git a/i18n/pt/docusaurus-plugin-content-docs/version-3/index.mdx b/i18n/pt/docusaurus-plugin-content-docs/version-3/index.mdx index 427ad7a163..7d39bcb74e 100644 --- a/i18n/pt/docusaurus-plugin-content-docs/version-3/index.mdx +++ b/i18n/pt/docusaurus-plugin-content-docs/version-3/index.mdx @@ -19,7 +19,7 @@ lhe ajudará por onde procurar certas informações: seu primeiro Chart no Helm. Comece por aqui se você é novo no Helm. - [Guias Temáticos](/topics/index.mdx) abordam os principais tópicos e conceitos em alto nível, além de prover contexto e explicações utéis sobre o Helm. -- [Guias da Comunidade](/community/index.mdx) abordam tópicos centrados ao redor +- [Guias da Comunidade](/community) abordam tópicos centrados ao redor da comunidade do Helm. Comece por aqui se você quiser se informar sobre o processo de desenvolvimento do Helm em si e como contribuir com o projeto. - [Guias de Instruções](/howto/index.mdx) são receitas prontas. Eles lhe guiam através dos passos diff --git a/i18n/ru/docusaurus-plugin-content-docs/version-3/index.mdx b/i18n/ru/docusaurus-plugin-content-docs/version-3/index.mdx index ff5457fd29..af3a4c4642 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/version-3/index.mdx +++ b/i18n/ru/docusaurus-plugin-content-docs/version-3/index.mdx @@ -17,7 +17,7 @@ report](https://www.cncf.io/cncf-helm-project-journey/). первый Helm chart Начните с этого, если вы новичок в Helm. - [Тематические руководства](https://helm.sh/docs/topics) обсуждают ключевые темы и концепции на достаточно высоком уровне, предоставляют полезную справочную информацию и разъяснения. -- [Путеводители сообщества](https://helm.sh/docs/community) обсуждают темы, сосредоточенные вокруг Helm сообщества. +- [Путеводители сообщества](/community) обсуждают темы, сосредоточенные вокруг Helm сообщества. Начните отсюда, если вы хотите узнать больше о процессе разработки самого Helm и о том, как вы можете внести свой вклад. - [Инструкции по применению](https://helm.sh/docs/howto) это готовые советы по использованию. Они проведут вас через шаги, связанные с решением ключевых проблем и вариантов их разрешения. diff --git a/i18n/uk/docusaurus-plugin-content-docs/version-3/community/developers.md b/i18n/uk/docusaurus-plugin-content-docs-community/current/developers.md similarity index 94% rename from i18n/uk/docusaurus-plugin-content-docs/version-3/community/developers.md rename to i18n/uk/docusaurus-plugin-content-docs-community/current/developers.md index 48dbf39212..7f2b179684 100644 --- a/i18n/uk/docusaurus-plugin-content-docs/version-3/community/developers.md +++ b/i18n/uk/docusaurus-plugin-content-docs-community/current/developers.md @@ -62,7 +62,7 @@ export PATH=":$PATH" З Helm 3 документація була перенесена в окремий репозиторій. При написанні нових функцій, будь ласка, напишіть супутню документацію та надішліть її до репозиторію [helm-www](https://github.com/helm/helm-www). -Єдине виключення: [вивід CLI Helm (англійською)](/helm/index.mdx) генеруються безпосередньо з бінарного файлу `helm`. Дивіться [Оновлення довідкових документів CLI Helm](https://github.com/helm/helm-www#updating-the-helm-cli-reference-docs) для інструкцій, як згенерувати цей вивід. Після перекладу, вивід CLI не генерується і може бути знайдений у `/content//docs/helm`. +Єдине виключення: [вивід CLI Helm (англійською)](/docs/helm) генеруються безпосередньо з бінарного файлу `helm`. Дивіться [Оновлення довідкових документів CLI Helm](https://github.com/helm/helm-www#updating-the-helm-cli-reference-docs) для інструкцій, як згенерувати цей вивід. Після перекладу, вивід CLI не генерується і може бути знайдений у `/content//docs/helm`. ### Домовленості Git {#git-conventions} diff --git a/i18n/uk/docusaurus-plugin-content-docs/version-3/community/history.md b/i18n/uk/docusaurus-plugin-content-docs-community/current/history.mdx similarity index 97% rename from i18n/uk/docusaurus-plugin-content-docs/version-3/community/history.md rename to i18n/uk/docusaurus-plugin-content-docs-community/current/history.mdx index 5c25be6860..dca1d5a1d4 100644 --- a/i18n/uk/docusaurus-plugin-content-docs/version-3/community/history.md +++ b/i18n/uk/docusaurus-plugin-content-docs-community/current/history.mdx @@ -4,6 +4,10 @@ description: Надає загальний огляд історії проєк sidebar_position: 4 --- +import Helm4 from "/docs/_v4-in-progress.mdx" + + + Helm є [дипломованим](/blog/celebrating-helms-cncf-graduation/) [проєктом CNCF](https://www.cncf.io/projects/). Helm почався як те, що тепер відоме як [Helm Classic](https://github.com/helm/helm-classic), проєкт Deis, розпочатий у 2015 році та представлений на перших KubeCon. diff --git a/i18n/uk/docusaurus-plugin-content-docs/version-3/community/localization.md b/i18n/uk/docusaurus-plugin-content-docs-community/current/localization.md similarity index 100% rename from i18n/uk/docusaurus-plugin-content-docs/version-3/community/localization.md rename to i18n/uk/docusaurus-plugin-content-docs-community/current/localization.md diff --git a/i18n/uk/docusaurus-plugin-content-docs/version-3/community/related.md b/i18n/uk/docusaurus-plugin-content-docs-community/current/related.md similarity index 100% rename from i18n/uk/docusaurus-plugin-content-docs/version-3/community/related.md rename to i18n/uk/docusaurus-plugin-content-docs-community/current/related.md diff --git a/i18n/uk/docusaurus-plugin-content-docs/version-3/community/release_checklist.md b/i18n/uk/docusaurus-plugin-content-docs-community/current/release_checklist.md similarity index 98% rename from i18n/uk/docusaurus-plugin-content-docs/version-3/community/release_checklist.md rename to i18n/uk/docusaurus-plugin-content-docs-community/current/release_checklist.md index d69fd763f1..bc7895d237 100644 --- a/i18n/uk/docusaurus-plugin-content-docs/version-3/community/release_checklist.md +++ b/i18n/uk/docusaurus-plugin-content-docs-community/current/release_checklist.md @@ -6,7 +6,7 @@ sidebar_position: 2 # Посібник для супровідників щодо випуску Helm -Час для нового випуску Helm! Як супровідник Helm, який випускає нову версію, ви є найкращою людиною, щоб [оновити цей чеклист випуску](https://github.com/helm/helm-www/blob/main/content/en/docs/community/release_checklist.md) у разі, якщо ваш досвід відрізняється від задокументованого тут. +Час для нового випуску Helm! Як супровідник Helm, який випускає нову версію, ви є найкращою людиною, щоб оновити цей чеклист випуску у разі, якщо ваш досвід відрізняється від задокументованого тут. Усі випуски будуть мати формат vX.Y.Z, де X — це основний номер версії, Y — це номер мінорної версії, а Z — це номер патч-релізу. Цей проєкт суворо дотримується [семантичного версіювання](https://semver.org/), тому дотримання цього етапу є критично важливим. @@ -357,7 +357,7 @@ make sign ## 10. Оновлення документації {#10-update-docs} -Розділ документації на сайті [Helm](/index.mdx) містить версії Helm. Необхідно оновити на сайті версії для major, minor і patch. Також потрібно оновити дату наступного minor релізу. +Розділ документації на сайті [Helm](/docs) містить версії Helm. Необхідно оновити на сайті версії для major, minor і patch. Також потрібно оновити дату наступного minor релізу. Щоб це зробити, створіть pull request в репозиторії [helm-www](https://github.com/helm/helm-www). У файлі `config.toml` знайдіть відповідний розділ `params.versions` та оновіть версію Helm, як у цьому прикладі [оновлення поточної версії](https://github.com/helm/helm-www/pull/676/files). У тому ж файлі `config.toml` оновіть розділ `params.nextversion`. diff --git a/i18n/uk/docusaurus-plugin-content-docs/version-3/community/index.mdx b/i18n/uk/docusaurus-plugin-content-docs/version-3/community/index.mdx deleted file mode 100644 index a28a6050ba..0000000000 --- a/i18n/uk/docusaurus-plugin-content-docs/version-3/community/index.mdx +++ /dev/null @@ -1,12 +0,0 @@ ---- -title: Спільнота -sidebar_position: 8 ---- - -# Настанови спільноти {#community-guides} - -Дізнайтесь про процес розробки проєкту Helm та як ви можете зробити свій внесок. - -import DocCardList from '@theme/DocCardList'; - - \ No newline at end of file diff --git a/i18n/uk/docusaurus-plugin-content-docs/version-3/index.mdx b/i18n/uk/docusaurus-plugin-content-docs/version-3/index.mdx index 300369e46d..6a53be5af7 100644 --- a/i18n/uk/docusaurus-plugin-content-docs/version-3/index.mdx +++ b/i18n/uk/docusaurus-plugin-content-docs/version-3/index.mdx @@ -13,7 +13,7 @@ Helm має багато документації. Загальний огляд - [Підручники](/chart_template_guide/getting_started.md) проведуть вас через низку кроків для створення вашого першого чарту Helm. Почніть тут, якщо ви новачок у Helm. - [Тематичні посібники](/topics/index.mdx) обговорюють ключові теми та концепції на досить високому рівні та надають корисну довідкову інформацію та пояснення. -- [Настанови для спільноти](/community/index.mdx) обговорюють теми, повʼязані зі спільнотою Helm. Почніть тут, якщо ви хочете дізнатися більше про процес розробки Helm і про те, як ви можете до нього долучитися. +- [Настанови для спільноти](/community) обговорюють теми, повʼязані зі спільнотою Helm. Почніть тут, якщо ви хочете дізнатися більше про процес розробки Helm і про те, як ви можете до нього долучитися. - [Посібники](/howto/index.mdx) — це рецепти. Вони проведуть вас через кроки, повʼязані з розвʼязанням ключових проблем та варіантів використання. Вони більш докладні, ніж підручників і передбачають певні знання про те, як працює Helm. import DocCardList from '@theme/DocCardList'; diff --git a/i18n/uk/docusaurus-plugin-content-docs/version-3/topics/plugins.md b/i18n/uk/docusaurus-plugin-content-docs/version-3/topics/plugins.md index 2c896f59f1..635f2ca1dc 100644 --- a/i18n/uk/docusaurus-plugin-content-docs/version-3/topics/plugins.md +++ b/i18n/uk/docusaurus-plugin-content-docs/version-3/topics/plugins.md @@ -6,7 +6,7 @@ sidebar_position: 12 Втулок Helm — це інструмент, до якого можна отримати доступ через CLI `helm`, але який не є частиною основного коду Helm. -Наявні втулки можна знайти у [відповідному](/community/related.md#helm-plugins) розділі або шукаючи на [GitHub](https://github.com/search?q=topic%3Ahelm-plugin&type=Repositories). +Наявні втулки можна знайти у [відповідному](/community/related#helm-plugins) розділі або шукаючи на [GitHub](https://github.com/search?q=topic%3Ahelm-plugin&type=Repositories). Цей посібник пояснює, як використовувати та створювати втулки. diff --git a/i18n/zh/docusaurus-plugin-content-docs/version-3/community/developers.md b/i18n/zh/docusaurus-plugin-content-docs-community/current/developers.md similarity index 97% rename from i18n/zh/docusaurus-plugin-content-docs/version-3/community/developers.md rename to i18n/zh/docusaurus-plugin-content-docs-community/current/developers.md index 9f82f43ad9..57447b15ea 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/version-3/community/developers.md +++ b/i18n/zh/docusaurus-plugin-content-docs-community/current/developers.md @@ -57,7 +57,7 @@ Go依赖管理在不断变化,而且在Helm生命周期中很可能发生变 从Helm 3开始,文档已经移动到了它自己的仓库中。当编制新特性时,请编写随附文档并提交到 [helm-www](https://github.com/helm/helm-www) 仓库。 -有个例外:[Helm CLI 输出 (英文)](/helm/index.mdx) 是 `helm` 程序自己生成的。 +有个例外:[Helm CLI 输出 (英文)](/docs/helm) 是 `helm` 程序自己生成的。 查看 [更新Helm CLI参考文档](https://github.com/helm/helm-www#updating-the-helm-cli-reference-docs) 来了解如何生成该输出。翻译后,不会生成CLI输出,但可以在 `/content//docs/helm` 中找到。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/version-3/community/history.md b/i18n/zh/docusaurus-plugin-content-docs-community/current/history.mdx similarity index 96% rename from i18n/zh/docusaurus-plugin-content-docs/version-3/community/history.md rename to i18n/zh/docusaurus-plugin-content-docs-community/current/history.mdx index 073397cbed..b141fee62a 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/version-3/community/history.md +++ b/i18n/zh/docusaurus-plugin-content-docs-community/current/history.mdx @@ -4,6 +4,10 @@ description: 提供项目历史的高级概述。 sidebar_position: 4 --- +import Helm4 from "/docs/_v4-in-progress.mdx" + + + Helm 是[CNCF](https://www.cncf.io/projects/)的[毕业项目](https://helm.sh/blog/celebrating-helms-cncf-graduation/)。 Helm 开始时被称为[Helm Classic](https://github.com/helm/helm-classic),始于2015年的Deis项目并在KubeCon会议中被提出。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/version-3/community/localization.md b/i18n/zh/docusaurus-plugin-content-docs-community/current/localization.md similarity index 100% rename from i18n/zh/docusaurus-plugin-content-docs/version-3/community/localization.md rename to i18n/zh/docusaurus-plugin-content-docs-community/current/localization.md diff --git a/i18n/zh/docusaurus-plugin-content-docs/version-3/community/related.md b/i18n/zh/docusaurus-plugin-content-docs-community/current/related.md similarity index 100% rename from i18n/zh/docusaurus-plugin-content-docs/version-3/community/related.md rename to i18n/zh/docusaurus-plugin-content-docs-community/current/related.md diff --git a/i18n/zh/docusaurus-plugin-content-docs/version-3/community/release_checklist.md b/i18n/zh/docusaurus-plugin-content-docs-community/current/release_checklist.md similarity index 98% rename from i18n/zh/docusaurus-plugin-content-docs/version-3/community/release_checklist.md rename to i18n/zh/docusaurus-plugin-content-docs-community/current/release_checklist.md index f62b015ede..f9d1a309df 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/version-3/community/release_checklist.md +++ b/i18n/zh/docusaurus-plugin-content-docs-community/current/release_checklist.md @@ -7,7 +7,7 @@ sidebar_position: 2 # 维护人员发布Helm指南 是时候发布新的Helm了!作为Helm维护者发布版本,如果你的经验与这里的文档不同,那你就是 -[更新版本checklist](https://github.com/helm/helm-www/blob/main/content/en/docs/community/release_checklist.md) +更新版本checklist 的最佳人选。 所有版本都将采用vX.Y.Z的形式,X是主版本号,Y是次版本号,Z是补丁发布号。该项目严格遵守 [语义化版本](https://semver.org/), @@ -377,7 +377,7 @@ make sign ## 10. Update Docs -[Helm站点文档部分](https://helm.sh/docs)列出了Helm版本的文档。主、次及补丁版本需要更行到这个站点。 +[Helm站点文档部分](/docs)列出了Helm版本的文档。主、次及补丁版本需要更行到这个站点。 下一个次要版本的发布日期也要发布出来且必须更新。这要创建一个pull request 到 [helm-www仓库](https://github.com/helm/helm-www)。在 `config.toml` 文件中找到合适的 `params.versions`部分并更新Helm版本,例如 [更新当前版本](https://github.com/helm/helm-www/pull/676/files)。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/version-3/community/index.mdx b/i18n/zh/docusaurus-plugin-content-docs/version-3/community/index.mdx deleted file mode 100644 index 658412a49d..0000000000 --- a/i18n/zh/docusaurus-plugin-content-docs/version-3/community/index.mdx +++ /dev/null @@ -1,12 +0,0 @@ ---- -title: 社区 -sidebar_position: 7 ---- - -# 社区指引 - -这里您可以了解到 Helm 项目的开发进程以及如何参与。 - -import DocCardList from '@theme/DocCardList'; - - \ No newline at end of file diff --git a/i18n/zh/docusaurus-plugin-content-docs/version-3/index.mdx b/i18n/zh/docusaurus-plugin-content-docs/version-3/index.mdx index 624b5f5c5d..53949fdec5 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/version-3/index.mdx +++ b/i18n/zh/docusaurus-plugin-content-docs/version-3/index.mdx @@ -13,7 +13,7 @@ Helm 有大量的文档。高级组织概述会让您知道在哪里查找特定 - [教程](/intro/index.mdx) 如果您是新手,从这里开始,手把手带您通过一系列的步骤创建您的第一个 Helm chart。 - [主题引导](/topics/index.mdx) 以相当高的水平讨论关键主题和概念并提供有用的背景信息和解释。 -- [社区引导](/community/index.mdx) 讨论围绕社区的相关话题。如果您想了解更多关于 Helm 本身的开发过程以及如何参与开发,从这里开始。 +- [社区引导](/community) 讨论围绕社区的相关话题。如果您想了解更多关于 Helm 本身的开发过程以及如何参与开发,从这里开始。 - [如何做](/howto/index.mdx) 操作方法。 指引您按照步骤参与定位关键问题和使用案例。假定您对 Helm 工作原理有所了解的情况下,这些内容会比教程更加高级。 diff --git a/netlify.toml b/netlify.toml index 65368a3243..f537d6538f 100755 --- a/netlify.toml +++ b/netlify.toml @@ -95,7 +95,7 @@ package = "./netlify-plugins/cache-docusaurus-dirs-file" # v2.helm.sh categories with new corresponding v3 paths [[redirects]] from = "/docs/related/" - to = "/docs/community/related/" + to = "/community/related/" status = 302 [[redirects]] @@ -105,12 +105,12 @@ package = "./netlify-plugins/cache-docusaurus-dirs-file" [[redirects]] from = "/docs/developers/" - to = "/docs/community/developers/" + to = "/community/developers/" status = 302 [[redirects]] from = "/docs/history/" - to = "/docs/community/history/" + to = "/community/history/" status = 302 # START - Hugo frontmatter aliases redirects, removed during Docusaurus migration @@ -161,7 +161,7 @@ package = "./netlify-plugins/cache-docusaurus-dirs-file" [[redirects]] from = "/docs/localization/" - to = "/docs/community/localization/" + to = "/community/localization/" status = 302 [[redirects]] @@ -266,17 +266,17 @@ package = "./netlify-plugins/cache-docusaurus-dirs-file" # Additional redirects for Hugo frontmatter aliases removed during v3 migration [[redirects]] from = "/docs/developers/" - to = "/docs/community/developers/" + to = "/community/developers/" status = 302 [[redirects]] from = "/docs/history/" - to = "/docs/community/history/" + to = "/community/history/" status = 302 [[redirects]] from = "/docs/related/" - to = "/docs/community/related/" + to = "/community/related/" status = 302 [[redirects]] @@ -305,3 +305,8 @@ package = "./netlify-plugins/cache-docusaurus-dirs-file" status = 302 # END - Hugo frontmatter aliases redirects + +[[redirects]] + from = "/docs/community/*" + to = "/community/:splat" + status = 302 diff --git a/scripts/v3/add-netlify-redirects.js b/scripts/v3/add-netlify-redirects.js index 99d35fe3e5..fc2c2ea04a 100644 --- a/scripts/v3/add-netlify-redirects.js +++ b/scripts/v3/add-netlify-redirects.js @@ -31,20 +31,20 @@ function addNetlifyRedirects() { // Define the redirects we need to add const redirectsToAdd = [ { - from: '/docs/developers/', - to: '/docs/community/developers/', + from: "/docs/developers/", + to: "/community/developers/", status: 302, comment: 'Additional redirects for Hugo frontmatter aliases removed during v3 migration' }, { - from: '/docs/history/', - to: '/docs/community/history/', - status: 302 + from: "/docs/history/", + to: "/community/history/", + status: 302, }, { - from: '/docs/related/', - to: '/docs/community/related/', - status: 302 + from: "/docs/related/", + to: "/community/related/", + status: 302, }, { from: '/docs/faq/', diff --git a/sidebars_community.js b/sidebars_community.js new file mode 100644 index 0000000000..b64d634ef7 --- /dev/null +++ b/sidebars_community.js @@ -0,0 +1,8 @@ +module.exports = { + communitySidebar: [ + { + type: 'autogenerated', + dirName: '.', + }, + ], +}; diff --git a/src/components/HomeAbout/index.js b/src/components/HomeAbout/index.js index 603c54fac6..0ad0941732 100644 --- a/src/components/HomeAbout/index.js +++ b/src/components/HomeAbout/index.js @@ -35,10 +35,13 @@ function About() { CNCF ), helmCommunityLink: ( - - Helm community - + + + Helm community + ), }}> diff --git a/src/theme/DocBreadcrumbs/index.js b/src/theme/DocBreadcrumbs/index.js index 89759791d2..a137964f2e 100644 --- a/src/theme/DocBreadcrumbs/index.js +++ b/src/theme/DocBreadcrumbs/index.js @@ -44,6 +44,11 @@ export default function DocBreadcrumbs() { const versionMainDoc = currentVersion?.docs.find((doc) => doc.id === currentVersion.mainDocId); const docsPath = versionMainDoc?.path || '/docs'; + // Determine if we're in the community section and set the label/path accordingly + const isCommunitySection = docsVersion.pluginId === 'community'; + const sectionLabel = isCommunitySection ? 'Community' : 'Docs'; + const sectionPath = isCommunitySection ? '/community' : docsPath; + if (!breadcrumbs) { return null; } @@ -64,8 +69,8 @@ export default function DocBreadcrumbs() { {homePageRoute && } {homePageRoute && ( - - Docs + + {sectionLabel} )} diff --git a/versioned_docs/version-3/community/developers.md b/versioned_docs/version-3/community/developers.md deleted file mode 100644 index 9b5651bb1b..0000000000 --- a/versioned_docs/version-3/community/developers.md +++ /dev/null @@ -1,155 +0,0 @@ ---- -title: Developer Guide -description: Instructions for setting up your environment for developing Helm. -sidebar_position: 1 ---- - -This guide explains how to set up your environment for developing on Helm. - -## Prerequisites - -- The latest version of Go -- A Kubernetes cluster w/ kubectl (optional) -- Git - -## Building Helm - -We use Make to build our programs. The simplest way to get started is: - -```console -$ make -``` - -If required, this will first install dependencies and validate configuration. It will then compile `helm` and place it in -`bin/helm`. - -To run Helm locally, you can run `bin/helm`. - -- Helm is known to run on macOS and most Linux distributions, including Alpine. - -## Running tests - -To run all the tests, run `make test`. -As a pre-requisite, you would need to have -[golangci-lint](https://golangci-lint.run) -installed. - -## Running Locally - -You can update your path and add the path of your local helm binary. In an editor -open your shell config file. Add the following line making sure you replace -`` with your local bin directory. - -``` bash -export PATH=":$PATH" -``` - -This will allow you to run the locally built version of helm from your terminal. - -## Contribution Guidelines - -We welcome contributions. This project has set up some guidelines in order to -ensure that (a) code quality remains high, (b) the project remains consistent, -and (c) contributions follow the open source legal requirements. Our intent is -not to burden contributors, but to build elegant and high-quality open source -code so that our users will benefit. - -Make sure you have read and understood the main CONTRIBUTING guide: - - - -### Structure of the Code - -The code for the Helm project is organized as follows: - -- The individual programs are located in `cmd/`. Code inside of `cmd/` is not - designed for library re-use. -- Shared libraries are stored in `pkg/`. -- The `scripts/` directory contains a number of utility scripts. Most of these - are used by the CI/CD pipeline. - -Go dependency management is in flux, and it is likely to change during the -course of Helm's lifecycle. We encourage developers to _not_ try to manually -manage dependencies. Instead, we suggest relying upon the project's `Makefile` -to do that for you. With Helm 3, it is recommended that you are on Go version -1.13 or later. - -### Writing Documentation - -Since Helm 3, documentation has been moved to its own repository. When writing -new features, please write accompanying documentation and submit it to the -[helm-www](https://github.com/helm/helm-www) repository. - -One exception: [Helm CLI output (in English)](/helm/index.mdx) is -generated from the `helm` binary itself. See [Updating the Helm CLI Reference Docs](https://github.com/helm/helm-www#updating-the-helm-cli-reference-docs) -for instructions on how to generate this output. When translated, the CLI -output is not generated and can be found in `/content//docs/helm`. - -### Git Conventions - -We use Git for our version control system. The `main` branch is the home of -the current development candidate. Releases are tagged. - -We accept changes to the code via GitHub Pull Requests (PRs). One workflow for -doing this is as follows: - -1. Fork the `github.com/helm/helm` repository into your GitHub account -2. `git clone` the forked repository into your desired directory -3. Create a new working branch (`git checkout -b feat/my-feature`) and do your - work on that branch. -4. When you are ready for us to review, push your branch to GitHub, and then - open a new pull request with us. - -For Git commit messages, we follow the [Semantic Commit -Messages](https://karma-runner.github.io/0.13/dev/git-commit-msg.html): - -``` -fix(helm): add --foo flag to 'helm install' - -When 'helm install --foo bar' is run, this will print "foo" in the -output regardless of the outcome of the installation. - -Closes #1234 -``` - -Common commit types: - -- fix: Fix a bug or error -- feat: Add a new feature -- docs: Change documentation -- test: Improve testing -- ref: refactor existing code - -Common scopes: - -- helm: The Helm CLI -- pkg/lint: The lint package. Follow a similar convention for any package -- `*`: two or more scopes - -Read more: - -- The [Deis - Guidelines](https://github.com/deis/workflow/blob/master/src/contributing/submitting-a-pull-request.md) - were the inspiration for this section. -- Karma Runner - [defines](https://karma-runner.github.io/0.13/dev/git-commit-msg.html) the - semantic commit message idea. - -### Go Conventions - -We follow the Go coding style standards very closely. Typically, running `go -fmt` will make your code beautiful for you. - -We also typically follow the conventions recommended by `go lint` and -`gometalinter`. Run `make test-style` to test the style conformance. - -Read more: - -- Effective Go [introduces - formatting](https://golang.org/doc/effective_go.html#formatting). -- The Go Wiki has a great article on - [formatting](https://github.com/golang/go/wiki/CodeReviewComments). - -If you run the `make test` target, not only will unit tests be run, but so will -style tests. If the `make test` target fails, even for stylistic reasons, your -PR will not be considered ready for merging. diff --git a/versioned_docs/version-3/community/history.md b/versioned_docs/version-3/community/history.md deleted file mode 100644 index 4f45677756..0000000000 --- a/versioned_docs/version-3/community/history.md +++ /dev/null @@ -1,34 +0,0 @@ ---- -title: The History of the Project -description: Provides a high-level overview of the project's history. -sidebar_position: 4 ---- - -Helm is a [graduated](https://helm.sh/blog/celebrating-helms-cncf-graduation/) -[CNCF project](https://www.cncf.io/projects/). - -Helm began as what is now known as [Helm -Classic](https://github.com/helm/helm-classic), a Deis project begun in 2015 and -introduced at the inaugural KubeCon. - -In January of 2016, the project merged with a GCS tool called Kubernetes -Deployment Manager, and the project was moved under -[Kubernetes](https://kubernetes.io). As a result of the merging of codebases, -Helm 2.0 was released later that year. The key feature of Deployment Manager -that survived in Helm 2 was the server-side component, renamed from DM to Tiller -for the final Helm 2.0 release. - -Helm was promoted from a Kubernetes subproject to a full-fledged CNCF project in -June, 2018. Helm formed a top-level governing body and several projects were -subsumed under the Helm project, including Monocular, the Helm Chart Repo, Chart -Museum, and later the Helm Hub. - -When the Helm 3 development cycle began, Tiller was removed, bringing Helm -closer to its original vision of being a client tool. But Helm 3 continues to -track releases inside of the Kubernetes cluster, making it possible for teams to -work together on a common set of Helm releases. Helm 3 was released in November 2019. - -Helm [graduated as a CNCF project in April 2020](https://www.cncf.io/announcement/2020/04/30/cloud-native-computing-foundation-announces-helm-graduation/). - -The CNCF [Artifact Hub](https://artifacthub.io) replaced the [Helm Hub](https://hub.helm.sh) -in October 2020. diff --git a/versioned_docs/version-3/community/index.mdx b/versioned_docs/version-3/community/index.mdx deleted file mode 100644 index 7e1fc3e625..0000000000 --- a/versioned_docs/version-3/community/index.mdx +++ /dev/null @@ -1,14 +0,0 @@ ---- -title: Community -sidebar_position: 8 ---- - -# Community Guides - -Learn here about the development process for the Helm project itself and how you -can contribute. - - -import DocCardList from '@theme/DocCardList'; - - diff --git a/versioned_docs/version-3/community/related.md b/versioned_docs/version-3/community/related.md deleted file mode 100644 index 1b2a58b6a5..0000000000 --- a/versioned_docs/version-3/community/related.md +++ /dev/null @@ -1,141 +0,0 @@ ---- -title: Related Projects and Documentation -description: third-party tools, plugins and documentation provided by the community! -sidebar_position: 3 ---- - -The Helm community has produced many extra tools, plugins, and documentation -about Helm. We love to hear about these projects. - -If you have anything you'd like to add to this list, please open an -[issue](https://github.com/helm/helm-www/issues) or [pull -request](https://github.com/helm/helm-www/pulls). - -## Helm Plugins - -- [helm-adopt](https://github.com/HamzaZo/helm-adopt) - A helm v3 plugin to adopt - existing k8s resources into a new generated helm chart. -- [helm-cel](https://github.com/idsulik/helm-cel) - Plugin that uses Common Expression Language (CEL) to validate values. -- [helm-chartsnap](https://github.com/jlandowner/helm-chartsnap) - Snapshot testing plugin for Helm charts. -- [Helm Diff](https://github.com/databus23/helm-diff) - Preview `helm upgrade` - as a coloured diff -- [Helm Dt](https://github.com/vmware-labs/distribution-tooling-for-helm) - Plugin that helps distributing Helm charts across OCI registries and on Air gap environments -- [Helm Dashboard](https://github.com/komodorio/helm-dashboard) - GUI for Helm, visualize releases and repositories, manifest diffs -- [helm-gcs](https://github.com/hayorov/helm-gcs) - Plugin to manage repositories - on Google Cloud Storage -- [helm-git](https://github.com/aslafy-z/helm-git) - Install charts and retrieve - values files from your Git repositories -- [helm-k8comp](https://github.com/cststack/k8comp) - Plugin to create Helm - Charts from hiera using k8comp -- [helm-mapkubeapis](https://github.com/helm/helm-mapkubeapis) - Update helm release - metadata to replace deprecated or removed Kubernetes APIs -- [helm-migrate-values](https://github.com/OctopusDeployLabs/helm-migrate-values) - Plugin to migrate user-specified values across Helm chart versions to handle breaking schema changes in `values.yaml` -- [helm-monitor](https://github.com/ContainerSolutions/helm-monitor) - Plugin to - monitor a release and rollback based on Prometheus/ElasticSearch query -- [helm-release-plugin](https://github.com/JovianX/helm-release-plugin) - Plugin for Release management, Update release values, pulls(re-creates) helm Charts from deployed releases, set helm release TTL. -- [helm-s3](https://github.com/hypnoglow/helm-s3) - Helm plugin that allows to - use AWS S3 as a [private] chart repository -- [helm-secrets](https://github.com/jkroepke/helm-secrets) - Plugin to manage - and store secrets safely (based on [sops](https://github.com/mozilla/sops)) -- [helm-sigstore](https://github.com/sigstore/helm-sigstore) - - Plugin for Helm to integrate the [sigstore](https://sigstore.dev/) ecosystem. Search, upload and verify signed Helm charts. -- [helm-tanka](https://github.com/Duologic/helm-tanka) - A Helm plugin for - rendering Tanka/Jsonnet inside Helm charts. -- [hc-unit](https://github.com/xchapter7x/hcunit) - Plugin for unit testing - charts locally using OPA (Open Policy Agent) & Rego -- [helm-unittest](https://github.com/helm-unittest/helm-unittest) - Plugin for unit - testing chart locally with YAML -- [helm-val](https://github.com/HamzaZo/helm-val) - A plugin to get - values from a previous release. -- [helm-external-val](https://github.com/kuuji/helm-external-val) - A plugin that fetches helm values from external sources (configMaps, Secrets, etc.) -- [helm-images](https://github.com/nikhilsbhat/helm-images) - Helm plugin to fetch all possible images from the chart before deployment or from a deployed release -- [helm-drift](https://github.com/nikhilsbhat/helm-drift) - Helm plugin that identifies the configuration that has drifted from the Helm chart -- [helm-tui](https://github.com/pidanou/helm-tui) - A light UI to manage your Helm assets without leaving the terminal - -We also encourage GitHub authors to use the -[helm-plugin](https://github.com/search?q=topic%3Ahelm-plugin&type=Repositories) -tag on their plugin repositories. - -## Additional Tools - -Tools layered on top of Helm. - -- [Aptakube](https://aptakube.com) - Desktop UI for Kubernetes and Helm Releases -- [Armada](https://airshipit.readthedocs.io/projects/armada/en/latest/) - Manage - prefixed releases throughout various Kubernetes namespaces, and removes - completed jobs for complex deployments -- [avionix](https://github.com/zbrookle/avionix) - - Python interface for generating Helm - charts and Kubernetes yaml, allowing for inheritance and less duplication of code -- [Botkube](https://botkube.io) - Run Helm commands directly from Slack, - Discord, Microsoft Teams, and Mattermost. -- [Captain](https://github.com/alauda/captain) - A Helm3 Controller using - HelmRequest and Release CRD -- [Chartify](https://github.com/appscode/chartify) - Generate Helm charts from - existing Kubernetes resources. -- [ChartMuseum](https://github.com/helm/chartmuseum) - Helm Chart Repository - with support for Amazon S3 and Google Cloud Storage -- [chart-registry](https://github.com/hangyan/chart-registry) - Helm Charts - Hosts on OCI Registry -- [Codefresh](https://codefresh.io) - Kubernetes native CI/CD and management - platform with UI dashboards for managing Helm charts and releases -- ⁠[Cyclops](https://cyclops-ui.com) - Dynamic Kubernetes UI rendering based - on Helm charts -- [Flux](https://fluxcd.io/docs/components/helm/) - - Continuous and progressive delivery from Git to Kubernetes. -- [Helmfile](https://github.com/helmfile/helmfile) - Helmfile is a declarative - spec for deploying helm charts -- [Helmper](https://github.com/ChristofferNissen/helmper) - Helmper helps you - import Helm Charts - including all OCI artifacts(images), to your own OCI - registries. Helmper also facilitates security scanning and patching of OCI - images. Helmper utilizes Helm, Oras, Trivy, Copacetic and Buildkitd. -- [Helmsman](https://github.com/Praqma/helmsman) - Helmsman is a - helm-charts-as-code tool which enables - installing/upgrading/protecting/moving/deleting releases from version - controlled desired state files (described in a simple TOML format) -- [HULL](https://github.com/vidispine/hull) - This library chart provides a - ready-to-use interface for specifying all Kubernetes objects directly in the `values.yaml`. - It removes the need to write any templates for your charts and comes with many - additional features to simplify Helm chart creation and usage. -- [K8Studio](https://k8studio.io) - - Desktop UI for Managing Kubernetes Clusters with Integrated Helm Manager. -- [Konveyor Move2Kube](https://konveyor.io/move2kube/) - - Generate Helm charts for your - existing projects. -- [Landscaper](https://github.com/Eneco/landscaper/) - "Landscaper takes a set - of Helm Chart references with values (a desired state), and realizes this in a - Kubernetes cluster." -- [Monocular](https://github.com/helm/monocular) - Web UI for Helm Chart - repositories -- [Monokle](https://monokle.io) - Desktop tool for creating, debugging and deploying Kubernetes resources and Helm Charts -- [Orkestra](https://azure.github.io/orkestra/) - A cloud-native Release - Orchestration and Lifecycle Management (LCM) platform for a related group of - Helm releases and their subcharts -- [Tanka](https://tanka.dev/helm) - Grafana Tanka configures Kubernetes - resources through Jsonnet with the ability to consume Helm Charts -- [Terraform Helm - Provider](https://github.com/hashicorp/terraform-provider-helm) - The Helm - provider for HashiCorp Terraform enables lifecycle management of Helm Charts - with a declarative infrastructure-as-code syntax. The Helm provider is often - paired the other Terraform providers, like the Kubernetes provider, to create - a common workflow across all infrastructure services. -- [VIM-Kubernetes](https://github.com/andrewstuart/vim-kubernetes) - VIM plugin - for Kubernetes and Helm - -## Helm Included - -Platforms, distributions, and services that include Helm support. - -- [Kubernetic](https://kubernetic.com/) - Kubernetes Desktop Client -- [Jenkins X](https://jenkins-x.io/) - open source automated CI/CD for - Kubernetes which uses Helm for - [promoting](https://jenkins-x.io/docs/getting-started/promotion/) applications - through environments via GitOps - -## Misc - -Grab bag of useful things for Chart authors and Helm users. - -- [Await](https://github.com/saltside/await) - Docker image to "await" different - conditions--especially useful for init containers. [More - Info](https://blog.slashdeploy.com/2017/02/16/introducing-await/) diff --git a/versioned_docs/version-3/community/release_checklist.md b/versioned_docs/version-3/community/release_checklist.md deleted file mode 100644 index 90ea48f5b9..0000000000 --- a/versioned_docs/version-3/community/release_checklist.md +++ /dev/null @@ -1,490 +0,0 @@ ---- -title: Release Checklist -description: Checklist for maintainers when releasing the next version of Helm. -sidebar_position: 2 ---- - -# A Maintainer's Guide to Releasing Helm - -Time for a new Helm release! As a Helm maintainer cutting a release, you are -the best person to [update this -release checklist](https://github.com/helm/helm-www/blob/main/content/en/docs/community/release_checklist.md) -should your experiences vary from what's documented here. - -All releases will be of the form vX.Y.Z where X is the major version number, Y -is the minor version number and Z is the patch release number. This project -strictly follows [semantic versioning](https://semver.org/) so following this -step is critical. - -Helm announces in advance the date of its next minor release. Every effort -should be made to respect the announced date. Furthermore, when starting -the release process, the date for the next release should have been selected -as it will be used in the release process. - -These directions will cover initial configuration followed by the release -process for three different kinds of releases: - -* Major Releases - released less frequently - have breaking changes -* Minor Releases - released every 3 to 4 months - no breaking changes -* Patch Releases - released monthly - do not require all steps in this guide - -[Initial Configuration](#initial-configuration) - -1. [Create the Release Branch](#1-create-the-release-branch) -2. [Major/Minor releases: Change the Version Number in Git](#2-majorminor-releases-change-the-version-number-in-git) -3. [Major/Minor releases: Commit and Push the Release Branch](#3-majorminor-releases-commit-and-push-the-release-branch) -4. [Major/Minor releases: Create a Release Candidate](#4-majorminor-releases-create-a-release-candidate) -5. [Major/Minor releases: Iterate on Successive Release Candidates](#5-majorminor-releases-iterate-on-successive-release-candidates) -6. [Finalize the Release](#6-finalize-the-release) -7. [Write the Release Notes](#7-write-the-release-notes) -8. [PGP Sign the downloads](#8-pgp-sign-the-downloads) -9. [Publish Release](#9-publish-release) -10. [Update Docs](#10-update-docs) -11. [Tell the Community](#11-tell-the-community) - -## Initial Configuration - -### Set Up Git Remote - -It is important to note that this document assumes that the git remote in your -repository that corresponds to is named -"upstream". If yours is not (for example, if you've chosen to name it "origin" -or something similar instead), be sure to adjust the listed snippets for your -local environment accordingly. If you are not sure what your upstream remote is -named, use a command like `git remote -v` to find out. - -If you don't have an [upstream -remote](https://docs.github.com/en/github/collaborating-with-issues-and-pull-requests/configuring-a-remote-for-a-fork) -, you can add one using something like: - -```shell -git remote add upstream git@github.com:helm/helm.git -``` - -### Set Up Environment Variables - -In this doc, we are going to reference a few environment variables as well, -which you may want to set for convenience. For major/minor releases, use the -following: - -```shell -export RELEASE_NAME=vX.Y.0 -export RELEASE_BRANCH_NAME="release-X.Y" -export RELEASE_CANDIDATE_NAME="$RELEASE_NAME-rc.1" -``` - -If you are creating a patch release, use the following instead: - -```shell -export PREVIOUS_PATCH_RELEASE=vX.Y.Z -export RELEASE_NAME=vX.Y.Z+1 -export RELEASE_BRANCH_NAME="release-X.Y" -``` - -### Set Up Signing Key - -We are also going to be adding security and verification of the release process -by hashing the binaries and providing signature files. We perform this using -[GitHub and -GPG](https://help.github.com/en/articles/about-commit-signature-verification). -If you do not have GPG already setup you can follow these steps: - -1. [Install GPG](https://gnupg.org/index.html) -2. [Generate GPG - key](https://help.github.com/en/articles/generating-a-new-gpg-key) -3. [Add key to GitHub - account](https://help.github.com/en/articles/adding-a-new-gpg-key-to-your-github-account) -4. [Set signing key in - Git](https://help.github.com/en/articles/telling-git-about-your-signing-key) - -Once you have a signing key you need to add it to the KEYS file at the root of -the repository. The instructions for adding it to the KEYS file are in the file. -If you have not done so already, you need to add your public key to the -keyserver network. If you use GnuPG you can follow the [instructions provided by -Debian](https://debian-administration.org/article/451/Submitting_your_GPG_key_to_a_keyserver). - -## 1. Create the Release Branch - -### Major/Minor Releases - -Major releases are for new feature additions and behavioral changes *that break -backwards compatibility*. Minor releases are for new feature additions that do -not break backwards compatibility. To create a major or minor release, start by -creating a `release-X.Y` branch from main. - -```shell -git fetch upstream -git checkout upstream/main -git checkout -b $RELEASE_BRANCH_NAME -``` - -This new branch is going to be the base for the release, which we are going to -iterate upon later. - -Verify that a [helm/helm milestone](https://github.com/helm/helm/milestones) -for the release exists on GitHub (creating it if necessary). Make sure PRs and -issues for this release are in this milestone. - -For major & minor releases, move on to step 2: [Major/Minor releases: Change -the Version Number in Git](#2-majorminor-releases-change-the-version-number-in-git). - -### Patch releases - -Patch releases are a few critical cherry-picked fixes to existing releases. -Start by creating a `release-X.Y` branch: - -```shell -git fetch upstream -git checkout -b $RELEASE_BRANCH_NAME upstream/$RELEASE_BRANCH_NAME -``` - -From here, we can cherry-pick the commits we want to bring into the patch -release: - -```shell -# get the commits ids we want to cherry-pick -git log --oneline -# cherry-pick the commits starting from the oldest one, without including merge commits -git cherry-pick -x -``` - -After the commits have been cherry picked the release branch needs to be pushed. - -```shell -git push upstream $RELEASE_BRANCH_NAME -``` - -Pushing the branch will cause the tests to run. Make sure they pass prior to -creating the tag. This new tag is going to be the base for the patch release. - -Creating a [helm/helm -milestone](https://github.com/helm/helm/milestones) is optional for patch -releases. - -Make sure to check [GitHub Actions](https://github.com/helm/helm/actions) to see -that the release passed CI before proceeding. Patch releases can skip steps 2-5 -and proceed to step 6 to [Finalize the Release](#6-finalize-the-release). - -## 2. Major/Minor releases: Change the Version Number in Git - -When doing a major or minor release, make sure to update -`internal/version/version.go` with the new release version. - -```shell -$ git diff internal/version/version.go -diff --git a/internal/version/version.go b/internal/version/version.go -index 712aae64..c1ed191e 100644 ---- a/internal/version/version.go -+++ b/internal/version/version.go -@@ -30,7 +30,7 @@ var ( - // Increment major number for new feature additions and behavioral changes. - // Increment minor number for bug fixes and performance enhancements. - // Increment patch number for critical fixes to existing releases. -- version = "v3.3" -+ version = "v3.4" - - // metadata is extra build time data - metadata = "" -``` - -In addition to updating the version within the `version.go` file, you will also -need to update corresponding tests that are using that version number. - -* `cmd/helm/testdata/output/version.txt` -* `cmd/helm/testdata/output/version-client.txt` -* `cmd/helm/testdata/output/version-client-shorthand.txt` -* `cmd/helm/testdata/output/version-short.txt` -* `cmd/helm/testdata/output/version-template.txt` -* `pkg/chartutil/capabilities_test.go` - -```shell -git add . -git commit -m "bump version to $RELEASE_NAME" -``` - -This will update it for the $RELEASE_BRANCH_NAME only. You will also need to -pull this change into the main branch for when the next release is being -created, as in [this example of 3.2 to -3.3](https://github.com/helm/helm/pull/8411/files), and add it to the milestone -for the next release. - -```shell -# get the last commit id i.e. commit to bump the version -git log --format="%H" -n 1 - -# create new branch off main -git checkout main -git checkout -b bump-version- - -# cherry pick the commit using id from first command -git cherry-pick -x - -# commit the change -git push origin bump-version- -``` - -## 3. Major/Minor releases: Commit and Push the Release Branch - -In order for others to start testing, we can now push the release branch -upstream and start the test process. - -```shell -git push upstream $RELEASE_BRANCH_NAME -``` - -Make sure to check [GitHub Actions](https://github.com/helm/helm/actions) to see -that the release passed CI before proceeding. - -If anyone is available, let others peer-review the branch before continuing to -ensure that all the proper changes have been made and all of the commits for the -release are there. - -## 4. Major/Minor releases: Create a Release Candidate - -Now that the release branch is out and ready, it is time to start creating and -iterating on release candidates. - -```shell -git tag --sign --annotate "${RELEASE_CANDIDATE_NAME}" --message "Helm release ${RELEASE_CANDIDATE_NAME}" -git push upstream $RELEASE_CANDIDATE_NAME -``` - -GitHub Actions will automatically create a tagged release image and client binary to -test with. - -For testers, the process to start testing after GitHub Actions finishes building the -artifacts involves the following steps to grab the client: - -linux/amd64, using /bin/bash: - -```shell -wget https://get.helm.sh/helm-$RELEASE_CANDIDATE_NAME-linux-amd64.tar.gz -``` - -darwin/amd64, using Terminal.app: - -```shell -wget https://get.helm.sh/helm-$RELEASE_CANDIDATE_NAME-darwin-amd64.tar.gz -``` - -windows/amd64, using PowerShell: - -```shell -PS C:\> Invoke-WebRequest -Uri "https://get.helm.sh/helm-$RELEASE_CANDIDATE_NAME-windows-amd64.tar.gz" -OutFile "helm-$ReleaseCandidateName-windows-amd64.tar.gz" -``` - -Then, unpack and move the binary to somewhere on your $PATH, or move it -somewhere and add it to your $PATH (e.g. /usr/local/bin/helm for linux/macOS, -C:\Program Files\helm\helm.exe for Windows). - -## 5. Major/Minor releases: Iterate on Successive Release Candidates - -Spend several days explicitly investing time and resources to try and break helm -in every possible way, documenting any findings pertinent to the release. This -time should be spent testing and finding ways in which the release might have -caused various features or upgrade environments to have issues, not coding. -During this time, the release is in code freeze, and any additional code changes -will be pushed out to the next release. - -During this phase, the $RELEASE_BRANCH_NAME branch will keep evolving as you -will produce new release candidates. The frequency of new candidates is up to -the release manager: use your best judgement taking into account the severity of -reported issues, testers' availability, and the release deadline date. Generally -speaking, it is better to let a release roll over the deadline than to ship a -broken release. - -Each time you'll want to produce a new release candidate, you will start by -adding commits to the branch by cherry-picking from main: - -```shell -git cherry-pick -x -``` - -You will also want to push the branch to GitHub and ensure it passes CI. - -After that, tag it and notify users of the new release candidate: - -```shell -export RELEASE_CANDIDATE_NAME="$RELEASE_NAME-rc.2" -git tag --sign --annotate "${RELEASE_CANDIDATE_NAME}" --message "Helm release ${RELEASE_CANDIDATE_NAME}" -git push upstream $RELEASE_CANDIDATE_NAME -``` - -Once pushed to GitHub, check to ensure the branch with this tag builds in CI. - -From here on just repeat this process, continuously testing until you're happy -with the release candidate. For a release candidate, we don't write the full notes, -but you can scaffold out some [release notes](#7-write-the-release-notes). - -## 6. Finalize the Release - -When you're finally happy with the quality of a release candidate, you can move -on and create the real thing. Double-check one last time to make sure everything -is in order, then finally push the release tag. - -```shell -git checkout $RELEASE_BRANCH_NAME -git tag --sign --annotate "${RELEASE_NAME}" --message "Helm release ${RELEASE_NAME}" -git push upstream $RELEASE_NAME -``` - -Verify that the release succeeded in -[GitHub Actions](https://github.com/helm/helm/actions). If not, you will need to fix the -release and push the release again. - -As the CI job will take some time to run, you can move on to writing release -notes while you wait for it to complete. - -## 7. Write the Release Notes - -We will auto-generate a changelog based on the commits that occurred during a -release cycle, but it is usually more beneficial to the end-user if the release -notes are hand-written by a human being/marketing team/dog. - -If you're releasing a major/minor release, listing notable user-facing features -is usually sufficient. For patch releases, do the same, but make note of the -symptoms and who is affected. - -The release notes should include the version and planned date of the next release. - -An example release note for a minor release would look like this: - -```markdown -## vX.Y.Z - -Helm vX.Y.Z is a feature release. This release, we focused on . Users are encouraged to upgrade for the best experience. - -The community keeps growing, and we'd love to see you there! - -- Join the discussion in [Kubernetes Slack](https://kubernetes.slack.com): - - `#helm-users` for questions and just to hang out - - `#helm-dev` for discussing PRs, code, and bugs -- Hang out at the Public Developer Call: Thursday, 9:30 Pacific via [Zoom](https://zoom.us/j/696660622) -- Test, debug, and contribute charts: [Artifact Hub helm charts](https://artifacthub.io/packages/search?kind=0) - -## Notable Changes - -- Kubernetes 1.16 is now supported including new manifest apiVersions -- Sprig was upgraded to 2.22 - -## Installation and Upgrading - -Download Helm X.Y. The common platform binaries are here: - -- [MacOS amd64](https://get.helm.sh/helm-vX.Y.Z-darwin-amd64.tar.gz) ([checksum](https://get.helm.sh/helm-vX.Y.Z-darwin-amd64.tar.gz.sha256sum) / CHECKSUM_VAL) -- [Linux amd64](https://get.helm.sh/helm-vX.Y.Z-linux-amd64.tar.gz) ([checksum](https://get.helm.sh/helm-vX.Y.Z-linux-amd64.tar.gz.sha256sum) / CHECKSUM_VAL) -- [Linux arm](https://get.helm.sh/helm-vX.Y.Z-linux-arm.tar.gz) ([checksum](https://get.helm.sh/helm-vX.Y.Z-linux-arm.tar.gz.sha256) / CHECKSUM_VAL) -- [Linux arm64](https://get.helm.sh/helm-vX.Y.Z-linux-arm64.tar.gz) ([checksum](https://get.helm.sh/helm-vX.Y.Z-linux-arm64.tar.gz.sha256sum) / CHECKSUM_VAL) -- [Linux i386](https://get.helm.sh/helm-vX.Y.Z-linux-386.tar.gz) ([checksum](https://get.helm.sh/helm-vX.Y.Z-linux-386.tar.gz.sha256) / CHECKSUM_VAL) -- [Linux ppc64le](https://get.helm.sh/helm-vX.Y.Z-linux-ppc64le.tar.gz) ([checksum](https://get.helm.sh/helm-vX.Y.Z-linux-ppc64le.tar.gz.sha256sum) / CHECKSUM_VAL) -- [Linux s390x](https://get.helm.sh/helm-vX.Y.Z-linux-s390x.tar.gz) ([checksum](https://get.helm.sh/helm-vX.Y.Z-linux-s390x.tar.gz.sha256sum) / CHECKSUM_VAL) -- [Windows amd64](https://get.helm.sh/helm-vX.Y.Z-windows-amd64.zip) ([checksum](https://get.helm.sh/helm-vX.Y.Z-windows-amd64.zip.sha256sum) / CHECKSUM_VAL) - -The [Quickstart Guide](/intro/quickstart.md) will get you going from there. For **upgrade instructions** or detailed installation notes, check the [install guide](/intro/install.md). You can also use a [script to install](https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3) on any system with `bash`. - -## What's Next - -- vX.Y.Z+1 will contain only bug fixes and is planned for . -- vX.Y+1.0 is the next feature release and is planned for . This release will focus on ... - -## Changelog - -- chore(*): bump version to v2.7.0 08c1144f5eb3e3b636d9775617287cc26e53dba4 (Adam Reese) -- fix circle not building tags f4f932fabd197f7e6d608c8672b33a483b4b76fa (Matthew Fisher) -``` - -A partially completed set of release notes including the changelog can be -created by running the following command: - -```shell -export VERSION="$RELEASE_NAME" -export PREVIOUS_RELEASE=vX.Y.Z -make clean -make fetch-dist -make release-notes -``` - -This will create a good baseline set of release notes to which you should just -need to fill out the **Notable Changes** and **What's next** sections. - -Feel free to add your voice to the release notes; it's nice for people to think -we're not all robots. - -You should also double check the URLs and checksums are correct in the -auto-generated release notes. - -Once finished, go into GitHub to [helm/helm -releases](https://github.com/helm/helm/releases) and edit the release notes for -the tagged release with the notes written here. -For target branch, set to $RELEASE_BRANCH_NAME. - -It is now worth getting other people to take a look at the release notes before -the release is published. Send a request out to -[#helm-dev](https://kubernetes.slack.com/messages/C51E88VDG) for review. It is -always beneficial as it can be easy to miss something. - -## 8. PGP Sign the downloads - -While hashes provide a signature that the content of the downloads is what it -was generated, signed packages provide traceability of where the package came -from. - -To do this, run the following `make` commands: - -```shell -export VERSION="$RELEASE_NAME" -make clean # if not already run -make fetch-dist # if not already run -make sign -``` - -This will generate ascii armored signature files for each of the files pushed by -CI. - -All of the signature files (`*.asc`) need to be uploaded to the release on -GitHub (attach binaries). - -## 9. Publish Release - -Time to make the release official! - -After the release notes are saved on GitHub, the CI build is completed, and -you've added the signature files to the release, you can hit "Publish" on -the release. This publishes the release, listing it as "latest", and shows this -release on the front page of the [helm/helm](https://github.com/helm/helm) repo. - -## 10. Update Docs - -The [Helm website docs section](https://helm.sh/docs) lists the Helm versions -for the docs. Major, minor, and patch versions need to be updated on the site. -The date for the next minor release is also published on the site and must be -updated. -To do that create a pull request against the [helm-www -repository](https://github.com/helm/helm-www). In the `config.toml` file find -the proper `params.versions` section and update the Helm version, like in this -example of [updating the current -version](https://github.com/helm/helm-www/pull/676/files). In the same -`config.toml` file, update the `params.nextversion` section. - -Close the [helm/helm milestone](https://github.com/helm/helm/milestones) for -the release, if applicable. - -Update the [version -skew](https://github.com/helm/helm-www/blob/main/content/en/docs/topics/version_skew.md) -for major and minor releases. - -Update the release calendar [here](https://helm.sh/calendar/release): -* create an entry for the next minor release with a reminder for that day at 5pm GMT -* create an entry for the RC1 of the next minor release on the Monday of the week before the planned release, with a reminder for that day at 5pm GMT - -## 11. Tell the Community - -Congratulations! You're done. Go grab yourself a $DRINK_OF_CHOICE. You've earned -it. - -After enjoying a nice $DRINK_OF_CHOICE, go forth and announce the new release -in Slack and on Twitter with a link to the [release on -GitHub](https://github.com/helm/helm/releases). - -Optionally, write a blog post about the new release and showcase some of the new -features on there! diff --git a/versioned_docs/version-3/index.mdx b/versioned_docs/version-3/index.mdx index e017d38fbe..cdb8b1ef05 100644 --- a/versioned_docs/version-3/index.mdx +++ b/versioned_docs/version-3/index.mdx @@ -20,7 +20,7 @@ will help you know where to look for certain things: your first Helm chart. Start here if you’re new to Helm. - [Topic guides](/topics/index.mdx) discuss key topics and concepts at a fairly high level and provide useful background information and explanation. -- [Community Guides](/community/index.mdx) discuss topics centered around Helm’s community. +- [Community Guides](/community) discuss topics centered around Helm’s community. Start here if you want to learn more about the development process of Helm itself and how you can contribute. - [How-to guides](/howto/index.mdx) are recipes. They guide you through the steps involved diff --git a/versioned_docs/version-3/topics/plugins.md b/versioned_docs/version-3/topics/plugins.md index 6a13ff7aae..7be503a2c1 100644 --- a/versioned_docs/version-3/topics/plugins.md +++ b/versioned_docs/version-3/topics/plugins.md @@ -7,7 +7,7 @@ sidebar_position: 12 A Helm plugin is a tool that can be accessed through the `helm` CLI, but which is not part of the built-in Helm codebase. -Existing plugins can be found on [related](/community/related.md#helm-plugins) section or by searching +Existing plugins can be found on [related](/community/related#helm-plugins) section or by searching [GitHub](https://github.com/search?q=topic%3Ahelm-plugin&type=Repositories). This guide explains how to use and create plugins. From 03aa62bd4fbff76dd3a875fb0f48152ae2f534d6 Mon Sep 17 00:00:00 2001 From: Scott Rigby Date: Sun, 23 Nov 2025 13:38:23 -0500 Subject: [PATCH 2/6] feat(community): add remote content import from helm/community - add docusaurus-plugin-remote-content with configuration - create transformation utilities for imported content - add frontmatter injection and H1 title extraction - implement HIP-specific formatting with metadata tables - handle .txt file conversion with code block wrapping - configure link exceptions for special cases - add import notice headers to all imported files - update typos config to exclude imported files from checks - add custom index files for better organization Signed-off-by: Scott Rigby --- .typos.toml | 5 + community/MAINTAINERS.md | 26 + community/README.md | 90 + community/SECURITY.md | 89 + .../art/images/Backgrounds-Pattern-Dark.png | Bin 0 -> 185144 bytes community/art/images/Backgrounds-Pattern.png | Bin 0 -> 204002 bytes .../art/images/Example-Icon-Illustrations.png | Bin 0 -> 171333 bytes .../art/images/Helm-3-Color-Palettes-Dark.png | Bin 0 -> 56062 bytes .../images/Helm-3-Color-Palettes-Light.png | Bin 0 -> 54824 bytes community/art/images/Helm-Summit.png | Bin 0 -> 39106 bytes community/art/images/Logo-Tweak-Dark.png | Bin 0 -> 19856 bytes community/art/images/Logo-Tweak-Light.png | Bin 0 -> 19594 bytes community/art/images/Typography.png | Bin 0 -> 196860 bytes community/art/images/Website-Exmple.png | Bin 0 -> 276413 bytes community/art/images/Website-Sample.png | Bin 0 -> 296153 bytes community/art/images/helm-3.png | Bin 0 -> 28986 bytes community/art/images/type-notes.png | Bin 0 -> 78547 bytes community/art/readme.md | 79 + community/blog-topics.md | 20 + community/code-of-conduct.md | 13 + community/communication.md | 80 + community/governance/README.md | 38 + community/governance/_category_.json | 6 + community/governance/governance.md | 123 + community/hips/README.md | 48 + community/hips/archives/README.md | 14 + .../hips/archives/helm/distributed-search.md | 75 + .../hips/archives/helm/helm-v3/000-helm-v3.md | 96 + .../hips/archives/helm/helm-v3/001-charts.md | 227 ++ .../hips/archives/helm/helm-v3/002-events.md | 330 ++ .../hips/archives/helm/helm-v3/003-state.md | 128 + .../hips/archives/helm/helm-v3/004-hooks.md | 23 + .../hips/archives/helm/helm-v3/005-plugins.md | 102 + .../archives/helm/helm-v3/006-repositories.md | 179 ++ .../archives/helm/helm-v3/007-security.md | 24 + .../archives/helm/helm-v3/008-controller.md | 55 + .../helm/helm-v3/009-package_manager.md | 56 + .../hips/archives/helm/helm-v3/010-removed.md | 43 + .../archives/helm/helm-v3/011-user_stories.md | 49 + .../helm/helm-v3/012-chart-dev-stories.md | 138 + .../helm-v3/research/package-manager-ux.md | 157 + .../archives/monocular/1.0-improvements.md | 50 + community/hips/hip-0001.md | 436 +++ community/hips/hip-0002.md | 85 + community/hips/hip-0003.md | 121 + community/hips/hip-0004.md | 124 + community/hips/hip-0005.md | 98 + community/hips/hip-0006.md | 262 ++ community/hips/hip-0007.md | 93 + community/hips/hip-0008.md | 178 ++ community/hips/hip-0009.md | 82 + community/hips/hip-0010.md | 97 + community/hips/hip-0011.md | 356 +++ community/hips/hip-0012.md | 282 ++ community/hips/hip-0014.md | 97 + community/hips/hip-0015.md | 130 + community/hips/hip-0016.md | 128 + community/hips/hip-0017.md | 130 + community/hips/hip-0018.md | 90 + community/hips/hip-0019.md | 263 ++ community/hips/hip-0020.md | 140 + community/hips/hip-0021.md | 110 + community/hips/hip-0022.md | 122 + community/hips/hip-0023.md | 208 ++ community/hips/hip-0024.md | 100 + community/hips/hip-0025.md | 284 ++ community/hips/hip-0026.md | 350 +++ community/incubator.md | 121 + community/index.mdx | 14 - community/meeting-notes/2017.md | 747 +++++ community/meeting-notes/2018.md | 2251 ++++++++++++++ community/meeting-notes/2019.md | 2188 +++++++++++++ community/meeting-notes/2020.md | 2719 +++++++++++++++++ community/meeting-notes/2021.md | 2411 +++++++++++++++ community/meeting-notes/index.mdx | 11 + community/stable-repo-charts-new-locations.md | 345 +++ community/user-profiles.md | 54 + docusaurus.config.js | 218 +- package.json | 5 +- src/utils/communityDocsConfig.js | 37 + src/utils/communityDocsTransforms.js | 374 +++ yarn.lock | 208 +- 82 files changed, 18410 insertions(+), 22 deletions(-) create mode 100644 community/MAINTAINERS.md create mode 100644 community/README.md create mode 100644 community/SECURITY.md create mode 100644 community/art/images/Backgrounds-Pattern-Dark.png create mode 100644 community/art/images/Backgrounds-Pattern.png create mode 100644 community/art/images/Example-Icon-Illustrations.png create mode 100644 community/art/images/Helm-3-Color-Palettes-Dark.png create mode 100644 community/art/images/Helm-3-Color-Palettes-Light.png create mode 100644 community/art/images/Helm-Summit.png create mode 100644 community/art/images/Logo-Tweak-Dark.png create mode 100644 community/art/images/Logo-Tweak-Light.png create mode 100644 community/art/images/Typography.png create mode 100644 community/art/images/Website-Exmple.png create mode 100644 community/art/images/Website-Sample.png create mode 100644 community/art/images/helm-3.png create mode 100644 community/art/images/type-notes.png create mode 100644 community/art/readme.md create mode 100644 community/blog-topics.md create mode 100644 community/code-of-conduct.md create mode 100644 community/communication.md create mode 100644 community/governance/README.md create mode 100644 community/governance/_category_.json create mode 100644 community/governance/governance.md create mode 100644 community/hips/README.md create mode 100644 community/hips/archives/README.md create mode 100644 community/hips/archives/helm/distributed-search.md create mode 100644 community/hips/archives/helm/helm-v3/000-helm-v3.md create mode 100644 community/hips/archives/helm/helm-v3/001-charts.md create mode 100644 community/hips/archives/helm/helm-v3/002-events.md create mode 100644 community/hips/archives/helm/helm-v3/003-state.md create mode 100644 community/hips/archives/helm/helm-v3/004-hooks.md create mode 100644 community/hips/archives/helm/helm-v3/005-plugins.md create mode 100644 community/hips/archives/helm/helm-v3/006-repositories.md create mode 100644 community/hips/archives/helm/helm-v3/007-security.md create mode 100644 community/hips/archives/helm/helm-v3/008-controller.md create mode 100644 community/hips/archives/helm/helm-v3/009-package_manager.md create mode 100644 community/hips/archives/helm/helm-v3/010-removed.md create mode 100644 community/hips/archives/helm/helm-v3/011-user_stories.md create mode 100644 community/hips/archives/helm/helm-v3/012-chart-dev-stories.md create mode 100644 community/hips/archives/helm/helm-v3/research/package-manager-ux.md create mode 100644 community/hips/archives/monocular/1.0-improvements.md create mode 100644 community/hips/hip-0001.md create mode 100644 community/hips/hip-0002.md create mode 100644 community/hips/hip-0003.md create mode 100644 community/hips/hip-0004.md create mode 100644 community/hips/hip-0005.md create mode 100644 community/hips/hip-0006.md create mode 100644 community/hips/hip-0007.md create mode 100644 community/hips/hip-0008.md create mode 100644 community/hips/hip-0009.md create mode 100644 community/hips/hip-0010.md create mode 100644 community/hips/hip-0011.md create mode 100644 community/hips/hip-0012.md create mode 100644 community/hips/hip-0014.md create mode 100644 community/hips/hip-0015.md create mode 100644 community/hips/hip-0016.md create mode 100644 community/hips/hip-0017.md create mode 100644 community/hips/hip-0018.md create mode 100644 community/hips/hip-0019.md create mode 100644 community/hips/hip-0020.md create mode 100644 community/hips/hip-0021.md create mode 100644 community/hips/hip-0022.md create mode 100644 community/hips/hip-0023.md create mode 100644 community/hips/hip-0024.md create mode 100644 community/hips/hip-0025.md create mode 100644 community/hips/hip-0026.md create mode 100644 community/incubator.md delete mode 100644 community/index.mdx create mode 100644 community/meeting-notes/2017.md create mode 100644 community/meeting-notes/2018.md create mode 100644 community/meeting-notes/2019.md create mode 100644 community/meeting-notes/2020.md create mode 100644 community/meeting-notes/2021.md create mode 100644 community/meeting-notes/index.mdx create mode 100644 community/stable-repo-charts-new-locations.md create mode 100644 community/user-profiles.md create mode 100644 src/utils/communityDocsConfig.js create mode 100644 src/utils/communityDocsTransforms.js diff --git a/.typos.toml b/.typos.toml index 5f012db7a9..85d58abbbb 100644 --- a/.typos.toml +++ b/.typos.toml @@ -37,4 +37,9 @@ extend-exclude = [ "docs/changelog.md", # v2 docs "versioned_docs/version-2/*", + # Ignore typos on files imported from remote repos (fix upstream instead) + # See docusaurus.config.js customFields.communityDocs.remoteDocs[] for full list + "community/art/", + "community/hips/", + "community/meeting-notes/", ] diff --git a/community/MAINTAINERS.md b/community/MAINTAINERS.md new file mode 100644 index 0000000000..ab7197bfc7 --- /dev/null +++ b/community/MAINTAINERS.md @@ -0,0 +1,26 @@ +--- +title: Helm Org Maintainers +--- + + + +* [Karen Chu](https://github.com/karenhchu) +* [Matt Butcher](https://github.com/technosophos) (chair) +* [Matt Farina](https://github.com/mattfarina) +* [Reinhard Nägele](https://github.com/unguiculus) +* [Scott Rigby](https://github.com/scottrigby) + +## Emeritus + +* [Adam Reese](https://github.com/adamreese) +* [Adnan Abdulhussein](https://github.com/prydonius) +* [Josh Dolitsky](https://github.com/jdolitsky) +* [Martin Hickey](https://github.com/hickeyma) +* [Matt Fisher](https://github.com/bacongobbler) +* [Vic Iglesias](https://github.com/viglesiasce) diff --git a/community/README.md b/community/README.md new file mode 100644 index 0000000000..4e088072ec --- /dev/null +++ b/community/README.md @@ -0,0 +1,90 @@ +--- +sidebar_position: 1 +title: Helm Community +--- + + + +Welcome to the Helm community! + +This is the starting point for becoming a contributor to the Helm project - improving docs, improving code, giving talks etc. + +## Communicating + +The [communication](communication.md) page lists communication channels like chat, +issues, mailing lists, meetings, conferences, etc. + +## Assets + +- Helm logos are located at [cncf/artwork](https://github.com/cncf/artwork/blob/master/examples/graduated.md#helm-logos) +- Helm website and docs are located at [helm/helm-www](https://github.com/helm/helm-www) +- Helm brand examples and guidelines: [art](/community/art) +- Helm themed presentation template: [slides](https://github.com/helm/community/tree/main/slides) + +## How Can I Help? + +#### First, you should join our communication forums: + +- Follow us on [Twitter](communication.md#social-media) +- Join us on [Slack](communication.md#slack) +- Subscribe to our [mailing lists](communication.md#mailing-lists) +- Join the [weekly meeting](communication.md#meetings) + +#### Next, get set-up with the basics (if not already done so): + +- [Documentation](https://docs.helm.sh/) +- [Issues](https://github.com/helm/helm/issues) +- [PRs](https://github.com/helm/helm/pulls) +- [Quickstart Guide](https://docs.helm.sh/using_helm/#quickstart) +- [Developer Guide](https://docs.helm.sh/developers/) + +Now, you can get down to business! + +A good way to learn is: + +- Check out the code and look at code reviews. Documentation and test are part of the code base. +- Try reproducing issues and get an overview of user problems. +- Talk to people on Slack and ask questions. + +Areas you can start working on: + +- Documentation (like the text you are reading now) can always use improvement! +- We can always do with more test coverage. +- Review open PRs. Add comments, feedback or give a LGTM! +- Try out some easy-to-fix bugs which may be marked with the [good first issue] tag +- Just ask an [owner] for suggestions. + +#### Last but not least, we'd love to know what you want to see on the [Helm Blog](https://helm.sh/blog). +Feel free to submit a blog post topic [here](blog-topics.md). + +## Your First Contribution + +We recommend that you work on existing [issues] before attempting to develop a new feature. + +Find an existing issue (e.g. one marked [good first issue], or simply ask an [owner] for suggestions), +and respond on the issue thread expressing interest in working on it. + +This helps other people know that the issue is active, and hopefully prevents duplicated efforts. + +Each commit must be signed off in git, as described by +[the article](https://www.helm.sh/blog/helm-dco/index.html) +describing Helm's switch to DCO. + +If you want to work on a new idea of relatively small scope: + + 1. Submit an issue describing your proposed change to the repo in question. + 1. The repo owners will respond to your issue promptly. + 1. If your proposed change is accepted, start work in your fork, signing off each commit as described above. + 1. Submit a [pull request] containing a tested change. + + +[good first issue]: https://github.com/helm/helm/issues?utf8=%E2%9C%93&q=is%3Aopen%20is%3Aissue%20label%3A%22good+first+issue%22 +[issues]: https://github.com/helm/helm/issues +[pull request]: https://github.com/helm/helm/blob/main/CONTRIBUTING.md#pull-requests +[owner]: https://github.com/kubernetes/helm/blob/main/OWNERS diff --git a/community/SECURITY.md b/community/SECURITY.md new file mode 100644 index 0000000000..3fab196a92 --- /dev/null +++ b/community/SECURITY.md @@ -0,0 +1,89 @@ +--- +sidebar_label: Helm Security +title: Helm Security Process and Policy +--- + + + +This document provides the details on the Helm security policy and details the processes +surrounding security handling including a how to guide on reporting a security vulnerability +for anything within the Helm organization. + +## Report A Vulnerability + +We’re extremely grateful for security researchers and users who report vulnerabilities +to the Helm community. All reports are thoroughly investigated by a set of Helm maintainers. + +To make a report please email the private security list at cncf-helm-security@lists.cncf.io +with the details. + +You may, but are not required to, encrypt your email to this list using the PGP keys +of security team members, listed below. + +| Name | Key URL | Fingerprint | +|----------------|-------------------------------------------------------------------------------------------------|----------------------------------------------------| +| Andrew Block | [link](https://keybase.io/sabre1041/pgp_keys.asc) | 2CE5 F1FB 9E8C 59B8 7BBD  5F2B 02DF E631 AEF3 5EBC | +| George Jenkins | [link](https://keybase.io/gjenkins8/pgp_keys.asc) | C048 04B5 F250 1D25 CA69  A415 2945 4FC9 6455 D41E | +| Matt Butcher | [link](https://keybase.io/technosophos/pgp_keys.asc) | ABA2 5295 98F6 626C 420D 335B 62F4 9E74 7D91 1B60 | +| Matt Farina | [link](https://keybase.io/mattfarina/pgp_keys.asc) | 672C 657B E06B 4B30 969C 4A57 4614 49C2 5E36 B98E | +| Robert Sirchia | [link](https://keys.openpgp.org/vks/v1/by-fingerprint/7FEC81FACC7FFB2A010ADD13C2D40F4D8196E874) | 7FEC81FACC7FFB2A010ADD13C2D40F4D8196E874 | + +### When To Send A Report + +You think you have found a vulnerability in a Helm project or a dependency of a Helm project. This can be any of the repositories on the [Helm GitHub organization](https://github.com/helm). + +### When Not To Send A Report + +* If a vulnerability has been found in an application deployed by a Helm Chart. Instead, contact the application maintainers +* For guidance on securing Helm, please see the [documentation](https://helm.sh/docs/using_helm/#securing-your-helm-installation) or ask in one of the [support channels](/community#how-can-i-help) +* You are looking for help applying security updates + +### Security Vulnerability Response + +Each report will be reviewed and receipt acknowledged within 3 business days. This will set off the security review process detailed below. + +Any vulnerability information shared with the security team stays within the Helm project and will not be shared with others unless it is necessary to fix the issue. Information is shared only on a need to know basis. + +We ask that vulnerability reporter(s) act in good faith by not disclosing the issue to others. And we strive to act in good faith by acting swiftly, and by justly crediting the vulnerability reporter(s) in writing. + +As the security issue moves through triage, identification, and release the reporter of the security vulnerability will be notified. Additional questions about the vulnerability may also be asked of the reporter. + +### Public Disclosure + +A public disclosure of security vulnerabilities is released alongside release updates or details that fix the vulnerability. We try to fully disclose vulnerabilities once a mitigation strategy is available. Our goal is to perform a release and public disclosure quickly and in a timetable that works well for users. For example, a release may be ready on a Friday but for the sake of users may be delayed to a Monday. + +CVEs will be assigned to vulnerabilities. Due to the process and time it takes to obtain a CVE ID, disclosures will happen first. Once the disclosure is public the process will begin to obtain a CVE ID. Once the ID has been assigned the disclosure will be updated. + +If the vulnerability reporter would like their name and details shared as part of the disclosure process we are happy to. We will ask permission and for the way the reporter would like to be identified. We appreciate vulnerability reports and would like to credit reporters if they would like the credit. + +## Security Team Membership + +The security team is made up of a subset of the Helm project maintainers who are willing and able to respond to vulnerability reports. + +### Responsibilities + +* Members MUST be active project maintainers on active (non-deprecated) Helm projects as defined in [the governance](governance/governance.md) +* Members SHOULD engage in each reported vulnerability, at a minimum to make sure it is being handled +* Members MUST keep the vulnerability details private and only share on a need to know basis + +### Membership + +New members are required to be active maintainers of Helm projects who are willing to perform the responsibilities outlined above. The security team is a subset of the maintainers. Members can step down at any time and may join at any time. + +From time to time, Helm projects are deprecated. If at any time a security team member is found to be no longer be an active maintainer on active Helm projects, this individual will be removed from the security team. + +## Patch and Release Team + +When a vulnerability comes in and is acknowledged, a team - including maintainers of the Helm project affected - will assembled to patch the vulnerability, release an update, and publish the vulnerability disclosure. This may expand beyond the security team as needed but will stay within the pool of Helm project maintainers. + +## Disclosures + +Vulnerability disclosures are published as blog posts on the [Helm Blog](https://helm.sh/blog/) and emailed to the [Helm mailing list](https://lists.cncf.io/g/cncf-helm). The disclosures will contain an overview, details about the vulnerability, a fix for the vulnerability that will typically be an update, and optionally a workaround if one is available. + +Disclosures will be published on the same day as a release fixing the vulnerability after the release is published. diff --git a/community/art/images/Backgrounds-Pattern-Dark.png b/community/art/images/Backgrounds-Pattern-Dark.png new file mode 100644 index 0000000000000000000000000000000000000000..a1918c4b08bf15c214deaa1f78ddf2738ac0e402 GIT binary patch literal 185144 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Ȣx#OSr1J~XAkoA7$yH*fnUyy5WaOU;u`;jV(3ZT!Y*zfQolj1GzIe= zW-B8nI4-uuTP^}3Y3r*ezY%^H76lE-s2nS^Q_Qo;(0pGd8|-FRifNhZE|omYtK7rN zHPGRWB128W)k1QK>BoUN-M{whVN)A%yhoxMWVwJ@fh0!KN-lowCm1` z1Mr_Io*!lzR8kVX#F&qRfHPhV2{J75Dv{Dp*l%v4>;n6i!OIK}IfHFx9+t4P)9!tV z6LvBYC4L;%1w(1y94ittX;vr$*FknaFC#~`zOUjDeTf5MM0xksn7>^}Rg%z_+@0M{ z1 z2&uDUZ!z8lB>uJ{2}-XVaH9;e*HM{9SCKHWdv7QK?f>r~xRPd{XjF<^-XL~EWiMH1 zOyr7r>VlV7FB#Qd(-6gJcplNzrXeKFdxN#BvD8Fya~Lg*^207TgajcRVTj&zS}I@2 zYvdZ@rzhBD=gi^dopVQfNVjv5OYYs?#)Pd!|5vrnG#i=<-s}eHd+AKqOm~82~A#C1C3emKocko&WG_nCJ9Jgvl#2W z#)>L6=6W!BTH0E$6mHDw#&F#Xr>Jb*1Ud*dqP+BE(EybLWj$EC+euBS@T23w{Z^Sst{9GOf;I{5y%y7$zCPhRuPCf2C$AuCryJe5|4e?dt=ja zcgi}NjzF5R4L>Ua{}aTY_rjKRy8j?8DO9w<4P7q7I!NEk5zMGQKJ6zdW=_Sbl>Ne5 zo9-$FZ#oxrbbxg&2UO|_&gq2DiY_<2+OapB%0g3fT8eIamr2GwJ-!eKwbXmv`|f4V zX2AyaicX&ks&lE)*aPt>C?q-)5ae@kL#L*N*nU89Q6sSqvpyW`%|%R%PLj0pl6jZG z=&;kVg|x|ygHZ+?>c!^|%OMpV_~KEY4gm7#>N9oLd&v{dWAhaxZg1tCbRk>aKw+ew zYauXy4%tMx^iJ;}@$RDIa^%Z*^?F?w&*yzqVOD4u!co%l)2kfkqUQb>M@1%9n{wI= zO$~xgJ2-$!JUKNcZ&be#Jn`dk>DMQbBp0@u0M=P8(Y`F{LEj&GGR|9XSycLBk8avB z8oW!)>^+#K->1GcD#1T?sf1D6^K{B|pS+hu-d;j$)UqA_C|(~C#K_)iQ~KXpL&{p@%*H=kiM`8^g`gX1OzYN+ zc1IWIf*(H_6rD1IeXU-|yWn}`^vAKWO~3G-&>!HppFKSql#%S1#6RCtg?|#dOn_p` zJjO0#3QaXsl?B%6sa$0RdK2~~$Xwk1EzJnyHai)Q^Ld00^rJCK1m?M&A*Ct~eha=F zx(vsUzALs4ul-HF+w-n1HiyeT`=N@Ub6K{w*!h$5EWG`w=#QLz<Y)uyK6(xwX!I{T3W`i8OpP3aw<#2g>Q2~$I^>3(2_ zhB;^zs4%HBu}uOTH9)jLDPIZ69C**{1SfWIgNWbzlbR1DsXV0*>t<>*$f&T~S$KQi z04K+*2miDbZe?B#2GXA;r2P#kB4w5zlP3k_Ekc5+KFEE2G9+<4#p0}C!#Qix!_5_D z731TAMgw5w_k}$v26@h7MKS1R&--nbk#+x(J}KV0*jY$ALX8|02bbZ6bi^HdnW`hO zRJ&ei0%CyI36m{lDX$zk!QXr1=(vG;X8|stw9-{x6?kyk|kvY_zN2$IF)yZRx@@LIhTat-}SCIBu+CZRbd32!~|0gVB0jiexKQR(C!& zR;So<`D!>BQ=Ovon^ttYvBOo0+^HW)lChL}x2640S@5_?oVy<-)P(s*R#Je8+%YD{g3Wp+fS>e29QU-!1>H=} zF!dn6x5^Xz%#IXu&Nx1&n5Qz5G+LNLipn@G}eLC0Kxd**lv$+y`8 z$CAa22b_U^=svVSBejr zpP%$4PQjw?%PJ_>&qsH#;JX7?)12tcBk1WOoQKN3no00$!`COeQ7VB|5zfy5qAd~s@#@E#EK$m)~bgdFAx!2~fh-5_)61E!9%Wj8N zS)D!Lgp$dwun!$JeAmV5=e*vk@1dfuPAQP}yrbu425e@XwGvSOeXJKcluUDZWQwHV za#jzR))egnbbQ7&r=I6F^F6zLX#Z?+8d!bJ|C#9uZs9Y}nH1>rmx;p+F6lbU(NU$b}sg?wyje@0Fk$bn)9xA#7*;r%9-iLeIF;D zR{q;0?mT>82%;z`rLGhn$#`J+O;4vtQ0ghX7{i*1kvXV|pyg3UA>-D_sIUm7Jk#|= z;VvBa8_{skH1F)-r(c1KOpf>3YA~faQ^5;rxUJQ)Qn^W-=p%%xDg3y~YzU*!ik;qv z^hBDTP(%&T(&MHTXNo3yxA*<|j;pzw+0L6YeN^R$g(Vq|6DtFH)`*hseq7zZm>5EP z8TzL3(GVs37n3S^F&Rm&Iq@Ock@mO<(Q*&aMwnvs{ee}yQ=drDFD}*JF3FXKwoK)% zV%d*J2rqTd<*;{C{mvm@l54w>Uz|ye{%i^Jta?P|lwxnk-k$4DXZO|VvsF9*w_pRw zroLLSmor9jEaY>|3Xb1kEnuWVw{$JZ;ifi@;Tkg+tV~Ry7uPx0KpaKM=*%_6@@Pn( zYhj;uqW~Ow-n*AOgw|I|ppN7iiiUYL*giDqUnY z_|af3E}Xx|ce!D0Ecs}oTKrRnJP(kFXfcAO8*_S!6T0$0_(1>aVv%s2s+St8>FN50 zKJ}p`HGz)oJ&v2fbu!!z&AK53%T%zQziJ63jwjBF^_oH_@iL?EEi;{Z@GN`_Nk>^_ zuzCtWM#pxd(D(OvTBN|1#AC{{mIXRdTQkHaJkx*eH-T8W!6uilD?uh^pOoHv5_R2j zvWhBIo5;@XWZvv#qK)4LyXh zhHIz;^!8=;4XxSD?+A>siZvUX;gH z`a`Vz@5ECgS!CAXTgi002rt!9<)RLI#6Mrk;(DbwG@WU)_bJ$ngL77Q>cwH_+Dsn~ zk1;f#O22dW6{KR+dPb%83kamkLQB~?ZSS*Iy*2iw>csXfvWXj(@3bljU!2n6L8m=q(~VVba%t7+wq4cC-Un}#Z>>#5K6!OcN6`uqVV#oGexGfn+TXB zD^Ncsr@_}U(Hum^gQ5+7P&Q+i)udq8+bMI5#+3_F9;@Tqx0N1Y|v7 z0nHz|dhA;opH4DB;sOM$-)s8yt~E*N@u#un(QTpxuG0+?%WpqMw9-n(dOrS6<}LrV z&S$QnS;v9%wWi2zmRQ(yak2=}1s)6dtFuYBv>P-maP{L$#-}+5fq^_H9|Nv+J(@3-X%GgN$L{fa86bcd#(5vJn8EwFf09WfIQw?nN1cpvbhS^ z69i3yEY1xN7h^@6y0@Y}dkGu8a%I`go0RgTt~X$s1#!t!h8OAU<65aY_Wg_(HYPEyu zi1*Du#&Ll^GfZ4422+Q`FbJpxPw0^S{~0z!}2*A#68A<~ZPsN3@GOuq3k z1z^&gv*I6aJVJcy;LNyU|Kns$9IIe|kR`~aN6@Ldu1Euv1*15YWL*G`##ctWj!w?H z<)|-5PSRn@$Clh%;A#@xI;wjU*XcisCuNQm8%U^0+#4y@q%JZaIhS8e)VxTFWk8%_ zseWWh*$Y=u=GkA7dcc)`c{Zo9#dsvs&C1LAJMzf8-Qd5b@rRg3_AHIkxPvdQhpicA zLgv zd~uqdvNIbPeBDp2{z0q>85x`77depv2q)7%pSw;=-LH@9NnYKq9#M}pgyZ9erJ>>0 zupVfVHY2ZPa2VDLtQyXkAPphZE4Pq%(94n@K@wjSijd5>UQAy`s%U3{%1AA&EK%DM z9(lp+J#rq=BB6T>Z+0swE<$&BTgY!eu9Glco+_2hr23M9+#i12`mgoI>EIRkQJi^x z_JJvVPrrni=i)wkAqKb=@V;}%5p8qNiI1M;Vxgbw!Hdy1%+0;(PB>pfOlpN&NM-Yq;2O2l;W`6Gs zJ#U^=jkFBpmkY1m{A{Q=Pv&XLh3$d$v9-AvKGR?G_E((n^kV@2ZlJO*IA`I#C}wYyddD=1G;PSTf{WB7 zxR-6jn9-zD?ZFOeo2tH22>0TbN#n}hC3D{*N*nb{u{wXTjl6W#9CTnZ?9w~Aub1uA zkc|a{7ek%b7@)(CW!Fa3(nMG~kUYb>Hg0@VcO95GN%UkuV12ja+I`Av#l2EJP$E1V zNZ)~I_29U^mA(kc7I+^qNQ3Srr_ZSHiVKZKIkib2qS9^4TLNfJMjiF9S|$t2FCW8> z>PRpz`X0m;7W$AbL*_*RXihH?J+|kN(;`%GJYJxeA6(T_n`PQ)&4Af=A$fXM!OF2Th#I?{O;QG;`B9fNfxkTwNgq)G-dM{CbdAYbl)r!U zFK@@e1Vgp4=%yl}Zd_lnjmGc> z@|umXP2f6?v#}^o4vd6P@bNd6T|WM3=70Y37$!y?xLb%UsPBKkw?3xuKQBw^#XRzm zv83B@zECaUUO-Xbb8aPU6<(GTL?45>Cr601_l;@j;PVM8nI&}nYK(!T!*(i3ewWEh zdZ1(SE-;~f6jF-i(%j?n!cC`{Ix00#PLQv5)h?FLLzv^*rRI(mz|O=rqJ&wx zX|ck)4A2|p%L`?Fxz+5)Xl5bBqn8`n9!zsk$SjI;05IeHv}BP?U1>! zJ}=A*8~W_{)aCFIo3)Yt$;z#|A%#)_54)#^p0g}LlDb|CBU(w-v|7yq1^>L~bbN*+7c~N8za%!3C=Rsax@)$YS2C#(@evM}r3zIoCFA{vi z(J#OdjW0k76JMUxBZx_}UG}aTI`bcui1T9F;Ba+FAMXJ`0KjkbA+)?kWN$3(Ey#?M zsHZwnndJA61AfS3Dq#h!utJE2)(`lP^G#}0nJi_CkOGtmcc9ZfV>-9tAeL^1HVdM| zO8=I^ndL09EP}K+n`H6Z!No6Y2)xNvb$^1iO0XpoIaV?$HPH;zf!G78K#R0^m6P61 zU8E24dL-WpHbej_!HVg4OTfI`BJQBXDAe@x^`3#x4P*gVxhT{2|1s-(@iHprdqsS< z5@v0qIG?n##e79zgo6CH501JXt~b8Hw@&^{S%;J4M8=(j;LSb;_THjiZ7U{Z3;KO%8zP4eBwa(>aU*{|It9as6G8pV@{o*Vf-l7%(xpD z!fVD>gaN4sEPw6Dim-nItR+tnEo7bL2NvzWU|NiprA2)vmmQ(S8pmpW#{eI~M&Pi1 zm$X_~>meW{2an|9?)ms0P6KlyrCVopttc_uV!I!|V(fo?q?z+aCfdK;{BeowfmfFv z=5L;unT$<_O0Y{-YuLHo{8r+>!~#K6^@K{4u!tcPk`OhsclpxUuen$3sQlKz1gpV= z(u&*E;ge;iSIHAIaw}{R&A!Zg`IytxqkguuY)tHP)qmaZlFxZTQt`VJH+Ajz3~I7|$b;02*(d_I z3^Qx&K~ncS`R_Pxq)d#>4=FWAKUSyo-&Pj+2W}Ch99BAcNBO*sBiVEet{hIxNL+6( zn*48u=f?ImRmm0f4=`$B`W5uDq;{v*K!QVk3%?+UaBG$St9QXvKc(3(+r(Vdf9XZ~ z*G_laEBg)oZ*ij0(-RwLmXzsj75q(L> z^&3)e)kxl{#yW3`Y-o8ntH%5rk^jQcFvo?WgMgcc!4f5@`sh=mnh!)NT|+K(%!I-` zt%<5c0LQHXyli)_A6fTIL~90<%>fBDsI@_sFXXS-QNP4knD(8URC>aCy#xUeJkMFI9qHD{V?-{;k)qLLy8 zJv0Fbe5FN0D|ptQ$`GN4D%e&)E5z7;zd9Lfxx^B90vreXwdt0zGSL^COZ(x@prd}z zJII2K-Q$EOI&(UHdgExcr7^)abh{ktUS6sFj@s^#yE8k4l;MrJic11~L5%(YaVBYsX8fN#OyP(5@?^FNOQg`v3iug-?x6gN^D1F|aBq*$ms*fGWj@2uA1SNMT2 zZ)?k*GKpWKA4n7$Ffu^37D70MRL+IiL)77~>;S{PrEpx~(_+DEo3_G(`D z$V4gUilfL?!A5xOthzo**dW&si!JK{xb5gWG=NFQ0`|i)Phz^XIb8^lL29-+kt|ML zNa4=`<%!r%8tDJ4qjzk+v%G&@-4ozW$A;7<6VA>Z`t}%<;fB)iV8wxL9)61(g1}1r zvo0cheJ6e=krOH2ebdo;!vEZH!{f#)RXf#x(nGyK{FV2)gX2oMYQ#WuRgnuuilLl5 zoNRW^HXV1=;-AlE@HUhI%B(?Us*$&uesm7XDv&J-qiMXmv@K73)`Qe*e4~HtGr{Wo zi*$e`ooq?h#PI!X#$Um(WIF1IK{S#st6^`pUp?@Mcm=&tw}|a6OJ^BF)Qjej5E+4#PHnxyo|x z{vtLz`UfOfqtd*<=6j+#LTLGS7Ys zK16s?_m6sCCQtUCMB%}sos$T>SaH@r6ly@g^2BUAWgAWKTgK|o(A(74*490N-(1Pm z5r9+y47bpg8XE1J^R0I~0MFIKDMq&Wn%=H~ywRWm+@9IsJb0vTBzi{;j&baj$*`3X z1<3GC9c}P@5Be?2viC#3=&S{Os*kEC-E~@S0IjazhkD9ehTYiK<7-40E|gzr(*RiMymE2& z#V0C4;=X?19U(__dySb58NL*NL_RxLNcpH5pgbb9JdZ|5rkR|yf@4!ic=;=wmxydg z)QN5Y$O`#~fH zqV$E6z5q=|dUVbnF>k7VgO~WcOICF2W+teHz{;vsilF;{~`^r>8w?_uUoH`1l}@5!I6U z(H1LDen$rwLtG?gtw6S{0P6$BDeat#{AKpt{6Y0(%YrOgJ)GuZk@Ml+f%G~7tEU+U z+rnOok&`-nvdZPX(2nnX$2$a_9<>H+y$#@6FMeI$RtRb3N;ohG8Hp&BKwXoAm9FBRQjkqxSarUWH9J+V6NuFL$mWaO3zZ|4SNt{P{G3ONj5_?hTqCOY2J+ zk+Yq5Zq3)`q8hOgQ|C&z4OjTa=!KKs1OF~2|GOYbTa8F0&hRSPbLGnFiOwt1WwIZF z!*399W}3~xypdf@>=xTW#1tZ;rbjR-Vh?}mh@SsJTkUy2zQ?Di&lr_%&+<1nBi~mM z6Ha6QYBF8gO``G7HH4bg`jQ1WT5I2@*XlcbXC|JEuq;Cd=^jWF46`zL|JL#D02NmF z7Ny0o9OzAPa4%?@{3z9I=t4a%BHn>-ZqZYuO-Ac+3P^RiHv0%zBT~BGhxyYm&!J?r_A+>auJw{m;Tu`*| zt3HQRg$~1C-l*$<4S>=eo~@ST&dq&Y*|U$*ucD}sNm1vWyQp5%XRgor!E~BYPRKgP z_vlyxrepn7KZeX(uDh_Uc0c543#6~Vc%O_o^Oa|ZD~zxBzNt(eWN&lgbPzEn`Kn>V z&U%7e&-(nh68E}zt1=4}s}S+Nx`^wqusmLow&L56di+aNm8ocRW*vyy7n6CalOetr z(^f`s83!hd*dakmPvc{jql^D+Cw9@j)O#JU1T;fjbvT{3_Ur9dp37`R9PU5qt;Hd{ z2i+=bDbWW&&R+=S&MH^0R&`uilan<-S=)p?UpC)G9lS6s22ioXJ)$qp1d1YIGeUrh zEa!g|XyZnq`tTXpG+q~p-OytZQ0$^)woU;0bGj$VKe7fF<5YW`QeNvYIPfk=6~l`# zJCDv7(88p~4#(l@jc8<2+@it|HGkXm4AyJHk zYCYV5&q4)$r_twch}AUTE-nY8($WV{q)xvW^&_rD*Ra%~2VM8PdMG`Wym{#s$@9U# zJi)qz>^)a)1J{(~Bkv5^HRXNC{;MU5r)B?VvjJ>8U{lJY$itSHwNGaRi_*M2i0b4V zLaat|ehzeJ`_8?BOW{R*Pa_F?LYSY;v|S*LbEPd6~Ke*}1 zd)7EIW;MJx($;dA5^59gz{l#qQH6=Fk|;Y4wm|1l9QXOmnpf7_cZuAIU-~S0UeKmcR%Q^VE9YwhA>WtL5D|$LV}ROw_h51q$p}c zI-uVs7fiUQ0`2Fx%RH1vEsw-;DT z9c{i=HSoeHPZ=u5me2-f8FmXwB+cm&V3|nzl0b&-MBMf6^7NHM2U_;w->)QAPVGO8 zQi$)dk65#X%u}l%_7gZh(xcq(5K78;!Ln`M%fk;s&lqP#hUO{_e>wMumr|Uk8}hxd zesJajgcLl_IS{$Qr6Eb>-_`EW-)Zs7_PYI*GmEMIzU=dpXR~M(H@%HaFs)+@0PGrh z>ArhsWNMnfQkA{&eR*2CeQ~3s$PSysDw;J*Qls@6&yB%eE?HIJH<7 zLsnK7u0Q)(C;R`<3wK2u_%2V15$>6nnoVgKtDtO8JemG^yY!|qiqoK3=|ex<=_To} zgE_iiy}SafoCRe@oK&UOA8rJQ?kwi#wPBw)S#ccS4wN=1ars8k;pQBMrtwL7 zv6BKUwxdNV{=Rxgn?wj8t%b1)O2=Yp4i0_LP!k$xsC!(BuaVi`AkkUSKU%89Fe+sw9C z&MSpM3ASC|e_0(^_aMdpe7%Ki=C0>wj&xJ zNWO{7M5r!ToN;lLL8}_*fpe_#+Z7T2orQM>UNolYC5?Old4q*?YAFF7YWAW{%9Dr3 zXZv!01HnLfDte|v=~@XU-Dq!kbY>iACP>;W^^z>{;?B4B+6J6yN{P+H!^IH1tfjUX zA4Dl|QKSAv^KVRTBzI>*Z2W6}Pe$WOaadO(21Jee!JtUtSlk18lS=mxvYrNy$hnDy z<1^ujFmGvh)2Q0S)4ry6B`gyUK9JjZ=w1!sT(mj zs_vV`juZR>ZS;;^)GPz*%L0I8kWB>wpaMc|2DVNg8QV=acnBbmPSQu@<`sNv<`@Zx ze!HK6Z@q{hmy%L>GWJbCD{W)pKR~kFT$~e{Qu)Kstg=3-ai)vw4kWF;62(;e$fnEs z0d=e;ejs4C(Qtc2#@a-rVO}7ZQ5yhYu6vmBoCrZM;$~7}Xbn*(GQS&}27&9d+d~Ss zcIe_9nqP9c&JYFD+2S7ulxnry{~;F-8g8xJA3vaNk%_Eq{VgnKy`-f zx|YJt&NxRN3@(zuT)`wHI8`#ku#vQfj*(qga>9>&NE9btI{zVms{iN&324Q^`=|Pc z5MiO6pgVEd>PCN%riA7dE?JE1pIaRdYZ&~-7qc7_Sd>AdN%a3(0EdKT6-^DERVd#$ zKIk@Ti{g;HL>Xq3-yQXuj1BIbf~|1HghsIV_kU?@P8bnenfdfodWLo4cuacAp|==? zPFk@v_SI!c>yNA$_dNiP-H4K||LZQwm^PK9DBX@=UUQ;mCe+HOjx37_i;$=%7!V_t zw#@*eBwuj=lhw)j6F7G9S!Fo_nU(|;#wIK6K?Fi3FV476%t=W!za*UjUAqFWK)i| zPWAUT2lG)POD;Zlx!&rj{>nPD2b$%eoXCfxcUX7g^r&JQS0qGENPh-w z(R%kK2pd|vnUvZ>;*dpasQ$8`FB0_nl*d;myI^J3fY zk-Z(Jb>L6?tQa4sZsHEWi^>B}vj>}@yfJ7;6{rkI*_92Rzxs%rGr%__=KSu0PX7Ca zI9vP5*at+`_ZKyP#wq^ANg+g)SYhDzhoXorUwf@&sVE^5vG*6*toj_}$E}6oGS8_i zBa7m@OYB{SgcJGEr|9wy#@vA6dy)w4JNfPGChZpIOcXHqyu!Sqj;Zb9K@%9j>J423 z|H8Y-JQ)2#mh>fS=xGjPgc{ZM>T!wGJXbwbT|&_|T=HVJn@KsyaH8k*g-PZGr_@;j zjD1?l!^VkEL#8|~AB4&pi@vPPf@pJ^K0i(*pHtI~CqrjMSLpvc-9^WLGz@PvMFrHc6{Mc)EriI#;62WEzoz}{XjwoO6;3mHa$S$oWR+oE zDM>*sS~dK1 zY<|{7*V3{%;mx6dqL`rpp%|=;FV+V>iJgzw@cECK?Zv%eUyC6}D#*N!4=e%M{ig)t zn0Cp7$P+{#v=o;?+%RN<_4<(&>jEP&jkw&tFaP4qM;q^?1sYIE+N*C=< z7uV@(*x=50?-PrH7p{pQ3HC8@VqT&Yf0bZIweb?!K2sm(1CNiTpl(DKLmR&}>OSMR zi8SIi5FZ6BTt#Rf$UGNi`pnqMM+p&ygZnwYiS_iJmzr}lpQ04Y_I);a$r3O6Yx`u# zCZ-d+BvB}g^C2yScanzWjIHKsdjg$M<5=_DD8#nTn&XRD38+qa4~F7i$_m~Tpm)YgV|V9NzvG{H;S=w>PCN#`#$O08e#|kSzN!9K|IIW0iz`;0`{B3T-)&!2 zX|++1yr1vnN>19EOx!+1V&3Or*fe~w(8&PTvC?yvZI)hMLp#?ok4al_Jdr$MKUjd( zOXDG@{hP1b_+*F$%*^p+Un6U=iLNtK*)e|OT_V4-aw!f`;v;*-%ke38)o!{3LbfwhIsGWA4^b=Gx@CL#{(LZ=GIvwX zz}ox9JwEe?d%d-n(vB)efqD%IoZi@Tls&S%%`KS|?29(eB~CdyueY23m_@Xvrhod* zsDUTnb{GoIA$vSrpliLn9#%Dxai%_Ek2Sj}149CstZ z++_{G<(A(3xFw2mfDy3>O2ryz{8TvUGw_eRGL=+u%hQd-S8Ijn{vghftg-jNZpf3z zO=`%cVe5TfJNTEZdYoV|QVUTqaQ95TQl~0C3MT*FFj;=sT3;zR&2iVLc!36i!&tDx z7uAm3AxP)qc#9?rA)CHnF;(CG==5UDn%X{m+ci(t;DTWkwR{qt`iI|VfAiSn{cjeL z<+>q4I(n&1dW)YX(;T|xI3?+h8a6{)>Es523#;cnrEveIBh7qH#;x;b|3coBlO%B2 z8H{U?dQ?2?$nd-nI7eapE52#K7Jrp^MRD{LFr#|94#}iz#2N#d6-KMn&H{@m&E!J3 z=3+qTG%4r+yjI$VFE96QIL8b!d9HODe#9|-F5x1#dA&!)Ep<)pxw^ygp({o=I~a8K zg`$*9MtuT5b>41b=B_nZ`kv0z;i#2rpgDLRc2HgJwzJ-rk{EV6Q!oUpGB`7m5Kc{y zjN>3+s$eBn(J93#jivu1;uqzkDQ9W9=y{^5iX1T5CdnWNc`6!DOh^#s!uzMGos2+9 zZT*9!@97!BOZvuSyniNY+OPY&?8B3j?@?_8230;C?C^R$F`QCd{*; zj#kKPPF;P75^4=2YAL&3A`f9+lady=5y+;zcF(*um)p1T!#mimp0vSYywMuK`=lAh zAk=qNL*Hx4Q-b|iD-+Qc*VMRoYF?1?IQXBg?R^2uQDO<9cs)KcBRnKd^`j09EU{Fniq7MT`-x5=c7v=mL@y>L+)b0 z@W!*9Fq7vaB12u`QELYs>>6q~TNuqo)tALgI;wX%TuCx)XH)4WVWY-s6jt1X%bm|l z@}DHn(#Lhm4=XlTR82?k1!GMqq{IhF);VO5o;;5y0Ca6mL(g-kb)ec!x5MYdBe6;FMsZ z)2O*?QefE2`x(z(l8v8SAe9NbC?ojpQ@@c;+|4B~f_8u}-#fOMD4_w?g%WS3UleK( ztR2k?4A7lCFO3@en@QW6C?AGjc~YMVPGgC*eAEPco7o3Ro(IYur|1o1zsT%DFaex*%i3c@bJd)QL3e({Hqt+Dlx+N^ucYBqy^ z!?y`dG+pi2p%-=n%LPT7)z#zNgYCouq-vJ9#@r_(bD%?*svL4h?ki?zb`FZmgaj#(#46)`H4g9EznwtTuH|E-Fua2Vgm2dz62_RPa3`%-o7#S7usn zSzac9ye7i)!)DWTw(|h&*|;s;VKs0(3s*ngouQOxru>==H|D!*AINRIvT=+*k836k ziPspDnJvmou*_+P7)AysrMvG|U4kei%K@ybA)9gi zcHn;CBe7=N)qYU>igi8=@4PXfpPBek3X&7d9&3)y=0b;(i5*oOwf$8sxQg~kr{p!t z&iSzMNbBs5!!bOOGPZ%0*nY5xRW{!Fv(zel%k$^XKQ^N_%NTr%{nUNS3)z)i{V90- zN|suUv;Z}shvRdq<9uW6lS)ki?D1yr{jg_Ju|}+p3wyD(m!rk808!b%+G}h0^Q^k5 zU#y(h2T`ArT~+>%rn8KTvirXN4Beg5-QCjN-5o;;NC^zmB_Q1?Ap!zJx6<7xNOvpU z9sle8J)h^z%w9#XaeupE1@*Gy}bb8kdFaCyp#=fj}qT(05U+hLnSR^+KX+g@iKKA-N-0l7cZuwsLxnXy6YvxDas0n>KoUewOX?O1> zL{r)s0(V`t!|Z{87GG3K9-~EE`!ADTA-0`An`v-m>MG?@4yI`o0^xbD=HKE4Lm0aG z;z=$E@b0Ya@*%yjMr^$ZjuNOTTq$m^5t<%728kQ>h10b>GzM10YGs)?bN!_VOT0&LW&Y9&qVr{0IqWSfq~wrPiLQ%U6sOC}~GHJayB8HPfM3QZQnLmbbG4hU(j*G)|Q-DG6=;_`^O0~eTfw1`i8?W-4M z4~Z?v=tCE1?aFK@WNrY3#I8GJyaS~B>B-r4bkrIQ7NV}8r!$&fSl3w)K;R&`3d zdM#esMRiDgp#Lzeq4G?DI-6BQ6iafZK|v6SODT=T^Vj$B4|H_}Nv)=BeMA;0M-<;h2B?J(*diCU3mT28V`LgBlV-$lyrIR=y!iAS-xAEyIGakUh_SiHpM( zxdx?m-@-;K$Qa_>MyjQWG9upbvx_N5Trio;wUff8WCC#L zXY!o`PG7$dtOm-Oe8`ZA#IF|4*U|>c&bFuA$rdk%g$n3N?&|%dUOgBAvA{ zeb4c4H+pg(lB_y7zr@7a8&$}00HcI`6mIvpjKN2<7p@TwN*do>)C}!}Ou6<5$Sw|C zkL?esT{DN7$z$GAp<`0Ar7;}V9L>+@p7I=J+M_zM%L@1SCHvW4&3i2U0-rWULMu4I zIc9_l)6Ja8Lux}NS@PpQK9@ux)WB&~RO+xQ!}3&_zwcBOj<;5rrqh!VH(m}DwbQ(~ zi4G|fe@aF%`BZe!DU)qHqYFlh{F8kf!OAsjy}AVdGX+FB=wcOIhDNcm$onzKltxxE z%>m1*Gl53=EfQQDb*6wMrz9asAJo>(*e5i!3qG$c!eN}CmbXMBB&B;?rDPu-IHmFR z$I@g&T%?hk;}owJ%$dym<#@EM;eQ*}z^_vyO#sK({xQ}C;23d*FE*&r#Cl@Y>2DJ} zFf|>o2FX7c>KFd0*mbam9H<@GBNXFhuo!}+ zKm9Z6J}wUO6Lv`7BKL}qgp9L=+19a4wYkTqQ)#pB%3CX!7*aNdOLA-IMV7zqr0Z6( zmMxd_bi_ML<ZcHLN=~Bprje{|*eH3Ym<81217Kb~?& zw19^1M17g#^#*=;L!olVgUG9ZjEaJf!aW9YWCD)E=6xCzBLu_XSDp_|t##W7i?=h{ z=O1s0lj`bsJr@<2)2x2t_uqA}J2U267)RK?H7FN3>@m?;6965EiKb0HJrTDR@JF2| zEWVr0LpS1)^2XJt=HU~u7#&B_){k+>hCq_VX$&6v1{Q3&#`M@VI;g!0isK` zVsEde=xg#>u_@gAk4g3T2@v(yuV7{U9-sVk8&EzUu$5GPB<=I^OCi+;S0S`LnR)@U zNxWjGj(K45NqyyfwdXy1`ezEvEs<@%u^ZXZBdD_r%O;swD-SY`e2o4%unym1d$Esm z`bE~ru0f37Ud5U*c!xqalfy7Q$((jz$kZ%olCOA}^l?nHEzkZsxVn4VjJoz!;pRgW zDN3fu>10!a^Kmyx3UOG~znxFYG%Wt4#Y2;gQ}?valJHJE`l#xc9V$Z5SC# z#7FLnn*;$Z&n{-HYkz34G|2N_sCeJ(g`+alt>wwoqF&NKo&n}nPMH1!%P+kirX&{0 z<`RS1*{;iSkUkX#0| zxzBo8k{HprNvgtf4otA4Wf_XiXp?zLYNtP4qWHAyH%<^IMR2e;O z+JD0OnM+D-qU_piAdRCpV+4%GocESGp?P-4MIAeEBEMh$@v|c@;Ey2Ac)QUD#ITx0 zI7*)Oj5!&-hn>FPA^qm^oX!N-Dxm^z?Pc=(r1X2^BBK|=lxYT#VbXw=s@C?NnDdo$ zf23{**a@1eCNE*UmQ_Aw1 zC98J8PVDC~>K@{``sGrXc+#%5o9dyBK?zhCWi`K5icR8B>YDaofDhmHup+Ofb8up&d zDFBJVS)eAT8RF2Dx<5EdjV?8amZ9qJd+0E3vhPJ!SG=!lFFq8jA7UbWXA<-MH0?ZR z>G%6ud3FC_sZui5@#}#q-lA*ZGO3#WcdbvrE;i`}`MLJ#AR@j4NkwL>Q;};5sfh8TNJbK8wl+!4(px{gEKlfxuTx(Lq(PIW|-8WvCy=lBEd z^bXKV6Z>tgr|pM~b?y2sT@upK&qfnb%jv`**}aYYrJr!B)~k>DRRr}$=S1YH4lV~a zEe{iYs=rB2W$Ht7Zo{h;-fgrt{;AW|rylhSG+;bL!-*>dYVDDI_nLc5A&cvBCc7u> zPU|MxUYg&YifB7&Ubk%OCmMkz<#jnhawe*fsrk-*H@RI~M@F^!RaV2-gp9dpRe^c0 zqFpzcjIo5ASENbnuahYwqJAK+X1oO6lYO&mrDoR+HiH2t&cmn$7d&{=fsioEroEv# zr;aXI_~PPx`XNOgm@L>A{MP~ky>cA!OSL2xFq5Zp^Y8SOpr&h_k08}=QDTHgK_J*L zZfK&HE;!50%44pChUi53qJs2~x&1fqbw}O>!{c`a%`u$Tq`3ADEj2dywEXhr#vxSwwqz$5~xSe_m72NYisA64tL% zlE{Tz-jO(}6bH~eD`_rc;+07Y4gFS*l#)jDD>SUl2<>W1ha<@nc!f_CqheK9c_MhDY2!ukUr+097NAr z2fSHMV6A-or{EpJ8rc*g$c4|EwDe(COKyG7sHJA~F-)YwhnRwixf_z1cl%z;25;uIcfahI)`-0k1NPeFVRy8k1 z*r(t9W{H(1DW?pnBvu(U{)_?vt8pkpR}23hvu^qo=1~cJPwGYpAy3C!l-@ zMfn%M1t2%Nsqm1(-z7Wz%0##cy5&3ec^^;nwmG8I@|*aQu7sHui&=^FjUsgXlx+S~ zGf1cZsim!>3H$qFIK`Va4|HqG+LT5;D6S0Cd~1fS+Hozr24y}c8K?=>FG#{fS0zK? zw+cv3!e@Mq`C~}sYBiZ&>x?gHO0B#ZdW4b!IS4!p`)FisW zpYio`&IxvWt+#bjVxgmHPGu=1{*4xURmdoHN)Od9@!R}@=fk~p$=8N!g|i)+1hnTp z-+t5_uDvR)ua?W&fvb$Uj59OLea|I|A7T3?%u*^%O{EUCNz;bvim(>|9hq%6ej3BsQP{5GqXYupNKc5P>;D=Kr9uceS2}xkj=K(F5(+bkSD5v8`at zIB-T2+gX+K@}^-zC7%kph(FF*4XdIId(QzDnpIN2(U$Ks;w)lEQ!l&4Uv9}kyQ zQhHWGQURN$&5kn=Fru~#Cg|d|OcSLmV$P2JC17e(r#O15L^E$Mec{ZGEvh_p3&sZQ>13SJiSXl^O2>2iKZHL5}tq;xUI@?)PzvgXzG<^4;L5*CVKR+45s zu_xwWSf4XLFEKVv>;`{ZKS0&)QwXSh|ZZ_dyV3c>~Cb zSogwD=qBc%@6+Jg%RnU=uwhS2q&`P6CPKon6_D}3QpP~hZX&JWz} zrc>rWptj>Ctds@_1;y-x)0k~{zF-P1AC|Lkj_uF0A-CzbY zO!M|DB*z@%mUCN{e|{k+QaW1f+ZqDMD2Jg#J3l@%G!Uua3gFOg(O-;MWdmVS=j)BF z(Wz(@UjqfraL>@G{}7uer%X|*b|%N6X$K0_v>fh5fNtl$hjOW9dt(SdLtN3!4Re!K zdCP4A?N`cx?uliEHP~hH0ca_9y*}KxJk^?w5d!g5=*y4oPH(B{^r~f&+So(rBcsg+ zWfeT`%L(+}&h@IRunLvOlZ>60r%UcF12A~?^OfwnoTc~q*MkmoG^WC76b5%y<1cmW zKfT*d^M67ESu?LUDZ+m#wn|}TN5vt$IL^mM=Yj`+HFJWT`gescaL$qgccZ@AU}hW| z^_nP6#v2vNZmNJ)-Kf$NmzH1w`l$|XgML?y=FW?!V#FdM-|`G29K=;Ow(Ae$pGDbY zZzZ)XJH>A@Zk8leF<=2fv*-*q>pcPkGMzf}fa}?xBDIPbkfPJ&Nm-g=X`HVuoOO|s)kr%oQpb7O&~aDdLmV%8WG?FW(NiToTNyz6NB?)6Pn2P zpS1)_g5A+;bIvW%YAw9GLc3b7vsa{{aGS2Gucx%yc#k{kV*@sbM8l~Bxl~TMcaiL) zlqoXwN|YKi|ror}LLr@`6t^G#9aY6SClPdfDD zXfqBry@N<`8$+4(GBi*7cr=z!<^fjR*js#NdlmVqjZm;7MBz8HYpJcIy3TmT&K?1vfs|ZRUp& zi*Oq=8q4ac{O`QdK)ZP8`*1l=6JUxYrkgkJPCHlk8sWyC_kyoghC zNvdu>e7Bf@3$WP|U=>gR`D3J9gJ(d-)RhGw@Z>xEM}xgP8U7%(SHg}^-X={zi*LJ& zo|zuanLcdTCoc2_>H}kIi@=FN7d3d|lzTzI(j1?P1iXXEgFO{xc}U9F`cY=Wi5Wq8_)M7NAsjZ11we>fBiQK{%bD zVq=Y`(m&ZdIY>0f?V2aH>-&{^q1o=XFLAK(OLiV-#OjvxS5tZXwznksXt@8>{MXUM zJ}S;DuQ#Wjpkg=W8)tEkB%U+>dk0eb;n5SGc^>WkCVcQyn&0Fek`?^@bbfmY@6mxQ zNN^Vg?a`Mhb-9bwLCIrFHj2DOue5O#`5sY{P)H{t1wW;w@*2 zXBb4KBK52ydtd>ypPMzt_j$wNxC@&O9zPO>&!Rm{Djo@|`UR5rY9*qqP3Av~rBn3~^U6u_fh902wZg?t@@Pg})asla?W}G1% z2SKFkrZMVLbYQz#$yf8o+@-b{Tj!`Z5|642B;9Ch95;AMZVIebh&y51*W{X-BSs{| z3Bl~xS=fyD(6bF{Npye7>r{ofk;RusrC z;j@U_1u{B3#DT(tyue;@ac%eFG>(ELxM`+Ln?b%0ua7ZLp;f2#em;WlK(;bQ=1U_u zp*clm6d$#}-ZP$M|H_+vBP-$|#EQ7sitZ>B>hrg+ld@>R`@Ei6o|*GPjF%=EC%js& zAj#HC|1TbT{+_~qN?G}_&bWv0gIWvwaOEFCc2SF%0X7Cfe-6aD(QC)-E(wTuWlHh` zl6=L7uWGEB+81*GlT7f5;LO1PF7yWToV662--n&x-zL`%N1q6s_?zfFdnhT+1Fn*p z2I>|`iVhwYC}cNuHvQ&gj*@NXiTN0?!m5*ipc}c4{th zUl&VSVVZ@6P%V=+;S6fJ*f%F*u5u?-u=?_lai?`v<`qPlGkMbX*E(BQCmG9s*Dco0{{NO8gJy^O&` z@%1ryW%@6@#tqk_lZ;m=Zp3qp6Jsh?YFVM!%=ob210lYp{wpt=)VEYv z0ONjkGMi&!{MckMqp%c@AwL`^9uDeYdzb_f0&@xfQ0|+&+8N+AseWGdq{udW$67N? z!-w1I82Eoo(i^Kt40N&%$Vpt||?mN8R5*#KXr^vB+{*pE-Bits!F(`}0Qs z`O+{I1bycvu)9Nl3{7S*q_q(Ys4M=Rsb()#^Y1c)tNz9UdVblER>3dwt&tt77gd~yGrYfV z8q|VN#6bhdE^&f&R5&J#PWQnN$Do2nNo$LeuF4#P$ z%zGOpKMVGImS?I4HIb*4&_a2b)b!rZm~2?^QW_wwGjkw5>S zeeBz|QtnMrzSDuhb$c8HU(Ei2lx{v8zMz(95se?*CEU?C+aKLo%)XD1y&y|MNaZ0P zYtWxRyb!;YQ?`0J+Y+b7vLFKSK+|Bw=H~e&|Hz>emuCTO5iNao=9Mh`#mAIsEkIN< z`q9MtP{mi&b`sTv?SSPUor*OyuxQV7X8E0;%sacb>NXl~hMSa)`8mv=Uazlp2I9fGmxlPQ6X+$cb9t*hbJ|rrFd?3&W{H&j=qgQ^dX7JY zzTyz)&B#gyhOJ-knU>rpWA@MXP`FLLd4!$cRFJ>~o(sXB>N)UJc2_(ijJq}_Az88w z9d*}wnZc&UjmpTt3pxjk%YgCP%o-qPJBb^#_{Ka{f{qEM32U)1-J1t#} zYDYy$)I_Ln`pvGq)v)ZUnEz@n^DY{bR5*C=tl*mza(AkXeh18jJ!4%_Qu0!V^rgJ{ zHGx@@p&MJK3$QdZq{!+$Ggr}@wiXi1yV5q}`PF4bQF@(>h+e>yR#KMkdh#;BMR0d9 z3@koGZ)Ec`NPcie=DG6{+!QIbqZ=SS9xoL;e}6pb4Mh3ZKNeqMioM=)#@$QHfq|O% z#dv_$6Vuozqn(vU41@X2v5b(MBwZj}VQhPr%oXutLuB}19uVVzktw)G0`$VZ>A;tG zU&m5l_OhCm|8{+n;leHF${B7*N+&AP*b&~g@5AS95YLh3ZgR2=%5_>dqh4{$Umv{B z66tVBaHE?}GObe8L(00#DlZC32D&6#y&Y;&1?jU1`X_kRr%^;ZA%h=EQrbeb;M=3$ z>S*~Wr*LSdfxAeY(2Pk?M3@C*?2A0rU7N3^EfDFG*IrFjV?*MnBj6?k3ZAH6M&Xj# z+EdcttJ0xJbC_aa-MPUz^cHfd3!6FC-s`*{ULifw{~T5PB?;Wiv}O*9q&_@QG01nT z3O`j1{#{)n`=r$z+Fy8r-6ZN@!ptP~p1+oNh^)QU=09IWf(Kmy&_o55wLaxe^{KZ5 zs`svcRrpgb(y&qLV*1;>jEC0GRcQT%Zl7rj9s&Z%H9bXpKQqIVs@8KNvbP(7mZRNc zRBpRn{d3D}YbmgH5UmWZTTB*}<8SgbPQ_#5)v7}%<+Oyy;Xm_sYwOVlrj=r@mK zBhgBd<{m8CF|wwRy9~2p2u?^sA_duCTuQ=CNgA?VCX^As2t7Y-SPRhqR$wR+OiZ9T z{W)?gX-RQ|CW>h9Zu0Mi~#RC#q;-{qQe&iK*C5%rJqwD*I2^l4`=Xg~m&_OU6 zjcvRyE26ZnW!kKAtm=JqOJVniu>m=|Y%`lLew^JjzGO){6z_vfGs_b&W9wHm4^+jN zY@!dOBHEI^b3_{XTAC}1Y#$lrqu0)hpG`vRk0>l~n9x{sC5jGukgtWI9;$wd2;D0$ z@!gqIFwZXx1-G{CW5U8Gr)QJ_-W(nAJG!zoF^rkP#l`|xp+Iih#QFC}fZ-k}y`}&{ zt&P_lhPzlqwO1WeewrA3G^V#17F0%^Wfo(Jz>_fxYNpTkoB=1u*Gb{Tf(Tid0#g>E;MVU45$0zaw|+6?S%}^RrrTMug%jkYwGW zomceX2}s0F{%#(;JMHiUoub64l=u4$Hw@eHYy;L>J*)!B|8|I{gnb`?{DIEND#amR>%5YXen46}i#{K#L&T`8?95cQ=i)G1Op_gqJDd zYnfaGwatIEZJdjyrT@jwyb_(#ENJ-MCsh_W%mT@;)DQ!=8V;(cq>7Q88vB`x#e(-u zCSkX!;TDbi7o^_SB(zlv$`P+MBGU`9;K z^FeN6=Hpsf3wToRd!^}+fk9QwleteTV2o(3_g`;&5>+es`6P-_;NUxw6r2hsWy{Xp z+KR#Z&CrkfTs-E-R~mQC6}I8c5~=yB9zbeL=k~&b;Kc=J;2bDpjwxl|pJJ3aRFtRg$-?r9$h5;t=i!9!!H4u6F@7~;r(Xqvz@ z_Ah+iZG6}7RP@rN);)DWj2nHvF7cfqC{3gjzl*C}CDnKx(kq2ZVF>wwMj)DMFWvn`%wV83$Tm-P1g4nrt8 z8?29+drLma#u{y*9x{Kwsus)@L*~KJ+qH(%$`HwiR!E0{W9MoAyKgys{En}FJ(&Ie z3e!A+?5rZSWOTkTUvr#=J-pSqL2G+7(duIij&#{1xmK%ANyL5zdF!QoMqc!6fnWXM zx1?ff2`w;F(kZh1PjvI2lBiRNIUATH+arAhaIm0@<`8_Ad)LutcI5}}Ii-mv5*w`C z5{bPHhN18AX+8PmU8YfnO-&vn41yQr97@Np}8jCdiKf>|Wh2P}{fEybgxhRsPlVdsX zl`d;lkXZuCBedjKUIg)aFRHluiCIi!aRWb1uQKYPuA;Y2(Jh#c>=9z_yoJ8m!4n}) z=tu8G*%8o7&a2@tlsysunWq`>aPF_O(W(8obFqfpbd7my3qNGzMkFrMnp|U>4>ErL zRFKkrVB;emFOZCy7Z5cawNJVYK2s?2N;gvsmyuy?36czE2rd`}`w4@YiI}>Z)Iql6 z#dQt?nA{}~;TPtp{DN8vkE+CYcc!b4x5`o?g)%y19+nmSn*(zhu!W287;Ko6k*dw` z1-z5n1kH^JXwCty#h9)+d%T`K{L`SB7O!0@pAR^~WVUQvJU7_nG&3}WKHgqT!|1gM zyLRfGnozPIGrWmT2MP{VH@wA^Wr2SJ81%Ek!TPBzW$C@YU8NO&N9|ZwIe91azZep+ z{|(F;Yw`ol9)P=C;zBx*$@yAAcJV(OyShl}n<RSw6ubDbhoo=InruY*nL=9Pj=EDdTh~T60OC;E52$xL|w=wE0^FNm$G7Z7qkDeF!3^!^75zpe(~EPpYd~+p(HZv zqY#Yk2)Xr)EFVD+T}s|fqYLw7LxsZeow?I3Q2M}_Y8{%tFUJQK^1xD$s=(6tVQf0B znG4`!*SZ#=*tKkTxChxjD>d&nM)uaH?$ATBca7Ph+gEI- zV3EBc>JX7ae1%+H9P`5vhC)O=;L}3N^uJQ}>pu!-dh7klXb(WfVLiFJ?NE2f4EEZ!JU)w|M-RAuSo+tw_E9kR2f?Eh zZ-<^tpr!K4py`qBWpE7ZK@ursas?+*o^xw{am~KZ}`RJZ)z1 zVTX`c*U$ggu@NR_1|_=FhVq-eR>C51b&4aR59GShs-M`>J4<}0;olX@ElAU>gLyUa z^NBY>ZV@RFg$hAL={vlg&5^6j1sFs6J8fV`r=xeM_VnNSOA2s81|j&AqX-)DVEq08 z;%-W_DphmIB9^kKuXkXbU1s$%;^hz_W)hUSodGFsMHVX;;V=8$=U;L(c{aKBr(9m; zP|yk;m-Ae^bR-oWHM!5gC7#1|J#We%_0#x~1C&-RH$FX#;XQ4Q)T?BF+0U8#HaaJg zF#n?^%*DAsH=I>6x$Ql>C9)OQRGkW{g-4f{Wifw>q5Px$I8orq3QrK!!^;y8>-tYB zz45N5KLgI@3!r5uER5(M4xu>`-GU6{KfUWZ8M1>!T#}&21|{w_yvbe zH8(dfsu|}R!jzx>ix$=yfzr_F&VE~aP2#Sw9qF^^e4TYv;(XlJ#Kk>G$ZBd@)+DV; z$-NjV0?IO*)@rz;CaNy+Z$1w=Z(nriw!I_c19-wO9#wb1qaii|dB{Q_i8-j}NI6y#JpCAX7+DSfGBscd$*pS^xC`b#!#r-mc_d#(ogwNC~$| z3|p50;`#MF1eEhOW71ssG90x#dw!vD=3i_%T)UI{X-CJ-rgSJ@Wgs>h?&habZUQ7H zRURbnjJB>8cD=8E)D6sr=D>at%$p|>DSPEAq@U}=BwW8Zn{3;+IA9fa55S~R{_usv zU6#cQBTW(YGVxw`Z4StivE5)T{Vb2Th$W7(*t1q`CIn}RvZ5+#VTA^5z?{v%vF?A!1y5S^8h7Oz>$)><; z?ol;R<62z$TG!o!EVFp_hTC}uiH$rK`=CH55gr%b5Wp|c$)o+;U&XQH2i|JIxxx!(g-(8{7U>>#>=SH>|2Qk6b{b7TFc%W)PPqFlV ze+sCY8dP|`ggIY-X%q}bjheKc`BnX`0CcC-h?>A?sf8rvebN~>zb(3Ch}c_O!|QWa zP5W)Bn>Yl)&)=v({dR@LYPv~say2+pqSk^2KWXZ33Q3~J@%ggA6dy-SnTuF56BZI( zMcTwzY#Fj#d(Uv6a5UKVg9u=(gf3m<0NADbu_67xud zy`*iSvqaRWW9BG5j^<%OnKv22$Y8Be=~^us<6ZYJNFm)b-y|K)$ zF$q7}09ziqwV}k~AU!zI_7h0ns0IAwxc_#fJv@lI^PNRn{Z{p*pXZ5sKCM_Kj^|Ib z5s_P}i7;B z@r<5PjL1zqtu=dEBDm`Q_AGpbj*IXFZ#%HB4bEe{IK*cM<^)%{DCB|#hvACHQkLi! z1DA57`g^dUfh{>UGAUy*N3CFZIj*DWtEO7Q?^YJ;qrXdou9Ar!E}xsbtDVs>zb-*E z3MTIuxXM(l+*_}akAIRvp5zWIL+f}3fm`Nqbb8FS4R9{IM}Xx;#B%Ve3TU1`LWcgU zT#!PMViD%B5p>Gdgth3lbjHz9kPiLd=_$*Uu&t5EjhRwe6%;7`wz;mRa&LyJJW!5Pi8F_ zF;gEz8Bor{Ak~82K?Le+Ps8oGQ5oa9+B#A>ki7K~feaO%W?_$Yll0CQ?Mr#*+9nSS zPPYv6ibS;N!J;s{)_2#*-zydXk_vn!5C~~CnG*~gCS`_vl=a_%N!{L~e7KiK_qXwfRJ$ z^>%!er8e4jfZk9qA+O2kpsqG$Kb$@e&YqFEA}xxk0G{X_LYq0wAgc;>SX2Czz_oJ0 zQxGk;0wv1k-IcHWD$Iy?6{=0w@l90({=lV0Lu(}%k3 zz~1REIEYlathyNaw=s$^8977xGK_|p563^I$cCsvN3xhS6;F%u9?SA#ees-yyJugh zE^mk{wZ0wJ8CIZaW!%b*^4-;ulK(=WU&mYP9u}yv4S2Uaw&;Zp>mU^QfpQ#sO%L!W z#Ra1Iz)mAS*!JX~%mldu4iNI}sD)g(2}vPoVx~>V?)I2#49BOc4>;Av{-a zVuXk>gHZZQ&G^LxzqhmZWz6(eu>4ztQ0EuaDJc=pJ(PPxIn?1Jq>_JB+$dG@MH0rg zu*BfKm7bbk?4-#KqebCr#*F)V@j2qo{jO~=ch9DPA6?Y?Bt9O6v_Cbx$x*F8pzq+z z5~p}9m;}b;y5=)}x!-cowqjf4aMZO@*&$(rNfH6U`-)bWB)hUK#Td#9xlSoU!@eH} zX}{kjq|^LmCR3--Q)<}^gnR8y7)_NGxUBy%2@6FH*PLl*y(4cT&Te;wh zCQzk{%>W?NRAOBKFu3hv@=<#^MjEExO>z-5v>HFHUhRZ~Lr4vxjO#JaZAWCGWHLG_dfNnh4g}#Djg9L%(o^F;DaHsUGF~U^duqeUoKIY6 zT7ic?Puc&Vv$f;!oBPAVNA$w&!vcir*C9bZo`|kawa+UVkyf%}46v~;K!=Wk`8u1G zlld58y?NxzA!egL>}Zm9xSZ(rT8-y-G3OLuRjwhoD*~(+jRT)VCcgM?9^1*(Av8Da z)f>je^oz0?V;Oxo^KSEKEI(B3=`5c&;R&;SiV#}1>~O$@*Xl;;%eUq76J0*#PS`HP zG)AV%);P8Bg*`$;&m#O zsX@@;X@?j6cr4p?@{3;54rm5rw4_SS1_|KP{4={4W5=!(o53=Srs z;e39Py!(109>i(kpf3PEE*nVM#e(Unsi4{B7&%8;$vQQ zYz@dw!R2^ayJ)ekul0v%PYFrbyGs=aaDTe@q(*&59E>iTk~)%lT)OtSAY&5F>|54$ z)N!5oiO#s{?R);u=tPrDwJB7>8vW6}FTMvBgn|xWOMj>~ zGh|r4e~y?(f4@<d+RZz$q2SHBc6_8Q0P$o@U-@6J zD{pU_Uek%mcx*R~3sBLJa1~@1#&c8jfp+XV>T zFvk4u`Q=}x)RE0ogQoh|(`?lp3mswOBt@ClbK+~w*Oub|WDE@u#f_n>5EtIF02f|R zuHXy*CXO?U^WoJgdt!3DbZ5AI@S&!|t5?-Ofz8xaVz&&^1-K1QZ?s;N51UJIlIWp! ztMjpsBw4(x$S#u5a{GhUm_h0;&D;Q=^@mlMeu!Wba{M6WHa5<4%%D&{KWzPogMeg# zUn=lC)S&<@J|HVqK?uvH@VhabIsv`|QH5(jJka(YY8&M4`JX_uQfTyIZ3tMBLomeT zHW)rI;3kFso^>`J{{A`D*+ber@b0o)2&H#b4Q8}9B6`U|jXa_NhT+iarl*i7)U~cX zJkx(a+S%!e`p6|MIfysGljmUI$l~KB_wl^H(P@*!3sFp}8#gE2rBw1QfWgP5<$r z)Qh|;p~A&V@eYKDjfv>_XfXW+_wOzh=Ta~kQnUMc_BhQte#b1XkH)jW{zY5R;(eZ{ ziq6qBS(m5UbH2B+;+tQ+4;a5_xv@3*#T)#*l9=1xn^*TVamf9HwxjVMOIZY+Z|ywMSQ(UQ55TzA0e@?9qfhq`xde#xk~ zKSAH{^3;L6PzEQAQa^4fT4xGFr`-dGdPt5L?u}cMuWWxqT={We6Cy)TyPfUzw{;^Z zVl`3-DQu1bcA@TSm_T=#BvYP9YNru`HIxpXkEA{!;L8H-paJ?pJ3R)xP@TM$vM%T%X9aKGQBXo%0Z7 z*X8r5K`qOm#klg+u-BIMk4C8|2%2TAKiDCO_B3G>ZroxU@_S4Fl41T=$c}8U-Nhry zPF*cUN-uoSxC|mDPBN?>aHcXm#QbHo zT_V=CZmeq}4=AUyCB#v`2 zef(|z&Y8Wr{R{Ey8b|n3iY)7tW@DNBiV*6r*2^}B2gV5DB|=_LJ1qJ~+VW3m4+W0D zy}R%D?VLu(aHF}fsL?NZ(Q37_C7J(cH9KNDR4YtQ-ZYgdUdBkSuQG-=4-c6^yBm`lu68Z zJtPk6=iZs3J2?~-bt3h*n=%;==7ycsRa2@q5^@ply7Sg^uY8gyPc(U!j5#guWk~#T zkln77O!IzJSnk4QPWk~wE642JmA>w4P3PFnOK)dr8F7G3oKEQ*H`SXsb=ptAVjf;| zb~61E3$q*mR_>E(u0IfxlDq8d%HezOD-Z>c{}Z|3pnq7y-#yaXtW-mk^}mlFe8bF( zUm0a0hE9uc51L)qJ}n2LnfViQ@pvZ-(vXyNU=DMuc1pc%PyfDza5^L-2IN(5e^5Jq zgC6XN3@5P0syF%3Pxblk{R9`h{YOXU?U;6iH0Be$QvDyw5p2vY>LoXThh5w_Xuc?# z#Wt+|ViU)W?>c7Yqp*~YdCL0+i$*XiGP?LM0!Cev8A& zcEc~r4OG*JtX29)xUU{b`1)_cUUHlOy%OWpF9DX5wkht*zjTSZ^Ugd&3|@LelDOT) zvCRJhwKN*g+(WOwA9~O8$;<~E#yQzz;Nx6gDZ&Z;**_v~Q)n*A$IwC~B{VZAr-&-6$(Uz;0?LXH0cJ>J;~o^!Kt{| zysu7MzN^C}w|bVgru)CPt}39-hUen$GThxA1{8O9w_#)WfZ@)HyW4=_?(PgJuETY> zLve?{?|1$8qP^-x(qU~*D5Q&F zypelJw8Z}5q!tJQKvq>D+{~Ed+_+IFt9fdie;O`9GAyZBRZy-SNcxTsJ6ZaN>C=$XOdR zANT#xjYTYY2|btgo8L`RsFVEpnHswRzuBJ+?bG`ynfGTh|0RYTim&+{RkEc~>=L+> zILWsYp&EFF_aPj(n(cmJo$gr1n1t?1W%aiG+t$~iN{$2dlinFO$nmCV_Op?|6@V6G zorAAFNIEDyaovyI@Qs`aMi0u^%NgG@g(vP83*e`srtWnVrE>F**8zsPm_TYa0_Jb} z0Q9G`y$g*|XJ3TtE6!HZjLT9)s6^=IQGXy88khw{QkA#ZWR{9$zt>;sQ;f3?CIPYNx2p;!m{I(T)W0q&8sACvUZTmeRuC)<7>`q6LWZon4IDDa_I=Ve|@_01LP zJ5B0Xaa0xf($oz zrB@(MmV3>EnUMI~&Rilb!_DbmuBqrYdiJi8!9PV7>r$8y)+^S&k|QN3wsLKHz(E;C zDvqIs3f$5wyKX^AIG3kdXwg5WpEDFB_YhLb7$^Br=kiU~>P~O!b`a3Mk)Ot))Jvs# z!(^!vw@k4<8!>2g>hxLo6b&jOR9D`>=+H0-5#=|cB6Pd`;!2u#KtY|ptL5Z|ky&i1 z$&I73pEK0ozZCObaXS5AtUoWse~!M0b6cXQCDLOVoPHU48(kR8`b=-J&Q-dC2=;(> zp!#!uCepsi>C}g~IxRYRfM#vr41#9O-V+rsH!Lk36yMl<;zwEuV$eN!4f|C&-)a)N@+8~mHl|$g znucI?cscNrX*0pvWpVXDC6;V;yB*$KAi0@=)5W?N04-BBTR&8R}DrynfsYo`Tz##3%ctuJ@{m@f68?Q|{9a zjru6RKN?l*!3gCn4nTu2Zesjgf$z``4L$MDF>tgNH3uWr0La?vDUlJ~1thr>5t#gk zCo4Q5X?;hz71C(!?rQ~zgV;+|Mimk5+?4Qh53+v_Y3d5XTAQjQ_fLM9?uh(`)fICc zQ%4{&r&`oB+d9$B#ybk+lu!-Mb0iYU>zgUjJ2!{&zj98b=S)F*{IqjC2P( zXd#AKL(tOuy<_b@*F`e$Tb!;JM=CLov645_1osxfH29g)_TsL0v7P<7Lv6xcf$>Q^ zmusT?4LgMVmc`9|?I0NBoFwpRAx@nZ`P2c%-ktPGJ7i2-AS4B;NB?jwD0_vFT7p@L zVidtM7%7#y6c5T8w>SL?rta>YAvs8I`p?pufJeH>4ZR=Y=P&|3-_t6eEg@(H$;%O) z*1*=j_u^5A${&49|Gpz+apVBPN*o^^-f4xDtgc0CkV#qkb#=$vR3O!bJ44DZ-`*@Z z{#N};%fB06*_GQ^ww}BBCvxF5QoqsGDt~^J>~Bf=!-W-zdo>4@03-5i=rkKx>l8we zjzo~z113L?7Q=om8;`zRc(vD>ux|e)Pn0WfUay`Qak@sem!Emmj(GvfoqhY9)TN1& zI`h+LjD;KY3wA;mKrnI&Z3b1d>a~?aGmwk?@zRvbTsjB`pZ<&Mlvc-`Iz6H~Gq=m< zF_$vtI;x)<`q1)dmaN*v&<)wezQC7aNzpX9K_SWDI*as8$Z4~}CvnmlklKsJ~&zh zRSEavs>z!;-SHpNxts?{#F?&LYiJf}SzgvfY_rxsJ$Ey56d%wx^KX|j=p0}!uuv`AaOTpPQKjN! zkQAfJ#lOn_P4th4agMP_BOl*Eq`qf{F9d;;%K$lfp}7qk9p7MYV^`cpN@d!HTapi? z={V`t*@YLQT|u}9sjianfCqVQ0D^_zO0U#L=VQQq<}S49=RCy37>l47 z(Sp}C`tjx_MEy9jQB*DGxn~}z=)O;|7PLwdjlSDCcZNZ{i{JeTI1iTjeqi(=T^s#f zuC7gc5bLA2&+DJ7KoqO(&UAV=a7_Ef182)_@R>v~=|9nlCy3~TCm$x{T8Q`V_2mf{ z&JD!>xr_~8xSq(l0Wcv0KjTln|0HQpPo?H}G)RWM81`q{bwEf9y4NVzEj2rA2YLbN zf%!G2M7PkJWL}Fih$+02*sfsh0u@K6U8Lx+ozr*yuGJJfgArB-D>HvZ*AYUPm_G|d z)*a{1TuW<3mPdMYFnpZQ`)COmGUO6j?|;VHS+>yx-@^3Z#3>ha7bUJIsA$=L-*T!= z*mcK+J&Gg?Qik?+FkD6pe3-fQLhmINBG5?Uio9kn_VmhB2O>0`ZsNuum^_4)w8U%+ zc)w;|?T6vr3?^Mlpj9M@pebL@-k?*4cH>_TE?r;uarXNLC6;?ChL%PJGYBop+w-El zpxtsp!C}Gu25yyH9)74cv!KlgD}#$|6(A7Y;8ibSXKZ0RM}*u^FtvYq0!zdnh?;H{cAnyU#M0PCTI>cXcWTs(Pz>}mxK zWdam}xkQ|cM2l!D->tf3ak=st4;LE+?k0S$ zUI{&FlrHR&p&|FX%>BN8-zFBIlS+UsEFj1u|rWR!kn)7%(}LHuwwj9=uO&L-Ybu6C0+(=$wwUVx@1ftN{6o=%6k`7;paCuTqcMb?QPv zamMVeomC3lSxj4y)-4%&)!*|xuiY#65q@&sh^P*Den3l&wC(eWt8d|+@?y9846sIW zrhb63X9QdfFa{B@+w%bYo~69&zhOuOnYK6J*wB^%Cta9d2ytEGUHKBm8W=( zopdutkuA~QVqmCd2$HZZjDTV@MlKcF0ajl)KPIedT}pE(NAWr;9c;RF=xzph$%8$F zsGlQ}0vpdQulhWoajQKZczH4!U;0TZ_KHgWpO#Dy;m)~M9zLaN$T=KzgkZbvps~3F zFHA|+yK6KI^Ct3LlYXwf`4l3=1UC`tx|i{Y6x`y z*stVtRA*&zo-Ue|7uP?*DUjr%zlXP|42y9pGUR0$3J;f?LXW2tM0x*Y!`u-BjX<+L zfor?aWweNaW|n37Roy~tkf)^Rwc#umQd;aPzCl*34*yHK-T|x-Nh65X&k$GQi#P1v zRznaP8tnHzMS0slNuSJ-rM4@^EG&=t?Nj(yRH&r(0!n~Cw<5&QL!Jrq5Y-XjLlS6# z^W}79@>Jt4@bt;T-?1AU)XY+c6M7NQkZiy};Wl>9g7=?N|L(%e78ch5ZMWM6a}T zQ2i=jBxu?ubtzeMp?{e9lK0n;!(we?KuYd%zTu>(xiZo}mC`b|lo6&4SJ~x|kF3@+ zn|2l`QB9t`R-17{{4P>m92Tf{3REM0KVMQB=tcjykB_-lvxy5l#f2T2H!!&ZQQZF#2ZjR#DWQ?*^TW#YAWNl~54Ma5K{|mtM*rL?YM6BE&GG zZgf%`9NbVQA8_xFn4umbH}36zT-ifY@)Gl~R#6Y&XZ7~vtWtCr z+8~SZr2|!Z8;?DrA`8*fB3OQlnDCM9eD!+EWZ1LperTz-YPyEu9B?yoGj#5yfBa5l zS5)C^;Ff$qEN8J-8Myd_Z4a7Zt5>aG5nt#Z5c6{$?& zmP7v#U63E>RdcU@C$TKv-g2-0VP!Yay8$qYS|EPM-`pU3HOfoazO%rR5dETWQFb1s z7f~VPZmncJqKmUg6J9!l6;b=6y6EfCvSYAe0O)qIKYfIW1{}2(@J$cb_4K}zte&$e zT2{D=vyGv2kGy|bn*8JFo$x8JFUK3TdzR?2IN93F)03tFknXpK;$51JivT z3|P{K5&oA7QhU}_oJYT-yETE>kQeTk?W5-x*!Jx$2FsxU+ebYP<$+!XL>Z8oa8%$h zmDLP|EWbE`6p7wkR4zABJi`T^@o$$QGMIH2HW9%JrITS+9v*1z`fMd9JT#>7ahxND z!PqIcs5b#HkJTWUjQuIWIH-*3&)o{7Kh+h@N6xiOWQ3o$piYqIhbSSQi{vpr+{Qm0 zYL9k&uVC}_7WGotTdQZ`d7TtY9|!!?S;;Py6nq_*`&gyhZGZrM%Q2Bu934)v zX1f)^&ESmlb%MmviT6`zAM)iOp+$Qd-V{hbn(H5>rumpY-4>5|;P2 z2J+v{{EW#Q%{TCcc+J`~r8D76d9T6GgKJWf_vX@du=7B#Lap#6^9y)OrD^a?XQXxmT{E*H_3ai!>a3R58MXd2xURr|Q6PyuMPC$4^ zz1EgQ&50mhvc3az-6BN*KLt%dDfytH%^x_F2iLA?ES^u#-PdmhZ_V3V-eON-fj7Bo z1HErP_K&UGTknZ3&wtS$J&h&9ocgXKQ(RiySS-!azzXs(!s*2Y@bg-BiGzP^WH=RT zUJXENOS7J53Pojzwz=H-jWvGkg;Jd}gfUXoy6cwWnif2=%T!vu=x{Y8?p%lIq&JVN z(U!qJ{n}YSh-c!Od#_6~ZDBc3Bi{rxm-fsL7GiDrR?334g5jb=NJ4aj5eeB;=92@y zyNRxbXpv|kasQA>1?E9De!~D{BqprO<^x8v2#z~(-|s4>Za!gqF}9j=urbza>$6I( zH{D<#v%`uTXGos%7Ap)3{G0cmU4$TZG2^fd=&*V8>`EwJ2=6PBTaMcQMpYzn)!U4Q zu&OZ+K^HTF~B3i5~s?K5w4sMYD}R;BRg`<$d8(R5!9KARN!Xc{xsP#16OVwt2~w zyK(}?rrMM5SK65&G4-?YbO&ter`7q&EixT^ z6b=K;C5m}$@(X;@m6%!b#jZi>3bySYgGb$DxQkGiu$TP(old54nfbOREH77LK9Hoe zIn52-$M;$(w*q$l@N)W}!TdVHA3cTiuq^D5%`8eMaE^l=Sdb_7ihGfv^uS5w^TplH zvY@0x?<_fue@^>Zkd>)RRAo%$X>3^fMWwJ7PRVej{QT3@fKsmT!*rt8V#i~@a2MG& z1ZlNoAz~~-{>Ie39!n%y>S?yc-?g)dW9^#O2$CrcHG6$QkG~4lEAAK9OptKeLu=l2 zNA>wAfJq^0?i}M!(XZxQ1>aR{Hpzo``8WgtY*Ynd(g;;F$}Ee%KzF=&@e0C=sDIs2 zE~bk5Nj6nKcx(**#JLxaekSf4Kd(TtI4E6n{z1aMYi#Rj==kXAnX99$M)JNOvq|ARyE#;gDC(7w=zFglmuw1|6 zz{utY8Dk%R6|BMN8F9?dA*h7jEFY#)<~KX<*N^RPUEj@kA%34+*larFdnH*Eus0s) zH5YNbiwFyBEqGUc6=tLQ`4y@UveGrKPdd8LTXNNYZeme^a*hgy0<5R9d~^p%U<IEUi*xJ7l5=F)V zcT&JPioC;5Qi(ydmgId_Sg3n&MAR1HV`hp_JZU%v- z*dFvQjkIK?a!2AP;NQUrZyaWGA@)ulg4#)fKt{E(xn=`Xg*f0P;d6UI^Tc(^w(h2t zA3Bz6*$ijx(=1sxgX{I`7>N)?)RDYMcrHo_uJ`e^e$B*(?!hHn$l^MVFBS}GX_)Vlh35s z4dl~U%ti)Cf2(|jeGZA=t4nvn0#A>*J0Z1mqmICPB#M_jFqNj}W`1`3ts*sN-> z&O@;D=Kyyc|5zVvS30os*oNx{mR-{?m}^ECh`PIWm0p_$Iy4l^r}f0&9NLl6%2kDX z7wRi^&~6`H5Y&1_grh=f+6jv8tQ{m#kUBq~^E~^k&2K?g^PJW@EIaMO#AyrvNd;#R`nbfWtVh3`nfmkm6 zrsNZHl;w*KVHRuWQ6hDgn4pbSM3_V>%6JT9WUp;ZX8ac;w(F&Z@F?~bZr#`YX(6?e z{K4cbc@g|iaa)A+8th}@5_*G27|5pFeznZ9D;C~}>^6Bl0t^A3^=q@G*W-90t!Xs| zGV;Hpwn=<2!`Q>9bfb%mO~W6Oef@eUffg%^C3!JsH9P|OYW{EiTHlyMqF#0L0qluB zH`9QbCN`4cl9jYH@dvCudloKzzcZGx59Qqd-6tFrF0q z!zn#sdl7!;4L^~4xOTix0cy~^S;ZGFlAMFl)*3zdiovC{y^e$pdy5%4`9(E9O1@^P z|0x@$5k{jmaLze`%~!6NrRJs^5Xuj+0$01$j~+4gh-B|kD-5mB^3O;G35Qc9Jr{ot z$p@n=Me&`UK|@Fn-xjP{J(?wVS0#QBZqdmyNJ}_k5}|oL(^>}Lnakz57`blo34^GC z>7@8GWl62)06CNu7bYrE*p9xxgJP9n>WD#os(93P8yNq(mg$dL9W_+`Nk6%}BJJzM zho9GnFU(!AF}>^Rs>iq-f8aMWRa$DH9b3Fym6-5WBQlqPt816uZ{)nMzJ{gfA6cpp zq$$FyDF&(8iR~W++?Rie22j6d+aBj$IL|V;+T3|be*s@s{OV-u)Bp2Xi~N)4ZOuqd zpnEY5a%&k?(5oep7t{mku6Cq{$R`n(f7w7X&M}j)813sK^&VbYn3)#)U)d1tmj(jS zS)F+|BzDO$(5LJ31T=3|NreMssbhdCY_} zSKWR-Ma(e-z@58`R(g%Qg2zeL*Y^EVlUdqK~}6+xNXX>1h- zau0P`0E)nvRM0G97oS1}i=?wN4+0NE2U5w&hTRE{rO8pitkXoXYtdnHP zm?isTT>NbK0zcodeovNRu0Aj~@sL`^Yl*5vQo;9_rD$|RFWl&`JAWsM?w=~*W!Ku+ znxz}h;YBuQx}j<)(*ApM+hDahc8gqEUAoTl?teOwT z&UIOppuB%_*&Ur6Xk)}4b5g69ii%@r{xJ!1Q3zj}8v2C1zp;%sf(mj`d>mRWj(TtM z)XS;1X8enRoJ;lW3hycpR9>J`Qq5|xt@v>Al2f=JAtW|J+6@YdyUHjud(BQxi1Ey( ziz&ub%V36ckoU^Hp09&DlNyfNyP6(dyS^BglFNBl{XO0b_6_xlN*EoLa_bm+@{>ej zy%E273EQM9Zl%hKCZh^SU_E?SE6M{o$Wz7vrPdRtI`iS$*4B$q?wUal({=&6GIE$J zm7b&iH!L(?6)~GBZxY-Z%W=)g4i*Ox4nm+T;x8EKg24^DP3%9odbSAMrros~> ztkcYmYN`eY2_k5EgZtg)&^f7k=G9SSh@iY9t0i~lBypG(OwQoUbQm$ME0`8?<~-4` zVrFM*zAJ~f9TKYHc*K@BU^7>exlJ;~Q59KIspmLK+`4PlG7F!{iJg0>jUN7)V)>Xs zm0dm;xP9v+e(@>c@;UERKDGg>W?a!Gm`L$TPtefZbsKl{Td875bgqJ)FMTe%E3pdN zHrYY?F%Qen-b{hfKo_~oANepb<%E!b_O0;;D-{72LO%147zr{GnN7~E#JUW3DjCY3 zsn2B~tET~dxTzrCSK&!1CkQ|k5qM=mgCOcfO5xo{Pg5Y8S^{@I zVLC#819|y*iLf^kW2%`CY`O4@7xiEpmGcSmKYYD|RVw`Kn$}m+CH3n{sAuQ#k$5_5 z_2WNx7`N#VHQx}A%V6`7i_2ii^pRjKZuYc?p69Gg z&wg*S4Q6OfbpLg0G^PRmFvr?47~=5}Xa@;lNIbP8@YKXNbaCp{0B)R6b9>Ebak z4b~niJo}8C-zqWo&)nxQwnGgh344cO6J@DNOtYkA7DxzN31<^&Lv)BkKJqItO?ogj zP{E!sH<8+EU4X)_+gHW@7a-@}1X3{`APc;%9sgG*>{kD;Oekz7+BGv6CQ3~b?{kI&YJ2pb$0BT?qskr1uNn;?J{L)O>`>oEEdy;_TWV8D8!@f~hz zk}4iVoa~J5IV|fu=F+t1#XlYr)Q^wz`64`xT& z!}q|8xk`l&YHrm6s9YjITq_JWinm>{E^sQi7he$+%evcSA63yY6w( z@7?<<9o6i)dah0W^pA>wv7_=#8t9)gv@vv=y80=dR{{R%FEIG$>*ZaTgTYHUpwMoH z$jj@KJDCxEnWBa1`!`Q-<@W4LrrUj)?$XS``<~NpZ|`LdaQO*_b4G3v!z#jG-?c|d zUsMt3We*a>H@~$4giEvJi6E&#Qd4SMTk37(5u>oZV#d@dSqUw{H()IGUn;7Cr2ge{ zKWMhl-mq45-sf>{S#Qnh1^C_cU6OY9vXj(fZ;7fEL(l_iov+)d)wguxv-6{8M`>Tz z%zuroW?2aSYUVXqoQm7odcuZ`mlba{iGodj8=FI`u~}w$v2px9dTj^5rX(OrsvvP? z!mwg&kRZTE;N@GVD2OGU7WmFJZrtefBG!l6{u2Lh`I zsc8>NcvW9-6w9JDa+tkF#hZW!baYe~BiVZWdSA$_CPYUj%0cUjsY3mdQgG^R0xoiZ zO4_rdx|V;(Ni=hLYUol^?HGsO-u7}T8`#61`(*o5r*HklmfZKZktKrlu0&D2VB>!e zh%xm}Ip1~yWJcLMZ{6s`7G+WF`Gx1X^ev`*>>fQ=OB)AM(LeZKjfAd=-`N(vJUyjN znG0N90@zSKnL>9`2SJ zl|KOU_@@7I{@yKZn5trZ69k%?A)vMdJQEx;pW&vYX-ApY5*{S<+ zErEWzX;s2}x326DiL01MK?}4M<%hKtYDA8!6W9l|G1m#<=+ek@MGgNW+tRka2$(^az*zd z${R&ChL2ep%B5Wd=-izNL4z$q>nfqseM)m!r`b1uj=5YQesD?+Z9He@-XINRm@w0A z4iYwy2}G3A4-iwb7Vy^2JmX6jc#UMt)xky-WPLG~g`$cU^$js>*8uD*#_q27ian?pN0@IUdmw9)#+L(InXI9qcZtDmagc{{IQtdGRR1Ah-jVU2 zpyl2K+GZkfZB#UccG-cIETDw%)e~j-JvrheoSM(jMPx~7}qGE>_xVW?b=GQFv61O|{%c!Vr=NSPJ0q|CTbnI6eQchh$GBA0vSx|zG z@R;?soI2e?P5x8zW(_KpUcP4io?b$90Q%Y;u!B9&R<_I=Vg5EizdHhr^%^EaK$UUu z%UxH`7P8i|jRoQk`qEWae@!FNMriDHjfP`cmN<^TSuQK#Ku(1)Q?B>v!*5dNPw(;t z=R6E!fuZ5l(a)qnPOgywb;8s{0Tj9@ru5k1On~vkjXC438^(i}EQQxcBeIey=X)%h zu_eq7!vRDAPMf-;M4f&F2?+(Xo5NRte32fOl!8{>s>GAk9n!_34ppPDio#z=QRY<-=~wlUl2%bOzdZWO%aZq2(%kEbatGb|j)UBv}=3I%Y-f7;nA}^@;%QN5`)N@nL#LOAzk6jYgsgeVL^8(zFgqN+N4ePIu_J2 z1$;ElpgCjs9I{?2OP+$CK-&5jywyK&NU@=JDUV5_8Ko2YbmA`73+_?CjT^Vsc3LVI zlq{050|p`dV_6r?4zk@G&QhituwRat)KKCn1=Al3N} z85rWO@t=BK_>Hz}X-n~REV{sRt8F)wr zFRWg#AZWzOOBBx+^P31VVKwqWLjTCs^&99db>|*pK>xt7_nrnjbG-cPc~ZZq94l>b z6l8$?vRuu@KMG%F_%Kdu8;!Z{c`7#3Y;p1w$Oy(}}tw{PscstgOXlyw;B%}FDEk0oN;fVAd8 zr%^N{?;BOMB7?o%jKlp(aa(f*KO7smOCDu~2{HO%3u$yXe_fd>tekWHV@RUYG`Ux2{u?F>k@J1Raa+s^(H8E+U2|r*{4}%6t<^7y$nHy;Dk#wR;MTRK|w3 zUqKrI5Cpr9ddcu|N}CSV9?MivE@jm0H`%wg_5@PL83V5>+xSf5cUC9mNln6{N^g9xUrPgGK>#9hX&;v%M~FfqAg zC%a3jO<O$g1agftwhdoHhG?O&3;Gih#{&830c}BWZxE4#19t-E- zIw_<=7_RtAQtmK&&4Nr|j*ST+1vfCdTlV>OBx95sW}eVI#mnp3Ssv_1b;b&6g z;C|jOPH0%E3-IrfOI;dY)MWEUW^Pw&81uJt)*`Aw9y$zw3^*7t2w3IP=G&lk) zivj1Jz>a?DVL6Vj3J>Ym;jy6k*{TdQJg3YcC3UUr7Qg z&_BZ5n_Q&_dRfNw-&etxnz*Hb{E#LlgYWz3SIICEv5)2mtl;14gB^S+a`0qhW`}3e zK~`)@ow=+B>J_3;bJeBr4vywWZaX`Y+qia|26muF_M<;21 zi6|LEm}Hb1(;6$3A`> zTK!NzxaLNfwnwq_VF*x0yTh}TjRZ#bPiynfTGs7f^kd#RM_qCPz8g_kmf|gKSl2|) z`BF)9a>;3flO|Mx=A2=vn559nyKr;~EP59ca_R#G{bENjrA4Zl7Pe{yF>5AMP{UeQkcuC;c87pNNDQ?COlWRA3{9Q%<7KGJ? zlO#0rYGrnF0f9?;8|WWnsE|U0;U{Fw#ZdA24#Jcw)o!??K*Qx;?=~e|^Itz;uh}^z z^R{vgDg`)v!o)1hEhPAU3b2Cd%Upzt;LITEY{2Mqm6aj`)U4MlWHAjGH2NfumA%+g z*eY-75++wjtEaWV9r0i+cf+^sqZ}rW2iNoJj$W+yIKBY-x$QzHN6UD)>+S*fU4WnR zU}H-DLp=0?km$?N@^^zt7R&vv4sdOQi+qC%NP#h!J%+Eix?CNPN0q78@w`Vcuk;aI z99L9zVL}wfOp^MAoZGrRm%nAB=W}&%I5UEao~0KB1o6C=LQ2wJQ!-8;@z130_yL? zxe_{R4sN+}--souS)oH2QaQTEVzSlZ$q_!Mqq(6iTetpg6(#uG)qb84{DXvyb?f%? z(%j){@WsVX0)?$^3gab&Rizh~KnUwi#N2-oe2FlG7Pt<+w0-+;aKYd=_n$Q$f2dtK zCnRtY4r1Wu1J-b2m^_&7u>9;i%;?2;K4|{LpIdc*ggXOwL{Y6Hjq8YJmJR-~ zj87G=9mhqgC3~x6N^^^89o$U0O)Kx$$&OID92(^zH#tw5Y@~vUO!c;BAjuguQ*<~h z|6cC9?p{AU2fjQWUIt$(y@a>hcmtn~J@?k80g^*J(`Extgo-{vs4KR04vh^f_Prz!RWD8-$5}H}TzUz7d4KIM9xZ?HiV6Y;%_%&!U`tU8S;4&M@rwduUc5q z5qMuW6q!iubq;(PL-tnf)Lfrk4|7d^w5O;P$^j#|&7Fi1z~NZ}IUNDM9 z)vsnQhGhGUBra|jnY~Akn1#}ZjRfBq8sUAa^TIlAX9(Gn7@40^ zp)VL7y&2kgw3d6Un(D=(yT14?5NLjxs?+$Bu!6lKE|j&}6tGS0HKHE1cIaDAXUz7l zZhW_&Z=20?D(Imo9Kefs5AOU+BfIN^{~M3JD#7;13)xfbW~AqwH7wo zN4UX3FN>=CROP2L>cvm}rur%OGG0@H|E6LT_Wwjc?-J6Hrk|Bla=weZ9BbnfNx?;Q ze}Y~6vq{f%6C=5;U9y%)nCQAJIBkjcHuKeLc}qW?!)a+u+cG1xw7bYY@y9PgreRYn zQ5t8R6SuHmHDts|KmPIn^hdvMv|^k36q|%AYc#ja9~pGAZYCp-?GKEe=uX7%8vt3&UfV|j9m}g>0SNl7WFsSLQD&S) z3u0BM&^tXif_2)mZ2JmX=dWp@sXK`aV4tbTY1cNF2=O1Pi@}O#akG0z&3#K1Lp_U3 zp$Y^cS?G9aldp9#GREhyczqNdz!`LZdZMoxv$V*s#1g_z-u~z&78Lz5H{U zPypy1!**nvy0g9kRo+leLAz62U>HFe^xaq1&DvpzxSu1R{K9s!hV52{eV^fbP~Q!V z1r}yK7rbQ2JWY(TE0>@*s4ITGWtL}?-hsIuS{mkbVER*ZB}#KB(%+76xq4n}x5#kR zn|V~VRXuK&Vn44sZW_AErM2fu1--O~@BNS3Ag;q>^>q^b*< zG<)ih$n;|3a>KNJg-X}WU_9Ab9X-@RA+QX{MmRA{_jp$$;v#%c`<%&LQ4WJ$NTyv0 z!gs5|<|ew>y{@`4Y{sVt?!UnSDFU1x z?9t1j6fffdx%gPxhM~{m}74-CKId0U}3W`FZ>YqeP3k;RF2)6{i^I#l} ztVz4FTn8&^$cl0lMqswHRdVfuxGLQ9A4I%;w4a>4>^LzKkHx~FEXcKBE*YK0DrzFMzz18m7XP>5D4?HsYzi-BlQo32QIuV=ZPP`&6x80H|%T%L=1HOeN+J0!NonZ~F= zA=c`BoZ{tQ%-961qHt=+9w&Rbx%kvrYr%$Lj%Rne@dKSOg`x<++T8T3&O^g%p({Pn zOOGw?)w)<85dszxayQXUxN<7uagS!LQ_T0xL^#XT2+)^)l5lX@4Eue9S)~}h;h}t( z0S#|h!`N8_M1TbbVW|VEh2mQkY4_iK*O858GspCLj=Av)waB;oy`?`vXPxgS-pv6v z0t87GF{kEj35BKiFOCR#5wvJ2+QIVjldXM(G=IF$U*ykUe#J46e#=(@Y9LIl#@b=r zB+#{Pjb)9$h6ax3tM3A&kN&ZFLSM_8x^hh$+Be(4h6W6g_IemKz9!dU_Zut0Q7m^Bi!eHMxrtN?ocNQ`ZwBp%44y?+&=?T$CGUD{7vicx}E}3?^MA zfOwp++J8I{pZ{ z^sf(5MSV{vmRf$J^rTxaV;3<`}nt^@AG#sfxZemMnzJN;+vZUdDa2l6CCPwh;8@h#|k4~i`6P` zG0RrS9BiQ1G8WPoJGE`u-r_akf6Xqb?Jv~2y8M8RfL~W`u7&yr1$imRs7lvJehK+M DkB4*R literal 0 HcmV?d00001 diff --git a/community/art/images/Backgrounds-Pattern.png b/community/art/images/Backgrounds-Pattern.png new file mode 100644 index 0000000000000000000000000000000000000000..b67d656020ffcc95e080550e80011db4f0183732 GIT binary patch literal 204002 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%0DU0vGP?vc~do zzuOF-;>ON=)gQDy($iR&o#uv$W4^dv)C!{jW&)N~YPg}<=INz3A)}bi@!9}=MHs7h zy}v#;MsivB@;xO6JJT3H6x06)an}JG z?Vr`{3E%;wo7_3405c8G1JQ|Pw<^5G%2pH1R=HG=4aP4%TUI6Y-|I=E+9=LsM%5Te z{N+eX3v}{?XZnLmT* zbkU-&PDc}8lX92;-bd|p(G`U?+?&twdf+YzA^C|@&h2wUXnf)O)5mnMNs+sXKp zS_r7O+rgD!H)-n$1*k4@jJ^f9)wDsNT;xJ7YI-i)O;L#a7)(5@MFg>4DB5pC!|2n+ z(xK%>d@21QYBqFW>}r`)V~$9ugQ1Oa2k}YsRsfXocXt2e=f9yBN7^4yDX1W=*8nL= z+3RoJYNgW(R|A({SF+M#xRGh zg@$8}Jm0z08xK-L^ zqLupzUX;&XXdTgEBk%h0NN`bHr>fG1ei?S$^m?b-=##w}a0Cl_GXY^H_=DfE znA*{90^gk?A@-Fk2=)rO*+$U5y3j`~wY3b>N(%n?&F@bY2%!+c!Ld{@#ED!2IC%V$Wx4FjA zboZFK?j3wu`*a+7%9*-OpyN6ku`DiT`WGsB#$l9j1@rDW1~MNTy^(F$acUyvGei-p zQjp#q7xYEUD6PGfC~jtHiNRM;kflA{0>6w7{E^_3MZel{JzRh3T4$xr_-DQ~4Quel zOR>JLt*mWR@7RLj-%{YNWV8N%Itje|q6{01`&&yPuNFBUye^mW=hgTT72s#MH={w2 zPBD(5Ft#-qA=aBR@b{_m)x#hso`Wgr47(N>QF~yVN(orWaTz~%xZ=q<=HVVa8A7^eR0bFvwdfouvn7dB!IiX_+E*XfJ%N-4z@ zx|Min&{!Gr-|9~q*L$@knv!K_Kc^B_LYiZOL%PIBRq(#HdhkUT$F?Ig zRqG{*WD3tTG&40iVJ;JrSc?gJ5=)AcIc~U8u8Tz2&oSjLJBOt1`SHI4(Gh5PkcS zrS>AqlQs#xFAu_E5|gmd$QkGUPT`XcHZr12a8IeLxSr_l{Rn0rs=6+wH0d;UO%HWV zw*Ni5MeDno&K7DBRB0+!%FejFF97oRTFqMLyqo}5_){0$5^~>Z%G&#x_7a+?VVaXN z_-^%@wJfh1!glw1Fo#sqlodir6Ei~e4sHK<5v&X|RU)Lnd*%_*v-OcV419pr;DLc1 z>Ss$WyoaK{SM4l%jW9XQS_~N1p?*qftu&UdMw{6_92z%j*t&Y(OZ#1ybGz9PyCz6u z5{ptt$61yDGGqg-1?iPnc`{*e3Ss=QocOncglkFUB3jlOr4v%mN_8Zaj&_lwb_I?%l2!VWW-wk-|0IOSNrx>LCv z6Z_etxEvytGf9XVh`0pCEyKo@S!x;k_B(JUFJQB?LYqAP+ks9hbd!LH77%m9RyJ4t@?0yOs^8G!H`zi@(W`P2cz zFQPM`Us+b%C@_5ipQM4oZtMHcI+ghjVE;XxiSBLTahzftb7Xm7YrFCuimILf0}7oZcE zjmA-%0qyU84A7Rf_-A7MdkYs6bA9K@E7l(z7HS17WdWh{K9|KFwkgc3B5kFN=zMy)Kxz~)M2V9Ju$)Ts z)#&(bNxm-o={L^XuJ>Af|218AKG7jFebeadC`|nDhaB#fkMOKQV|XuOwWx3B`>bZX z;GmRF4y?6U$&X;~#tD05U!3YK&ya~ce^efbZOld(bPe7M|6rM zI}!@uW&9B=ya2UIYF9yNkmYl<@5O!C`98H1aQJp$@$7!P@DQMKcPMm0-}eN4Newkt z!seFqBMIESR7%H%@#PtPJ}r``J@fAb#vJEcQrx zmW*>WZ=iBI(3ipg?N@ic(}gn0b`7n{>wd4Qh!tgqRN8{=L=b~T^y<@4M_=+N7dgf5 z&HAZAGYT;hVD-tw(_WTq<2cTh>9qQy(`vp^GkuVqB;_d-O`J`e(q6H zWKM)NfkKvO35POX$%Y61xAneH_`=HB4hu4J{mZ+&9IrLj!>g=~p3zMCh06ph561^X zoI?=EM3uJmAbcaWU1$n3C|CZ*Yg@Y1ihQdT#cugxq+akTmMJ>o6A0Bbtwc7UA;%mP zWkbqG${tRXnCbL6C%p_Y3~B<+*O&!D+%V_PrOa7okq4b=z0yTj`ZQk2+m(}ZNlQ$J zJ2gq~g1iKuTWjHMw@N@e_rXuFs2O3PxQi%+F|pQ?=}p)bqX_}D1j$OW+z(-jXY!Mv z+&bAAPnDRNfNCBFYIvKm%$e^X05Ep4jbSZmgH9KPy=~6LaKfeKL0)H5`TD%@YvjiM z3QTOW;r^4A-=qUpU2(X&Yu-=)a@Ws8jBBwb6Q4D%qg;u6$5lwP|V)B3wt$akY`mKF85qS9YO8h^*`eEN1{Y1RP zJd#0lxKSnbmMC3;Q+X}H^c-)bze?fAmW&zYBH;9qI5_xi4K6-N)?$S|P@S2Flx@g8Zf#`bi%e~FL~w5^WReU< z63DNEUUGhN^4D}LR1z7?Cs1=v7JHY7_ZcQoZY@zFMfgVt62tS~tZEv---#v~^svp` zK#5OVTBBE@)I~&=GF!oHRm5?a6eBVk#~%&_h=7M>NRF)X+kqD|>c&xJpOiR_zjhUJ z{Ow=pWUEaMsrVm z#59f_d_2{H94>~BB|s&fRe%2a_yZConFua=>a7<}DEJ*-zhq9&(H<|5x%@*~a2W3! zg?Er;lk|k)t$(qn^Z+E}^=HGB{!K5sM$qhP#)j^q#ZNxfPS!B-Ea0MqeL0{2%71V5 z17JSO*nin0alinp#i{+cuVp3s*-o8ABSntOizPojrHiWCJOLG~@zxVP+a4Y=)3&hR zLv1rH^EcRhNL~j;ZeTf5aup{sIn<@m+2<{iKNDy%7Z@VV)-c~Uw-iqcO(LXdM-F4) z9n4LB{7cr2KlPBS?4UOh;(ylUB{Q5s{&N)ka1b73QJWPK4=HLXK9E_Qw93JNr0J_C zn43O*?qI#Y)8yv=rc?123#0asQjYtsoC?)<82S>9*;Wd|Vkg-`D+OxZq+~1M~oPma8ykEb|bp(%(L;O5bJ^A zdGIq3yytkIcq4C4lo2Pup4+l@1HrN1kR)233rVzI4|)*FMb;8Iu^=OZO?~B_7;VOLq~(99Qtll*Uhf+)`7LIkPtIqG@bL z14kj#Ky2jFcNgkn)}O>W*_;;~N6mts9WbhfK(|=`WH(ZGmIGWzDR<+tjzEwmP7KC)<7p&|pr4BmvE6nN9_Ge=<(~4LdI0-8gfi7Y zzTrq_H4~0g2=DZur~Dh|FWM`3W}E^3?^2*qsbszP93rmV!>`!X5WNWk>T@{-hGN91 zPk&HGw217IRYr!E3raKdn^!NjiKCW@L zS8)FgvSOAq4;#zr7Qxh&me7m*@H2Z=Md$D0UUceJp!JKBwGwf^`9g;^I!2R{`l{Hr51mHX1pkS^17^VTV1&lLlGWF7JhHY zzn0sQe!}JTyb=rvgtf)K`hzJ-X7m_05+#jVUt4i{T;Gs7tt0&r@pmd~C;$)A;Lh*| zIV$9}2CQI_^A7WA1es1E&boxwu9Rv}I<-oZvEP;O1js&h!efX!m+e`~gPRu7;FL`W zmkTTI=SH3%llf+Z8QYHjqz&D^1v}?F3^6yBVf{Xlb!~D~8wEodj9_N0eyAB8wC%KX zt~ZB9DT|6s1b783QJ|YssQh9gh!w*L-9bCr+scKQgwyJqqv~bc07SfXL_5hEL;~pq zW}Vpgx!)kM0Nl^ZuNLxB;_XTUWwC1WQNr?knpDj*`ypt=jU+JeuQFlYiVp&{yRNcy z1Z13P5Ek0g21VEr&XFV9o*irnoJ>wYUb~WXg6o}eg;-==5p+4rq6!_siCPBGM9Y0X z&jYf40S#Q^&_5yE=+FokWmYBkfU;Q-M?NX{-;snGV+ZEN)NUg{b=>ZY8ge)&^AvL%c@%upS zEyvq1hRqlR#1Z38GZ_ye9%$Tp zTNPm$dyv4(oo{gh=_;`|>2O&Ne}zRPVlqYev~=^Yu88}Sc&|NrEk&_HC{6{+e9bP; z&VF2qB~^Fd>aqORM=-1_rG|(mz*k%>F;T%+fy0ZG&s%9$(^K`5r4kjsmingb#4f~j z9~dyK?pcnLTDWW0gx@PHlp?LyhC0os9yLViu@#x~6{F+XEVT-!q8aRzaAD5r&ONIZ zqK(F^*ADUxV|whyT7}3?0e_mAt98CdW*||2Biya1sr*2AmCNbLHmrH=WIr5kZwD;k7Z)lwkdLbm+$-R|_@({%`@bue`u7e5504-HK|9T zp37mjMfwneM6G)YZo=NfWi!nl9XQ*Py28hHQIh%~0-w;7e+jxC-4XYp!Tm!`2~F0& zSY(<%?4}t{*Sms@h+rrE{+R&&*z=X%&mz~DWYQaTOhk8y3-TOgL>y=R(rBFP95w*a zMklB1%K;iCSBLpqlq-SC2rMhTq+m+gID|5*vykjPdkbE1AM^(6Bi^`CD(Ot1ga$;7U&~ zCb&Z-B3+?eK$Z$96szz6tYny!gD6;JE;-I&JB_P3Hs$@j#pX_5r$Q^& z%8!4!kCIP)ocG+f`U$=@S#e=WIPuFgBo#S8tjBIYcTafWbNN=wkdxJYZ(86txEOXx zBdx(Qw!;Si@f`EcJiU?&b|duxhgQy0blh=Va+Kakgj>?&FmxjaqTmnf%DXufA`V& zKy@CgH`ng2okp*nd+@UZ12!-O1cwSv5#lo0^|0}td*I#e5=a=v6pD)M$dX8Wde0}_ zV7j#NvSRNx=8V)qCBKf4lP06yac|IEWqsDXe#dY%{3tE|G{JQELeIujPiu9S?k!tV zlmvvZ#oh2K9&i-ur|GW{sUnl&asBRAAno-u?z)3<8;#Ub~;2$+1jSO99 znCQ81d6Tfj@J{{OkA9&yL;}T^Igh0vNq_6s$2**t-=i(@f$p^4zSC!9P@+~Ni~5{! z)Ic*8l??}TKbbdmNBvI1&lx--ymNoUaH=>b%;gp|BW~*o@|WxL=l6Ya{reVcdQ!_AKjluS>edu4$b_KaJ`JQaMv1bY4opSKR?|# z%se;+vUSDJwoU=|8)^Mw^1Zo(N&`7_K7;IFJg1B-O4P}tCJh{z8dN7 z;=3Ir380o?^%IqnT=!^n_$Yk9Ep)kzoO-jm-_+RqBEUg`%pjlyMHOt)Tt|rC21od@QzYU>E>rN2(;KRwm}Q&IXWaZ>{4h!aNS1+ zPzpD@wpb@1&v3TKf0n;;LHjZy6H$+I*ShNCzf6Lf3`yE>JjT=vfqtoXG2fILm?cst z!skG4zCM!kgA{Bit^DEub?wKIWsGkyL0p9AYWK#dNL{yD@P{9@5Z6Fd{=@PAc)QgLsJCIU`mT=-Zn2FN3))g3YR3 z=JYcB{Vk%%9%?evlaex4gUvyNds=|2EQlF2gq65MY5gn~#_)@{q@wScNVG8j7LR%h-{`8Jl>rIw z;)YdfjjK1wF;Izpu+uP?GwmGWqD|bXUx{u+G1 zGUr4amyxE1`}s+pQoPc45%w(bc+lXm;?T8o2O$cpq-J*Zuit@B!z0A1ANgx6UT>om!j3#opAPhoQU_gAyvL zvAdFFl6gG~z}D$uWT?l2jPAv&Nb`!{@ABmE3>p)+DQe-MsF{W zGnvwc=h5XCR0e6o9eI>?1uV{m&N%<{*Tl%f!@>&!Nv}FogoVv2~D@>I&FT<}AHcchGaoQ3^D8s4p8#+1zjopeb@7&grt~)gQ_!d4QCaeBkSRNH=ga#MOvV zp}a3$p3|k1i~vbOMIwK zd@q_3*CD*JjquJ@-ta%)lje3P;fz*`P+kzP8?sQzXY>DF{1I3PPk^^EsLf$A@PzU}umC-?{k%1COS`@h=1(2| zqiI;aet+{~JM|>-^uv9P0AuUhxfDHv@_?E1y~CQzy~E>xJD`5@v-Nkoud6AAb`iAr zkT6Ua3P&VKnuzwSJA^v_I+KX#A9G#)23d>NlVe6m2Kdu<(h9yeR4P?>;u(mKT=;OT zFzHC?MtM#DkE^eWii2x{#NFN9U4py24G-Q6L;;67Mzhu{Qvg1fsr?0o;8 zec6{e^E!9#?XIq>?p|qZVyA|=SsZj+mKpi6q6}Vv*Z>m6_>leEE$@XK4N=pLyY8qc z>hS*1PQ#~Rrq5|HNF7VK+T8a*Ew~iU-Y>#A3eYS`x+#3;8BxTS9;)~^7!2O-vz!s_ zGCq?qv*_{l#jZt4k$R-3f&M+=toilJ$!B~9Qg{j-H~m{VGs}11V)(=3SjzK*8TLvS zhR9vk7hJq)rOyd1+Qx0oQ{k8T692uc^1)2iQAe$c{mJfszC#*4#cl^-Iz^kuyyt_< zR+93T01t8ALslne@j_oU!Ew#sw9WGOfWP+?l>4j8J>WN)O%DE;Q*5`N{7@zztgF(A~Mbv>sRc8y_Nw$-E{`2ef@95RGl9=e-6R2cLHYREvcu*@^ug=72@)lui&pIttCHLdIhQ+zx&C^nN!pLPO!I73cBIwV7$GE)X zoI&8Q2}Ucr?6)b>5W5tZUFBHsjVAQnHc7@+Mr||{@0O-V_s`Nf2$&u*vJSF!kf>_@FXC3 zZ`G{S6@)VP$GUt;daFH>^xaK`-*ECFupZ?SW0B~{o4_lw_d>e6Xmy}cx21(Na<7=HSTd86y5;VAJz^)!<@s$) zO<6@2UZ280FC0eQg|dm$@A`-6Ie9t%#mvd)tFwlN09@>!54D-7V4&j{!vFf%tSZ>@ z^o`^fTgR?d!4Uz|vp50%-h8`4TQk&}|K=~&)^#N;qP3QWlAGHAIG^Xv~TpPnf%W8Ke^3767G^+nPU6}PVp+rw`Hf>+?x(ZYUh`J zE)EznHZ`AMcVRb17jYgDGVAJwyZqh~@w_?DGdW6$_Jk(n`i_-()D zGVuI%aJ%4l^V_ayg{HqC&{wOBsb)455Ep~>e4FE;)dn)Yw zar}+3A_^F!#SOTetUq)}8h_lGRx=gISJh1dX;irY4%=c4xTE~FzH)=elF=Ca|K0rc z+rP^_OGM5OmrZ2A_f@}$)=LedD^!blWQ_iGnut?}a=N1_bXu-u%MaHqTqp9J9TqcLS zX~G|rF5)VT7`W0av&Cu8xk~oCEKnc5Z!-Ny9^cSHs!FQb0{o{HMT}S8O(%^Fqpe*K zws9MbvpGuI?KNdr%zl0fq82X(UU)p!$C~LA=J2{y!0P>Qj3o+}E7HY-8tvP*pG)vR zgT}%zBok;<+9JCTweGgyco zop|YZEgkh=svHmIz)P;wi^xEoeHYdJND_38OMBI4v3;z-AMU*blhKs#i-OhpWFgwrbPA9 z0x8lX6vL~S^>EPcM$?CxaYz2LanxrXZr-1Vxc!hYsmmPjN@4O~R8T(Nhv z^2Wdl<;C92qD!%xL9gon?c@1pUxJ?}#CLU+p1?B32U_T))yky7DWynwuv z()Zvk(U%!>23v|GsZy4BLK2*Ph&?#8 z6lB)=cNBKKv})Ng=G3=m%`AG>eiiPr#=`tmy4&FNnXrDEI%`O>dH)U-ib(o|&_d5} zmcORGwu(A(EFarQK|W^B9WI`*XFf0GHvBS$TmSfBDRk(l2x<3j$^9N;&FCPWaTa9P zHU$nh=n1Bx_=~it9wCO~nAuXfP>o>12aTW;4LdQ;pk&(wqxF@$10I zV06YwsN#+s{!K5qKLygo!WDI-hrSM*+cOZV*1%_eje2i9oHXx0JL6vi4W?+ET8&`*#(Xo6(o~GHZ)$U%=++c=1g`L z;vP9#ebQxDfTMT?pB0#-mz(BW^adATv+=8HIu5sR||9>po?sfbjZnByL3HL4HgB@MNC!jc)jm zI9>Fl`>V0&q%+Y{v!ET7=^vvvIrnTsS}C(qt-R(YT{S_kTjZ!AZiVJnmVy_;3VEUp z2SE4Xs_cBMMc+c-&1!Qexd`@LP)_y+D`@AtHL3kY79ShMqek>>$ zuX5Hn$a5yt`|LFT{U}S2mahJCn18%~wuw;<$5?%fVfFdb){H?+=#}rS{=cj14}7mg z0h=ojHvz3oo@q*HWhe^Fz4?%Rr}Wap8on4&I2)u#!%_)p$ldnQ(*FXJ4D zt|YIE%RSGAJXW6vW%}9aIq!BwC3~;noM!9+hR9oqnJL@{rpm>glyFLhZFgxrpZKhN zK8f7nV>kzq$DOg#B9ysZc2Fn#T5lp0ihVFJDhd|ihtlOlbSj1k^gY#CNU{=py(YtD z&v63M-hc8DrGwQzDs8E%ZC>EK?kcv9^qw?O8ijU`Cu1P3J;g$;AQ(6zi6tfk+GJ4y z?xi&KH}pLfME##N$0cmVWK-2Fu>QqH6z273uC*(Y>_Pz`;#66Ho0>{Vd_}Yzk-b>x z;eC-Y2rB`K@KHK38xFTu*OQ%gyAu>iJzU&C;|Y{t5qrD|b!NhBB+~BHfIAkO3fO%c zySmTgjWjK~)hzjaE9?wzdT6fS9A55OK5guf0bd)>W;^g>=#WPCRx)no_{I z3G(z|iXz?Phh!Uf9E6xPLJ>Ez4(e0WVG#Q{6kIw0Ss`bn*R>t z1!4ADugDjUxU}=Pww75yMZb`SgTFzsAMsRQEFk-wo1J1O%2}32z)cz8lhOB26N?rXXnuil{Olp{;YP6g8Hx2KAvWF3n%w@*kWoJi4 z?df`)R+?`+JY$-Z%~{uT+Bav3Dyy@6G~HK;60O8Ko^re6+m6>w3e2-lt%nG!dAFBQ z@*b~JUHyA&gKe=X0&(gh^bFutUu^NxiMlX3$q0`kYYIXEHM9b6s^qTaskQ4pOq(Kd zLArNWx8aE4;JhFw6Y&LHOkwPs-=#DJa0ASxx&J$|{0@iDAui*sc$@g9PH#$nELl~K zq-Kf{j+jvn-Np)aiO{GX49bc9H-=qY+mUCuZF)~54x|GkB)U(j9v?1c24d21=|WNz z8zv%|0_zpC2nalAGHX2plkEwC2$^#Kx^lPL>dl~3g$+k_E(~V5i9?1iCu4$C<@tE2 zJE5r{1&PH|7c#-N3P`HEoW1+nOYwwbD8)zfg~W7#1sI@+rX&wF)I9L)J=PT zxqx|%p_WYjGjEznZtXgqtlWKlIn*&0PALKMD{CuCun4P_MCO&i8 zPQRn&buE-YS?%a&H=0l{Nav8(+PA5SsG=D1W)6MVZf5Z0oV+Q?3W zM(@+pY~mPnD*ZZ0OlPG5=#}5ZfS4a2a*}?3FW%VHijcdh;?$ z6ApojSbr(H+5Zp=gGmv=paW;eIo0+};Cr@efOEpn2S6*fQA0@z5`x zhe>6lBrK%hGGEaxfw&-*hOI_@MIDQeyb)Hj%7BRRK88uGNwyT>1AjLX&d+sV#F#m_ zLM>qVpe+87wmZ$RDQ<#lyGcyX8Umiz zjswUoLat5kL`~zKOunr$9QE{`AhXymV}Hu~#(zY0hTmhhx{CDeR&)J&i~NvGo`SxG zM_lniO5i|uT3ur-JqE4A>M|v~<*h53$tFx1u0z!Z%1|){9pwA>;y>*1#p=_j=-dCw z%WRLK7%(C1R}k}C&13Kb)o9(ry3AMau9RJALkAn4RNpb6Q;P{%K9B<-tEe3zV2;FZ zj${8NX0zh^Fsce#?B2I9OF}Kg z?b=jrktH9zoOBC6$@L38D<0L5Gl}D*ydsFW7!WWzJ_`5gMXbXh(JKSrUnPaWq?GbY zQ9}TDTC~%{WlVO_Ep~IbPosw|&E0MJYEM!PRHW|`n`M_F=5zBC7S*8~m*+kT0=F`! zffTBtimLx%5E(57CYiqx_mF<=_c;weuAa)%Vi=XELrdYlico4;b7a*j3OQUxvD9r8 zY9rwfNrA&?m(oHxm%#?V{YC?k`gV2lE89rY1T47vS5?M^XunB;7Fx;)Y`EGupZKw9C=Njdb; z&8nFY@M%-iyDaG>AyydfC8;U!aHc7k`kEt9^~I(@#EUO{8AoAiS@dGhSS199X;^vC zo_zC}{gH@KOIUx7-`u*Plcj7t7$mDF2q*N)8J*{4bT;Bon4w8Dd#f7Hx_X^lYWVB7 z4nw)%WE;h-ZE%>$&e^8b3OMU)go0(Z!;pr6kUXOQi5~Op{SKe$Fm9Q+)BE2II;%hi zanjwHi~F&ZD#vcZ-n6=YE3vV<5F*iBu@#LbnqFbVelFhQm7<7rgz@d=UT>-^7?g{H zOM{PCA80y=r==cudfbV|u!f}miyXAUAumW+`|@anv%$eIA^2qYOkeIt35GGbktTmN zt438_Lx_9`fB23`qK`i|8hkmg+e$3>;@wlyzCP<4>x**VkqzzVpVG|;j{+n@|0tq5 z%mZk^SPKDU5)W(|%{nqd>=weZG>L}N5qR=G>KyQDy^6d>#CWGnl(ese<5F@Xu?y<4 z2v?6vvihfRuT_!6_&bbexX}a-`uabGu}=zYfRo5O$KT1Y`TrFBD&vM5Cic_y7RgN! zQARHAGarl@?DAV0{3rhT<5zTIgCxYpYXy`dr)P|()lgfW(7lQ_Ims{HVz3O-wFm?s z>;2Z*CcZ~-2sI_0-Eu7V$n+MJveS3P9dvqJnr?I?Qp@f;#r66Xl#A<2*iRPp51%6VTXh|_&eKgSCTd)IxZN; zZ8f)3e%0mxOYgd^y$b7(VDbdMJ6Fcv1x?uEW|S^HZ$s9CxX!u+18J=qT$snFKTi89 zPtXq^JS)B*NbFY^Vju(xv$6x=a<-qP+Bc&~ewpAR?&czyuXqZIo3ClcpM9+9cPI{a z17vC^9+~Ur+?_xAww=|4xfdVrxb1_1?d28G86@Jo;OlP3D)72w*^II&I{7j2kOhWs z`hLyAuh6vRF^ifd+){i!u{cbPZxW*ak}>#Iy8V=x&K^OQkogq{2`)i##}o@VXn zC;T7Ja@cJ;yE18=XxMlGI;=p}UI3og%61uOw5VHl+3HWQPC%le8*{79LytP-sH`eZ zX1{_Y%#a#|aWU4=Xm;;z<(PBW?MZJB{AGyA%yc0G6MU9v;v!6P_z7{yR${M-lRu3E z6{TP)pGBkH2Tb$}~NXSu$WyxqEF zRdtb0REnpzai^sYx*bY3mkf?Af1S&3)g8Hl-y=82mlZ@_sL%gglj_3la@|?up3Oe@ zLrume(f*5 zamMuSww+B2D^%b0lf~e-$qhzgP3NZIWry%2H-mlh(2!7YG`n-y7jQ8MbJ-<=yNdTG zN$NMsm-x83f6G1WHSzzwBC2zGtIzJ~{Qti9`PEO0lb;)7a9~3Vl3(myw5zQQ{DG6{7jFIq z#V;#?vqfWtrU}*TayiHx>ZS04w$xNFdZ6J9N253IN`Gkw!N?NO{75n-2EAK%L_q6C zX!Q-gVz2^m?sB6(r6Dlky`2~JB|$S&mW zBnpL7^4Fm12>|>_#?KOxP-iJ4f2GM_3#0Ds$=#3r-l=Tl4ks(gt(Hl$+Wj8s^q|}F z_(Kj)ogaYLQvoXh5j;|>f*1Lw@f>PP#B4qT9S^YQ?7(~I_IjWw?fip zN1_}}t_c_tFyA$}H0tMbv1|n0^DbV^*8LT0rV2&0Ko(zKB0gU4nTJPx6`?x^REQ_9 z3mBm~9|_zDdGKMnW0EhN$Ws|c8^TESej5WFR31beR9F9xmTz_)v;@ndFLq#d{=?f@ zAKR9K{`FCpQ9)tgQTxMuNBt^`V4#GcG?;I-^N&-#0V4pPPWn5&_}>A8y<5N!2KKJ9 z!h%318-%Fjl3oQZ%)${08W_0o?N1=`1L+SA@;8tEVp5r2Kj#nOByP9}zBR4qTo$0+mmw_mAf4i%D=u`b&xS<;1}b`2xX z8F|n$qk+s6aQ0zV>}mVS2=Wzj-{zAa>OOWE`;*f5J2(~c#Djyf_}_5$LPmo3g~v5L z>0Q`@arKZdr9D;TrNTq({=veq-;t*mdl)r>?)n|z$J+Q!!X%tPQt_{hc8M5ktL9Kz zFpQ%N*=%x9CoMeWWOQz%(STZ7M0{OKjj%=bU_eJ_nF21t5e?jznL+{RoX1U@PjZ)k zBirIKOk%wPu;zTR0pYvik7tqk`Gv`O$edffM^AqpE#4y0sjBPZw&N*b%VgLGQgv|k zEWQF(wKKoQaGjsu25kk&g}gnqa?v^jBTHN~ls6ARr6u?OY3M&NTN7=6&w+zefWFGu z)A$=DLr^)q;kq+0=g=W+-dU7a$w;zk)6b9e}vU?*g(MRSqCyC-* z04!W5ezNswbSH(|%;8#nf<;oxT$uCSvrUSLwGFVLYgN!$Usevf8!fXHtd_tD7YKW2 zM>6i~vdeH-Q}ZM5AZYwqeofhUh;UC~CqMl6?-k^@+Oy-DRQ@BZo6~=XDs$z~hWf|D zC)>`>Wtv%m>xwZtJ~JYVTdv!#OYU-(0Rt1 z!|vFb&QL{Gr-Z-(mz^)ucBta2#Cxr(bNEvHM17FyrRT~C7S2SjL0NlmEY|2+xxc=w zKI9w(E?98I-^b_9}7Ay3m5P zX8eY+<(~Fuv#d~Xz~u~BE1Q`M+&BB;yQQ_59~>U{%VpFBA`mAEOKM!!YmoqoeXtlP zwfAsHOQ5IbugR0B>#}Q~$ax1FY-l9UPacf2hfK&-mXPhz99m3;xT9pNk=U>=ew4}K zklAcR(Y^1Bv1z)tjI@Li0acu<5GM1|Zwwq|)VR8+1n$pAufHjHcTet8NP&H9iY1=< zrJ?RtAgx3H<~;lX*N|&3CRK9%0_o>7rN4Nr(vVXF@5xa|h~o1ElL+~{dPtGPvsyd5FFfKzc8RVXJ_9T?_H)Vy((-;P5NqqBPX1PFuaaYfsG%Gy;D1de z@%ydSJN-HBcgV8Ulud0FnKD#?NYj#hbEoH6m3)sA27v-EHAybTzb<006Z!W05I%1b z+Klp6JGGVHHkA~#(6}t*e1Euib(B+Nj%3!Cd=EmRR<~e_wqh?&_)mrypE&<7o1y=A zl^+LxIOPH1YIwdYxDr&c8IA8cig#@2gtL{2DdRUw>0d z0?R2<+kBpaB>g-MuEtL}TUIyH>c&jlbrB!@{~&9&@i{PkZAv(O%LwBJlBbqDVEYR_ zgSPEEh0Y&uZ|zgb!=~ML4SgbJZ$lQ|zo^^beUup+dX8+O;{wx9Bm{>|V^f@$7yS1Tz-O$mvZ5jgIDL2f45 zOi6@5rr(HX+^c~a9hmVph|e+5;m;6IIQ9A)c5mCQt!Vjcz7m1Sx*wCpIt2Ki#&_q7 zqJ}#G9-$ZeFIltm8n^_0lTd2p0mPsIX`WV^oik&fYOtvBO$Qv8^SJ$ez)?nx*6*&>SKjiHf$_B<<|oyQp&A7){I`oEk9d zzMr!^u5{&XdH~7!YqqiwvHaI9?-$J$60b&d?MCRrac*yJ{p%?@bk}%Gnm%&F! zguP7-m|JP$N&PEvwh;&`H2@#}PZ1darNc#w`d|giMG>jCrMTl8E#^}S@7}z8RyXb` z5U|>K5tmY%Mdhv<4>%E~UsEN%)Rx9sPh~qPWl}s8fk%gz6?hafP)UuA<7%(?w?AN$ zpGQOyt-3Ceom$c^FM}#bBdj_-wY}%zP!V-&YW!H8@6=gMlO%2t}F*1rq#3sb-P3_UBRm%&r9>&`4KDZPp_~ zs4O=e-WrofOPwDaTP)vugkE*jzzF?CExuJh2fX6P%;A%AM%*?+`F*RebGm8{bEqbk zyEpt_2Cr3W(G-+FXr7)~PZm|%{sG30w##z2t3v!vahhlNUvHA>Y__B?hBVQk5!R&= zga)}bgfbHV!W4nQxzek`jjlu*7C{yFdpCdD5BXm<;Um{(m^^HqP%c!%Ay}FEHWCK-C5Q%$fSzco*u@ za3GoAR8UbZw#4n{&o>c1|XT_xT{t`H}ruf&!4Ucwd8yB>RUZ zWMre6+k@ksh3f-*MT`^Jd&KA6{10r32Ac-ky26#9|9)K}H4Ck@P_!XxmJ~1}VWo2+ zbWcQy9&|j+@W*lYrgBOgaJciC5=_-3XW@PN1jmey9QBHyl)5vrdPpZr+%u(Ov9U1d_ss<;y-UOf- zC_3dgsVuB6YcpJQEAm9W$x>??Fbeu`lgf(AbMx!mgwnx+B5b&;Vn!?tX~(FMRV~@HA#q@kJB-NG)aiF=6(9E(rn^SKl#jM9>Qmg=ii-o%eUY9 z-b^Ng-IVx1X=o*^u7iRGPb^u2lfH+;cRkItVtVPd=dv_(4RiR z5sHn^*S07KD9Q(Hsu&l zob+ml%?aVUu-)-9VHbNZ3_$j_`*6i??A^F}mNGdZBwpa9%H~PKQj3zF*`)UezmnU8 zc!?3xggTZn;$>w8u5&FTDn5KjN+{9vZpSO4gFY$!HlZfDZ2qyj&FMd$;@|YR!G;uy z%#|`BXsRo!ht889=kwv8R{w)?0hYy^Cuf^?f^MuR>2Lr&zI(sfv{Zc(Z2sUm$a(1= z80t_2;*t{fdGuIuwa-huhknT9d22{0|2w^Y{Z|wI7KFCfV%Q1MD;*j%(%H21?(@s} zf@lQH$pyY5eC%~Ilvf8uTxP>Cm*f_fw%^b~{zWu2@ud;hKf- zyMgaY=0py$*qAgz&O}Z`trd{1GLhk{6#SE9#?~`pCihjF$sx4~pt} z0kit)hpR@&m)jZkN#%$XEp^+3)SEjse?v{}k-y_W&PK2R*c|@;3HGBxL4hglJQ6~% zTf`Ag(M<&<6%H$cgl%6OVuAB9x(A!`M=Ay8Y&sE|-R40{A&El6%b3!5@J9lVfJUx% z6(T?88%b&&Z-wIecBR#D;-Lt=sfh88`SRuKOU_NDgfL!!q_q?aE7NT`H44b;hvW!&(~kyq^|z44&*Pwup#TY%)9g8 zN<<)mN)mvkP(ApH7#c~kF;+Y*ix4T6yDTAWj2RK}u?F6)X5<_fG<&K_j3V;;RW1%5 zhQX}G*>qk@CSoh}+?A-2?zlt7`L-Cd^*ah*nwu>~>Nk#IFS!zd7NMWNdBicI6%)r4 zduyte1(4olrPC&h)TU4s(Qw?pf>}5x6)=eUCI-e;dGt9wVE2+H@x`s-eBk?Nt&)%s z)4MX6F_saoriB7pP7*Gv{p+JUbi?2@N(waLBmt5HCWR*|$FIZgi_OVn?6hJnE!+r| zM3PbGpDdAW)lRA)eF;gDR7s1~^y(zXRioO6enu(Aql*0velr4m*`o*YlhUlTbN(`z zeM=MRCTwucsR|9AaUtkaG21mq6_$Vnn*J5dwbL4n1)SHaQc!|B@yM+w>A_Yk7*t4- z-SV(0cR`bgke}&@J`^#l$3%FT(vCw?Z7P-=UD6ae^ju5|znKkC_KB$#uu=y2#qT&5 zE8Kpl?8Yu@=kM%QhL4)+#KxtSGVT^UHyg)rO{!w$!Sd94avIThVf-1vnNt{`53UhN1j%hthU3YiAL%NZAL} z`sVFxa4axc$g9YY&L~e|{v#B}U}W9iZGXu~1>++^QHoL7!0U0dmLV};T*{5_J0b~jAzR<5GeIT@n@6MHFl4QYi${|fkcp;+UC3&7I#N@i^*K&D*@5T=AE zC&(Yu))cR3L5?FHb-N()y=SLKovMguVRo`TN=SuR1SF zkztj>h99li6eFvyV}0_HUsQGPOI&-cg3|talB{R^cn?TRBW8(No(fbRm(geRb*U?8 zvy`rHJ**ZU27^k_?<&Fd+GRl+LyYz#v%)}K7SnL#)2fR~oW%aUrnK>g5L(`wkh{lZ z;6>h>&O+*?QGgt7@!4DKA`;d8>y>87uNa*vFt=mt`cT_r6z)~o5D@Wv($%y`P>P-Elr}LL z-of3IGP_z5iMC@qX)3@{oW+w0VC-@FN4X&Vodm z@`qgNSRV@IaWgNz3I@yto4gq4Sd`OCS_*3mK8_ECdWI*j%J+Y{X!Wyj9`?&<0wU=t z60HS8sdu6`;BCBXwDk?GS#CZ}o|Gn&$dWMu)1akHUr7^*Z5IEAaF9 zJV9qJP9qlz<&frsfMRN|4!r@RSLE$%P5<4*>7MF)9o#d9`ib*pN_+k;l|4>^TK>pG znO1omhMpkK&QPjolhB@Q1A!g}fG&z`)7o0RM|~f91L2NL?t3tMRQ8T|j5PC1mxQA9 z8Z04A5&z*&Q5Ob6W|58@Spc-VB3(=*F_#Q6WZck>fLc)JgYu-UCML?wx%m0`k8G+g``GL#PzjEju8a;`%S;N77KQC-;&7|F8rf{yKsb1Bi46N5Ert z|I6_$A|4TYV2FhFH_T<7#1=KQ>cBX*(wA|kYp76%`AgS%RLTHt;wo$KnmiN!y%MY7 zE^Bm3E_1>z#}5VVZ|Wd`IxI^5b}DX(WJ=!r&;3-vE=8HDf9q_&-}jfsqNv1T5g7!- zF)aGzw7+g<-GJ1>B%=t|_5J%rEm-0%7_yDD+}`Bn>Hm9oD$v3aTWjCIZDgPw0tV>| z3&59KoM41o$*O;)aRu$_NDBgQ}4Oq2wBh6C5;As$z9-Hr_7y@pV+{g*eq?uw6rhNe7^ylb^u)ktY>H$jn2@U)CT$z}Dy zaGE3BqD=y5zLp5QU;f9oK@-+StO2!WA}?FxPRPqx?r_bA{!T;$RH#6PFzmA7yV7@8 z1nI3%+GvgnCgm5c#wlu>+rJ5Ow^Sp?o9jo%W=YQ**z78?9xw~PnjS$8puT9DC?UzU%c7!{Y;lcY|L1$M{Dr zwG>!Y7HTQFOqWO^GfWJXhwD7Q)|!uXaLkgyXc z3_v|H$U~bk=BNg{ET|(Na%75f)d1@-z51#%`0`Kq(qOYn&%3ASkhA$y)6A5;j<@j= zdMM4e1`oGuhmH4E%MG*Q4YYOwn%IqreAe8znv>oPZt7vOW4Y5yWv^Sw#^69_tSZQ9 zaL*jYLP?d^VaM1%Z^A5ijD1a17mfX;Tc;uQoSVP3m2@)pQb%l~4OX<1AK<9;)wN>j z9PBDyBJw!wP$IhW8>`~8ilaXG{x&W|HkF$KwR?y}JQ2J#eQBy(4bgz+U;av(a^K9o zKhVEa_wkS_k6DDuGn-icz469U&phBG9Z{C0ZMwJ>$2TjqEKJx2MVh{-8gld$OIqkd zF=ia%&>#`cGPQjkLk+XS?^Mjil~!KO;q}P+`=c3VMRcbxSFEO8WVrr%`_(s>(8O>8 zInRhdRfvV8H0*NO_GHE2h?_KbcPz;lQ?E6r3b*$!{Kogbw6M4iB#AZWsYUxG$=ZLf zdI{w}z59HjD_m}VZ*!`Zzwm#K7Gw0M%1(6~>o6U6-{Nck1{r!0U#eR8=P+1JG!)n5 z|4WVx^2)Ge{okQ1y4udKxISE#8*1>85u-kZ*Li5z_&ulvE^awa+aZ=BZ$q% znI&;70#5tk+$?LoM8|Q51EyC4Fob$Wbt29aFoguT@d)CUb(Yni&^VfNV!Poe=t^90 z*9e@$Qh8&S{7QNRoQVi5P=QQ-X-B?fY1*?#af61lv%@Ns{#l%Dpd;qc>%=2(??ZFi z;^09A=>E1|SG#*wZ3JbgkO|N(=K0oD4KkvJ(bwMKfb56GjZ&%t&sJ}skxahDzvUPt=?RCwRWnhJg2b7o8R`X09=M?htY?4jp&6X3>ee;)l2Je7D4$U=B+?dges_sAmO%pO zPR`p+b)-tSMaS)&kq%rOxn148Q4rRGYQc`7%~(OoA-{Z2&;Yrcg3We2ld%F?eCsXi zl<4eFCI9Y|pL0SfIg%xeKk^sIBX#87(G+_pL26fUWEEWdg^J&XW#VM+gIt#3k$wi% za03AXMQ6ZwpV#RBH3P{ygWFH#u0idb79~N}c3&#F-5XumppR=X;sM?5?T@j1rBd)Y z;|uv>zG=Y|+AQQCYjggt6>WM{P*Fd(wBlPk%(ebL?(;I-?tc6b zrbDkBH9})(R-+Dw6LPC=J_}||WmTYG6|buz)rD2v`S7HL*|+thlTSz5K&`;h5K>KD za~SQ}7+a+Ng~hgwWjr*{HDcEybvWE18Y7(sKrAsgl%P(Adj774+Rz09;gN9lSgKXl z)_bE_Sg}P_S%!g5ky79d4Sv+GK*`c5>xyk3qTkZ<#@GsU=309AbB;fGi}X0d2|d4` zzDINp*mh;PFqQGK)VOWO)hQ?dx|2MjY&CF#vG1-tQ6?PA>QG-E*#hjfFxhOG|NVad5tvTsB0pf_PeRaLzWItC~xXY`96cxpF;) zFEcTllevhi;oEHXw3C~rM$C>AlJPd9+zz>)KKU1 zF!MLj#c|L?C>-o;I84Uz&$obhdiQv}in?XXNRfyF1Ji~tGM_euZ6aF`bh z+vSL=Dl<7CuSEfG6;SG%UM5l?5{tUF6^8jYT+gS5w#D}|b_5nh%Uk+Mf67X>IO@`e z#(j}A&8Rkr`Uvr_3gtCM`2eFMXttu{5m)Vp&e;wEvY%7En_=d2BIeVBger^xM1@bf zYKLuN$+eM-`m9ZMoa864$H%b}e1-#*fw0Rk zuW8lRC<_TO@eVcki&|}G83^k4gI}69YSaL4JevxRViK`a)AaF^ zdGE>-{YiL|88#&ujA8sY@&jW=!cde72o1?)I}&F(V;XjW1kG@uPb5Z*mIO@5eAL_@ z4m$`K#C;6~fvAqBi0?Td0ba=_+}vts{JXmZCT?s*W|W{vf(&fYnm~r%5)E64d8tLT zit_iF-eyoEAxUX8Enh$D}EqKM|m?JY4!arDCgtbFHCPwvB%+Vy1Rl3ayqo z5t#TNe~M<}5`99~_I@#023Ol+#SLJANfSw9*wuhMlY6{_KX^CcwHGF#cnP`W&>i{M z5eCzHKXzMCQvy-QLWNO-Zk?CfHL39`qDM=yyL9qBPe<8(grWnyZb;A913VUu6&wOf zMKAjP>ktX6JRABY4gE9yYjV0@{PsRNiHEjoGwu}MNaY?t<2wPyqM&BkJ0cw{E*bJ zs%+?-Z$I-Q6rf*S0BXwc*!dB07BZ8L`ti7)>IdCqpLz;{1HaIU8h>K7O;ZsDKk`Ez zj+gM8M{91^-dCmrW!weKEul9Ur&JZcVFxrHe=kGVKgcw#T;(@2Gxn5L)pD<)f}e30 zr(7w(c_i_=OvoH>ef)p30POpKvKZ5hHN*q{jDHRRB26wwgT!Y#~(Lr$DFE3%k!I36LZ=71>R8vpljN%Dm z{3(R9PTJ6DUGj+3WG}Pk$#2 z_2d+J)%To zJZLRB3AWMclQb?^&F-iI^pi@lb1AiKd#%7P`$nrh9RXnF+YmY&S{9jabb~I59}PN1 zGI@*UF6qz=U@}9R{bY1WrtYM17{=_W(MgMqxe%&L(vNA1oeE*0v1-Re>q2*&NS&aM z0gCcRZwUO5*UuuA)@{)SB+|kUlPrJsvOS@-^|Xu9|)8h14fLKA2hdgFc78 zDJ%J?^{q{<=!c;vz%7tB^f{hz`5|riwa5*8lK)X)|KCX_>&J4+!Q5rrLNN=t>L!Y* z!MMq=Z*V)qZjl5%&1iKdCdEofhb9L6UAVxR7NXE5i~Q~gPB4W;MWwC@kyEzlH|y6f zl(PzwA6&)l;dA|Edilcyn0uqNtQ?~HvELi<4D9&Ka z_B`^$H;bmpL?ciZ>ALvZMBB9Tl0RW#PzMHKf-T7q*6lQGkXH*gCkf8_hN+eYlUfTN z0qI9+)FmQGAE7yEG+msPh4u%q1XJ|2k2m6^pmLNut zF=}L^D^E4^1c}0kfiSKB-VL`XvYgx^XqA>jfSne7ZX}*cxL8PInNFF)XkfYiC8R>! zYV2B^1&cqm4k_uw$v4ZH!_Jj_WkwF?18oDTY=aegCM6Zv#PYkKx;jp7 zF^L6b1jO{_6_`m`&o6;Zy9B~mKm63<$12ha)h$4>g|G9{D;-jGUW~I%r(eDoK=SjK z1E5-lD3oI63qmgir=e17(RRshiG^&M4}gSg4g6sQQZ|(BoYTSv8BOHjJ&$iMYa2t) z%8F4N3(T9OXLhR>uE_xvE74Dd7TF=eq_H895_yXkRDVXzKB{AjjU5byZI>L8m0Fb@+Qt0 zF$ad#=$-kiKtRZpd+w*$Ins1I_G~{{Gl(t!Ig$cT4R-t*-nYh_LT9zAM&9`wEp-DH z^OOSVh*Vuxio9-IyzS`wLy5vA;6LYqD+IUiDwk?>*j~@5b6&_i^LGd44W?ZnCWy zA@V^{I5^=E#-xYTXi3Yikyi0dtnJ66D)_GCO z2cZ%jHsm!g8;dR47Ccl$URqBHH|Q>XrT2`KC^d*JsbG?Q&{je;@u{SIZkroC!W+0H zCVk!{CK;nK!=09ZKDwYQ?+E0L`ftO%|F_}Zv0Z?qRLExUG#3Q;^b+3r3((k$3fgFE zehS{`V?Q|+$QR*-<6_LP$R5_`xAQ zVx#Y)uXdb6%t6t)sDqc>-QeyC%oRbQ0O%36P#|M{suFY+yy0^`1 z`uR&(TIrRazQv!SQpnDco*?@B@RWGHmZ_@3q~vJMp?+okQ2uKF)PCpGY$W|M5kL`M zo7a|2n(Td>1cd~g$T@Zu;`wrqjS9tbe|YB{$oO+J;{1g*E~W4JBNtMHe`hl+tO`d! z5&?DLZ1F$w5X&&&1k@R9+kSPt!}N~C<*+N%qK3uJY>GS!2_WAH^L;j)=AH_dZah@l zL{x2?PDmx>0q7FbmQ_HjW_u|BvK=aid4l5bT%f?jz5C2tUUd3_{OdK~8m!RpYc|C- zHB3w+PRV~N1;!P`P3e42mN$M=>m+VN&7#;?S7p#jNZ{|UOr>*3$T{)R+zlvbCheDK z<4U)wpN;=Sx#Jt#Hu7mUQ(yVE-6|njuR8t%sZ~^tE{A3AS5BbjZ}Opl_b#a+RN!Av zlkpk^daAEz8GNsM*56z}eAO)Q(lIe-&x-3Tk)zgg|CQwn$hRm7NB$swh{Btyepxvp ze%|UB3A#1+)Yd5dccG=e-7;k6rj)6A4*L?)^gUUJoZ`-+X zu5{1F3eU!xXT`R~&6^5;#(fh;mmc#}lCBWr2d_qsw>s3rZ5jDipSCY~cnJb-@Ff+M z;A&1Ei=wa;kNbZ>lCG~NBbr919=$&YIXu;VZTzpsdv*8yznarC3kafCZ*i3nD7c)$ zydZwngOkCOC#_XU;k=n%=y*MHKo=h0SXn+(KYBiDfkLqkx#a~=AJvRP&~pjU=T%RE zr(7EQ{TnQ3E;$@oqUuNDU;a^XEWvU~?=?R{nV1|lCV9En-|5HQU=@^hr31u#T&Ytd z6!=^!Y86yuVdK%KW0Lbvo5cCGFgtYMw%jF7ZQW=@F?mO1P?vHc&xQ&pxo!OdVByx9 zhs{@Ra_kIeIRLy;?8=9xGkJfESN9a6b6+jpP%_>vPdUawux&omA}+zMUZb3`@2}#@ z7<^l$*Gd_pSQWOq(ewc~$Ii8mOB`m8K&Bv2$M);b`Gt{xcUv{!L*PB#6ZDHak6Fvx zpUcENsw?fluBx0fWDcYf7@ng7Fl?WP0(+%@L+W zFFlg-wd*Tlg|!E#cKT+qs)yRbTktDP%pz+%fSs6fbN}eQLKQ}XR~N!i>(X@XH_6ts zBUHlk3w;qU%Q)joq>a_@JswhHQe06k^H%o-c;yP#=_GqGItj2sh2s5}$puO_Z z(~(f%6>*?^J$&H7+fYRi(EmuPw4L>@5{04mCxK6ORG0`#*a06#V|@y zL@-rTG)a&L;-fYz^PG%6VqAJNKbTK^`HwR4j$$FkDhE_9{DHpNIp{9!QesB3g@&ay zOavebR;I>c6D*$u;Fa^>q{*eFY}`wA#*C<9gGPXCaekY2)mW4h{N<=lC&r29k%4`T z)WxYREeYv`GO+DbX~72fCleO4!-)1UBJ$>}1W$MxXv_B`s!-!6lBdBoWNA+X>S5oU zgGeHT^FzMyGXahMkXZYTtE;`j^7x5Lk<1jyxJ=3^m7~J+xe8L$gT}sKwG0fnSh6qiwVccFsj`zIOLW#7-#`K1{oKZvs zc*3-I;3W#OA45r-o|?R%fm-x`^q;e6 zN^oFYwS4*3?W}gSIT6o1(R1(C4LpRA*AB;uL|pm&H634P%`_TI9>vuk*3e;n$RTgF_EU`11t7*EBO7z%yJN`>91#DE#wt2#InaV2_Ob8-oH68W4x|@)}1j&{@tdb zMjV9r4s?QhWr<58)-u$?>Y$rYh53v#9b)2V<_a#9ym}JSIvA5UVMGZiW+f=S_RKNG zTMLPB)2^^~=8%-*IZLmj(|ajpaGs3u3>UAe{%R|dmj#|Fkxu`4k98{h5aU3qM0&sv zsk;}?pFH8`!)HOxiTqQ_zB-SXOoI9R!nnEdL0vsQ(vOu#nG>Q`hno|Tk~uZt zxkbXW`2KwxW1Q|F)q%pV;f_LUYT+7<{Ia|!-tbaQ0pLpH>u2X7tZ4O9_Wi2t?;_ar z;@ML3eCMQR(~}$Da{GEk?3>s>@5+WH#BC;eyp{E1KFRHykKEB&&`z8BZ}vV;SWT45h!A zrGldzac74>mr?UdN5JoI5)I-xE`Xub^j&dyBRp5eIIi3Z^Kck3Rwf2rtoxB5+%hCJ zVCuEyt+CqAt{<&e-q+lH5O57s<5mqRQ0fj0=YSf6MhxBf0^fBtWTwIZvjf8zjL}{9 zAyVw`zN~e~LjE4%qA<#5(g``%=;swp9{}09U?_tD(#F@ulZ~?E@S6$IQrlY6h@|CE zz~p@{7FUbdYFykaVM~*`GbsXb3}uizrWUAPihW=ba?hf$iD|ZmiO)6d@Y3%^PZo&s zIm{$3zTsyYfx?NpbWn*D(%TY3;Mb!xqak)zYBaw6UFC@_ZhV)X*o|gt zQ8!}{djkln$L?ie6z4V^0QlQC`~s-@k)X;BQ-*BjVxpYwOU@=LGN}7tl+KJI?5>)> zXJes;$WBQeb1$TkWBBN1MC9u5Xl7~5$YP%Zi@9z(d=n#3#2XE0vqe4s1UPK|$h%Y4 zJVnA79a@$zvhTw>p&+0OI<BZscU%!^VV^~PUuO8qaBPZw{DBgN3+1AfXvHJi{OkZ|f9 z2=cA42k=%HdOkCj`x1HbitT`MXijF@(Yf=I!P8)|d> zgy-n{G_kHtb6=#lm5LdY1k%6pqds9bF#+(hZgxd2kv{`vBlm5tFXF{U;IL&nG%^By z(S<^(iDKmXNWED;2%z}UsJGMcT~p=3M1c$#DRS~#B-b{#&tY`9HRR(H+U~51qLzAa zjhWXE>14V6=)6eRy&{;MR6ah;UAz!x9E)7_y*PeU;lEyNpZ5CDUqKn>4&o`uEJh*+ zGO14|ioJtKhQV%9c2BemnpN1gLgrAyc)%ZJl5yO=&powtZ5Js>Vn7j18i*N{5z?$hSX=uR9)lZiUV zHdnFNQ9SuST9H{!-y^>hM&5@FZE+@j&DyTR>yTdS-yxNzChEAoh@-fKBvlgK$w;hO zLjv%cQrQ+%7a#72JVXv%`PmdD%*;A;b+A!?r+9rgxMcC_YNQw}#w@#UW95$)@%K?+ zN4DcCoo=ujn$MY8j$M{Hp8(=uL!Jp1o2#`Hud%|J;zZW#znFMsXIn@3r z;EtgDg?_iSSGY_!s@@swRP_K8Bc~p<2IG}Mpx8{sXLe;-k4uvRA^7sJ(fLf-On8^K z{hmF8TRFqUM`)+mIvpxzJFf3XierJRvL_|`c9#c=`A>&dm6U`MN{_N^2 zTB~|Ui&{tl;uPs3s;LeWm+9Ls`JT9Y<2`AHt*gIbXw7(8o;-VB47hwM2r<65;LX|k z(uV*ta$q#fz1*u1<lcaLQ( zz3%{_S2YNWUqL}dv8O??GziQ>hx~Z#ZuG}W`k=eOlth`xYqGxcG^Q|Uu&|QKwuiPX zGL~76N@g)>$14*lFw8kKaC^$`=LeKGh~lzlW$5+Ce$D%PISpi&NK9M3$ULY?I8+aT z)#bUClq_|siLPei1zjc!1S^ZFtT=J1^6UK|GLUouS%z^-g^0fC$0M$W$0nzdm+E_J zEVeMo3V3sRy*KW(t$$sI@qvY7l+41qPFjjozIZ!*DQ#<%ux;|3{2kk|+);mST)gKw zuW6)N1lluDnQyvDUxH_nwq~{z_=qp9pcxKevSa?07`VqC?AusAq(`x=6%zE2*&*E} zK0647p+nw81&4S3s11`@mWzA#c)t+7}ar8M9^jsU+EpQ(5 zmv<9*q7Mkw%h3+XrOCyO!U6;}@jW-+oZ!-By^)k>-v9%U387+RIc15-S#u+#i{y!O zA@S#?@v;R-ms7vCILvZV3R@gURq3Oo@@aqmEZW^K!CfX)S5fa}IdfW(WtB>d#*oX= zd|RW!Rx-Tc*VG#r?Rr*T6;NA@DD$tv$BI+Je=Z~dm|IwADQD6#J$F$`v}o#~x|`-^ zG+l7F=_VA@o~?GXqvXg@54)I?we$9cAUnC@P?Pv}gHlZe{rYN9GWGUC5+|1FG`M;@zG z0eJ0h(nysHgd$n2?C~fJMnR5h^7ad)GuA)7O>wUB8Z*wG>vYLhGKWRUq zRK4xo%gM-L#?xF3HGWTKmwypnPJd5mgt6OBZlR_63FmpQ@WqZvXzuLm{{TB?EYMR9 zJkyKNcGsgQM)hOOOi8s;(Eqk8tLW1HwOt7#g-|j?ZGsCIG@x3b22=rd=9%;6XIpI z(50_zOZ8E84ASFap4GsHgO*8e3>4-5HH&scFp3{IeesN;k+xnw(>T;(3_bju4vt;9 zLMNr~*ZDpaS?&~(k^p7P{@m=a-`WW*zsAGpO8~txqB9Qoy$ODo@S$p1Vm#3JI#Iko z-oDj%D%Z@%6Uc8{<pV_Ytte;w&R7e%Z^_BFk?vqu`0M2C>pt?ja_TvP?uj`bg(OuBK)?Qv>cCdS`gu3HX(&& zHVPWcGtDO`UojVBDH!m<&~HJv z?v**F*@Cadtl7)Tk!XZf^dpdnX!7@KQJiaSN?xJTms=bjZg<4CsZ;|b`BN5o?O)s&DeaTQ1 z8ezf%3*Znfavov==LW+7`pRjJB^gd4=|@@!`V!&q|9G>TzDf+mVnPdK_hqkb`M@S# zQiDSCyvA^yKz8e15X>o)Rb8lgmF9j;tI;l^ z@i9EwY%DCAv>Ds;xbBbD3UaWo{{dweHjk&vSsZF>{VcwDMp5&S%--c!}2tNJy8rD4V8hOe)cr#VZf-& zm?{}#xCk6FVw8GamM3V$JjSb0PjPec#I3BRUs&VY^C@X!=W7uHQO&4^Zb$Hll`!qBElqDK$;%p)zbQ>{pd#nuuEI=*78GVX~-7 z>c+3$ERu&jjKAyd=gB3TAG(lgVV{xk#6cbIZz)WbgtjCa1}bJt4Sv><%f!r-dX*_x zsuTodWCN5$ zo4emiYr_p-ZTxNh=~NOgTr;uldH=*znbZL9#R0DuK2g75qVf3>7fcfVRHnCJS*}(f z%(-oTY^zRrEnJN^&V`~>sE#k z$%Gt1O;Z9REHPFT`m5JiVQu+-M<=FZW35pP^=xj6{ssYjwTS2jj8Ow@*51$CE3TU9rZW5x zo}vwA_gUuin8);c@j$@2S_(j}kRBFGR%w*#}>;y+fh*QpMzn zqK$s~h?n#^D;tgdMDnxMN4P~l?s>L0)ocm$TmAH%ELb4kcab#} zbVVsk3$no@!`oien{TKcTz|Cnh(fosgN4JG-eBYVpTfEMLPokDNh1~hIvI@gJMC}M zW1fNrr!7*(ax$94DNV#>4*f{__D|lja9mM6)7z6{{+8-ATrBK_4;6u49?7xm=)UTW zm}=z9Dg%p?=+#8Lg8*Y#0@KZBZ978-)!*?*%>Wf^=L~hcoi&Rd^>b&tEEe)a6splv zUNRVoLAx+gNbW3NrhKUU2Y(_iv#8Ek2WO*Hb57%L*}HdlZ7{9 z*H-V-u0bkSj&e5WDKdxSCMjV%H*{hn`$2i=Iu(G#61_D);+lMAdTxAn!8vs`C*HPS za37sqRs%Vm*hy zUz!3P3!QS(;!!V)e-4X_AV@8?BOsQd9N2FYKwiHYopfe;n_0Jgx=@;S#HN zFV?2#K67nTyOSNe*G;1&MrBP36v@hBoHAU_(#jd5+sFo5osFE{qM2UQ2@G;=?_R|h z$3~)p?ncNsF6;(;Nez&}kZY~&G=_?dIKG%2D`^^TCU4GUHiHY1s%*{C$(CO=%iB7paO3?qJHz*T;sG$jid&tQC(tcDkKIwv*C;iWrT`nkY*^dMJE^^3|deb6znNExvMIb8GQ) ztW`7|wz*;^XK-I|5GTShjvznU*Dq$Wyq%+V-cEIf?{`b>PwB|F#!9FpOO-D>wq>vpg-qIfW24`!lYT8Mq?%~$RF~@gA&7XUvEl{?aFotEi|6Y??VsAL1u6E{StmR1kN!KQ($*lG#4`W* z+NThn$i1N*izle2SF2YigZi$Ahgf|Br}tn^k|#9v2$7fbJ++AUoRrTjVCF~to%Qy= zXa&aoZ!Jq^Tur!c_3^H-8}P_=83z6q@>&vlr5IDWcukjNuJ&0&s>9LHM0KElq!rX+ zhsMepNtJ@Y!s|PtFs)9>{_-d@ZmJfil>_svwFn0w8M*psXOW5JUx6&_E%2CQsTAl$ z2uH%!bo-J&Q-5<*4a*o(SJ1V0ga)P!Ehkd1I&289T;+55BKKf>WCa1p%Zv>W{VQ2R z$4&>rGTrAHOi8JEAsnul08F|_5TQ-95#F$4_yaGF@=DdQ-Xr7%0|(sa{!p5cL_N z3owlgwZSMH$B&~mnthLo5(~S~o(>`-2cC$^rXF6e-NNm<48Tk3{ZuEHs;ImhxfxnX zz@ZgV$=d&=wTU3>O!A=(;NVelxz%`MN;V4Q%DNS4>0xckC#naMnLS-6Zhp@>f>aL@v_UzHsz#f*f?z)ZgX#@TZcTG*53*I2!LN_dXd> zs{-NpCScUvYN)4DQ;&r%huuP6V*RD!3Y$3$R%?fC4?i&lkKaZ=0T!1AfyS2Krnhbz z?uD)PU2bdZiu89|nSW*GgCe2$$&+L79c$c8`sZ`ZE;7Gw#snWfooW3kNJDGebnt}l z2D;y#pRhqnrDo;3CV%%4m2P-)vtP{MAiR&Nvm#>jUSjKtdWiere0mo5Edt)&;5z0v z8^j9n78o>C$Ozy6R!ajCFZ(?J5bXc3 zrV+KaSJk}miIfTicW|O9Q<{#}`iYw!)&S&jlaSO9{J(C0hNjDWY3u5E@t4as3&4_n#zwTT&?VP;JD-mI-IoN1BNrLgjlAUvKYA4sNM9WQukq@LaqJ+dWlJDhR9q)yS~ z9&6KCNe~BhhxAy`-`w&&=wr>{NiBJ*{1qrzLMbhdRUUPwTjFT){Gs?QU@aeZ+whzR#M!TA9^2*53Sal_D6?M4u0~{~GQRIMXEN*FS`{7FeEojeA z(1*|YzRCZ#gb1s0tNSPisXzPp@)O4jxp|nSJA4T8S{w?JHIlu}CsT>5y%Q5;?g_;l z$R#snOpBnyrj4^5L<*k>P2g3-4Td}48ab{vzQOxI3)qq?LqcIHkq}*iS7^ykP`}Yc z6x+E4oDVv>y*Be8tVdwk^zhiquQ#9(LXnUE>vub5ZO*&#Q9VnBc4deDg7z8+Y+~&R zd2B7~>LPnXTbt_T-?jCJo3($^{s#~&Uu}bn=M~cRXf~@{P^I9D4M-9rWjaYl=z`az z9+!MLE4Z6Knm)*A_s294Un~GYqLFcDp01@9szQm?+$*h^dxR~C*a5B7a+&+>ZX|(~ zJG$;v!ZA|lQsJ*_bdHRV3v{OR0gTi=_ew$NKn?vKR2Y; ze>p@X6Q`OTGek^^bZp6(L9}uG6;q*(?>Aop_i@6c`cpL7>?ZrWDdg2LDg9jYU3$nfT4T|G{hpZEd=Sb;3714=XAr{>hsu%s zThNyGYG}<~ul6r$ojcUTssARy%Hb4KapA`MwDhn{1$VZi)RZI`1MJM&?2b|=`|eWBrnh9OKuUj zi#scrft7iw8rk9Px#}7S`x~qTT8n&Mpk|w+^ce0#cf#>#8wBHgbo)~0q4({sBuFno zDWB`t!7*Z`*ZIyizP@TW8dz9cst%4SN>6Bx!lmQtGF3Ua4sjjIrATefj=ewi1jM2QZH)2Wfa7f3f8N zIKSH+051FzinqD)F8N= zk7g4NyRLdHT}Cy+n#t?`mFxUemfB#|vj16`lOCadPlU@;K{mtTyg z`!0^oY)OuPb7_PF~N*xII(WH$-3z)d%wBD=P5oq=b}8a zw<8dE9U}a+N*6pmEQrfpwi8?Q6J4L_U49laakR6vfyOLDk%)+7fNX?X#)h7L{0PVs*!EVcif z#cSXsxe-aiuHqi|1csT_AXsGe>6x*S)4^vk$Q;x--i_x#5aAGabd*f`)X3`V*zDiU z)%D`g=tu?Nbwfo9Xy@)YN3?oSs?<;tcHf6TQXcY3C#6tg zh~Nd&z&8E9^>ddOH9rQ;?%9tc)k6&C=ZPYAdR*`C-;P*BjwdA6ps*xHN~-7l9oK1e zP^4#5x%O*_U5K4gnIyFx1yi;(@*`wZq3iwW%kMMhhUbIWjT($5Fldpq{O)HP>PG92 z8!aWc3fZ$YHiV8nVSG(;HgfA>Kw+4{z2P(IAmz8B=SqvY%4t+d5@th6^$5opWdxy# z#*E&sd?Cvb6p^VpLTYq2qpTEAvpUHS)V6NAXE^crA6>l@#H>;(RRB%anEzp`crAQ8 zri$>ccB^_`lkKL>6t38bcnqy2;~}%C_wbYYEKtJq_6P4T4DMySmgBFi0PX&A+z(7L z>&l?RDL8s8YDs8vKPWqrG}bs4&(jg?2N4E{qzF$bGvl|d5ORf*J24eW@L@4W-h86-i{tg8)T=Q*I^IRa#`n>)pjx5N3WV4*^E?92ne%LV@~v%UW&zK zK*1|3|8WY5>3Ho|wFz7_W~^9zu$GoR1iNI#5gj0Bo3ALs4j6a(+%le(b4^IhQ)Lv+ zH4@Jya?GvbFb)L|H2@8?`;U9_p>OG_$NR4kM_YNYWZ<#qt1;%tdIQC*u2(F6$e-E5 z;a4Y3-Fe0|z#An=qO|dOMd)KvQ1wO@g+(=r+YuklPYbtn{dy{?Of5`rQ6n{d?} z28OZVNXE!3`R^H*7VtoF^^hc|kB7Up9Xcr8?iW2d@bm`HW!7FtCAcoisZ5#Ps>-|c zC~Td(hsTENOJ|TAakcldJ>d{^O@N+F_H~eYtgRo!!KfjPHmcv=Ne)!_RqDz)p6sA? zw^!wX8#%G@)oN)9rY^PjA9e*hT8wVsrKqe`1bY~9Goo-^Ak>DOBRc2$oTVi}SL{(m zOFB^#mUfzpOv_~&Glz}$^$nfebXL`nB}0k?4cOT*V?8Z%WszW)uz2+cLW4v(@u|K4 z(>AZU%K&E$f15!owVZ{OI=&|;BDlc&>F{RAZe?ZebC_FCJ(Wb&Of7ZYW}3SqCEW14 zRj^8!6n~r#PO+T1q5co45-B8g_-BCW*ctB;v~p)%iZ)IM(?%Ij(QGc6fE+zIKAH^O zV>eJH(a^ulCgOOXNZ|MTUODSQMgvs-W;uaUkDXcC+6gd&7X^|3NvN}}{=+_{zBLGg68v2P&~5wQBt&i>4yW;eBzmJB z9fiThI*KXjkYD>{*royXH>+>eI;Z9is5XPr#l0A_D8t_|$j2em!Cz;-A?>nk9Zin7BJ2x6SmdazQ(~Q6=vYAI3VS^@zLb6}jY2F?6TN zEBAxb=fGv)^ez-Oqv@CwOLa-7ZL!Ti9t(#M(GWjg|;zH#(E#q zjuBIS^S#;%hZe?Gl65@}lBmz_0)^PHZ$U5G~TK{C{VW{?ge`|bZ}`o}?<{x>6d(C3`` z^n1CH8z@op#=YNqS!`yc(Fl(@%}^Z^Rl5cPir{|hvTd`c64rRCq@4Q~osp&35@O*e zbCwo#9sa>OWGdqs5i0s&!J%gxGA?>76Qvx5$D-a8z?E7+;ZD>*%vA%L^4`>D8?mE- zoe*)9#KSJiLEbNxgQ3BA%ZCZ`8!xg`eDE&Mqo|?k2(yfnZAWElRL9i4iU6_u7dR_|{^inXk{;iQ{bwK2 z20hv6#9f=~9r=PaZt9vw=4u?A)D%9MY+A9OjXaEpqqOD!S`7+4ynbSGUM8(IPaGjB zJC91ggG|Yg(YJx0PQ8+e*qE6^;4*{!ilSkC*5XoSyeQ5drpm4xSqvP=7mY$TI|jYz zSYo*CJ%|rAf8)r2EY&yqI%s1e6~dVmNb_z?hqt^i>AgQV=#_@^G~ajvi9baVk|=m& zK`^9s?Sa+as!mWY?EMSrB<&%7e-IKh*RAbLdgxP#?z<56ffu8^(b<^G0G%nhB>()I zfVqSnBGTKRFK;&>hZfcpnY7o3aOjA!55`r93oVSgKsQRgBeM?-@av*mE}3e%`S>`M z-AwX8a4{y33@nIB6b(u)V8`31)_my=X01Xgzo=xZ0+&NqVQGo5x+!6-X;#`ul=0Df z5*Cj48U1>ipWHzs7uXxCt#b8pnLSchx z!xIY@jrOeRr!TgoD|6~%jF&z2g2kfw|IBJA!Si8pd~n*2&5~HoAGOX^M#(~!go&d& zD0M8+Nla&w`PgL*J;L0hgr`c{&iKvR{d~NCV~*beyt!rSDRAP?r?(4YnttP4m{acp zT)E9Nl)*DJ{q?1~D#LaRL<;f|d!9UV3r;H0gyiV(Ao3tuqJpC857LX-e)k;UBbn#S z9dtz!3e%LN2oJ+(_0!?bCx`2;wcea*obIwk1W&`Rf4UwLFu63c{xZx#e`+-$sC&9* ztJeRpQ@_}b-76%2C6*IC>OzQSfDWunZ2@s7NEKuG;^vk}^`?Xp!E3*ckfNe6b4pdI zHPYtOC2{=JB%3aM7uQ8@P#PSBG=gZ8ktr!->W>)+NKs%U`_vkmW*Vyg+%IZ{-*%qy z9FWqXuBJAcnR5}afkWJqv&HYr8~jxvx}a00FiVnQ(1zg8=MGeWv5P*UtPQ1FDL)ll zBuKvhCC`jiC8FxE#j1Mg%3UCl)~n{Yv>i*DLT=pqQEhp=6kmw~S7FE*7o2``p4#ccW`7y)<0{~J?X_IJ|89e?>YB5UljSEuWFs^_E!@|OOgriaNA+fn zWxE2iAPDAlj8N*=U6t*KkTg@gz0ocJuEM15&ga6Pp!D>s!QcR&Yn0@L99NT zSDE2HrO}K+(uiPfDMNf|I9}!mmkf4h|HeIq2fU*d!}XsZG1(6b);?;VVeCCmZ%tOq zuKuZ!u-N9*2FQJ+0XszfQrI$dg=ASIQgpX;-)lp!I4}?O)t)l_{nns3kXn_HxY2X$ z{0jR}9K-QOBAt*gf*YNHk5RkHg(ckQzF6dRV)zXDm^}Wf+}AO5Bls5sZEzC+dL_s0 z3*W782EY1?+Td^kcEGX!dXFl&eKEvkc79%W3`oI_c6lF(N`kGh5)$TA{_fB{^bkKc)wxHl<2Fa8;}InodXpj7XW0$UFCK^y6xQn36T6`4mTgC|sE zq6|HP6bEgQ#rTUy&5JJghXzS9bv&+@-NcGU6*ZM|o14v8UY-yHm(1CjtS)BB8T4vA zbTcREbLYld@0IiHTJJH<6P}3P`*YDl-L0p-xWF$L<#y^WQ?+14s7J@P zCI3x_@4b{)4G|w=hF%5Pvq=$oKjiUL39Mdx9zLPe0yTKyW{@IG#ICTSG!Wb#Fi}E0n5$9g9S zAM=>ciNht)tzl+G-8tlOt`!HzWV@J5HInd7N8?obQgF45&R~yHwL4YrSmu+)9Hc&w z2RX>d^*AD$9_9acm;|ocd3k%A{b93Cg2AhR-lg%5zFAc7?sVcuuTu>geCR(V353;b zF~2&A3gigLF%NzbK;ouA1R|xzP6%nJM^F155ttz`JMEH@;X#0#s!i#mnUYXC8Euf^ zr3Ft|CET{zN+1i_((euPp7&dW^9JkW1??-dA>?=FmeXI7o^iow0aUz2=g z?if99hhNbs8sAPrlTX#L?;bbgi-*rbWNt!Otr_vA8PAZ7d060bkfQE1 z>0p=QTjqTt$E<8UkSq{xf2JxBt!r^tnaC1L|HcFsw4MBU_3P6iwhPe%Myw-XjMiUxf>q}k+WY*Ye1K>{Dc zsD~EXuP4AB)8j(cOVfp>GB%qkO`$@7^w%(Y0>0a`hwh!R@yk!N>G2h?QUtD4b*dLq zHu0{4oi3ZPn1H(-=M7~BXy{nF`jw^IBhA|DAb~&G(7nliePZz-0JPt*kF#) zt`58F`|zpR3Vc%Vs+xjMsHW0Vvjocvl}HGdf~1&68egNWFmEt<`pWr-g;$PG=zDnB zvYstg*MBb#8pI?hEcZp_c1*mbatixuBZAuwvQp^0%qJ%}CHf%fxLDi}ZfFynP6xVq zjNHY*3mHjG1SVq9zw-VrJFCkF{pcbR!2>^DMW{H`!A5S%yXSInku6jx*`1`m*-HA1 z{L(Lhs;WM1E+76C(^ep*zsib(4bu=8pz}WaI-z2Jq{Lj}Dh$rtcsYyLXJXf7TvvjP#r03h3{fkdyyZ<{_0@h!7 zr$2M@8-9J!5F{kN?lzTqO%+0LzH973p|4IXR2VNIOjJGm%E?T&JnjYB8zw`tQr^;0gy+Sj%t*NFecGGwO#Eiy-LCoW)MSc0(Zpm64$8PtIJ*MUk7AT-Lz$6pf>o z{zCPP0t{TiOPUxBNd|W;nY?DO>-s zfOBx{%h2}3mUmy?w$E^)@3nx$T7RNtwm2=Z+_v8O-k1N}p$)MgIfYg3|6(`Lqzz-v zRv~`O{*Ws@mYqE%dLH+4@-GR+iV|9ox~cr7p7>P2F!ZbJOgtI!DD6cd7i6Yg2j1bc z{x+Ftu(GI$1`6tzqG{v24AxjFr;pmwr)xJi=%Y0$`SEwH7q~u3V0*cJt8!Yk+N%c1 z(PJpI5i)5_T*gNoElJV(ui{CbX1vM@@$~?q+KeoSg2cUSn;J|mu$(-B&*nCX#bhm@;WO){t zVsJ%8AME-$`F;q5lIv!wA;sFA58{#GnQW-6L7TRj({m24jL`FXa6?nD>9lJNp*;;{_7++QM=g*>sp=fcTN?aGVfVb$SakNGT38AqG1my*X|Dgbtq7xI z4;@r%c?;2=T>gICI0T-@Jnlb5u5CWld2WWh4-; z4vh@1-*%9*Pw(oPB{-$K@Ghs|96wM1g6Ce|N3p^9A~)|hJANTrMCrL1k#c$6z@b5W zZoddWwK~TN*3V(8UvUC3hf*{RRB_n+*jj^}gPh!BL7NirUcE{_t599LwpEM3OA-$YZnjK}(gY?@+>o++YnXUZWqfDAvZK$E6;+d>o&7o%xxsU{!7b|Bhq z<4YBXmr7Y5(LVOjg@#Lk^NkKaeu8-)>}O1k1vC$hcy;JxvZQHi3 ziETTL(V(%NCTY~zc7ryyZM1P3tFbxB|9*e#dEVT0=gq7&XFk|x?|sf0xEf{Y#VVv$ zSqUv`0`tOZqP>^>plF&4)Ho{n9WfKPSH??$JU|4G6_4f*S4I!dm=Kacndw&xk zm1*WHIjQb9>}2|!E?y-7w^;%-4Tyg{2`a^ZJsefR-bM_g+iNd0e>BW}O-&0t zp@DyyVy;TQ)AyY%F$=RZtz0dg6&4^nrG+GNB0ob>%=vlWw%nb5Cc5gIq_Frew>@Nf z*_-U;z%P7Hc}?w3Q@29q5Q;(4@uOqQ0(hL-V7-4j-@3ajZVnDV6;OI`(T-3)4w;e= zbsaNjupIlu6CzEiC3^y8&@$+siWnoHd!=Xko9>oqHi0Zx=td32twGfah4ZQ#hTw7| zui?bF;n7!IIAVuPx6K(Ls!HyG$z=B+Qj8II0OAIV;vc*jX-*COvX!+6QJ?ui5H2tK z1fiShXi3c7jG_(Jm=8|TT>=HmjJG~#StyLVg!;a8$lBrzZr-rlF2j7tsHp0R)&di? zx~gq)p4z(P?JzlU$8MfAlnYW1Vb@VBaxp8IlzXx`0uzds)_UKCCQk8|-c>$k3|{%$ z5*n>O5@;#h4Rq-I3t3{v$&Rg6eugNsuBL8^H&0EzNN*A_Br=9|B{lLm6g44Tpicz8 z<>D!NAQWRn_hVL09-DuJ{=)G%OS4W>23MV9Xm~Ma?CQgWR<83A8Wm}EMbs&e$lpjT z`kcFbq{qP_@NxCZWr?cT>@$+WBAA3FHtWX7Ll4`3EyZ$1&W-*FMU%(N8CPsO28dsb)kCKe(_Hkhr0o3SKc59_ZSs-G z7D|V~^d}RsyDwVFTgzEUKj@n!uglHQv^qG+OpZE zM9cH79ioZV!CmSWuuW0rN6HxX?jy;cL%M8ltHflnKD_j&*6kxd*Jc zXA?WLR`x;9`Gk=bI{CCGO2UCCd|<|s;4l$f$KgD4xYlI+5LzWO>)4Hn5s*-V42wGm zJ;9f1k!)CDM=cX*BB^0Jx%8QV7@|jR#Bpk4Nh?o5ixLz;N8AVPFpo#~7mA8&uT(O+ zl6!~f4q0<5n#%{?Bp4Jh#A8T_${tKw4z(1rWJ54^rR0BO=;Wz!ro$%u^rckj71Ek5 zy+hZi3X%BpvL>I~x?Ec&maWdWdM0YX#LoZr?HvJXr^^V4W@VzrM>_5+zk>u_#~(7y zMHpfqh1)G#_qHB29Ol3M6%c=O|dQ7mbKkA=y_ z5!Wqs6*1Kc`!ZrH+t1+^I{Cu{8t^Ig?ZjgO53dEwc{BZ0TBZnmEg@1rbIJ-K+)J}ia;y;i-Q9=_26!ZMBuk?XR@jQhX-sV|($Ty~!hOxT2Gh*aY*$ zcjQtX=%HVPvppls4YvtxNEgRao$w*CO4;z}9EKfZil7ObwxrriEj4$3?ltbvXQeXu z3LZzJqLv%HiqZ5=l8?sO2ThSEFa=<8OYp`xi++XtBZL?ae?ciGQb`2*@M@? z{!K5RRC?vCuaPyoSujOJkNG#9{p0rg$&Cj~MQ;1|a@R}4>|XTXDzrfK#5`WlD8o0u zD|3`b=T~&3+yLk=FZ+0O6V5x)Io-kyBC6RAXaP=KZ#2mWU*feGa@O8VCTWsK1QP^~ z=#CX6oz6W)%{~NxqENp6OCTYLJBR1`{y0kWtvPt}vc5U^mj4#myk4{aVcu_U0TZ3z z9K^(MC*rvKo_& zdXu(EyyMRe8c~>^$>V($-??ZZHDJH+%wf2N32Drd+K8iomMoy`5~aB&GgEMc&gb!7 zm)3Q(iWjvCt-$;$NBw)=*a!GsQprN>qs3`=FaE68`%NfCchi^4lGN~gX$*ZFchq(0 zCCvF1C9kB|BuI^0rA|uEWVA~)a(h@4w+xm&kBxqxPEXtFB5$#dp#+tgUvtE3svTFF z5Pta2gq!h9-J-yw?(e3s0o&5&>;EW`ht@Z{zO`P<9zDUIYzJY;I>A6e*RULUi-SfrQmCn4m`r zIb)Uuu}AG8REJUMlPzH_?GQV3E1#C3!YUQRT)rKSh19s8H^<(d1@oR>rFgY^q(c6> zI{5J3-vBUf>Me)a$%PD6k(Rid5Yu#-@}4xUYij>>))$jQTdhrm)u7vw7Wd17Q@B5p z6sR-@pNlv^SP{5TMWokFpthV;4sj$zZcGGWB57OFL9*1gS;1h!5{bgL{U+qs6ehwy=(kWYc?x5bhCsc;y4 zSL!Yd9m1D6%*f#H_@hm1u48WPe^0+?GAG?4Nbnw6VYVg@}9#O1BxVr~2U-=s$v-&qbeM#YkjFd#4ZMRjO`sQ%;SSeoNVGQ&Qdx%fDAB3nzRP4GnP+DdF zsG*7Cg7XP1*&|G1TuS9k-f4bZZfSgr6}P7y?Ji1YUjv)MLJB27|JGlO=3H^|-zFu@q`1(c~Dy zdM4F=%Z+U69Wv(THN|>{p3Q~9IlR^7r9U4#_{0dsW@k?y4PW+M3Es z@h^Qk)SQtxr@fKQm<3_V=}c*p!@iSpyax@&9i5%HJ_8_9;*c9o-CK zsMkNtm!4AK!b2&RSz;Ohyg}0lhC} zBL&{5p~32D8i!@ep6Z`Q@7bzJ_~d_l`CGJ(LHRm`IVavU(=$<~h<{fnheS&LR!jVr z7qA0y@;1pS+Tv?)pt*Q&_$h>(} z*q<{Fh8d4$)B+k>Zj{!UC@a4m9qn|of-b(z4BVD!V{lhU9w(L6)tQua?g!P1{Gfng z*s1iHa(kq{`{1fqW@x^*DD~cO@g=n>=x@Oo!qd*jyh#n;PN}$1;gUJ??AqYez6XLj7s0)dQV$znKD{GU9lZE^ z7^puuz7AQXQu~iCkQ;+0x3nu#TbTkir&AFyUeV5mHlm*JsWwyo2qS@fM9)eCOO*tq zUZoRpX_Yie7mp8G2b0^)PZUGP7-0kU#!{D7`^LHi=oRhF8jic@vyDtVWgSEg2Nh1N zEQMG$913Mzs=<$EpFcK`qVY*q4)k71hfD{{2T>0ce=vm-MG~-)rLFCQ(#_a@?6)~i zMBH%vwXkG4?e;mXt;WK!4&VMa;G0TKStL_@_#muf>*uQ&@fUS5%W2`9#_{9OE?JhK zx;dDdf%RLb{;RjLH|^Gg3s1eZay3~lo-JfgYMxpmbZZpZng2We0Y)KFG6q+S4CrgP zmvNXsTpbdM27AA2@oj1-ng3^kZ5NO3{-n}U>K~GDP6nGI&hLfge8;#Iew(BqoI@fB z&UsU8lXA+9k1DIE?2)UHFH@i&D;fp45(C=O>M#K)zt4|!R4F&+KlUVBDbuFhC8AzO zxo3qW$1!R>#)VYFeg@U|uDgcRN?rV$B)okp&cb%AM^=E|os(+2gmKnqFTt`zN88f0 zzbNuid4n+WDD%5=Ps^&h<39}p|9Yv7o!7`Oz*NkWfDh*>*D5K zt@?48hW;lxA1(O5B@^%EUHjijWyejwW(s^PZx!%A*nC$R6^<{N4|$b5j-mvu&sQ3J zFYYL#L!6{n@|B+Uf(Ug@cN+a=nEHYU84K;H6%x&vkQ>V#GDRN%js7P-qUDD@Qa{~9 z!!Zn`h~MLELuLR>MQ8$MmEbVr^BO^u$JWm;<&fBK$vvG^retMzLW$pXFjd#+g;ng6 zr3uuIO-dc4!bq?wpBgEvxdDuYn1Z$d{VKT?+*MrMbr{lTV$&@WATK%7Q zvZePxL-+q4^i{zr?yt*RLP{p#^J);|#Dvv_m8p}qVQpC9o9Ja+q^1n?>!ln12(lnoUV}CuP-GF{8HQ|@` zQ?V91WtxX-m!fA_t0mj)CD^8xD!NZ-vfvSh-TL0u_zKabfLmsd*w_sGRTYR#;zCs+9;GM zb>Z*$bRucu6hDo4|0owekfNMv@Y$pYa_%fe9_H@|666KBL1oo{ zpBSC$@farjm5e1qx*SZ!h6WYk7GWzSZ!S0^DBJC#0NOEPx~B9AFhiq#V=yiKS3*{> z{_Og~FYXWY|++|7ZyJM`6JtIg&Th`=uHxtOiw~_*=?vV%k`Kp0A*Nv4GaPg(C;52a{w= z<$wBsFkY|V_<_{ybiQ?kO+Nsv!uY}_g3kTT_xnVmA@vysFIZhs9U(8GYSH@0ePYT_ z2^yZo!{Z7R&V9csC!>hV8_t67`&7rri2ov;AJL}r*9J81I#o#{Q*}Bb(Uj2=q&tRv z&*MDDrN;wk+K^tUgIC&Ir+3evnw9oHL@t z&Us;}87B~57S#|wX?~Kn$G4km!=feN7O>6V-J^hDOereC4-m8O$$)p znmEdD7_^MST5K_cFJH6h0&i^BgGIwQH%pW zb0)6w!9~cgSx!X_8pwE1yUZP);GtWMEXknhk7yf{Xh7(&g& zqr;(eS5=z05}x_zxLEFC|HzG*_|ZZrkQwwYpb&HsE$}C42MH0;9(>O~kYO}eg+N35 z3I`fh&z}&sJNImEOTZWveln7i?lKvSNiSssXbW{c*Lsk7Fm5E4oRC?|Z=3u+Wp#fW zoDQl?1w_F&B>|QcIsm*h2@7SP0#+uwJCT2l04(f%xRi#mQsiE~D;ACay@caKMJubI zpzy|m@d}5FVl(C<3>hv^s9l-(_w`%hSrWNnObw(uPWgp+7&g{(sh+Ex07rrh0;!BE z8)Y&Yi(jhBxMt=BcOtr~$vsY)m|#Bo)o5-m0|kk<_3}FoqiQj=KotGn1=hYKs`uYq6+e;6f_IN zx?7|4*wT|YTw3S-s>-jYBT>4E@rY{u)83nXsycxY@e|pc&Mb^I7tdUoOX_g%vM13$ zO+I^owO8mYDQPEj{78_U1>kRdzM#_I^R1X)g-l%KQi9HjN70C5B$2L90f%@I-z<`Z z2sl&anl~j) zF1xrb1r!*_k(fP3*71ZOu@+BgKlFr`Wk(s+!>+O-aoaviIQ)GJqD|ux&mX1syyiBx zv4H1~I`_?}uO5CWH}rNlt1rGH*?ck`_OKOs;}W)`#0a0<-ChSbj_`!Gj;!_SUE4P< z=fa}`i0rpFV=qwE`G?QJL{@}+Rb`F&Yg!lvYem?TFeb^@xd4?-_ced|neKumTn<6L{Zj=K{KtysP450A_+F>XLUc$k z#i(Me#N9XNZ$@$6l1W^&b+9;6_T}3w0iq%nJDkQAh)V?itql>B2wAa)0&A>QgU%qX3+c-3~pu{WyTpv6tOtF1y={^cPN)P z*-}qR#j>!3Y3HMQNQ#)R6Z?jQb)m(%#<@QjtSJQQE!L8~Bb_;Bx37wPg4XdgXHtLq zI;Y)>D=s6V{7OvHaJ9V&$dFjGAX6W4zlGNc$0|-mCuOeu_3``*RJa+SG)B;k9fklZ-;=r?iI$?TaV4dJs_Ql2%(b_8 zMDGAo2&8E@&>Z{jIrGy~t%gms&Ry%^s&`E}h6NSkHBvPbI}{f-^eABe$3l1;yRQK< zVs`68eQQuM*s%xL0ElCA)h+7@=8TSf60x!)T;Jo;yC_MA$yeth5@5f49t)76>niS4(b#g0h1}UVS zgzDf}E6Nu@If_)8f z2F7SVS{*I6Ai`nCS=4}FzTRD#juzVc@C_mW0!aDX_?_g{5!aO9j0C;fB$Qs$7y5ow;*BOJ?rVn}~ zNt?dcRPRrk6V1l~pTip5(z(u&#~o*3+JW8=@Q>_2#NGCf{f5M`T{Vmx6s=BFt=3Mk zTA`+`<%{k?i|M}l3qjly6YRalc-b@?#t*+ERex1&V?a_wYlqj}78-45wLcGD(R3Lf z4Vv-iKG&&<2awr_t?nF!d_sQ~yX(okiO{Il<=UYd1o^J5&@|bg zIbxR;)iZWSsjBjDd@m5*9m~e~^#IV=qr4flK%{*C7pd`HV5`L+($ZD|GhoW}oM@MIvehq%0y;ZBykXta5CNlyFYbBWjz9 zlVUomM+Dtl9J51UzB(JPi+m|5sMGx$eU1$Zx7Lbgw8^T z+3tm>gIZltEh0Rf_rO7}7CVlZWIs9RgH0L7uWp;?%1C(90QZU(Swjix~=^`6hXXbh0Y-*+oYhz zM~o(|ZGiJ@N6K?azqpAiYO@b{%Y*(qCRR)KXNA?$d$T`z!}#UYf@#LW8|Va}w6to< zVw!Nr?OXKDe{Zgza+^+ktyCcw@&Hc%yqykV(94MrV=&gMvFy-oMZ)ZA41Z4_yLYB-0?tQ4@#ym^;rP9 zj)VgB20&f~igVRJT<*hI;W$O_Mx*AZK}sITH{U1S$l#I?aNSu%%flaqWyWWW|Hc0d zeNP%deow#5^N8}HNM{*Te4(~EQZ+{MnhQTo8pcymo`Pgx+C7OQCdlulYh>^dzCB@1 zLN`XWm+K_5N{4dauhvsyH2|a6B>tK`#rc7$op}q)QVK!)O0V??edxFZ#l`&n7+nk| znwR?B>;s#-T!4s%B9aGci}AQh<8^OEt?&lvFjLB~nV*WMB2pIksL~@e z8{s{3bQYUd-)%|CLlVB@p?@FK{L5!wJSd4qZ^^EX<|R#`!E8mj-k)D;0K*T(c`ZET z>(9~X4$(`PL(WUqrQ%3Uvc1D_tJ4ydHS zxa|8OS5|l$J(6-kbuM&i2tn@(oXk?U6*snEc&ajW2+TcF2@2=1@!#|UOZ4yc!C;B$ zgOZVtJP6c0W4n4}%F`GkEex6gSBDrD{Ct?W$klZ!?`~6$T$JlsziWh4@A*IrK1GSc z-J&xWM8^>SMh5x@ebg3hPM1vjB55>c(8TKcPTn8&Bf|a>ks}!1POiDV7V42u_$>2@ z0?BF*m<+!%Rg1#0FBeiJ{LQW|33DmW<}ad2?Y4)4Jz*R){;VqxsN9TKe@!`S2d(dUX5U976oFdeQh zDam5l^i?IRdo8l%wPN*=|=FR ze%!c58fF(_4w1(hHdc55e02ub8b0(7a(F0;G0(`&s6sYSc^i}>hDpm~!(t2H1@FP< z;0~(!RlDm*&13T^zz=u*)pL5ySFkUiUNqH)!C+!Bx`2$iOwrw2Y38rlt%Ca79qz#u zG3=SJ9mQ4ByQfiwR#4D&DL z+XRwSPwQ=!gRLY|8J~$_I+d%wu|OK$Zu2s8dG|l5<^j4v`?A^VhPP?^qnSio6picf zf@Pgu95enVOAQz04&1D^VsU5SgO#TJo?40) z5M|V=pyhg)0B@Q5wPl=TH`ib8QTPT-9GstAeyA96J0_y`B4R+k12!faCEW1=t|b8; z@g8>|m+!i`b^1`1mMH(VdY;lt2lHdpwb=2X?qr=UMgdqGb> zqM%nf;5yQR%nz50cu&e1nv@4qtA^&4Jevs+W&f^S2sWQW?hs?bA#~;4w2!#bo)N*BH z#<7i1ewsQ7uD@7{)Kh`q`~hOg47$%n&rF9y_RYXz|Cr1qFah;aDRaA2@M}38!aNHt zWUS2W4F}&8qG$S55oZ448 zWOTxgw=f1P-8dhMUeUw_{1cCn^JfXx)JwQ(WueWQB4?g2!pum)j6M3F$EQC!umaxF zsd>)IOWq`UZqO3~De~#o3f=%-S=c1l(f^;crnCqM9D$MhtMAi+5{L35)U>D?imGhW zN65Wck#rc68RSXqK@Im`)76C{wS_=QI-S=xI;9CZNBXLGp;>ZNz8iXdl|Vs2*e-vM z0$7;P3JOo+PL8n&rQ%hdC?aF(s4Qawj?xqCpH?weeG(+4Ks*8nA}Y40d%ERZYl9ci zGdLvd77^#j7%y;f<`Pc&xDHH}9@d4oZxJ#SFrx3~!b!#(+!v0XtbXvV{nue{``Hg4 zcpq8jLEH~Z2_HlRR>odAcRUgb8ztyQGqFoU3`4)}bqOrB1W$HEM9#_;)dm%md9m?{!`DBhpvpgivJ&$i4dNwAr39hXmvgi zq9(>p7RS(E%BLJVDP$o!4+FU*$jFtErfl@;)R58IO(sG3#{`uVYyITC$%>GxCkd08 z!+hLiJ1qR9N&MW!E%Lw>j@ztPT*Eu_uofdN$1}+<6ti=KuIoixk+bLZ&(CB-*q7E} z{T`lOiVK25I*^i}TvQ|EGX8N@Sq6Is7V~4J5i@45q1{$qUUD}y_A*Bbh zyWa__=kYhHj@t6hg6?jOCVU6-WVlf|ruwc=kc7zyHSK%JJWyLeyQP``1&|B<|3&hK zCRf1}@S#!>+IA=$EEXYnCz5$7kLGEsx?U7o9WfA6L4@y2s>Sv(I#LOl3irIPzDX`%zrF@Y`EMjn}}J(FwxJeX|23J!PDfc{o9zf1;fuLVl$~d zrCt8vS__afmp^j76AmS8xbfibL)asiwJQ=SJKMHrGC@l>trjo?FBU=39;iQt6FK?d zOOV4JIQC_hi$HwkXO8-p9Z}P8T~l3M+55H zk4Uk)U&v0$!Nq^yc7Kzn}l@a=>Tg20L8>Cf*2d_o=l6 zp97hz6})p$uMNqE1}a=dw+J~Wv|u$TUwD>xb5oO(^73NCO@(4a+RAqRsKhhIdswzVSDaV zAc8Q%DP!jC^`NSO zP?O$xhdN#5^EH+`E@m@BkOXJb(*V)48=WzHCrGW@u9^3gXCJI^I~;Fp>nE2_cNLHr zu)(P&|H%IoKSFDx!uv4MCYv&sR#F`d)nFz(0PBv#1WOJw-2yUBrDYfpLyfyw%@W8}7{`|pymG*xd* zb}uzWT+Ifs!Mg|@63LQMcZnmAI$Ccw(*lp{OpSx{vnA&IS`FH0bE36c_%BMvs%0Va zyh3TeKCdJwLyL0Nc@`N|ORlhV7eUDMweziPozolZC-GcXDL&b&7@-`HK@6icnMU&81O||Blqq2|s&s7to&-NcWa4dF6lk&9caH=22_J!fO6Ppuhy33~t-S)OY5Fs+pVK=wzSP(9!n z%3mH?ET{$N#EGWxzw%S+?Vcc}-SG=Rp$8f8Z;-YIi&%zpDlq%Nj1IcNwurcEiO~O} z@;E)u-Z>H!Z9jAx!`yt6-yh>#JI!8T0D8gnVChE>VkCyz(uZ786b(693 zFKplpU9MGW84wnf2v@HUWUpg=5Bv*4tJw8sj=7uwkc-4BPyd}rEZ~RqS!PRE1#m~8 z{_Epz7r{eLb8vk*IOik;#o&_KO;ki3J`dbmjdPH*$TVI#aZSV*dG77|8$uRqEJRqm zE@pPnjqI&@=L~@oWBepV+_ck_3!%EOLjdy#l_9Gt#t@IGO7#TrbgAV_zdZXEwBXPD~H}qFw z1FMeadC?hx^+7(QYtpg+fQLjOVjXgp;^$@U#Jy8w(&xFO(K}XxvIevRmDZ+8$NnBe z#8D)+L-{RUSSu9URZ9a;s@EMxRPCWgIKp640CV`ZYt4_^ zpKl#^+^#JG9;fF2Y~Ox}H|GpzK(&gMgn|aX?E z3P?kA_HL2$4R9ynk-otme8;27wR=R`#7!z^2S)%jVop_|I76_MRse~c015&NmXo1| z>$O6>USVj|R&)k5=4qRw0a5pcyM93vUwY|4k};)R&-4$G-3H8#ubKKwiZ$R6NWWAS zvIK;=8^30t8C)KayF@^L(eP9YQd)nXj?2Bz-Av3g`SjlChu) z!$pRO8^M{|#M5LWfkrx{u>QLKOUsCvkS(=vuW!d%wD`bX-L$xH^kFRlZ)dXpKdqUV zYAm6Gzi{CjyD~Cui6NqiEJ@aqyI`%Y(}&BrgyLQt?d2<%?NKitn}E-I_9@fnl2@IT z=AqP|j3@oG8wxfo>2}$|ewFtQI`fBxmpOJ7zx+|>A!uu1I*phPrn3Q=&e7XSWDm&Q zeD3lO4S++}v{UcTJ87q{)DlVZ^s9KS@Yh|HN=8c`pwd3-cXCEW+7;3EL4v7Dr=wsh z*iZU96%u8LyIg7NY?Je$i;b}0v<-O@EoWZK6?Kpw`oyAytf)33_A0m#s<@aXY^v~p ztVxTPRR=oX{QC6ZSe_Moicyx$8%bbj>hp;4DMOB0=Q2&?O=J{?(jVTBJxw}wz307w zLRjQ-|sZA*&RcV{_#MG;l z^S3_~W;$6&zVQ+_{hg}4y6<#V`W(ElAVlt>Y7Ij7B^rzoYU~f?rXR{qyS9Un62}=e zo)~NbmI6}Ce;0L1fzEs)P}phL(HZ;T;^WAc?fmsZ1_JKM-(I#1cdM2_PAJB!UP_J6 z!YsRG;XdD5wCH#j&#fOZy+GVmB2xETa?&$b7BHAxNdnC7voDt+`DeMv z#ea_1)xD&?=2I}FbJ!M@#+#d1uLcvY;|oPBBqWbuN@wB|_u30^@6s5)$a>&NCAs^4 zmV&_Wm>GFx4abYCmU=MKopcal>mT0HLptQ8Yw)>xb^7Qz*a%RfrRmrH=PCc%nnYy& zx4ZcwIK(-+KbQ=OvEdYG4{zzOsi&$3+bF{c$**8S z7X(QX_l9k4riQZuNh#s+NZ=#9b;J%SDsY@I z%Tf!+-t=R( z9&A1?Q_=OYIZRr>r>l%{{`Aiu zIIwfGWi!KvVyo<<)%h)Yhy0tY8Ybq3P`rrd%SG0gZHb-3OB@zm=7&GaZ;9vL7t-%_ zMxJ2Qcp1xB=E?e0RQj2-&nMKfB#{#Ak9RxlIY?uwf{m@Jn zq;rcE>q8$ig;~NJ1Db3v^mMQ|jGR$k+xB~w>5UlMdMJ~TKd-)5h;6;Q$3LKz0-jYH z_4)|KW*0l}oPOq4jQ)#&B|g$NsPp{>OoMY`DpR0jR|=8`)*P3kWw##EL%ifhus5V+ z{W}VLX2Y8X2G>TTMiJ)5NbsMY%id+-EF-N3S8^2koTd2M#P#wwzmo&?2K@5>-wWUh zH1cz~zw_X)_z#Paq!Eyk{$Rf4$^!r}%hMVGdo)mBG6~qk{0*pgf&mSafIbnCH|X1IhS&zgB9+tdD)bFQIAx}{h1b)LH~qh z92hLZ?2=i|;>or1)-R_r&4<#T=$2$u{b*Laa6s?`EfB&RDzmg_8dsT{b2hCIfwy0#MW%bh#Yp5WWP zK332#UGSXIB2p6L! zxTOVYLMf(;j0JcsPX5A(k)ixxP-vz?l@7*{Ef$-2ao8;;D!Ua=MpineSyU9*e0Q79 zLhpM{A7TVuFSOsvBTQ<JHc2T$o3g=bJT7+5Pa`&IEkdp z>eXp4P!w5G%0^=w*`juL({|Vdx=?O5g;dKh!=?~56$KP{R^K!Xv?~D$5bHag**<{x z3|_2vZ^sX`<*er5ucx$QtqNbxU25dLII z)ABa0=sUNxZi7=E zh4rk8)#_QP`q7z;&cF1t5gW#ZK|(|!j0^;h49tjAgfHZ%-c9&*oastrYeMbj&T_NK z6EQ`1nJ8M6v4HnqAb$R@SxA6Q>0>Prl4GFqRVo$h;z#M()^}-$<9`x_-zdouz4Nd; zdG8xezf>ZqvP`shC=Tp**Y+vPod=Ll98(DqYjYHr4~OsQy+lAN(`8e{X5jo-4tQ3C zdkt4c2xr@QkwC<}YmW`%hI0Fqd4p2ee#Biic<1$`Q=vw68j2ADA64Uv(Xje5m|)M^ z{iGR`FSVrgeqKGq-T;~55g4es6%o-QKTK5+`)dB9@KpipgHIUk=?U>Jr{@^=m!dDt+0CT%_xU)Qh=>fy4Znf_n|Fw{qbkn$$-IaHy|FFjz2OkT z!;#)Nt&1?~iq(t6C)zoK|yktz{sQ14m%!7~;$L;qD@w!Hmm$uS} z7NwV)D+jpSiVNdF_%Mkve))AZnjm%8De$W}wp;leiS7)K#JFW{2ny)%@2`m$Dj2Kd zCHxBQe`ib$_c68sC)P#(u(AggOh{?!V23~b46cb-gmAp>A|f)Uo}+cqiZ+~m3~U?B zsRg7Fbx(q(dP< zb^!ew9s8Q1(=FR?ST7giXznAaPxTH5pE;gd#hkOS&?X4cdX-z>AUx(4zAY9_upg^x z)+j$G-~7=IT2Mc|Dz(x%(6pE%gP|-DP*sTc&K>P1EV`Y!`_u+I?lN^Xu&wQv27w|J z2s^E;MVB_})g-_=ObCk*K8jGF$qtfTI?5BLgWrVrge&4F5kK8cTm29*`Fd0ZI9c#b ziVm4L!(uHTZ)jABK!ro=^~(vFOdZ+NHQjV zCj+AZRrVu>B*a2;8*cAdTYL{G$-Tj%X%IE_=;#S?Y~p~+WNIF)B!mjEUjHy9PeE+T+PTS;?3sDXlpIFxV# z%8nbkRe8bSqI5(!cJJo{w@dx7KDKoH{++ZWS-Hm-*UwjMg4Diy=rcZ^!B_&Pzd=$4 zk)wIAG@!cR`hQcKY4L>+?2bB`VH#>D3rnNBd$IHFGmawv0iJ~a01xLAP?8)jiw(iv-%yW&+-9rtl!a$W*@fLjpWnnTZscoV4JpGNR*JxvxcFRe8)*}YFJ&xr za}?C!SOvnt6<&LgV>*3IxzP-l1j>^U=smxjN-GkAznU^Km- zMumwC&iGt+R^NT)JUEaJD`t$9xb@jupQn+)qtW+tgL&_@2=MVlz7dxcYwfeo#m5QI zrD<0{dU0a>iCjIX5)%9Ar{%srVmYLMzr^YP(e#bcakcN)!Ni)_josL`?IsNy+fIXt zZ98d_#%XM;v28cD@t^1SuJ_AXv*zP{pL1bfd+$rsHd|t;_|}4||L1L0If4iYZNQ7j zK|}-3pmC=)RNg}JC?&j>BsS=*WWz1kBz^Lyw#ucd8?lA(W?Tq{Yz#a%{bU4bIiNG^#9;3*;#mc8uEu*3v~l;L&W#)A~oOiY=eEP!s-yVYqkXLCJ9F zV;vqUs#eF?LJE$vccugxfE<%XQg+-YWPP`!2eGp^0P<HKEBO0`Jd7ozLa+y z*)p)Od#E{eE$TRFNxpp-YCWbzQRG}wl2bCFU%|!H={()4fQOvX=#gNV0m!)rbc-i0 z^Pcqwv1+mMAjqZb`eg46KhR9_!qVY07@VvJs9MzE;iAF^22&PydXP8B&BaSDR>$Gs zi$H|RfG#4q-xHg(k> zY?ewJsVK9Oh0z2W_m^hq zG7^sVXuwI+JW`cOU|4+U~+!$c6Mv(q*W0r_sqK| zw;}>3x-@);^iPLtR4y}hCs?CLlwXkQnbO;go9C#m)fG+Xkk4zvndofIRiO}yM?+cI za9DCgy+V3Ft9HSyx|waN&I*n!7|1k>{QkP+AqOrQwI#LPp=~}(d`_i}KQYpGw(ewS zNX_j%aC7!-^sgrxCb|m_FNx7-)|t;4X!j;&(6t2Lajhm+UVg4!WsX-=LhP+G>`m}~ z8)23B%ZEN~d6~zT4zQluy(KbVY9nf8l4SQ7S!@fSEyY^yK+&53i;WZ~N&Y+Bl#uZcZER z5@y`+kP~@(49#mz?{P)$Aek0_I6Jv;PLwRa>jB+ttB3 zIrzthPV-&(tgYitz}BaW@G8>raswb(2RofHuBbr6UDn=q(iO9!eF{1Bwt9+97|&a( zuvmP$RmFFD$vux>l1e`sZbA57&%`b9dqpJ!KXC3Oan);!F>~=j6&me`iS9ee{g0US&}0%Vlfdh&*NTznKd+ZGM-+~Ipn7}mXg zs2_g9X|_IiFFfyl3Od@SSzst63XZs}&c-2menykyeG~=CxF?$E^VzdJ}8K&c8iocEvf_=v9yflRX zp9qt^qYNqY{8dB@EF!!iX?yrmOVad91*w^f@jBKudbtcEwRAia6NNJl>X1n(4oHKA z`HH|mc=WEUbK$$137fo?H7fP;1Dtr#B~ISsb(?sOegL#k%)?$oJLR`zUR4pOU#sUN zn&NITH|?lUIbea*nqs#h0XU@9T+cy$(YNf=uS_sES_%gM+LsQ+hOp7 zAo3a9b$|&RW{5H1?N_bTSPF`=k4W`B0sqwR2no7_!f2ZS2q(g=-`#L_ zvvzc}2}UoeHtWx4-^{ELJ3_96Y4v$A_zF4pzC?=(1Da@sZ@o8n;vk)lXs*6Z&_b}3 zLB%Z&IcO4;-&03|u40T z15la+iLqby+db$E)s)Zo=yY)D;Hl_}Gi5}G9m2kbsAq}y3D!Nip>J)TScI(kC?2(e zBt&P3jE6!3xdZ?>hqU=VN-4eed^Y7?vETWLFUEJ8siFPUGpI*yMkYaOh~%W-QwP`^ z-os29d9`4px7UEZy#*36i*2`4DBME`Exov6+o2dG-^dNaZEfS9MY+aFgMQ?&Jm<8N zw{clE?3_fp_60Fxk85ZQp_J{rs{jogAzPgw{*d&3X=DG|EkLwm+LTZv=V)<=^11r? zY%z9y6u1Usw(SE9Bb9FwvdU`wIvTHKSiu)>e(~{d88A>pL@_B;Y4b(_twh>PCuRYv zZ}+z%943q{$9I}EEfAnOcAKPQAzE_cpv?-0#|Ih%{?e$PptV!~NyJ7i1dVFSenp31 z(4ba7O5%xwT>_M9DhJxF+HPT~u`u$Ft#(7lz{w!j6$5gJXkGMo$oTg=-}m6E zX*@(ZQ!r=vC{f8iuFoj)ygCj9Bt|fp{vbj43Dj^TNP_Q!5d<%)QJQ~oe<&H^6d1zZ z2P)gK+l|hb@5IX9sG8*K4a$oQrzeWTY^?`7)A2xncueuu42qTQk4EMmf!3H1f;eIf zk?Fb*ms$$^uh0pXvFa__^;5|jC%SI-zBPyAbTa+fEuZymU;@?LmCSy@cTAT#hATV? z@B}GXEI&usT(~F2H>~^i2yfT|stI5UKWirG=?9iB`SQP+nRO&_p(ZlFskv)v>D9rqo|4Y1a;10Cfub*h+KfLxni+QikUl5uN*;^YjgE579LrbNE+3U01#N8HLZha*^&l! z`}(e5%<6O>w`X zwb_aX?=9be#Cr@W?EZ2|CHrnlFE5nvLO=!mt}(_&%n{lq?cu~mcMZM-j%jr=F4)nd zKfY1fS_d_9AYFkiKJ$12f3Ej}LbMk^G zeTcmr>T^*5Vgqwu4-6Rfq}+P?&2TS-e+i?Qk2uiWu)F0{XpMKiu5j%p|;y6xAw zQ{YeSMw#`q{`oNIPllu7lrkFcVce6EKA;AE36snk;I){2oh`}o7X{Gd1t3W^X92v}D$k6FO~JDiiu%l@O*x@GX2_80neR4Yy!DP1Cu6e5(U*l|X*v{=F z`eVCxs4{#GmBYY=A!qizJ|XV&zqYdz4(vmw-Q6V(hC*v1sf~jKR=Wei-2%~Q+L!WE zjE%HZZ+gXaM;#19Ny&}uFYj6dsWV##xD5bRYF~J#5iq*&Mq)4BTtnRr+0 zn+?+ktrr2@> zN9@(bi0(Go1hrjkhZ1$I9B8e^msk)IBLSoW1oiennSS8rm_hvWx3{T-eZggy-_(PZjAmzN1JV zjUl<#5jQdm`?5yt6Q-n|JZqop9Ydf(U4Iy#_~vyz-l|k z@{7;2tpQEaL*eW&mbrD!FN8|QJ3KOV|-o1Xt?Mt;t$cr=}S`> zl{_(rx}xmDtUUG{8TDi*T4Aa2TDrmwoFY1j$B(pHWPZQpOA)CZyvKcwXIYneiqf&H z_DIff7)-(Mvf9u+j}COF3d1dM-M{(U^BNUvSvTsXg!!ffdNaN|L;;^(e|8lT$2@Ne zFQMo>(dG@)Demzc%QQGDMk!6Z(X=hrb<)tzg8FVGdC4s#j#Ppv70M9c6wEgkO#Ns03Muh|5-Fy9u5Q?(9KNy!xA}^V#m5iC5-k>SXqS8`-k{ld+@S< zsRW8EGU^|a*@~_i^uqi&$1A?;nV&G8=B3VxuIFw)oj#?2j^b6TJM}WosI`mgs1Q&v zcW|a50(pSrcIn-F)s&&KFNtMza+A9TlFqM~Q?zuX;Xm*5;1_N!&w{T4%UQ{Hv{&o@nfLjsZgJA!AQO2%1v!8r(V;#C8LN_+ zDH>yYMM+XqEb%EpYcIVQ;U@I;i;&Xb2^NdihV~vcqb#F);mzgFuqvJWT zhjMbzuafF~Vl>B|E+8)Z-h^R!KCW2cIgfaD%G=LpU}7@tV2f3Y5HEz+8Q`vr|r9O!Dk>e+3~m#jjs;Xm!P-HRv}o-^b*MUn*Z zH*-4I_1_9^rtN!Y3I5izUE+&^jX6}E6IDb2)2Za9r(*iB>)Vg&163`~;n7S7H2;N; z#8VZmOMHav-=_(U{{0(ZihJnX(sLD<)M!A6EBwFq3D;s^#Q}Vb3kE|v8n;D+)*uOr zU*B`QEQ!f0Sa z`SrutrLNYGtod1N>&WqhHTH!0`#(%|N+9@jOsB{7^Ey#A5GpVBkCNiVBxsoP$4`2V zVimnA{TTVGC=~AGT}gEajiCSt0L)+Zejay;Z*i3PBMNfeq^9uXgN!rKtqowNe;GVk z@(^Fb!2K@mV*_e!3E@m!c+Cc7XwnF)d4mvi@z$HZI#~75wprGx2gG{CTeBxs5Uv)eD;qJM`V`S zL!Vx6a=8i_QRr4>)mM9aoczFPJcWVDuEw9$CK{xLa?O+BrbTTw3OI5)nEygIhTPW^ z7u0{t!~0G_h0%^Evc25;&*2~8++-V{qe{u1xe;SUw1xiUb2i8(nMfb!LS0l8N4VFE z^0xKEKpZujM|U3GT4NSFm?SJ@8@>$>ri`(-`bMk)1FOXg&&6)ybEQ|7<`msDmavo& z{zl|6IRIlt1xTbVD}sIYn;k>6Of?lP5Rt4_CpW37(eEUdppiXxuP9fv$gzgd+GcB^ z6F+~k1e+Fucu@E6EpKG&L=R3EthDxw*PZbguysyqjhWVl$x`AIvLH3sQE^O{hK{6z zQ7MNqo?kW^$<^+={+0UyDKw`!Bex4pLXgEC={W1=7Vw?zQai+y=zu)~h0)XkYiw(t zNIf6Z$7qI<{cTIRUkV)Ejdfd}avJ@aPbkj7AzpAU9n2PP0}nA)vK?PJm|hUIn`_k1$q$)It=fb0z;ai(Oe&v)P6kP99s-%&fJ!5B%z0X0tmk2Boo zt`dZTd7XPFrI_-g-FmG5vkx*WNI1)Rw@@sPnZ)IaKemFd9^bhJ3><6BytrwgGEAzO zk?9gWZX=NyWK9f3)5H#WyZ z34FAZeWBPYS%97GT{P-wyi6!o-Eh7Hya1)KNU*^BGI!~^*-?F}I_4A-<#2znUDM~Z zmRBTyAi4MY$1gJ;gpLuPFyhY}j}9V&Ox*L%TqkO#&yCAROkQ%h_=56EKq>z2kv{q_ z5Qjsb@z+KLSUi&9PSC9b}J{GW;BBK^N86VPpru9=w(42@s*VJ=ZV^lJrU;;am-_&HA-Qn@%~>6@ z9OF$o47Z7u5jH^|pd@`g&h~KC>KX8LH%EC8iFz&<6s~>wOL($~_+3)}6bvzaXy*#%DDdM6Y%yCOz7(w5W z&Qfcc(DpRj5dE*oic=2fE0d`GJnP^F8XjkFvASDr1pU=CQMe6_Tw4*hJO24Ax;i2SJ)NNj{NFh=k^hHuF)N~QeK5SrmuM1=;%+$o} z*j1xxKQ9?PPvyYarMH)XLKiBf-uD^*+w0@Wm3aq_~H48pT_LI(87Ncfz*aG&lEjF%jhP zdYL#S&W=A-A;gtLdIG=x0BZEaZ?HdWO5bkF;J=ZMP`JW+n=09jY_LU|`dJxnIE?WN zD+IschY?v(xQd_LSMnnozC#*g^KLF3`f{mb!o zaaq_qab9O}stMQ#JkkKczur57({>1)<@=a9=vgn)SB%JNf6bi{Em7ZRWAm>$A~WdY;$ zGP!;+3zx7qe~-NEnZ#Evb$LlK;475u@bf;6oyx!Qd1<)tbyZlR9C*ZH%l!iTBgGpZ z6)2w*TlUfmCRHNyhu%O++K?}WGC(+vQK#WXv;)Y7p+WRV_G*^sO!D*)88`~}^jZ{_ ztJruN0Av_K=oNU0%=*|$`xm87WO1+?d@+(^vWRzk**F2LTe8twt<&K%zg*-9mzX)e z1pI6rQ_IHE?Jxv(FFO_oX}^oKRHoAR{x;Vf;Ri}Tb0M|d<|-wzV>0`)%@((TCxrBI zdKUhoZR8v;cPt)AGbxcBF$A&bUbWrD&3_pl8uRyjL;v#57d9lR>r;#%leK&iWa#G%_z=bNK*b)=;$`$kt3yQ<*7fVA zg7AJaTUt@o9up^1T8op%^4g@EJM5g`VniRjWC&mOTxJ&)hN`1{>_}uVZh*?edhDmf zzWXReB7CG!QUSAQ@^!&=tk)N??^&G`^&S}gH$M`J9sN*bBsI~XgD&S>aErxC&%jnQ zFXldd%ksY^PU?-@n>R||;Ru55DJZY%Rb(|IIxgYkRNZWFFc_jiT)jgkhY>;v7Z9D3 zKnSMfjIyYYUmIk+9f)dWbE@p%mX}_ZTjrT@hJd$DU z-Y=GQp0yx^@br-%A^OZg+<4V~eGjGzR%XQWGwi3Kp9SwqIcwd7VPd1+lzndDHlh;> zpzX>)HWQ|R%oWTfN z;G|!?HG>Y%^`V;T<7!AbT=5|rDLajR$}91@MiRxZSfjUjo_y9vHP}J0)m4+ z@Y^P~=1Q#Ob(UL-@6Nj@ucvm0Z9YU%p>FQ6`Xh9EfXG)`VqH_rUmWg+(U0(t;5-86 zB#yI#iBcS_yu#o(*y+QI_{zNzFm94F+gE0wQi?=o`qBRRf|A7ewE{Wfw>kz$bV43g z9AL?FponcoUF!N|f?tQ{CyfW5f^q>=he;__T*}Y*Ln%L{sOGP4*@~0Rv{1b%#nt-{ zR#|RDLnQcyelvN35g(xujQEVf=W9$NM&z1*&xMEES3Ys-Q$$wh$LVaxp^@%6sr9wR z$aqvL_P616)Y%x~>kKB-@{STOqWB4Dr@9~jZbxj|Quj+g8@+zW!S4a2GvY|i zNS_DEqMa*ar}G;~hI^yQ9a*oxQlT5&@Cn)84C;9CBs|e(D!2YZ z+ceH)03S1PvWGWbY^i*^;XgwJYP^Q%MTvMRz|Jh?(|A3ZJ*14{<}reJc5TgAKYnKYXdE`LJNW6vK2t zSnMlI(cL1jqOAbCD1Z`3$D!G#a!LU%9%dc!#8lrf_9eeqbY$n9Y3lg0@NB6D>;7D| zRHoY@;Itt)=+N1KD=MSh^ZVB1cAOrfOC};+J2(+Itdq}>qHQ!ln#|#_ZP|l>PoJ68 z(6F8)ejvhk3M#=r8*5}ywz30z;lTR0hzZA-&=9w5WQ~`Hg{W zqOm^MO}#7s;21fC8~so&637I&P(47W&pcS=JM|^bF&&s-drLOPeTK2C9tlF=CC?~^ zhY&x`Ni3-Z4>2n$27+pXhhTh>M5 z%a_eyNzv(qD{^gIGDbX}4Hcq@^ z(*{;|BzocqsDm!wx9RRv(6$?-oRU7P$;rH#FN2B%p}xVLEDZl-9Et_(E-yS)QP=tm zZcd3pkBCkVW$@}}%;QdY_=P7WYivVYpg7!$xiWFhdbkfh^dxTMmZ`@^+Zan4LT!8m zM=vX}Pr73souT(#!DvEqRrKyR6n^`~u2Z6%boXv-L4F>9mAo?NC#k7ItC|P^+A_At zr;`SMtYO#_J2p;qgb(p0kS#@x69Ov!HGh^Bezi3YkL}E#msEkv_Y>**hwp;sqV77S zuU14R9gKz!Su6&iw&SnoWFj&E6bVTMR~YmtrhF_n4W|kcH5a`8x6Nf+jR!4qIr3Y_ zI~T2N|r(^*=mUj;*{H$$X! z@c9cQbe^S;y4uH-hp@365jY^sps8{6#czwSpdg-)amGX%ulf%MeML_EA`b$ z2ZXdsap5)8DGW(dcUuxXQZyf8OU~$|m{T3?!W~!?K1pu+n89t|=L8R>VlQ>bNIReG z9DDyrAoistO{z7=1#4?g-|Q%k5$3x5J=!)nX;*~I7>Mc`-#Y^s#L@^*n3JWkT(fE3 z!vL_b)@57FY*aH>Y~8+XD+DP(tD5kY{&r286=PeeG#(Zc4d?>gd*VA`-nWf>owV!> zHT3}R6$R!R*Y78bfUjlL9E-LUlT7dgF?q;qN@4-L{BSSB_BRE#zRPyF$xjwqbeJO? zjY4Fv(=*}%7f!?DYMAn|_uo6lUU(T97~Nb$H@Kh3 zgNzy9n-3a^XNz+(`@?$1I_{Y3w98_Ym`GQ!`S;t5IqRg;->02mmZ98eRZrMHo`(Kv zxS!B9!VbQmA=VDk3)TqZFoJ&`cv8mIIS^m~VWZqsuN9%KXSt7dIM5?&Enhpmg49eQ zU-EHK(GkLPXRd_(w@K)Z!n^PYJ$xC0i0NMl31z(328mem^>%3z@EmJI9ojJMA#gp@ zVm>bI=q-IDnB@0eNHwSN;n=gu6+U3&@bb%+c--qxFX2}oJ_4i8AA+XmKNLCik0H(%j>pr8ut~`TaO_>ZArvnt!1JflJco`q8sh!2|4(oyu zM&c)U)jZ&zppYYbp>rIc1!O<$aeVQi)7qD~MJ66o&^a47*xG{Nr51X(UWgMrvaw_T-tWnHkrf}e zNo-FxaB4gDjqR|D;-lPbGZg%C9EU>A$cJ`;p+S$J)nm$D0;Wzi3r4 zBqI`kgJ%T+<$VJC*&?5L7G|2{2|+%=(&m)g@=!=4(Y+=iVZ#I;_ccv>Hbo|DcBAAT zR6U|NYf`vGX|JNV(T!8MXF)t?zk&5}0ns{0SnFi)!`_^c1F7n88QHMr4emKn+$Sm< zbF^+0)1&QFu|3SNHS^U_&H(>!L3V?#j_P4}eDykTBz9<<^~CV_ZG+PVR+-QUf@x+? zbF>M;**RQ;$$?d6wrPz$@qg%#&uxD0Z;T7ZHhc(b?)JOxWZZ1y&?;3Uy!Hd77;3lK z!h9~Jb^X;rE$>J$Cm~9sax5jUx?V@@O;j)z@P*Se<6)fyXIu7+XrF@1-QG1YuO3g7 z*H?D6{>%)l%iU@B33oLukoY>(+QrnzrGE;{)RuX-QA3qY-5RNv=%b4$_A&+Zd|4!uTbf1 zulFf5TwAO5CV8StUw#{bRc&*-(~gd9i!S;>ZmN8Fo%Dfn0vVRuqcMpwgG`xnVE}w% zI(`ZL8@g(J@m6OmhXWsqoY<&+s7X&IEgGH~Q-e$b|44M)5f#6p_guLl1k~vB7au}> z4;X?JoJQxtC?{{^*cvNhCE}E;kGCq2^r#@KTky`x3qs{KrO$W;9#2N?&u0a=&U6$q z{t^V81;K ztHW8Wrxg2#LrDxNgX~H@)Xp|zo_TJkUl{M>6)})FzT(+QA?QK1C?$4~B z^-U;m#PL_TzG}Er^6k;-J|YNzc|eMl?N>JO=`BSb=M6}ZA8^7390&4i4rxVhRi~k^ zWA+54e$O2ao=plY<{&dUE?mBv$CJ)WlbT2hCH>D@My_tP1_Mm*DfF`~gBavb{^jo8 zkMkTd@MA&d_0s6`VQH+vk8j>ZaExxRFi#Q2%)q)*GOSh3HJ)L(OAA@sFFFbDmG-ZP zZIZ;Hg4Cu3%56E3CvpeXLence4|;rla8TvWo}p$mbQe8Muv*ElAJ!KK^Lb_c2*iXU zUfbDIWzZwPiqG||$`ax($Qfo||HMlcL9qd*Sl%8#NonLvhoL1Qp*%Idbn3(|hp7b` z?-D5BxmRvpW;z>f3$b`e_k!LMKkDCpFvzWsmIu+q_CSYTAeT#jl3fKQiNBtQtdYkj z2FgnK4vBmi67>%|lnjUjD)A8N0SYH)L)(*95c<*~lE)C>Y{y)Bl$-JN+t8|Bfjf^_ zoJK&jFR^F@&=||aX4jYR`KB>!J=bO=*-C3hP{F70m*lv{_Otdr^pa7SRGF>|UCxJR_k@uJ#YPase_6|Y_(~L-Ri@F9}GuHh<`-C`FNOxVC)NwveXgs@9tW2(t)i)pesTQ2V@En8AqNE+QoR^`kyG2v;G0d|mDia+|x%GWvvl zZQkl|d@qs$;cAjENn=y&q=TQ6b+(Gx*)3f^8Ibv=x7+B~WAF}2Ob8P$XgZVL#6gm`& zvMDZE=X-)n;7%Z>Flz*_DExpUF@Ra>Iu9bl@3#n2>`y>_u8nD_0ls|(duo2`hw`qLOzqk(d2A~ZX- zK?=@0EwV0pJIf!OJ#9a$^T#oH8y>$VU;=n{vhwu?nkaPiMN=XVJ5JfZkIc$~z1!(9vAGoN|;GkrEK8KM?&YmMMcpWLw zeIvimrkTpDzvg(1nV%0FW^(mn>3sg!1e_t)B&cjQ&sVV{=<=3$?P9H#rEeV1gqlYm*o97YtlabN(LqMk#xKr~a}!B1k@ zZb8F!#Z+DT6~b?454Yw6?V)hKy-r#y1*3#)^}DVPZZ|*R*eN|h0>x7)u;yJjvRky) z`+=Bh{`Upq#kzn^8ZHX|$8QtGg~uXImjmbNl$|&)$v4*64CfXL(ocm|vwx%cZ9)(U zQe1hd>yG*X66F>AXm6bHA*^nY)Qn^f}DQHp%avg4n9CQ|P+zXK?0v zY&N3XqMyM`NKc1djZHTqn*KT^Ak?M-5FxL52qBx-j!Jlq?=Wmv^0vu=9m zOpDk08?J}^_l7?X+R8kAkG>}b%YxlRi9eVq`hq7_;#81U{ft2D9I)%`*O%%mv_Mz&9OEzYgD&Y4zTsC5jC z@6LMSeU+~W1@yt&`LvF|(dMfT_V-Hg{T0pdP++z*HNA><&y6oiI7=8J;YpAeAf)0L zp+G)TvJ@K^+gKn%+hkw|b+|aoFs#$xOhl`8JBy~tXN1iLKz!iZsCJpw(X!A7Rj;T@ zUbQBmNYoi5Wh!|1p2!*Kf<%+`NSotdoyB5E>tkLmvfEW-ivAlLYP?A0my_F!Ju?%? zd`0W~7A*n5e%-{(PI$B%zVHhIjG`Jis-#`2fHV3j#iU{HM@&)UzYUt@?m3@J*ce}1 zNPJib-NVnf?hl)_tK=#4sWmf}MedT>1 z8YU6*g`moQ;vLVZagS_}ZA&4O7?Sfi{~J}%WZ)lVe!Z6Or27qS@NmSJZGN%r1A?V{ z5y>Z%t`|HTIATKpQz8#{K6M`xBBE>uxdHfb)y**V2|@Go@~G^VwohcQQnf&aW4M%W zGZ=3Y9oT@AlVK2YjTO`LcQF&ah5JpIy3L>0B0b;LG<3>hfC?r*VRUK>?JX&eic1XS zUH*_+q&>69wQOCL)k@tt#Js&8BWhD2SEl zQ6*GW$E|H|=cD1zh?k=VhAkB-j?XTSPVS-I#m_LP$}#7ci}=#5Lj` z=Yu7UjZ#I6=Py$qQIBO!M3FVoee zrUn#nYVzs~s$FC+wHCi-LxN&cXb{O6(w8w{q2;=e3Rr$ufMioXHmQBI0 zUuyKNNkY&0ht@_;vKgTj7BXM_!I5d{-)yN}*lRjG!3y%djb~nBejKSnX5VZ={T<{h z@u=(mZY>x>tud*8tW0WfM}v!j*G?!zL94f*J6vrM`LhbmM!Q$1le3*lvUtu!PZhqd z*Nu?lgf^xCu{x^jXdgyy7 z8ny~C#~3ys6h0sk{>%1p#?&42DMImAV#tjp6<*R}qbXw1skE?L*GnI&s$tFkB4a{@ zkjLOhbWtu(snEY~v-LN)Dc-BD_!Q~RR|PHBuJ6_RXEu45bnpDu4sTv=?ih&{>rez| zS2djdCa}&|U2SSB$?h>e*-b}#@9^YU5>tx6MYKZ_;dOaWbK2H@K~Fs!3B^W$0}ZBg zW>%(&oGzI_zb%>v@j)+97|C7pz1s@DoWzC(!oy`0Kgrn^Zkyvf<8pU3LDt22&^!Oj zhho+{f5oq%^^kxsxN^RF$Heq-A$i$CHIt*UJ8kVctr8D;SDU4L-j5GR+z?%*gVUQ#sBL2o8Vr% zDhVd^TJVo1SC~RFVLxGu_=AagqzrL$LoS1D0Pk8tQB`4^j9HobIM7RFk`weu|Ij!d zyrq-m}O4L~TA?QczWER-b#c`iWR$xyfP~^8b!NoG4&wNX$AF~Ev z>U8e$K6mNf{%4gXkTu#O6DIK@6$C80xaKh2%l}g!Tl>Hkr%+)mNKskZKymaAn;G{i zuR|@fQg{Z>XO<8Rp(*#5!+T5-o!&a0Dbe@K+1A)9(!-_M&*eAlGebf~{X9F+yNw5P z>BPso|Hoyw#MqG}r>L5UI2N-tCuSp-W7!n#HS1h-=1V8VE#lC+J(Kk55z>rh#h?1L z!ETSnh8!Jw!Vgte?2cyg!1{6~K#jM&(_3H0Lm@jGh z(rr^ldXNmI6SqUSQHb-D-RA&LWU@N84WS$wK7kaDI4Ky((0{GRs=LbV1*Za?$*G)I~>p0l><1CL0&W~{HVg!632 zp!C3Yt67>A>+F)Xt*--M66GTTe=e!4e)s+t5 zucN|)cDY;IjqNPS=o58rlJgB5p|rT&R?oKL4$(B88K76hPU@?U_uj~y2xz5zKFU*nYj}{`B%QMbp?B_GlA7$o9(l(dojNS?#k=HlNk@pH!^3F!@p*rb zZLH;V0O<%oSBphVkCq-ON>jw=S|JqUtzBvq?sX%z{-zwuxlFFsWP$CRhzM>fcFrah zg_h+2f)DS%7g#gr?v--6+x>FfuPy7&qW6P%i#Q$jb%_gau8MQ;@D0wC2XX~lUHtN| z1q(bBue}w55>M6eY%(Vd{)oML*WJ@bq!mKu;qwb|7V_lJ0$~<{FP)lPjCrqi7Pt61 zwrsby(YtblG*==OVWQHflX(;oa-0?~}pZgked z5wkrR1Jv`XrCW3RvxwJF(!qwm|AtSlib=G|!cCy)gL_QiU-tl88dl|$U@M6vAXKNv z7A-#1l#-E;-W~)#r;^TdwC-|67Vhahtxii(Ks2bAYxcsC9aHoSSDNoP@l%K|;^q2W zSj_Q`@)+X4d=aNp`}IZb&gM05tP^n*1UW5fHNVWX2nGt^^|AZ`^zNfcvylgQJZYLe4G?n~x~-zmq0 zq9Zh<4?or(K_&Z6+O3$VKZw2td!c+OBjhiV!kE9!gK3i|7v>EibgCwVz5Cfhg#Q`L~a+L1ByXp#QSZY=8j!@IxS#G6)c zEuXw9NV|G?C_#WP9nD_F7UU%;&8=x^_+1OU5Y5qQ6lOz{O=A}FM^GYN+cK3-J3?fd zq>zAGgT1(sT+AnJhPo`inr1TBc086eNJ63-pic3gk$Oq6a=~8iCB5B*Bi@QR4Rb#3zDax7b3cCCD9cYd zDW)AqhRXQOTQ5p2WjhyhCNnI#UqT*<5vlUIA^eMKGiV;Yd)mM){t;xN50c*^Z#?{wPz{Ff=R2)XltL;Io zW4%Lm&{Q$6pq{Fa_)re+U_L&My?(uj2=_v?GLmN#gfeSjk(cL`{!n{vXK-N-)nu-~ z#@c^ziH$6nOo|}7ce{ar$rXnKyi49JK>(}k@dECj@%rrx?NZlUeZsqiPJ{o)n}0jO z$9q)79|}ac~T52qsl^7L7(KhEq+_UIFQA z3odurvA%eQtbw3N_r8T%vkB925?9wR&chhZ7Er|_Bhhh-C3x&LN?p^C_18?b8NdGF ziWE1ppaQuhX)U& zb0%$xILJ>8$3L+Xx26R8-_{-zTK`3a;In4PA|p@)ZOy+G$$5&ENfr^u8)NktuCROb zoWH;Tu7(zd_s!<_4oK%6c-#-4hFZg&$hsD3{b1j=_`{QURh{G7sh)oeyml0--);^XyQfL!HFqN&I69oG zfDfW5&f)qDX9`er2??XBkOV=zFhV2Z!Yk!Ov?)hcq`QZ+XFthc3L=g^7j;`Gt%uAY z9A{wlKcepn#Gg-#1X3oTxl)Iy+i2%D{05g5QwDYw=C&|B*IcmY9Bp{)k%bJAFEz8O z*hU`z8|(<>tZ<*>+H;onx5qcd?kld3M#touQikq%|KR{sGjIC?xs(4(9eyIQHob5! zyidN(O7|B_oA0hB5qdYV+sRr*QDFF-pl#`*EC`ttnEY&%^L?$K(+0m;&waebdhq$t zcV>Re&m4DaI(Waqw8w$gIr#*=hMiy&xj!%j$fm_wAhQ~oBA&DYYSzOFL>j;%P({g2XZCC zXODLJTx`G3*BfFQ|CV&sW{2~|ybVQpstMX?fJSE%#ftbE6Ppda@Sq+R1aW4M~q20mSnBi*Xw5&*!fR;1THKvX#Su<|0oeQyxZ7Z#PS3^}1FI?%`zI_a`X8i{b43C@uhA6$Do z7kB*#qcOR}iu0tW{QMn6zb(T^9(&$dV@#Om@Nqhp8=64sGV_ABu)0Qj$QTo6)=X1; zd(~#vdtu^@l6(Kq*<=i*A1k$CD??@H;n!#&7P27C_{kEXA<2vaU(_?S?3Z!Wi~T;= zeDJgxZRKv-z}XEWFN{^(XAf36ozKbF3i%VQgD5QmkPuMN`334L5>`j_6xuSmVcsT8 zFnBxlu}z=+a2o~RE!rZnYS1wOq2VtR))K7|WicLAO|RU9IzF38GlMaRDULnKR1xLN z)R?C49)6~!WIe!Mcgz2XhgIh9g?to2uaj_iqE#@Mg>8uP79{@22>R^#}t@a7SkjIEp%`1kSBA zBtb>t#VZG?F*V+L1fOI)tR~NPRD?uiLj3}<9TfNE!mI=BR=G<(9;>f=C#$J^xtQ*e ziZXYyM^fVkyRet5Ou(sQ_bUfTaKC2-i?YuQxJq>I#%yRfQS4^zf|w8dBaE^q(GTB|FOX`Nm-xg6iXj)GoR;}|-tSz1kl0iW z8h@;uFrKFXF)C~M2P`*#@h}!O@6h;(JMk$YNoZD3X|7g_HVL(tukjx@I8^tNq~x+{q5HGq5B{RL^#f=@;QG{ihyB_ou~Ht zC@5R+h1)`jhV{f~sO%)`Mc^xEHnZ)l81)ljB!yzp3VmQTOj-l|wi71G?~BSLcam2I z&xFE@p58E3&td|*F7-~eAOuF7JcmupQ=?5nJC7oum2m6;URtwXf*;Z8W&xo> zS$ZTuI|%>rl8sS*lpg7?E23(dk;QbwH06?p=&)EiVXFVYosZ6@aMeuXNz|X}d69yW zdaok&*vM`zh`d7U9%*q1pU-IRI0s{PkG_4%wBHQ$0_(GIcb%XBAV$LCc%U*^z0TENxV3oYHCRN` z47-h=Rtq~Hom{tX+Vh&pEPHnl{7m9ip0h2(5{d130Uduz8yC$cA;fPnlB$2OwXi4` zS``$q+~3lXIFM=d)P577X{v})4qGp;=4 z_nWab=!FogxO-jZ3`#$tfp!})%}4A7jqgK4ju)@uGH7Al*^^HCgC${EgUwdtM!t4*C3c;%}6RoiIaGp*n$M1zo+*gxNPv0fH_p^_FKp z{t1vN2r@I=tbx)Ph2UL_(&eVBhr_w&Z%fF7nTCB0o2k}+4)UZrcv#iUOApFQq~0)A zRogK{)v2sx@>V|j!+bdmU zCQl-)Q*|h0jQs=yq=^7Es( zTPDK#f!o;(M{y{0f%Hdxbt8jFYkLMC&7Am?{^6)<-ldl7qgFC{%*Gtdh^3jqa>qN3 zS*Wo`(lz+;laNTck*nTMs<_@1j|PALF5wA^USTU6(T6|Jw?a7A8(d+er$*jq0EhUe z@_ztEgb3oj!#5mSfo|>^|6(wCZ#2`N_90U)to8m;K`d3a^=!_6rKw$M8(pHL)euBO z?O~(ZPh&okn-AsAY1#&PxRY(0tWwhcHq^AvMTTi9D{-VoeAmTO)*h-bJ<5J8!UUrT zcw!O)JZJBn)+4Fql^(=Ivc++w3pmD37}?umaaUr4zl;1yUDe|b2+38vPJ5|Nq2I+l=sDc#EFm z6+BO)Yn0vB<|7pS_P3?AKg4_Z$Y(d4N?#aLB~87b*$D^>T!i9C^o-cjPj9$x&QvBu z4=95u8kIDp;X6JmeT5zPXtLY2I13RwHqoCm6c&pRf->e^64S`)4K5DwKWuUex$PTe zQW!P^2K%I(J&BEZ2h;9v`$Z4Eb;i@>K^dq)8%7&T=WK?~AlZz@Hv6Xea~KBuWV|ER z3p_0f6?wh=cuLR`eEV*_Mx$snKj477bL`D|ezY(sU} z;OQ`%7)D!1Sc1M4P~cil+HC^()VvlzmK{?c(E-=}PY=wC5!Q=`Gj7O+Ow!C3^g6R# zHR;Y$g&QpXHlDN@7(8j5f?PMA&8J<3eI7NJy`>8S>Co>l zMCTvhDS>8*8&GDwdquneq1d%%ZF`Aceb3SsEy{|3x<4~#kKJ9EX80;A61(ZP`+z^V zw3C^yXt)@fni^bxfo{;a^yEjwP7ponwz5YB9w6e;R`K0Iw z#oPHM+S+Nf{zrW9uzTYYwHl>Iu+^w=A=k!dw+z)kje1G_rMpw=xW}gj59@2g{pLbLu zS!+d%dAjLj+2R}XALIn^rSK;McYs!=)!G)Rk*w}buqGgiqHDH4A#EhjwtFzwUYwTR zo*MCBl) zCNjl-nuNTK0P3{3_XRp7rAF?z87P0mkP`c$TK9nd6zL+8IEwJz5Hv6vs>)B*l}uKL zWH1b{4*15e#wSU%!#G4k3T#J}>yF#c-|!*^P8#m7EB!dMus{l5e8pljYJKN%dV0HH z`P|fRki6He|5ie?W7_6D?cIeEfAg>W_r^BghoZ{+BiZa5se7m8q#*W!i~HVB;fYbs z@*DtoQ`rwUk(vAtd;`9aXbaJ!yZ~Q3y>M$QsPy7dOB;?NB2j>Mvk`#i=<>d%R9~ou zDaS~PI3iH7{<->dQly=$30nyP_aEExNKoZ}=Bi6s{bcz@h7PMb5@Ln#*yLM% z+~A*=uD1ztnJd$-h~HaSl`4)4!C#>CK&i76!Z(yQ`%um?e3T($TvZG(aAM%;Glrog zO8}TLX;B3tP_YkG3k%ajEC7a}CiOLVoA8&u=w~)6@GpEHrys2R4ZE(WAOu?u8M60! z;w-;}^Ol|CuXBDdiH=^gqBvuWCvBB8G*|)QR>-l0AI+Uc?{n>etg{@Y*Ia%i3$<|) z&1{4I9;4bb7`Y|PBxt`Qr<{7|(#l3#yqo$}VGxa(Oe+zpmoQ&yNo?TEl*B5n117}1 zyW~T=o4w|aUP7M4a(lR;#|aUy>=iAMiFCeL*(k0yS-VG)8T2po={3;3*B2yUQAR&t z1^)9Bmz|B+(6LyxZh1@M*<#tPCPS2Ux-3rL4)%OB=YM__nLu&koWyPC<9nE;hxxOU zaQ!W^`lB9+rcY1YLU_JTHdQKtl(q4 zezgm$u6^b1&CY`P+%8XIv>%@jQ>&lD`GrU-Iqyq;@rBsEjfKx(2kYibkBwTwY<3EB z*;YPwqrEiii(9NdJITw2v@$TPzvbe7^6jz?>d2)>Am2-!`=fI*F8@)BzwVoFxxm~y zVM^1y+Jd&~Z}k<0PMjE0aZgBVCzHP4_xqs3&kMwv8}j7^(Q5xe4}XBXtUCFx&m9>B z`rNy`feEpq_5YIRetT(o-UxcRZj^id`VHHFqXbLvAVpzC%VFV1Z3%*!=@fX-l_U+S z4IXOf+9aL>=`B9pQuX)RzKV`kv2*eqT+(Sb{{6!Sy;NIQ)n{pc7l{_v3566-jWsTB zvgR`f@S%8G-%&OU*Mp>iei4iDkc+LLc_jzdo=z4~R*k>KOsfPL;a zS?`tG#S8K@z)gP6d9FIkffv!?%9+MN`{m^%aVYS~-zt|b42|^%TMZ38K{Qp-jO;~? zRVq!#fu}$0a3jEa2xh-vof>(3g8vWTl)Xo|cfdR|*zj06+eCyjU9poj7$IUU>oiz3 zjIs*2BOTp$0Eg*;ub+PV9^DJ#U?ht{CCIF4KGe4|$puM)n$OO<4fA_(Z+1o8wr(qLRc;c|AiiZN>~DhX zcUu0Os59+ecWAEMUn67X8T@nDlu>BG2lr0RkaXx|n_T~~3vYq|!EY)6s7}Fe%jYDg zMtX|NcD&>FRT;3~iqXp|4&x*{cDP1&-dYe4__FK~Mo!-wtuM5Te75K4MLes%Ay5xv z$4ZoZgVBRnq)j)+u|>qa+7)$hw~He@3pB}~Oc zN_9b5#jTf=D&bJq<+AOqys*TxkB$T8_A0Y_tF*YuNmQS4Q@3u9AgM_BROe#KUb0g~IO_Sp&81skA3_QM=^h5Um3OqNv0}JxDI#5O=$>Yz?!=LBk+Jzs;!JS1deV8r34cyDiP7NrV9gOCVGsw0yVk1prw?H)Kz*EVhcwM zQO@jLH%qXSFMZhU)g+Vnr~({=^RtR2T5`n{i{%>Bhpdi4R%HgZCU(*j?t1E+=Iz*7 zr`n8IapjvxYeOB}a{cvDyO?3iv5T4#R7n)FR8VxV3BRRWJ-eD+UtDYq1EoY<`1x1V zD~M?&Ha=b+kHcdgzz*M|OAj;6cG$61=*f*{W%^l$XutlS)Dn% z!pYiiJNe)7mR0?Tb6(B-ohLJDet|R@ z(S3z9`8aG-_^J%!f=`cEL1M)LDWwD4AQQ&WQ_eN2`XkaNiNA3-qt~paYpt#f5uT+c zo6-DjSJuK_ucJSSnj$~9zLvIA=vJJznw^R9VJwv)eC0&_%W20KLJWSZO9#^inAD&b z7)+F&{`zT><#nq`v*OogJMv+hZMOfZT`{>hsY+X4WvoVV*FMg#%AbR5{bT!Ey`!K7 zR5S?k1#Jw(XOqM>Fv0e@&2~!ENv2y-^9{me&#Ru zLxL_{8VTtdJrPi83-o%Q+v>b17H#!`{^=qVAYDGK1K4K0J&+1dH^u4-_^CF1&bgky zzq2z=F60T0?;RQ{8=JpUU@WHzEzPYNX>k;ki;vp+HDG^wbDK}firUqkod29@+{2QE zcb*UtZjK#leMWdSY$ZsUzD2*lSi(9N` zW*6r}YF`DHAbzrk86Vs@RZb5Q4OKS$V!&iF7TP03xIgdL%biaRt$5ONqaULQ&3U*A zps(GPlOpE+aUdRQBG29WH-s}z9q4(rDw=6 z3=gE^RKqul|YN^a_6%sjqt0!{qoqfQeX=f0xm zxbwFG5TbEW|0R{u^>E{lqN0@pc(nTq7meFDn*R+_2y(Ov3uzhevuj1a^LJHsE4=9# zo70Ts9MA^D#dn0{bF$_wvwn(t)2i)GVpsi>;J!$t>nN-m2a&hk--d-WAk#~ZPrvym zM-e`cYN8+@r?3#5qAnd~b#>lug?c{1S@T_M8WpxRMv6JpjiULlyr5Qf?A^qKl^($# zp7j>zC!Jnile&t?%I4Izt`6ec9bHR{Q_8V7R42HrwM{I7+g6aqTZkGx%8(QCo;#0B zPEC}&4J<-6Fhmk%SqHdfgYxMlad8&R^T!waese)W!orl+FepcPdRw*lzN|`NP%NS> zJBacvt;<0Dacu3wJo{X_=a!h9dO#T`AqLKaRIK?=41foeRaLWM(kTB)CWZ`A?t!-k zuN*tNd1&C6R3=GQnpDb|o%S-`fCyvCihi{6A%!@*e!(o+M)svc;-)RxvTbtxMUdb!MUJoiLzsa0cDHNRX+Tjh!}%J0FPFQD>NWFwlnl3B z$ybD-Ox{Ug;5~)0s6N~qkt}4pq-M?G&|KFxjV_qDZ{SGkR;ExTc9SLJnwH6RY6@$` zS2ohHwJK1iGzUVyc9m_sg8kcql(DZ--{GOn!9mh#A6p%JAQ#DOWZx7z^+iK|ir7dW ziNsfK3n-29LP7D-)A!1B89Jvy4#k(NccR<&=ytSk96ZP>i-F|dC%vq6zBZ7k-v1Cj zY4vF`x+CTY<-8gtDcL250dzuzZink~x03WbzR5blj0HX%Fy!lBGWIF}oO7=Y%fYt1 z=D%{JtrI9m7Rx?uY7I^bkLA62Q_Owztfk4Np$!nl)tncA74i)>o!Xt6)XoGt?yBN+ z?K?HumyNWf*Y>I7`ov7#^&CAGl`wb)J=ST9!5NV@F$qQe7b{G#CfW&EH8`_ydV8iI zkv0Uhbc)Bqe@E%V%mtk#Q-3M`igj2nCqk^297|53u?%pK4$}OH*1-y(x1S)Gpp&tm zl}I+u{iwwrXWK)`W0gmvVd41?IXHha?jawZS@>ino38IXY(Q2fo zr;n+7+WU436h#BZ%YMb*R)bmTD@{3{lpbZ9EE7!2U2(p)MjAL}aDqMJ4NULt zTIfjTP}*7Xo+LOmstB`}x2i&Vc_%sD?6j7>>jmzqI&dv*iiUd?oBZ_{%?LB#p%{)# z1Z2KrgTF}oD}Md)z&9}Qn_i1y_-W;1s!C!U8BN0C=I)z$=C4L0JF^>{n1|N-9rs`$A{btJB@|NYNt^zfQ*%5*501KRwykIgK$IBq0H#?f=eiWZU!T(iB!QA+9ROy4!KF{B1DJ6=7=7&hPnQfy{ai$|i7fgb-zXSGoILu% zj%<}x+@U^2dJLSXpb=rc;`5;`8oEXRyf?v&Ii4X}X1m5!d2?eAZDd>Fxeh$ivBv!x zXExo3?Pqvr);jveI#?3X%o9$_o~s=J=T6ra`oWNdtiR8hPNL*Rih2n4;|Svm@sT$K zSo(btl=6z*g7T0;a^;8L8{QVuhO>E@02f11rSZrEi?cr z_Nq#5{X8Jx>goNEebOV+5M72}??fn1>!z_LyfTr48^1qwc{+IN6lSHYFroitnZ1oS zyL_f_dVpU8n)$wS5;`uG!WG64A2k58Pw^-U`T=qAMwS$U%Y+Y;$Kn<7K=tbF=p^>q z@l=?{00~3U$U^<~bYY)oMD8nqV>KoN@E$hpA~kv`H^5H&*$1520HurH?YL^KvMA16qww_-(2=k+m(>2{KO%H_8I)L=sW5q137(D|H7Fd9~!g|pV zD3IiJG@`S{oOXqU?|Yr`r`1Yo`uM;V4YoEdBMoP~6gaL6rD}gpL3tB&V4kK%1J4`a z(FZiwr%37mNK)sQ1e?WWs_V>F|B;?H3QGI>L!i14DG6WWrj;Zpg4U^#y&B=PoC$d~ zYfs7PP%|u4F!a>#s!XRbp`5kfiz;_x4Lseg ztlGf9RX8n#edbRp@V_>-V9}LHLG>+48FuvCaibP>rOTlwB{}s9xbt4c6hy2@;EzWw zGl^rHjD8a5=02mqY;mI8FXx@V$v5%IXclH)8AXn93*3k{f{*>wAwdn-xCD3EQ!)I% zH}OrbQkuz#_wCgBFUO{wvvUelUtxJaM@LFRDSaiT2!L$DJH&w^gmtp`j-!a39rn~O zBQrcY2&^^ls8&TAbY^4j;7|E!H z+VVWoN1ylZo^wc|Yzlma^o^ph#{S&bTji-X3X1G@5F!sOxhn)WnY?FzvN~>2VpD}; zVDsU4=+pwcIA2=s`1T4F*GG^+ab`Mvplhga)c*@`nyL>4DZeMi@b6Gz_=iL%{hQj+CmpUX=#7mOy_6q@Be6nh3L&;4 z(ou)UPrYW$Fri%^aOA~5m^zoqg(f5&=0Zjij&tMlF0fFePSgQ`zL<^E5NC47fv^DM zDHv)wJ-$2V5$*%>vyNF3^1Cm(#SW-2U5 z2>q$|=`)7o*acV=uF?uy24bpmMKSNwDgpKz_3X-d#S=BVugFzNVi3zL!CFcbV=6=> zu6r32WC(8{UI?y#C8a)6I-HPEhsdSG8`NL7bX#9O3-tWjP)$tQ3cD7X@V-`EcbsM} z9e-#C#in7516RDWnW*R8_jlyUtscNaY>xj&$E+(h_#0_!Yq=#nDG&WhZ@n6ey}gF; z6w8Uop@<-UZJ`~iByRWxXPMxFzJjMjhH@LtW(M!eVOicO0?*(WsYdA*;kdoN^ra<{ zf;nn>AJ5r1(@fxY$(<;Ft&hj}-yf<>F7SNiU%!3+#>~;PfG7#yo)XBT_Bf?$1p%62 zX%gP;2R-KVJwras| zPSyTERhNti^qd{YfV|jEU_#s-G>S4)e$-->|#rTV6S>qvA zD!R1Uld~8{GDM1>!Mm%8?g~b>p4ssC`ey%0r<6*l%U|`L%wI`czl8j%Y@4O^2fJO^ zGiEbuGI=~HOt;1yw|(%rY0uXe7VD;YIyp6KBXX5dC@c<2om89q{RvJ}(@&i5LRZ+yMyyEdd3=#A$}*hi~6ThX7N#Z)m<(NK@~`Aw6wDFo%GKV@!D|Hk>Y8bVJxamlL;Oi-jJe<<^ZUf>Qn z=9^Z)Ktk=;gA^+thRt5k93n=AXKT+|z*k9j{TSap5Dbam8q6QrX2hBM2=r!r9fvM_ z{Z&g?olt#q538j?t0gtR2MHF?+i3ocZ0iRznR{nNf;+81AjK1Fw@JbSb%Z{$4|TKT z7@8*G!6{$nsP8M*{>Mfs3Z+x=a!exc9}~Cj^Qa7t4~?_$|7l((_NZ?tmb&czgW)^$ z!N7EPPPX*3H&i^PGY-s+GEZ|KLN2($a`FnBzM^TK4Bc03ntsFGo>!N0jn z)b&)*W6_6*Yu|I-nsK!tDR$Mo_ymh>tB8>iK05@NZu5K0bCURP@diQMw;~3L%H%4O z_3L#VdATUl7zyzTc9EC4`?^ZP7rks6u|K>GdneZ<-;N=2r-mesJ8tr&FxN~zVXwE& zRJ4S*9H@Vv5My#aWk!UgM<`Bdy+H=)BTYPh_W;nwdlvM22itiwFCcrg zZe|0N)#5VON>_iR{%vjx;oju>Mx^iNME{Ncmzh8$Xf&R(Lv)O7<@bZMz!0T^*?7ZH zZnvA?GzVNrlCh|6%ueHR3Gp_ixI$e*%gDv%WC`72AD+15NR&QWSvaDsFsck`a#-|b z{Et(euB8PD1hs8@Fl*vW;_9}(ib6PDwnSMx4^Rh~RNTX!Z2yvNeH*Yd+T)B#*DY;- zrBHFfA;8V%T3wh-d*b_0Mx&F&e+2c zpWYOuEYs2v5{rl0$egEL+gfhc^AHD4-!;YdIo7-v^yDaZep1}I5fm?2gZNo}zB&!2 z?7fW~uYIB9$2PhRTvCqn(74{>Z^NllOa;eji3X~+^&-tP( zPF^YCxfHH+=Te!A(oW>0_gCrL>#hJ@^^vp)Q^tM!`noJ!R?dQltEj-Ucdw8hoS%s0 zE=7*SwYM}4hO*x}D+OmsGKKmNua|~NoVnVzZ$V{D$Ka$?NI`bSih~$_WU`)9&PTzX zq!t*ViS{`Cr#NTi9SQcVlxNnj5?oxqM%)@m;k_oS8$wuGC5up5-PiIi)7zWYp?cPo zfiFo(J?V-na3RQOE9uRyaKfAt0}wreB#!qVUn1R;dW>2Z&o#NuTJv5(rcfcf-qwmJ zNuNf+O!bjAPZ-0w%|ebk3qMAeL{BO^z$9iPrWf1IyJ6mnqB#MW#C+1pJS!E|JVf&p zMYyJQ&B8X{t-S93=b6#`0f6KlS&Flyz^G`K9sng*mH`hr)_J}}*oCyBL5`M>>aqV4 zdA`ZFBMq3%3S0QrWNz6cw0vJ(@!W!9>?CZ;&B-Z#hrc!_xR?~}ggE4=%mFoclo=1p z%oGgsGl(bAly~9iGJi~4#0v3m)a(Qw;>xd=f?Npp9eu+ZtK4xl?|+yBAN>8Ht=*vTvDmvm3Rl2k(+R z076?+cBLNC<>b65&n;?moWM5uwQ+?xU znA~4g5zJdWVT#8nQI&dVbFiz~D?7!ooI&Q~P`F09iVV^5awJhuI+H}yF2@+cF>hnJ z|L5V*;m$Y3g0P+M1Pp4ktwDUQR^p4Y=Nw9;>}QFwgwEk3)4-Ub_{pvR8UY?0rpZ5e zL-O2J77WxTZ1x`I-+e)LTj7TuAJT@a0jP&OoK>FP$ZJvv-$>sK66J1WjXP~vOjQtu z6dIb>H%eQ+WO4?fC4CAAU-jz1ZgVwPDq(}-Jct%|{o{TBFFu}Wlf`W98-gBeJXv26 zUrylBslg>y)E-pwH1E345dpQq;WVB8Q}Cpt@PlvYT7G!JGECib72B2R0&YW5won5L zqfMoAHXXao`As*U*u+^2jiVABpa4k~;a_+=vw^`UU622W_52Le4_bew*aZtly)CW@ zK0=kOKw}vd>8Re8TjNR+_CufL8@8HQEDHEP$LZ?&T3e!!Fevh5Z09rP6XcW%w_`J3 zoqlLM=*O()wB8S1X#5CCi{vpnL6FzU2<#r2HlU$_ zBnYX4_p(y^i#*J2%w1ZuF?Z8ATIU>!Zl1MOyusx3;Q}Tm(qS2%F*>J-=>M)PS z)BqIIQ+}2m;V25a@vvwhyrKNSaAKbv03m~L0MtF)+0e%=5zwS-?jrjt{^K1nLlefX zsXF$xBQ}6T{1^dzb@Ed92%KpM9N^G|*ARLaa`(Rj8y%g-MwByX`L=_5f0)Ewl_N(R z>ouC%lD+4LEl>Nob}7%`-OW90G%J9_jSDLS7CL2Y6jkJhBF7hT_lQwMU}Xp@Q_EL; zU<5+XRs{pA#hPF`$sr39(P9MP?(5Bdv^79H2NQY=1g(Eei$7>V`y0)>U6k5jNOqB{ zCm>A@LT6CG$`{9~ zV3AU$uvTC_DlG+{a-+=}^+4*LOVBN&NYR*@%|rqezE`#vbbsf-q^{e6Ao7_3goIvubIq)9eb)!bi|j6}eZ*>c6?*m)Qk4<|`xk zIH4&pM9TGB!yg=jXuu-zJ*QjG|MlO zG3u8GKbu8{wn#@njbg!5EHEKcJ!B`-`&w^nrUE&(z6OOjl&BjR#n3)@V;!=HJ*slx z1qz91eiRUt^OkH>7D!;wA3CZij$3erlT=M95gd~7P@`j z8jzFJ-IVPaZsB>ah*-K2>oah{e-wD#`a22<}K%eqqPNB$@H2!?#~7kjR*++b$yAIw(RL^_IpQis>%;8*R`-C^a z21o+?jS-7|#k8@S@MFjC3~UhmU^+|Qv|J|2NERywlmWXYV|}RP7(Jp`6O|3sw-<}H zSb;|muv%Qjjy|^9IeUMLeW@Vazfx0u3yy0X1U(JjT-f9->bd}UBdUl`PzK^1{aj#bM@B7e%|^dr>mh=*7M-uZJue~Q9q&@4z~a|bHH+@obM;XhHkHf5 zLR{-rm5N}TOq_fOqtNMiwLaGv9_l(m*`vgtCr?HRY8+&B(AdvR zL$LAWsk4S;V1O~e9~W})cRLvLboA12*n>XrX4RKC_$d@6v9ZR~UrTrw@Dd|%JXn=V z?8i&7JryI6!&4G2m1cXh%#t$B(B*RJ0PWDH(@w%XpFurz;SEGQQ{e#YREl?VfE|9xn9Ki*PftIcs?Ty816KYQp}-2dW5 zxpPw7Rr=?xzSw3_SJAkD%6!80eW<%Di4n+xt{8K>z7^c$TB0i5>Nl6g7Sol@Rq2fC zcQisG8A!Iy7qaH2QV2uMl&00(qDS2G&rd~2#2A-0u)_gx+SZ25ye0&I6VYJaKHzlV zW%Qjn79bAWJpmf}yVuFO&AB+@a}nmury_~}3I7+`YQ{G|-n!m~%$w_SXvlDZJ(^lQ2WVlkiRGJCPfj8Mc3KI>mr%exN0q5Ftokr z321IdO?kp#PN;qxX>uJ0k&yX+Sroz|slDBj;N!6*$W)0*qs2qsrTI0$>8z*ElXOgj zGvqFYR;clf!`4UfH+jS%z%8Yf6$r&AoB4LdH@U@fia3~E8x#U=*xxGO4rA`$ObV7IZcsnq^g}} z;Vvf|CLskmr?_1suwK|WN$5?npIlp?yd9)Sx}*QI03ZLBo}$k46@9)EIp!jBp2+Po z%0Jc*_u{9Abe6i3a6H;SKG(cP0 zlX<@^j30vj%AR4w!0+^Y+NZr(@7K zCOAcmtfALsmI9H413dxB^e@ar3fW;+>Z_w{7?t?HqL#_ZljGMQge64_CJ`6vs~=HM z5TUmpiA7r3bsR?Gd|B{7uor_dSY7PZeGTWs@s$YuDwvbOu>r(uQl`D={bsJTgD~$1 zM&StHlK(N?FyC$Vlg%C|$U_~i5#^M`*`pBt23S)q^?jca^?vN+fnr|Wp$@luTcL4`-LI;` zsvZortGsIe#^c8~um&N;kc^aenq753!2ZXJH5g3<)@7tcS)v0V7DX>-8GUL)3o=2RInp;q zAAtEl2t?6EZbNzrdJZg!?+$nP-5zwVn_Gd2qqI%clNsGCGzYiBElpV%(?(%mVbuFu9LNJ<~ zNo;$kwN;&g97F57JO9MUsQ9n~UlFA8Vo+R=Y$aVKX_2Q$w!vu%|L+jm4qW9r(yGxV zpol6GEH(RIAhT}Mfu#CA*`_F3BurJ=t1m%*g(nH7AfGkLi4gt~8C;1|ykpipw`Ve> zx{XCa)K+3!AH9o|M!IYaZW6-gRb_|cfY>tCp?%~IoJnr>;?+UpHyivYNh9>Bt!oUr z36jv#Ruz@oLkBrtJ1ZS8IqR$N!cvHA;qt$?;UdE#p@t!}l7PnpDvd1lROG$MN+OX6 zEck6*|Bt3~imt5dx^-+-Y*dVjZQHg{v2EM7Z6`Z+Dn`W>+qTYrzrUTEwf60vZOu6c zdVdBH3(gJ6`?|inMOU!Eimd0-8l;t}x@>QOJ{Z)NpXl>87d!a( z;jNP?wXWRcZ}>GsjVB+XYx)aZmktx>jg^GpU}-4tcUM4I12B`jodU8jfD$SoWM+1~ zay6V=+8eg=hT^m)*)j94{*KQLE z)7d5mW(`>SP~71=PhIM}ROh6a3>6n-9Pwl=?6fErX)@mh_&KzgYGN_+S|hyngxg0- z=mk)3%MC}aM=SVk2oqGqeA0d32)i+f-AOjYw^=*UTC! zs8{Wl*XcRKmYiuq&-;lenVAtmJxwqt9PXviWG=hV!TV-C1k09oF4xbw z%L=77%wvpGq7t?o?0CYIQ``rXB?Fz1y#hcdWRf9JTf|puOu(?($MDx2Bf+!r^?qAe z@TimK<15GrtR=sO11SsfEOaE59-ot&J&rCgk5A|{P<#7eDvt@~`{zlQWMa8o1{Q=8 za1M%=+ppFW(;A_1{7<>u40LRg1Y-{?RGMHD#kl6Xrh<<*f))flcU%io(MRWHQ~)LO zb|5ZDqp&CHa0Y)Oa_;2s9DS+=MRh6Z0nWhO+2$vPXLQO`Bt_mu;_!$$tOsv_URV@S z-ut@ets}r`z}*Yh((l7&+a~>NUvb+ZpVF2n!)97otLsJ~brLB8u3+Yc59mXXC`!a# zEt6lAC`0$_s9emmdfI^@X?bkYQ-TUVAk1PFcwi2SIM7mlR9>R}Si>tZN3bKgO4Vvs zN2}AKF)1v3<$;`DIgD6_pu{Fo$f=3;GZL^{$l2NwTiQ z>PkLvZO;|bi{pUu4X%4aU?rj=lR57isQwdc1I^Tb=YTL(&MD^9ymW%#g4_FveduE7 zu#ze_cG^m9G;lhS!K=h$il3NGiJxaMna0N6<$=YHD~tz<*4`vk>_2xWogkE>sA zOa${#sSM=z;ZRjUb-J8-5TWe7R2GZHH#vbI%)qHQce%;&=SniU;n*gqh36pWJAjE) zo1itR8A#@kbBY89Iv4%OI92MD*gM`|8OPSkE*5}-#Z)lg9^n;`32_8_C28kM;LO;* zc}OHs>lx*oI4Rs~F&5NHK7#u_ft3W2U?&n5fiu1h9PeX;Bc#$a2u1rS6xmBw)SJMn z;f4}dPS8mpU+OSZ z5I5Z}Q@a!Jp2ChMj)9il^cp~H!qO17fZ9rFHVyWUjMKs?Z)#frX92`;J4ytoUQ=xW z_~EZcQ7>Z6+Z{^y(Sc3Ra^rQaa;7cK{pilcMCrn|ZLVnckQgmDk2K>v`qoWdf{_w% z&|C?N0-e3v+h4>1MfYwXTz?v~h510aF)~vMS&Z4IT*3eRT%8^V=E8?V-2iDhuADTI1q$l6Mvy9 zy#KSj5SW>tSD%a)5%8@>3@#OeIWYh_7&yb462Fbhefo9JH0kj_X%O>qR<4C+G?}To`431ASLJH!)Mj*LC2#u ziKDm8iqL?C^EWj74=Ttxan~O*BJ_H%5{nS-LhB6_idVz$g)TA&Q^IX8=o2tRJ!+of zrq^v0O%&6o;oc{Abr*!+7yoSj8WWCWNE5r5Z-)KzJ(KCX&)do6MHD8U*2p9SmEMYM zi7-$@rIDNqnE%hj!u%r$m^n`Wulb(+w$ZZMS0eKFY5&z0j$CF|Eiu;s&ibcUsz_+F zJ$UHY98_IzHRc?)mStL;sf0|r#NgvlYk>1fwnZQ@Y)OR+_`q#IH3cQ=E>JNiJE;(% zYl(I#vQttZz=x#2;I=gduA*Nuqv!HjB!lohLvzkwubfrq+CMhegAZQbR3}UOPckKh zE>hC<{4t1QY+#a@#V^4Za+l_(QSWylgWD8{o1Oi46<2hjS%PR&0B#2@xPSa8$yzCf#L%2O@}y9 zKZGCLxt~6#(f2BEO_Zu>&TFNk3W{|#hVBG5f;FvJK5(pY+H(iTK()d3+ z^thKE9Vz?|U*#r1mwb&2zsk z`lb4QLq|3bIgqH!kG1(_KF`TJnt*W(iG(}=J^>!!@4W2;gJU1pT75sbl*pPr-H1)Z zE5d0SgM})dL%hCXPErgXKXf`Kw>X$HBWim4A0%IzBu9$G=U)gl9~3C)gZs5Nd?j?F z2NKc}3EY92E~k}PH(IkWI*LyWEre{m*ollqeaou}RBU1r&X7S-0ZgfJ&2|dz?Q2Qs zyJ!Fms>d=YH?ESgsNwR>j0Y~UF0&jY`ve>mz$ucEAE3e1#yQ+w0zzHAo-1au56UAA2zsbk0rqlLHGw+c zs-tz^L<}HSkGR<*kE38~!Y12}6vC95o1Ez=Q&%w1HWqK3e3xkLyTJ}$8_z{foI&8J zVFn^o-)k=4nq)?3-a=0CO{X5Co>PP6PT0|*0%P?(I3o3W%o*k_7T#p*h8c!BG;y+L z*fR3`#R-Y|q(zkjh6raiB^%#oRa_+pZ?zYnHP-@PSR6p#GE+I8fisi{$k`bVa9Vva z-il#?pSj?4**(M;&g4}i1{wYXo?8DxBZkf2hLc(m5u+BzD6W9dBPXe@N)b1^&p=R}#cY-#$Fg zB1;8N+%NdP(zUIH-B!8iPHd+C_NPcP4-YDGPT8TXB8ehG^p&2zsWf?-vKSc(z`Y zww`)5r9dY>*|>gfw5&vaGlh{8W;CIYF#3cwhXvM%E~IMekW86Jt=~zhe>P@{DCh)e zqhT%qbo~TOf3slO`ih(YAOhpa-Wu0d{z>rFB!G#4$yFNS@A8RBG#2-9OubJYV%Km{ z=KpQ=?{@CWp`Esc9o+nC+rn|HzhDh#eliJmVM%bTy)PsGSe4lE6Xx74iq5Pc*%;{l zHkF9+*#>Gc^yb$|fttO)=B+>%eeGXU)aun8YfyR0&(jdCrR-{;*N+G%J*3B92WLN8(2B`^TD5b+9SgGJ4}x^*Yq40 z9$K9!BsCLf>3nL}{b*p1Do?(Ap93}9`$ zAMF&fPV{8glO1+eO(~29lF>kId&ef4cZ*V}*V6=7k_|M9gHR|w6?H8Qq9Qvp$91|{ zGCP^Fx_nLsva_0BVI9U02vT}YeHm=&VX0MOfoAL}hs%WAeS!q8`Gk`QVa7l^Dd$p) z!yqOoK-Kf?Q2Wf^Py4ON+32*bF)KZOKjVM!f%ut!zR1`o#q+*6~8mN8aF{ua+Q*nJ781-y5leV6WL5tXqFfW z)ZAc${%+{0m4L_WLb?u+{5HWCgePKz=4#pV+thQ0sZc~3Y~HG(9xu9Yf=QBMJ;8cq zf-pN+zzzYs&)iX@uSX&jhC`Vmc|l!<`ep$~JtuYSsHw)wo?PFtB?CM|>incldai;d)8knvqBM2CC~z@nKL;<_ zrJ)|OYo{1m!Fydv@<#vk37=x-rYWOMD=k|&%iR*C{tbghMmOtq0C`2Zh%rh1CDfEt z+K+CHaTvRKvcN?GfHB1*s}Lz*1unF?G*F~>I&EJ6UyizBo~N5`TL&x)FoejO9Eqt( zTm&G9ue@R1IYAsvO{Uj)q>-#?Wrdi6F$GM}V1Rxy$}+CEi&DJ55D0A_>UQ^H}*TG zqdWOUh-u$cj$nB`MZK1};XP{tLk1 z>-&IK(bYbEN>z4bH@%B(Ej7#=0S1`Nnc6)_i#euT;T zg)gQdrVc;mn4gD#1u6w4hB#`XdIiN{-gCFrI$t@>NZH7QftV!h?8Kt2rEp?4gPl$> z%qvwASdYwC5Jj_|by$M2SupozJ0Xm#rVjrA|HB}U@-CN!@;JK5G6qipBBG=9;+GcM zp!uF-w+A6*LlVSxNX|6$mI6OllvlpAN$yp~3mK9nyha9l#<>+Hn%#`K?OSY`H-hGh zvEf%94ix-^IMVnVu~#g2@GeDZ3Av&q11B3Exhg$>03P-j=P=~8qqm{ zD<$i<6Ix7hjKzCy6t$j?w^$&JcWVhdE0QjXKNgi_KA5!m@i9g+S;k4u@?O)s&=Rr9 za*ALHc&P#q*1~HGESltPgmRl+$Wcd!8F4 z0wpn@UQnHxGiQ)iGEtzCMU$zGertyrLM#U?brL~9<9@QLVk&N8EeI3D3F0_x|B+_+ zH;n@!hdD|(I=2i0$~I?f25Iaee~p%+X1Q7di7E^J7|(?+tpZa*7D>$(8b+GHsZ`D| z8Vhndu29WRlxy2Q46nxKMJze7E`;fs73!|zXiHy3)3Jw|AVf)qus0sVET3Y}4Q;Bb z{09&*kWMk-4wM)uN#ScNY}cRU<%^w5PrM+Z4A0}i=0_L{b;>tz|-EF-#R@RYz@6A}9$E~&&B^~(dTqhBS{3s}wcum8RaS1Z>ctRsG<=@?MUvx1Cu zam6Opx^B9oN>=ZwJ3IFJp5)u{7bId{PfMKF%To{^>~oL0#{74pwr}gg|2MiPWOm_i zzg(j~yzuznE*Rf=OTe;3mizQ#qvKY5sxL)yI9kX)9}O`$SWthEbuA#CWZSF95J0Ka z>mtGUd*kgx=$Ha+jCkr)jzXf%n65jIqf`` zh91ea>;e!He|x|Pz+ou`hmK7T1V82+$Jz~FTL12jrT2F^)wC^Ep9vZRdpfJKcoQ%! zkfwPbHSKWonL!|&p`rdKfJa`Jh!EdXR{Y~oD32qmO_ByfzYttYwT(5eoJGXeMur-A zvAyx=+dYKSPjM86Nbn71iMoYa(*blBj#|*@Egq4Lg>LTd8>A`%cDeK4+FOfKh^8Y& zVEC3$&E8|l57&EdIeZIpBxdLJZHr7PInG)B{GUtJ z$oYR|Z31?IBtQ4$%WW=5(~0Kv`Ti}wy)YE88x`4TmGu(m7!)whe{E1ZYw{xU)+~T` zf&oKY#OV^2c58phQy}IjlCV!F?#f5!PzFx;1tm_TEFs?x^i%lnf`fQK5YuRO5Iuxt z2%(WcwLE{*D`Sggx_l*qo`jum&q?ZcU>wdr1%sfW&hNt2jZ-MnkXb5F5)+h{={+t-!HwEJPji?$UTe_0*;k|o&0`jQ z$!052@ZtQ|P!p)L5avNTC?mil;`Q)4?JX7&^Gat%NPn&)%J76TW%^7<(ud4VSA}Ok z@{E~WX=wR|Yj7D=Rf)x`%H_3B?Yq<{w~GO!29;1zGvaR?okAHP<-P8lY8H7sf>YR{ zbKf6k`kw1@Q;Kt#D`AqKdp1ftgdx%;zkdS_(wyp^Bx3Fz$&IV#ysdj>F++xoafg}b z)nbv%aCAUP{Ml)|B-+bf;U_i_7_qW;-0KU>{?360m|$0vd$|UG+ZI+Ipp^+}Md5g( zr;~+gT(?c58`?C^^l!rM&kYttBeNs# zdom|wAm!k#ClnwYVB*OBpyURN^#ATtXXnIh`PZ>p@;t?9ZMhu-R!>su<=$N>2n0Ye zB4mW3QSkdoe3VAZJu5)UEF~)Ye>q1kH;EUu_@sNP)E;9yHQfD+ew3}{mK_EW)8K5mR*iEed&d)Xb!Uq79P|r~l3hC+{ zk9xyY_DrQM)|PJ7#CBjpY((xOn~EIao{_y_jgP^5(1@z1EL1ilrQuLxMPSA=LZsm+ zgIT|JhQd1YJs~p}(@buW6M5HNT26gpfq`=`E7t*MmiT{gy!`*oE;%p%FK+>+;Fk}7 z?W@f-y3S{wx4@aP*HRu#l?3G#qlDCHDjP-Iu);&8mH`uRqYNzb%N$Wv^Yvmt?=!7t zLqbNpQO-)hcjVSMOwdE;dszNck0}fl-W@fthYCZk63zd5s^#)-U3v`B`8gvrx5o|3 z@FM4kU(@46n0whG+M&flMTsw#=i19Lfb+BG?VD@KSXu>lQHNs<;$GEm(NY5bEVuwd z9%hVDU~gWMR3v-ZxBrw@z_R$jDxA37Ty~Af8jgE6tD{#-F0`gtckc|QM2EiKIu}H^ z!Fwu2(>zk6+}oztzufvqj>1R(wlm!U(41G|`_%1OURoKBmbz@{BP4tN6M|zx0Rqh# zC9iNjk(n@Vkb9WLV%(G9m>fXP}`B}Gizp}H*Su_^fyqe7)4MN2%yr-izX%6gGD z*I)@JbW7@*7*agOMtp1ybj3fG{!tnO1}OrFknipJ>U;i}K%ON4c+__-kRk$e=;sJh z;WAEZFwb99&?pG~y}sjF6FEL`Xqz|870FSxLV=*rl#@WmLdJ@*RS7BQ35?vN5 z9YSRZ65XLwZ5g_h?5K%w-0~ItnW||V!E2^K8~4PZTbR$o;!h$qMzqa67&MQO*Fcf+ zhzG=lU?Pm8j7x;}1Ta%hX9t+vYI4s*)$cRHTbu!w39pvW)6u4iS4CCDXhC_*!v`ag zgB3)`pFj6uw!M7y2h!={ST~sh;eLW7Jb216ON&s{fg6Twv4YMwLRJ;$aFnv6WbD1v z`TA`UH~E|gA1AvfTMLGzEf6#6hFHKG8*GKspZC|KnOz{GGB|>To@?*#5@tfc+P3>a z#ckg6)H=&^uFUCZ2g%*NYy!027rBw0%@i(cJr&TbCIJ!qKG1jo1pDDdYlr0PgfkQ z9+n&-7#qZz0+;Y8@S?(JwQOBh6TWl0XFCnu*Y0?e5bh%aV)fk4wtr#k!<7$5@|dt_ zaYd{BgM#GY(NPEsOzGf362N)MKa*W*k`d=Ae4_*gpnNzk=D?dT+j6e^pe?S0bsB4y z_=P6u3OgA1#>gHBR^RrHvuE5)Kc~LA)p_(%^UYiBC~YWoFL)I_-}&Lx^gKu9JNlXj z^70j~cK=U_`wU)9Qjk~bbhpAf5G~?aOik}YvcH5RMNyehOwlO`NIZi8YKMSph9;Ze zcnJ*ifCK{5?{ys>lk7`B1y#>=q|tw`>Z8F-02`Ij`;qQ(JnOLZK`}H4c)||{lBx@~ zrK?7p80GX&%AU(NEVwh8qPJ_L^`A!pvf}DU{A+1ILK4Uf+L|E@9hTj(toOpZfOZ5S z47FHzT5%s+QT+G*6vSE5Of*?m!RNye$1H--=_gUT-Nz)1-a=wo1(L1f$k;tBH@qYh zJ|Bl3ReNW3+X*nn#Qtg5VeSJ*B?~c}9o=#rA5@2=CgTh@*b-9ZxHc9eB@!$_0bBXL zPD@j-D;Fv$uhrzd zPb`Hv=4?ZOj%0=_C^mxpD_?t|xP9G+|M~+Dk3Hu&9|sNf?7(YU=)5yE$D>Em5;m7L4#|3=@10> zf5UJ%wRK&lKS9}cP<0D0Qj|wIt&tCDq@>I4_gI5n@CILNVBMAmH#<+R+-2r%BW}bp za#Z6)gQDk@`Q%7EHqgD&=_OaRfQxW(1x%~764+MzknVx)QqojldR0v$ZS{>gdt6kz ztZV=ztmE}qbelFcgOH46c-OEep^PmoIAuX}xLnx8`;;IS+Wd!`Suf%DYp-%jxaDbb zeCR1zC^bp7A^!m$osRTdh2WqH>I6(w>)#9z4wJ7drkoq?51OLpiMODbiacUN>isyy z#6Ry#7ukM1pn$0=%xIBdF!n9WE}$zuF!@`f8-i01zI`!py(@;2b^}#0aEPo<5nza- zaJ$Dfs{l-2oc9`Uzc9W1qAEWiB?yeyH@DRu7oLwn@xGA9yv0$B%-xnDG<8!frQ=&L zJK@YErbDd1N7JK!RCHKHMIf!5pKazXRB@VVrN@yzs=H;+FRw&FS-PF_%=!oHSj}Aw z?E5_MiZX-)k8>wB;A-_E{ipu@PxM}we`OCmqH1HY`Y2odWw5MZhIijqmA85jBDgp7 zH1u`*$^3ZUyhXwam@g9&;)DW_RcQ4jLH4f+Da`PtAi__9f45k~6?)xIM>N!`n(OKc zv2LF-+KsM*^Vdi+O6fvpWz`jjDNk?#n+LH%AJH3BjjM5ZyvsC+^F-(88}S8g*!jI#RxHB7ZgQ=aZpP zlA-xUV(N4In~Xqa`N=?S@+~=D2+%6ZfBDH~@7qbCNui1ZF-0E)PE@W#dOdx#9a`tO zQ*%mybxp{9{$mdCJv1VEU9@Eq|875#D2VCS;jshe6=$=!;CH-%5?Lldv&9lNu19Xa z!W96tG72P918Yn9fBtKo0J-z^XQr!^|KXK#OP=g+efYU^)tYMJJ=*`uE-T+0Nx`ul zm_9R=jgq$vj0`+tB-}FD4M`Q#%SQhM40VRoIPA-a1#{mx`fQICn8FU#I#wb01odO; zwVYI8#8P7)>mc*TOXwU03oI3thaJfWaVXhHoY(K$LqWC?r4FxsU6S z_nXXIv?}1)6hH3ru#4${;nYLrU=f%p0cM z$F6r1>Ft12Xs1tK*47S(9zGSt_PfSd5qBi^Wp#29$es$7PCP zl%+dR)xKAsanpgGXzi0BI00w>S5ffhpRw2qH`(?=_MjNdYtHkq0)^>IDqC9HQmho0 zc~sFV2uhlFxnw$rwUw2&lkl{)9$mHKIAr0n4^3$|^kq&?7oQr}ZqjytB_a}fyrlHH!o@Sb#Cb$>tCq#&60yba-e98tsT(DmfD3tE*Jt>Bwh81OK1bf$ z!~?Ssbv@Mgf`(2XIQ(I? z+s=-mCi3^lb-7t_U_BU!i_Hm)=Erug1wXV55|9FI<-4g1a^}Fv{K_CZC+0>;cva>E zhv}((FuQM<)MM!LpZ!)dcIbmZQkDAg=Y;pn`}wF``Wn+sG!H$#w3CCx_nayuBY4&h$SU1>By`^5^s486J98(&%Q> ze#xXk|4FOX9NC-t37P;hzNJu5Al%3(YAOx}tB&6#iaJhmXKH#7N$`HL4~~xgx6Ei8 z)DN_Gg|M|7g!w_rS#BmCFF>{n8QI$T*!#_;7*~N|B75647q4n2qJWbQA!Ia|{5HT_ z;KZGMR0?zJ>chi@?!?db^ow`6Z*xoX%R9n<(-(Vh8|54Dob^OV0))445#3%FNK$>( zv}<&^mboSTJD;5Q5eF!%py5$G6*K>KlnwG##}iW&id$ZR+UdCyn;w^euwmt|$}qW;hD)Dz_v> z&`3W0*=BoHgH1sE#rKD-t{i9d8K5z2zdJO~gMp}!N znim$p`WZ8!*-fj9rHdeAu86*{Uj$;RZE-~{!-tf5LOS7A?{7aEQ2_3zuIk3E$%~B5 zuGOuVzj3a(|L{S;G|#GUJ}Ufi{;3}Fva(r9^0fr!7U7@EBOl=(-bHu$vSR;GftB>b z^s&R3@1NML-N1p_sf<{vBH?Cq7HVcqUMX8-b~+S7b#u86BIJi3m@rfgV(N@(s^zr^ zD9an{%}~`lXRV@oDnhLvd8-yvAdp57fvL|Z7?!kDV;T=0gX1!bqGpo1Mrr80zogvq zt2RBFL5@cO)w>nr2pescH9!r@Njg%)UAqhnd(gW?CsjXjyi8ET9Wkj~gd--aY~h1S ztM^f#jfPguOo?AAm_QtWWT=UGAzTwJ9MzAr0)ry7t>@j$fo-xMjuyL7Vnr7r#BN1v zm19qJxYVG7`j0(`?aCK_Klg&>41Nv@8_b$6P8??jFSLYwWQQyLii(l;u7YzzDq~sgXe8zT*#ezxDWV+{uSWf_RRHViOpLS z<&6ECD<2&Gc@S!_rntlNlNTxqYk(pq`LFECAcVI8Z7#$zzpXrQE~lCaP0D>4E*kB? zK5LMHN*gN)MQ|E80J2=?&no-=gIJEULL^GdopzhPxGpp?o^dybe{T$GI|yDma`Ltb zO=7=hXJOLqmaK2aLg2H%8?G&FXpGclQw!DAS2|ZMARQ84AzKwya1IHcVy4s6Jcd3c z!@k}BpS-OP)g}CJny-$CpKvxAym^>MF?P1TH3;OKs5ICD2`hX-oFc36a4{^67_5H|l;#{NR}r^QP_s#$M39L_RC)az|c^KRh+lbO+$xj}J^2@#qLNV=>0R zM1_o9tX36FHW?PXJeK4ucAqWUSNOwvx5R=2_V&8@3;WrCbE6pDPzpy%VjB7%BqdDSHSse?0s9;Sxl-iu`%iv7gO=C8!2$vC@0}GX=4nX@3n~ zt0+q;(}P9#zHOZmtHKa;X9C~nNsmjDTR#H7-t~ldfXY~1^kB7`JojT$-K2;dPzC)L zIRc!(>om;hA#NDURvpK~-zlj{SF-=c8Ycx{=-0M>XrDhWjrq_7x+~~&CgOJr30{|4 z6@bUy13uB70mpXO%gVHYr9Hua=ivH7|zv@j;ej?ZK*PytWUx9FJ>&X~Iu#7I*LHg#CVob7k#h`i*tg|RP2 z+N+O}BIX*bu&-+q;c2qS{Z4hq)84!=^=_?4{RiUp$di@jF12L(_J_mMlPCWvX&CkD z&b)xUD>vjfg0#IbL7dSj3I7Vj^}laj&amvomrOKIyK`Z%__(k%EG;BM93a0bE@2yN z{-$9`x@X?xf_4o=VDCFim=sBSWmacKc{_sQfaX(d+A!dtxVBD5>@oDz0QFD2Y^SOk zeaQaLPlC4P(>3>%q>JyeyDGdWdj`*bz=wN&DBlGi@Q1en`KFWd{zywDn7L1kMR|TRz*(Gn=`)oxBc_80Z&R1Se9I60&YD0c;gh--OA7~{!{TMrH*YOg03NFJz-%OZ#Ka0_qmzTv57N=Io2H4p0nhdGXNdJv7 zC!GDc6XpO(VO=mc^jSOn$wTKx%_vXMdq3UlrWV_Fun^AZn?H7n9=*dNbijO(COo^-X<&P*a5PR?4Wpa z&;PJ(lRVn_BJn8f4Yqt?eYa8b2skh@#X_#!D{H~w%|P#^Q=>MX)?$MM=UqY!(o+Gf zwNU}Rs}^ninZuVePimpcvzAiu(kpAgL-=bGcz9&Ti+r3P)hpQmH;Ix5kP0sq?cXDh z2f{p6H6IZQAHJzy5djf8gs?kOYq0zif~nnKgN1f5*LVDn>4@!pxb`cit*5Sd6x5-8 zG9#GH#*7swT>%>GejMr)h#31|ZyO>(6TygoC}rZWoE%-Phx=oGhD!ZlWd) z?an)q)G=9LW71ZHRwn%XG0rJVBH@p*3`TwwlQ`HhThI)tVT1jgZF8c!SPYfl7qYl} zxHYXE2sm#RIO5>4Y9}e?*q5ibcS4TeT?b_&Q1WJ;@Xl;m28Nh))_N zK1L%XXy2JP6DZUr)Qb?e5k5FNqwnASYLfCnx0xkxd|c#eBu1|VM5TMt!+gj+a&S|K zlVK3G3`vkF=PTfZ-r`mcix`im$T#VRV?IUSIl^>mJ)g^8!+n+8d%zvy>=@y{|N3jX z2l$zkx##meb?k5FY$4ubY4_s@KLhs*N&zFaC7UtS=j@xqfqy150F0*$%h|k?=TDV! zRxAURB7xbdoFER(0simO=!svJI{IqaIu>8=it>h-Z=8%c+Hem)%>O0!D%xrYnXsFD z71oU^sG=3Z1=^eZ9RB1_ibJuqwq%UXP)+V_`A)xIwSh?9!vyay=0=<4ob9UK%?|IY ztAcQud7xhTl<48xXRcJ`9dblq42$F|jo-&!a>ADI2~vk_JuEu)&pFX0A`YvhTY5DV z_FvHOoH5QG9i=dUgZh0H}OQ&x{n0U6GEX5-Hz00a+e_0SVt3d7*4Z{4kg z?u|kiOEvTQa^e_jMELtYWbKZ@++I5nJ+A*8?(6AZ_-;n|MtYKq@PB_lKI0gHAE}aM z4)2EE7hBPoeLAow^q|>zK>)nxoP~a^mLSGp3sTJ-7Cmy97w0~oiyKf*aFA{oAbZhm(O28gIPcbzMurOS%$~k#*r;^(}qDkkF^i{28j`x zg=XDm9Ine54%bJoDedHeO#Mw!dNct`_mvYw61*HzTnNqPzv5eF#cGnWz{yw6++n;Z z7e&I1pt5_h>btkbXM}(9E7x$J+ZS-3*$afew6_~T`DXR0vaMF`!o&NGD5BRZov~>G z2&t+Eho*|Qbu1S5a86eemcsBp~;{+IT$t@Pf@%3$3x6Q zYMVsyMz$dN!|-GS+gm&lZWT4dqw35To&nKw*;s!kR5I4F)t{4`TPlS%jt2?s;HG603afnD7f=w>2Fh z!@pJV|5*Sm3L&8{?qu!20NL*!{@(V09|CawzC-?R{j_I+YV}SfaOPlb^xpd;P>Nk8 z?#A~y_ASNKa_{f`Vb#`5%w`fq6Snj}M5kaQ(zq5LUm2=r)W1@S@ZdgX)u<855K5bj zW>eDP=WA9Wn}GovogCa>%>I(bEQ&z_HyOQ31KRp@FJ{ZI*2F(sRFurEJ!zotcUgbC zG#`y*vN)zsW)zl~fYN+#+&3;_Vmj0e2!drL`OR3?9|551tv;G!zSz?w*bMa4nPIhI z#9C9<;uSo0YX^QS(>>PIsT6EsF&}YPan<#2t?qNjjGG```(==iJnWyAH0cNpMW{eG zvrNk*2s1#zQ4nKh^1Z-sPT9+l`#RgN*ZI@uwHjDSaJO0@u&Nj==9xS9>aDTsd*02& znOvS??&f87vh&5~Zjutn;C|gTmx>LIfKk z5M2PCh0^;=G`LxlBTujLU40i~1bKeeff6g0;XOfCpC#&_{Wf!u6~q=qZeuz{2C##} zNmBJRQ7@-KL?l1-STdPpTy!+e8fuAVty=tvVUNTeX31iBC87jLxM8Dau~c8)?;Rqn zf+rL8nJHJQ18iz^y5GLhEwv^wVtCfY5+YZs#DP!={xYElo8$+HBEpSlBx+Y0v785gBQKZC+ya;ciZ*y~%>(DRtEEwT0^0BcQ z4txOhx7)ziwt`=A-`6qhwk|2MsvTC*zJD%W;tFevjKfm5)9kZAT|6J;%p7;Bv>-X* zFnN3_Pt&8FTC%5HTtpt`+s5VwJKTA| zLoguO%8K5Nc-QES{8Y;^2J6R?CWtZ0pIkIjrc-~ZjYHu9Jczh}96u5_X$A~^L0XUrsfjKbtkqJVuy zx6NWjn5!re!QDWCiBsW{f79sYGUMm4PcoQfSp~wDqY)vF$By z8slQfK-EzkKNnUuiOy7D;7a0MdUgG*sD-gV{-=t}y`yX$uZkBKaY!v_1IX`H+@(~> zVh5wF{t7Ptf6S>-HnWR81Q+4&U@BG8p~VX;o8L7V`2jpF#S9%qlY8D2UIDr=N-Ru} z8Ahn+V<^wA7}7n8huvhUUP#}LcG$#@>pZ`ST%zSi422{p5VJ9MSiVOd7AZR7I(5Eq zK!3OQCrA}FvXolTQg49o5c*bdicg?Y3m()_vaQB;Nmoi$_s#L=U7yL*@?6)I$m2B$ zID&8s1S~lQdTc#{a9gV0;VpdJxZVULLkoZ4?QQ!JPyjDjzWbuFKAGvY3LhrkID`P% z>#yWag~G!j=|54^(gIhz-+4gEhRSTJfUrlMJ3pK?L1{S3| zCqx#Fp}fcfmZBCVcbd36u`-Yu$?umgnUv^(=;4Y*dGVabM4QRzq zXj0TLXzK<_3S>EBYN7ioMzi`;(pb6N=*VNrR1D_E_l$A54RCj8Vqm{OUF4b^4Sb^s z_v6#BnN>nv`f0HI(^a+krL;~)(xVriltUQJ5FKEq^I8x<5HM%H4EEGwWvcah zi|8rsiyRkgM6%q@#)+%gwEMCb z6G-c#CD=?#1>GIdpy&fdMZWF+%1Z0u8(+aQtp%`WcPkdEktOD=s!+Dxk6lQlW7HTD z`*W)F{C=}sI>u`+>={J&?d6XbZ2&qo@bujj8r2WIKd?3>!J#S8ns&L{jBlcH)qt8HGAvAvo?F{+!k>D|@;Y zz6Oo4ao`!vceR3S11AgNa?>6qv%57*6-m>)5R;~c`#t^zla84hWNH#y zMNt7(W!oAL;t-eWH)1*`h7}meXecX{ImXkA$;$)Y6|f&y#RT#}IgDPZ*!9F)p9q)4dswnr;D4a9gAReeeZ4m62@zVQYs^5LuIvXxJk+kQ3q5H@G0g@93*+91mkipu!S^YFR@GV(yCaEE!5b69`X1=5u2(2I-@#wjLvjQtd@0AH@3i&7mH@+78@D{rtqqSkk<@OS)950j}Wy)V>1 z6#BN}ruGqO{pzvPAf__8yC3VU5mbu|Hi)BO&s*yqSWn^pR}H*)mSwtN;~-N@?gVwG zo$C7a$RJQZWDY&0jYqUnrPJ+`*Du2Icpxdtr4wVUV^pfQGb5k)Iin$;M)~ajecDM{ zBdANEe&%!>%L9n0(;E^iXf$~`7;&{hsH7(1S&nRaysa{l=?rCO-+iyidd&0R!(TW$ zIYd72Dp8B!$U|P9?`P2WwrBN>{9teGpZ2%a$+SWpSxhw}^}n}beiXA6$OZ*`tdv%$Ets%Y*Nm+%E!o2|mC>Z~~b zolE#jLZ=uVUhbF(#1sm15&f#XgSmXNg;05TW}TMhZVigQno?9znL%P;Eo@j-hvr!% zgE&H|^lTH?dT@SJQAUt3Ye>vE0W?6N4E6-n82+KkR0hBf_BzHo4q`>DRwI_k(ZO-@ ze7yf&h3SZ$0Hr6^tarO#>&-J$7WCOT486)U8Ycrc^@#h`^`~E^p!+##qBVIGjWV^- z*IL z{1k`3PJgUu(qdi8u+fSt?sm&Rh65IVw-ElT05^Qn4)@J^(G2$~eE!%2&O8UMt}ZU~ zVmh31c*f?G>9`P-@3g4p{bduy)t{h2q2uu>cen)}WSB#|O2Ro?1hRNPgGH-03R_CJ z{zyg2)!+Os`^nI!ECn9ajociyk(;0S8nJcZ@lwLLSJ3}7{hcYSESnr|G``V>(?DP- zbogT;U#BK+0)NhQf-oo5%^>qI%wiumc&5xe$}&4z1X-Fypw3D$E;Bn%{BB}g)BUcS z5H8za*qTrynk7kw9P(>e(36eA`Mrit}-hzOP%)N@wFDUY?5Wn zY@w+90Iv{PGaO~x9_@nJ%qy8CmL1QQR=G8TF}eS^r2M=7^Ru!dC6i!51PxbP1Eke* zZBNFwpC=jvoM%OLgsf%w>hoCzJcDG)PeS-0rBPn{GdhwphN4Qoas7IN^PBA7G7|RF%Rn{?I=v9>rsxv)c4Xpvl6FWJJ1)|ZqGf4J!P&{ z&{;P1`zEyv{as|nGvCVpl8Ok*Eje2unQijD?|h1;Ry=X(!`jaD|7g0(sHnQHKSN2U zbW2Egx6;GV-Q6XEAPpj&(hbtx-AV~aOGt+>bPiqbeg12`U+$VU-|oHV?tS*J4!be# z9iKExq1lsYBQWZyyn$P@OkIg*miuj;f3~M^c#eiY-6nm`68O=<^)#_{-T!`rw23=+ zr?D_qpS0y~?pRS5zY|?wxVoWY6}1#WADCqclQ&4H=39V_DW%O`6TNu|NKO53$$c3^ zcbdl|FN0Rx>u))dxw3@dLHjQjprAd(dJ$=#H~aPxzMUlZ5K$KLu8Y_VreV<^jbK!| zu-xRxAnIxoyVPS_4eT-#eNASCa0gpmoZgEiC|pW=Xo^^=XpVk?jw0}3IK|^WCQcQZ zR;CA!Kn2mS^ME|7SCO{LMKH#U_su~J`E9bqaWwacFxCDY&2i@I;v)a)-HwJ909IM{ zq95oT@v(^r%)93t=yf&)#^2-cs^Q)=i@H2j{=(7FnaYdN>^;i>+em*Eo;}OGr3kNy znw@2fEcC}&%%aX^gfwbQ_YzpDc2HZ4*# ztR5}JmFDcfYaBFc1FS5o8X7-_q>cz-UZW8(BdI!rNQZ=H2$|evSDL^L+MFf|^8HyDLVT`*MRBcZfo5m*E{1zwCcs=wWv+Q)6l8 zAbcLntfzSgp|OM}j(EVqSDKEkPpQ8o-vr zEm?~IE4lcM*wZ&(P8}sDo+lWM%w_I01im3K$vj9<3~Dup{maB8uZsRR&?%X6NIFk4 zdr?KSse&PJ& zTsyZlB#YGiS)Fx7Hx}(|ymoT$v(L!kO7f{p-tgnm_G0C5+eF}GGIg| zsWHr`tAC0=WOQaae&#C^=k+0qdtq>2S9W~*G4!ov`A)qrrJK%C zkhFHTFyW%CK3ogBpuAK5AX%B|0hw{05s<=ZO7Fm8r@g0`WHB)8>NHakP~lXLvfb8u zQ@)-(ZzaSaS;n2r-@1RgdQ3HU3J<;HG?9r9&=h1IcY8Z|)O!B(5x&t~LApQ;$Bws* znZ8+9w{B`K&=cK$jKVX2IyY)i;Po;zuNnNjSovfh2vp4` z@$BdG|FD2zU|u;Tr(OpdQaN!W)r*chY$!Q+dOA;9z9*j z0w;P)EPujncRd65_30}NsKV?NcVjhEs*UJ9B{@6Z%q|tnvE60(xjtQ29;q&M*Mf<6 zRKJELt+{MWMGm0q5|vbD{-hYEM~K^4?1=y^d8)DMlK$|rmlr{ONXg7NrCdDBKnOeb zlAL|ce)ema`_t>*NFvakAn4SG%Z)BYh;qcW|5me z?Xz-!WuZ7wfL}d`4)lgR5!@^TW5Qv(Vnm=9dVJydu7%b(f5GnS`kO`pP}pbBe)UIL zH6#oMvZCNKq_p;qt?B5$JXPaRu8wy(=F8!y557U#`|=PE8L(D(Ard8$n$mLeSU0BZi? z*PJrfIG7fWn9wsp3==9!Iqouzrm}NF(yI60t;vn@smoSaM?e_>LXU+bWkDXMHALrHj#Y%SX&;T9y>oL=`(~x<#)1;3(RhtgXa`< z|GgBT`2Ki~ymSWITgs-xR&^}uH5`Yzihi=2R)}dgY$&S`Z(|rz>YhnA_&*`sl zS-xia!R;T7p3Pxr7vg40t#R>ZUmj!lkY4Y7`duUyiLSgfdhL3MenyAL$33FN^W7k@ zk-GLdKrt|! z;nU%;sq#MPJpQz z`(`?yossr=bu3TD9b)Lvh>%M;wJj?VB8K1NYc5^~FHU6oiPf0MKcYedq9?Jvy1rJm zX+997{PE@U*;@H@Z-lQi=vCGHslS?FIkj7Se?S!pRb*7oA|FDN`zZnS2nFba#VH-P z9K8;i?VBYH^l@qK>H_RaGpR=0{TzL=IObVK!+F${uecCtrJqA8+7~%Zxc5+^Dxo~y zx$jO(8h-{7v_!}eDWu&;JRjZ-(^tPHyX5L~p5k`u8B?t^YSc*c9GK?;m5i$_Sdo)p zP>we$w$YO?a~*)JKkICh&5vRGV5y5QG^EIF8L3?h!Eq>2dFM-IgxwB-aejD!yuNGEUOjv z6`J6NaWu0i#37FfYZ6BmiMmQJ*Sd{hK0wg0{=)6RFYci#O{{afR+FTf(=UvWT@WbW6N5(oNa{~-mux< zIs?^Eyd(ia7|l|+AJ9>Zm>jbP^r}PAPsaaHG|{Gi80O|fh$IQi-$S?eO{}x=hOcc^=>4*+0qiaX4bVxW)FhG-;SjJ(?pJol2goW zRqU`?f>7u84ufUGjU5r4YhL%Er@zq>w&208qh3&mrt`Ol#Uof3o&Ixxu7UsENQ!u^ z&e{7eDzye^O?O_r|2fE#)m|N+0Yu{A*6R9a<5b=>%@OZ5JTvZ_VTfWHY zP|-abqp_aFaF=0wOUl9+ieBT~d4s)ZDCtzJ^d+m_S&%CLNPD%(11hXVd0>?u<(aRm z_&kdGh4K7G+pMjG!D{}~(z`zF?qv&^pJ%k}iIA^c$r|Q2WjQMgbg_u`@Kuv%w7hOT zDgX&OdjK>PYZB-HL)Y8pC$fKDyZXC-kj{LWcnz^?2K+1g!OFzyS0$?4+WaWvZ;SyZ z{b_gZzNoncTd0}cm`xiH|LCe?wKa9o8ISB6^oQERbjUd(`TK)eUlMI>dGvR_>W}b# zjnFCP?|dwvd9_*RuV9PjYV5EfTx%ugpxp1U>*in%cb0V`Q7X@06v_*dhAsUu5Cy?2 z=rV#(|HS%}_{JMDlJay$3o%zN^oFTP&Gw<1kQo@Bql&dg<>hb3N5rO;C%SS07fVxJ z-iK#MXL-k0u*86}Im`ZEBVXwyT6`?e?$elBEt&V^#m13UuI}A_;MsUb6fP-5lxprZ z_PS6I+b!ia>bCfiG>KH@y82*|n>`&vm%|CO_N!KH^Ju`3u)tC8ODg(hK?C&b^MYiYJ4pp{&n2+Gfu*Ae1%Bx zzfW^6G^-&gMg!ERy}k~8q-o@;HFVah)RFcCUK)r=|85(tDxZ=1pa@j<{A5GJLe;CO zi6m70hQU2SV3n|{iJ!0S_d0MN$ZV<`F_M02eo?kG|HSP&Dj4p#s7Eon%y=6YRBHWB z&9c*ow$%1d+#6}_^e%LwZ!EjZ93Bdcw(=HoMdn%%=~AnQ8?q!eza%+wInUo1#RX^^ znYpcp!xP6dyk3`v2dJ89k>Je$SXg)S{V{2Os&78Ja2?qe31$aBr3hqPeU*x% z-P}eEpA>z0$8y$G?vMsw6nN-I<#VFHDm_fpaduxd&zk-Z+wJ!UmL$v{z}sN{TlXVH zL%qNh)|#aRPH^kqH1`$7QTuDA0>6~c1Qpj8xGY4$TMc|ZElmwEw;qh@&@RGu{LdEJ zl41o&aCIk3wkeSah#7u9NX;o4)qZ!6QGcdS2&+*=|H~y!hx~o*3tTl!KZy@qeT&$F z#VaGk>9HK;&aCVc&YwSdqlFuCWr5g0A{FLL35vR?V4+u3TWbBJhZnD1;CU0`kxmSE zzyE!bSKC@w${b$agBilXPIvY_3TG#ImTxhlb*-jsOGVmVQ;762~BOmc?un8NNyi)5j9% z_-64Rjr#>I$6Ch4QZ_d+K8cCAta7gP^q@7LPBwMx6GxE%V?3p>h7CJ6BV9*~`>3a) zfP{+uGl8vT#pR%M_%XGT(6tnh|sp67ji0R7-)c2vBF@#w(ICPq*iov((ZfI{A94TC6l3zj7u3ns$lDnevz zdW?@_W60G;yV^rdc$9Yh1glsYT3os8QVFRuh7;IJ_pht?;`$XF!ARS}6gJ5z{K3<8 zSXbguI`VI3*w!+F`~huioY6M)YhQ^Ik7Yv6e=}4kr1)rHRm2c*mR@1u4;4CE`}|2uS<)av#pnz4)N|@p4Z{KFb%OmXY>f9a zdduarTqg~5H69*8oTHp%hc_=JgP{+xc2BV%k1CXl#=o6}&M(E*s$l$9K5h5x=C`&# zJp*F(vXaXW&1j#;7mfcc0-y1Z8(?Q2@-%x03}Dw6qqCEY!oVSX>XKK{t?RfsU&FA< zz63cG4o$YKA$H(EnWms1DKH=H-foH1sx4vq`X)jKp}98AcXUM;kd()Y?*=k3Ljcl0LxG=lTU=@X@(R4fr&m?)8mf-s^{4Jrt1c4;4z(yC>X!Ly6{ z{ATG8K_)3cCW?xTkzA4~E4{D9Ul}cc?q7HQb6^hE54d|hvN^*ba(20jEXzrD&?V5f ztNSk1ACl+pUY*XzxWqeKcdNI4y95L~6ec(B6aUo{%m0`n(XKQhC+;7>b|7Z@2XUkT zA<_Gkq%an5u1)*wmSnQ2TrKYUC_Yz^6&TJmv0He-6BItmM(&AD6ElI$f>>6Nx2xNG zzHymWs)^RhZH9@7u(wr(n&Siv+@-|o>I76v!}*qsd-kocJEFKJ0=2W)R;1C0=il_G z!SCH&ht_yrut3TBNoQMh#*W{M;20HWdL%Ro$~#tANebE(Mo#-m#e2CQFNsan1GAKe z68F7KngmZCUpHyK+<2hp5~rhABJ5vSz!ph@B~oIY7|r>E73zSdPyvR08wf- zDN{B)(feVAV1jr~GcvY59v3~W5=9r+z)m+#ZA;$c=bs;SjEWfWY&uQIv%Im6q2`WT z$q=yT7I>(~I;DoIUn3tZmdx->)bx~irB@&^n8z=+xH&EV#R{I}k3T2kDk*@dSJvu2 z_HgEkX6504a7f1#E7xA5@}sK(3XcCw3a6Ko03e)qqj>WcKnAbnUe@0VKaWppJ;PqQ zUy83@b^{+w16E$fYFyJvKy7Lao9B|#B{YKVq;og2(Q`1hY$c3}UxnIDJAj1mj+3ac zecY2DQv(Ym^jXm-2h+2e^Vrm0bYID6{ivde_;pj?7p}Zg?bJV;1*7P>`o={Tm^a9I zrG&{K1ND6*bru9c#&;|0hju|MMU%(=pKIV??WDRkXv?OF7(Qh$CdNBZaJAcd`lFgS zg4>^}p&k+k|~#+>nhq;t&2ZK#+gE4$Nd zgv9cn!KU{Ei;!*kK9WgsA1;BP!#SEfa$GIc&&E&WXI#7VHSS$*k5)U0p412J`nNx? z6r{N^KoH@KUQuWM-J*Rj5~~>h80At!LeV8#)BtpYc>?$7EeV{eoe$0fH z2A$V5vo#-VE8F||Kfz%&7!mRnjNFRW;?M4WXA6y`Y;e-s@PM@`d-g5S_YO zeHt@p9ieBdz3Kn-Tl@dLjn4%)lR!7QR)WpqzIcjp-`WC5?#uQ|fb9pm2ft=BPeb0 znTx-SUH`d;<_w&Jql4{*q(BqrbD4EbFr!tYd}4#pDEs zX|stzJe>%qs3{zGO!Q(opEaJo(M_p!v0RBJyh1Bw4t5lWtj_GlbfZ( zgW79)Tgs40CDV9?b+a3Rz zv-+d&@YPh4ocT)Xh!tlFn(O7KppRR`He#xd+;2ztmySBm8f4CkW95)*yW@A_(-Z`4 ze%O7k4+9Jh&+*)KGGkd~lRmSPNtRVv8Fl<+ ziPK(jG4o~fEBlU%W_5(Nc7pOH5Nx0aR`W%3**&dz6Mj+c%tw(Z;+c4zr~WJ~JQg3I z8_$&Dci9Y=BIQGN(hxYy8y_v;luVi*gzV>j*{k--gq$<$N7vpv^aJP4Gdeu>zAW2& zbkS6!S5qwM$+8vjrtHd6B%y^=rwsOOnWn~~k?v^4=G#n8mwFv$!24tB=bVM_;m|4^ z(Lg$cxe8fz`~F;gk7=Z{{ndFkzflEeOPh-tFap;qa>4kw>n69Nr#{> zQedjXBh&A%a_)6~q> zsmP!;;hHcz5qr~HTyCFb57mXs7zf`O&O2R6CiHZBnNkZYjdFtP7;eBWoUJ5PyvYyn z?T=fx0P1Q11EkEZwSXP#vgW^w1S$N#AxpgU^;Nb;6xu{?4!?Lf?lC(x{nlbHgTCQ_SKE%n)?^+b@ z&-RptSls3WNgz1JH!P&ib3{%Z>5T<*@C{7R`TrQ=!0bPr2^tnyZp5lA(9gN$(f^<* zX+cN=s^fBm)w)oNQw}@WJgSP-pGbU;UstrZhK5)pOAm*0yS-K3+#@J%i|iI0vAHjn z&q?L;1EaRlj91=ue$z<1id&l2z=;-(qDv%07>{Y+^Q!LFZ(*^-i4cFgd$N`{$v1=w zQeBHFO8a*I%w+(woSKY89O~2B&QV6c_+;7kM&`Fv`>G!SR;i@vw9D@0aa#(mO{)A9t$1RL=*hq zAHHT~4C2;V-MNfCBWCT!{H6BdPo88-z0X=l))Ju4&(P!F`fY=_gX>K~9rnpn7a4GW zQmV6hs|5|%3=E<#9B5r4mF85cDsduGvxSns!c&J!T~{9OV`knpLFAG1(ONCF-wOZv zO3XDRyNzN@Tv5KFB|`MBE>^ph+-6RoR11X_F+qI;i_6?`Ww_i=;51sFvJOtTpd`W^ z1T_k2meD4HTY>mz`0o1-T9qvHbL8zzZ+Tcw)kxz5xJGPrjww%`glbcK6|Y*XwNnmJ zEIB}0$Rq>&8sE*voT7sbv_&#wxh0ZJay(y}?Uk06Kjdh&T0)y`@I3jW>c522&pg$T zlgxg~V9d1!BQtXDD-CGm1pe26wYmVwE^9BadTn7qRas^S{`@PB5+F2kUi*-^C#Cz9 z(^y<;;;O-JrKoh}IT8ttAMeK8wt%kR;5~&vV{GCxju~#|}GXu~Y^2 zB;;i+@kPP*Fa79GNx~0InvWg+JaDhRg74(wtNBb)yIRcjikNOLQW@dB6{JD4EgzM$ z-GAoO$-Xg#Upmd8kQj0?;5zouy4^)Kj|?TnEKjPyu|L23hJI-$<^Z|Cdbn+>dcSFE zOQsBRB!|aQcUdan_@9}KN0=`kjCf24GE0If%0IRhd8zHB`rf`G3EBM}Wr1J_hAW;c z+rjn#bKQE&B%to~TLeV>reV(q9K-}wQ3(;WoDPu3>TxEmKd|n1)`CLS$wKjZDDGDVlF$hWcIu=FgjJt+gcd9nGe1tXiZ@N_J}NOVG1~4? z^r?L}7MSxvxkC!F)y)*HYIygznVS*CcSeq;;{x)*mlVJsF zx^nwmrJ0EjtA%j>lR2u=R!(;Mfddj}=^&Ad&52e{`R*5q*8YUFqfpf{m^NfOQnKJ* z5X0|3c>j07J+|!lOU>Izw+Uh83&6t6RotZbt_gY2Xwq>AVeG-t*C|~hoXi#X<_e6k zoVx(?42m9K3MIBFn)Ga^h_25)Z}axCAJv#-W1Z8)G|~-O?c+V$yWy|&A_9)#%;=8aA_MCk5MWPU zM{EXK(>^~1zU0MglkER?w$@4`TC3HV0T_AFdRfKiG`>YH+Xth|1toFn27l9lhxJJ70w1 zFAMG_>YnBxvARoqbLMRaKUR2b&`$J>l*&=nBK=3)Y^U>X4}Xq?&pg5siVMmzBmWzf zc=4sg<0x2&_)Lg7E97n8(w@PA zFI+N~ZN4+sNjkZWk|W%AfY+nMwi1&mV~S)Lgo7g?A?WYF-AVRVtoYg3naomr5zPYYFoOagM zAQQk|)0+EU?d7;DzKtM3qXHHCHt12BbK}U^15$Hq#@IZFm|4Gtj3_y6`2YgK%m0{* zONsqw09P6@H38bdiTX)zI1p-JYjXWd>hYoOGsUXY1X{9w6ctgN@;CY{$1DKF1tmRN zYv3Q?yUQF!ye8w5y6A{{FYMY!G{cLYnILINoTjc>*?XjFhGJJZqb?T`^zM~fa56>z zt%5|HxVyulq=yN@Fo80MABblj7F$ny%y)!QEwVP_aLc6Am%%r&8gSinu~K}s)qOw& zX)i414b+`umIzJk0 z3w`t2N2FR#7?kD?Nc^cNg1>!DW7$>w8a_eoI8$G)7duUHs^K;i*W~K*q_ES7{K00> zj3sf@^FiL_6x&@nsSF<({Yo}k`hh; z^!kP-mHlOr&l)ebGt7r-%YF;f_XLwFx1dFV&6wPMO8%sL*s(;a0s*+6Rfo;hm(1RXh3 z#LmABWk|4>;eJZCg8=D5V0u~qTaOe4-b7sd=QSLpDz0)j+PuCvVFHDg>kec4qm#=Y zWgl$`?1DzixVb&7qmu`^eEc{w>RdU!xKxspMHCJwGDV|JFGR}`ab@#gZ`whKmmRRK z99Z+Facs2IkxRCO*1%6o)(^rU&KHM@rQreEMNJ%%-7(STGCGnMcor;j z@D-v^PPh3iZe`zz^vx)PbDcZpx+J(|`fTYjIQ`wha!t#_yK%M;gVWihJ{)0F9;Qmt zSqXo!0RPFuJYd&pISe}i@&wj6{>SRYY|pX{_R8NGct{j~VH_XakXho&43r7CIP!|6yk2+eabxC5qd`0Idlu**VWAxwe_fBQG8H1}D3Xm^1(wt+7 z7R+vjbW5<<1D-h$hKSV51@!MyD;7~fA>)IM=8iUr2dC5CyG>kks7vJd8%9KQZ_r5k zN1t035DJB-E_8MoRO)$12f>bMNP}bKVn0q*D8%BWqSS1^)Ik(I~L|5hePV1*!o3 z65E#7R8-s;O@#%(;{(0=rvQlL?-LIAU;Ys5-?B%a zyRt6;9&E7)0dfp=6RVR|a6S|=%hzhyFB9V+WO%9-`+q6U{PBq!qi< z5TSjL0-ZQ`7mxILyc3(5*UJHwg(M5a%(#>h25m=@>FNhXEQM7zuc8B zgd%hP!K~t5tvJ@q5kIzxS7v8wspABN4p|_fn)}>z{{7Fjyg#qP#d^fHW6on*osBy- zZNcf`3?#a@{n)(0|bkMNh7mDJs@2E$n=m z%|^&fR6JBjY?(d%;wCkMP zpQ&GA3F527H=KvmOox6Lpiz8zACx3<| zT|Tj^U#-%MW7pOzl%(fp%n#D!Ab2W*!P_NS)5lD6BCiKFczx_8aB_cG(i&g~**F5< zrhIlsOq?WnTpQShTdpsxiT`o3SCK!+rq7Ke!ycr>#&)(QwMRbAxRAWAcy&1E8U7#L z#diXXpWdZbw}8k5Fpz4lYHm_vp0f@05?8b!G4c9m#Ls6z#`n!F(a6n$NND8dZ1gf@ zNr()b6Zvwe7E*8NTv*=MV4!bMJ(t*2=+aB2Qmy4!=YAm&y8uD|CnyD+})jKXG|jVh<*S5WXleCEqKHCtqH`NpIySr1ayO!fr&%>o~9Q-7xZos3vuW zmGm|S5rTG2X7kaNwrLOYpIl?&bf(>u>T`)#zlCu-UDDNs^64nVotE7Kar)WOd=p2& zWFB>vU+%8{qnaOh|0Cv;n*pks{3Q-(GCik0$HHjmwG9;o)m!F#Ug}Z129q{OZR0^c z-hCIm9#khUM|>S>zdat_rbL)=yM)q@Y5J@>>3{i-KDa_nOb0z?Jj(IL`+Ex_Qyt6x&!{)uIL3%sz%KT#=6NmgD;AlM*4Cai(zo&q z>{vNXZ`mawau+CJIz{rZiLdmWv_*`?TZ>^Wfs`8hGoCm?;B@0D5#N%-=?LoKw?-IG z>G1d^x`z>G3hF*PeQjpI9j74lhj!I!s$C&Oihzk(VMO>hq`K}+n(arm<)JG|C~jZW zD+8qOlcu_KbJNW%MDL&HUMUy1Ur{}D_{(N$YBIMM33nK*YDGeCybF|zdZ;2k?T!*X zKKlGa8JNc7W$fmP97MiXlvKXTN%~iSfAn8g2Y|mVOsMKF0~Q$W6NQLCOCje)jwHO7 zmVsn%rjp+djvOp3q2-p`B|JIC#{r2$=W47T$0M4;2Aa6o=o0orNM8u~DlRXr?`n*6nuGpQK3T^X^Pe z5$Q!Gg*M6OpAhxe;`*}J^n6%Gm>b6>8vax2k-oi(ydl+|55tYqE301^H!H-7A`y2M z1bZYM;iN`OR-MNgBpl%g0aN{M*5zEmU%vAM3a$-oo>AMDym?*e=7!~IDnQE9@#d4>Av-N@+aKdaus7D2Ol;ym_6M48e?JgKwAtizgui9_ z@bJGVCSg}$;IW#kL=#(#d1$0*AX-g%NwpEjlIS=W++HHW9=^?EGyeLJ?KEs3Jzc6$ z$Agg-PPpcVw1mMT>B}}B7T**s)I$!F(2B|5(x7;vo8@KZC=sg`AMv!7%YPBtvP4jietJ2BG>DMsrn9VW+mY9Eh7#< zwb*7p`t@{70(_N=Ys?7{*Rymd0;G%tL^aM84fY0c``*pkweve}t!sfuJ-}2im3Yq2 zW%$|@&9qx9U)7JLE505&1Z1~x<0CeRcHzp1!&uYwKDrSdD9y%hQI)WBk!yBSxZAaC!+k4F}}vW(qXa|>fLc~OEM z_2|DF@eFM@6+_H_o%L4P$M{XeD5AP>g@Js2pw#75b*zk?IA=f+XdXyv+c=X|Rh>L) zSFV(M>ARyna;%Fn0J#r-wZE3H3kdYEIs-3#k&>vzD zjKhGq;!R4GF?2~VKutjVyyPOHzht2{)r3QKIFJ7giK*fcYcBbTqQ;?>-(ToVQm*6C zL*?X$+B@R%QJrChkgwGs@~?q)_GaVR$AXxmRrto1uFawlVX z0_Xcn#n=FyUqPx{Mu5a|`}6S~kmLu1KQL|q8z$^-AeoHvpumb8YWL`yTq}=J-C!zZ zbMxdQlhAUf!!XUF*dUrXu@({ke%s_*o#~R?hjjXe_*d&J@mWvg}CeLgkq3Z;5z1hnx^ru<|%v$O~rk3V1VEx zGuQ4G`fHO(W6+H}fu}O&>iyF7ou_Z_3do%3p0Rk48YWdUA#<QVbFr_>(@jngV0~RYLRZIl+^|vFMK7X$Wsp&CJ~jOclg2 zBRs{a=#-0V2g)G+LYvgL={*vf@U!1tmSuC-u(4uKD^90Jo5yS-P6M-bO*j@RY$+a6 z$aRkwRLdOf;{Bean9Iz0aC$oN-B{G?S|QKvvEn@xC^^lqC6X@YrQyttkXV@OZ3 zJ0Z5E?LUH&V~wl}5XZlIcssTZ?9^{o|3@Kze(`v}y^g_NkgLj1#~Fla;gUQi%f?mH z(Q`w-eHj$hj@{&=guBzxKwV0zj9e2DhLRqAFaq!ly3h*Q^;VwtW z+aM(gFUY)_-fR{eSaE~yeEAs{Hi(7R%cw{!b`M{v`tw$JXzt;omd2|g}XDT{S71_ zJ2zMdbyyGXCA((3mP=|56*VJuPem#Co^yv+P$XOowIJ=8(*|l^`8WA%q>- zbtDy7NLf-iOsQRUd9UDIQV5^QURo-fb#Z>mpaQ7!gc~`O8cu|ZlheMB%~RkSWCLBn zUoeui=SsfsE*H4vYkKRa1wa4GNa6-na2~zw$W1$3y@`a~ z{L~=+n_wNj{;jfWO?-Q*7fp&uU&^Bm}3S$Xp97mi}ES}aVLF}W2$ z=qhXPa(-W3YCG4Gs(0|;Xc^Y8muz0L`E0yrrbDAf_7Jtw%hH0|PMbNz zZj#==)niGqf^aUyW`Urm%0p_%n>xlsqc6tn0m(ccC_8W_NlC!{Ivj5)3W*4m^z#4j zGN=%k@#i+}C`)FuM4zy|EoQfPDv&Z(Ta4+x>SQM@g8aTC0P=f6oyG6V7ktx&0LnP& z=f-$K2|bRt2N-Vr=%_2xAM=yXgrrCr`3*BY##dS7qB+|STh5M-1DV_`xla>s38Y?4 zS#gJQqZ1jLl!s>1Dd}YD7S|@h^%#pBoFk6=&_&;mNW`N3%@~;7*2(Dna~aNMXR(dz z(~2y`SpPOp6m*U-*?dG+n5Vy5~8aH}QuVvV1g%M&daT5VPKHsb-g-G{9dX+Rzv zCCzvQsES%#^&$d?7u*1~S1i^q8k-UH=TS#e7VfQjoNP)Hg%7oi-~MDQT6-F2S$^zb za1a#z@`q`mCG_}MtnVuqTF{g*Mv@6*siGba6e0iwzvvX)JhLg20(nd-4=7JE6a-vh z8Wn;)TU6zZ6;FF!6^VedyoqLtbit#$NDS=4P`q>Fh)|AKiu3pd|7ijMjD0v)5Q#m5 zj_XC230XBu42Y7{0c=xW5tBj>o!$P`VEuhhkXZ2)BR}J!-7lFLLbTm=M6Ef4=S-wu z#W*{f#KoP(JJ#Y^kUKYSjc`!Cv%V|u82$utLdf0=J!!{Vqe`4HLOwZDMqd?>Cpg>> zBqLE{zsL>vzN;=cK#0>e%PzK}=xkvHy=!`^ zB4NfZ66=V_9I_X+M+XE|!w_SU$1G~KFc0NLZe?+KH%vUc<>aJy!-6rd&eG9l8c96F z^&jKBSSN+&7G}6+%F6X%7S>?4e@}&27S?13ut5Ykt%Kty2^?~6ogY#~GF>>VYWiwy z8Eq(M-T^B-ecmgUF+RPxFZWlUBLbi9-Hqe{f*e>Nb2lQeoPW21L^MeY4yfL<$&1}C za@Ds0Yc+kJW$ntUARzIkx=1KXRSb>NgJW+Qsy8Em&@-0&_SxQ4dS$!6DiiN`HT*jR zZ)t_1FEs-JO!i+&B(Eg(V?k6#_9+! zNBoVIn`Rslstr6$22&rtI)e#hv%y$)CeB{K9CB)}AL5trPqeQTK+piS@5BE9HRu)~ z(8D@+CAvQbWJUi+(^-YJ)wSI^xVuA<7I&wmcqvfa-QA&hai>UdcMa~v-6;-1ix-N! zJM8s-|Fut&qnxZHb3Ss9G3r3+gM>yBGvQMfy${06M%a%cNB3T>wFAtyYcjAu8x@r^WLRC*m90UT&Y4)ny=#rtc;d_p<(IaNsHO62fq;5bLN+7sV!ZrMgj1mYwi) zvhgYJc6?}>5Q9y57ln{$!m|)XCh)4bM@_iWa+0T!@E{`-d8t7Gv`RWe#yv*Zsrx$#o4c#Z2aDbZa8rdaJr%75B-OQp}> zGtY8pyT7>-3aK#RC#Lb%jb1{2+-2j#Eb&$*(N%@PbHIz%u`;K zrW4fW(0ELR-#v-a-;w?9I_<{kt}KRhLaL=8jc!3)Nq1UU(W{{QYU6AKIFoU|-wP#T zQODw-iJk9?5Um1rVKc7dILT3h;JH%`hR|Oz_6C^?ekQQOzLc8 za!J9#;E#$;ZBkLIu^IY3+%pJ|qjI8Hgn!IteO_Pxz#p#?rgM`~4p=BIdFSDoIV63e zGTbB!Rw7H97xF!|JH_XVYvY>sTc+TT@(*>+y8;pxuL_)_L@qP0!y|NUOV7sq z8M96v>P-~J^4ui#X|f!xd%|#ifvl0rtETx0yE$V@4e#Qw`fj&$1d&qHCZANO&a*3LS9d)!`tH}=Y9Dk8o|I=06o z0v+JYDn*=fs19*VHlKY>EECYXh~!p+J&XZ!zi zX4=XR63ya9!rp5Q25$zJFLBbMK%Qb;K#;`^Gv$#}Pktq@qsb@IROB$a--kLqMs@(% z@SF(@A?~}z4s-tZhXv}Sq3(|vzv?K|_om$pj?;!)9|uz5LJ5A|?cILeNnx5H<{Z&t zb6ts;C(xp)?5gh2Q0Z#BV*M^)99vcPIdQ0*KQVRwqYR?iq0_SM3yygh&WEZ>dL(== z{>U!as4-+?FIaIH9E_3e!EyA(cliS865Az?FFSI+N(f)aU{_>w@^Vs7CFm$BE3tIzlHixE2XYe+q@`HX!>u^8=*S8Jhov>32uzkTqGN_Wn4$ZRI*!haL}ekae!d z^hLX-9}abhjeNN>F13CM$I&VzA&ZOb>2M8m)=c@1w+e)}xg91QRo2`aX4ZV@(p^{3 zS~_a*T)29a-h$QAL_rnBL!vh`Px=4law=G}Vf0dQI_w%EEdNwJyV@$S^wWGVvb|~T@IT99HCNHWH z!kup7FTtNC-bSU3Qaoi|li60$nNst}ta(*A39?8ZWsnyK0~0m4U(=hEsG)7>+g zlGsq=ZBV}MVba%LE{F4#ADW}86K)2KQvHi4F=x0?g(ZgR|HTi z&|EPVK9(sA;Yvd@OzTR4jQc*6FFIkWH6{1>8+6Iee$y`yajMbi+7V#|KRL?eA0pU} znjV$BI)=z&fVLl;#Ky67J=dlhd)D*Uw#U!t35>SAf6c7_wEWKqsZd=%GnR*CyEN_1 zIIF$t;xxaZ@DO)Za+L&|MLtux968`FCItF%P}EgEK21Ys5W;9I|Cq2BW9jr4G#3!p zE4dfQ4@2rrx{_j`e)zp@ZT7H$&@f@CcG>xLPv z@Kcne)~xy{+H6qzC1g}Uq3khK;(J1h%l12>3>NbnQr!6Vhns6?2zHsN$`9unlJ_~o zMJ5{8JDD4CO4gB^itln=&$!!_!yQ;BC5P$UAPy?($SgR&;f-nBAih)Ts2X_5#a27f zi5l?at9+InPdLdzF3b%R5z=gTs{Z zkl~Y$gpil!zGCm=r>Y|_Cz!XF*c7~9!^~jpLa}214Xza;?3H(@ij_nP8-?s{l+mR# z9g@PN=xxGUHNaqs88=AdY|W;h_bV4md{jkbs_2T}2u3}AlD5w_@ijq#Ifo*-fq#gO z&aP>G`CGfsc|`_eU^c`dD%)x;X_G_q6Psrll&xfdy6M+(L$E&4RHQU}d1)v{zs&ReITe3WyS7jf3!uabt zG+aOGf)up}lQu~U!<7hZaT>c-ftNdV%d!9D9e;0u^`pbCfI!+sx`d?&V_O#f7A7Yx8|j%2re|6t}Pgl#a+KOVaeKFlt|PCot0u zLhq}Zs6MRzM=TYQ<3fwskRI!L401V0P#MpBT7Ss5f3N*K36e{!Fy5PosL_4WFj6E% zOk7k}t2*$20Y!g=PzOs6xADlzME$|UN3rrKA`z!8kER3--De&<8{RixvL5}d%+*zW zdZ!^H0Zs>;IcCJwg}$T)HRJ>L2F5u;le)M`?yyYfiiTmvLQ%Any+#=ZzaoJW*dZiM z44yh`YGK+OwgvW6kcO~KChl)iVy?pLA5VHk4bS6ZDG5?6xm8kAgzm-vvnrJ2A^uD9qY1yeNUyjo=NdcG zTN=+oKZBkW32w%;%1$*Dag@CvjaCuzQ`J@alj|3(>5^&KAPj{5d{$yzu)|9WPa8f2 zX0eCHpQ+>;VpvfyMP@D!TQ6NQ6uVO1l9+4F&Fxd|vrSR{C7$9R-anGf+j~P49~c^g zA7xe6ZqFhL(M{tmZsgea5dAU3D6kce>00kb(ry{2>jkaI@<(RqTr2wtDO9;qB9-?} ztOS))hDa0<^b>l#uy^1j<>JXIw(lqQbhl>coyF!ew*w<%M0u3XHx*j)zdN@7t>(qc{-#@;s}0AcruDh7EujQdW*D3$ zLL}^(=ZY|@HC0VmC?Jx3C5cBDC*~8;kliXTKaiZ0K$|aYX&6eLa{>DDa|S^NCmzT6 zD_pps_o;v=dhbUbxAG1u=%GONcKXo3v#G{svH(sFa|a)Lonypy_0_Zzm-XloPRPsd znN03)RqLZu$-KX=P5$|FoZh<wFUzYA>&S+fe77D6%p~r2mW(@u7&Y-Y=lEfk-pmcY)x`hV` z3wq=2V`l3dvU9UDYN16;lQ!{{LgC&ok*s-8U%_j;NErzWF+}Xuq2j&dAr=kd&uH7# zE$}Vs8f_X$@*V3#*`^y|U0PHVt{vjnSAPEkVNr6m{xeR{aFA&Ls-s+wjVR(bru-q~ zCx>!;clCPqBCZ>*_Wdv3DQd=LIr*-%)WsEZ@9DUwzb$TL-Dp&&|J=XNjV|?@Q;<(@ z7kV90smUY~cDVvo= zP2JZyXI9eEfJ)djN zTb-;xtx52E zCMfKNv1%xoqf5Qcueb}9Q9UV_l_9U2yVJpLkK7z0tTcg*rur`5^Z84)6WEE8V^0rM zQgbJp<=#>H#8PhdIMS(FNSTE21~>5T`DC197{qLkZiJ$-*#-KoD^d-nO%WYWvkX)p z0j!gIU@;kOO&bBgcm4&>;}Uq^NdeBm^%HiT=k`<)PW4oaCpG>0D2*E~N4L#URwWCyKY75FpiufVahKTUt!g8J&{u^1#U z(Ij^iXbnb-vI!o8L{Sj~kF08mu*W6l9x1?4j^R$m(sg$`SSm=;R}~C{ScG3Qx-9fS z-(BWI&fThnW5p>uZ>S+TC`#gvNTRIFrr02)9Uk!8l zBn{2P0?dc#VzAno>(w#*jHKz%8KJ9V$BXXIis58>YZ~J&t9*E6b)w6VFlfa-`XG${* zTIrN@7p+mS52wCSpd`t=Z1*-d_H z1CUkQ=8b(Mlbva$F}j7Hbj>87;-(iHY>iU6uFXr3SENI>261IyCuEe{L9W-j1n0)D~6Z64m}Ro zyq)BryK?Fz4&UdqtNn9Tc_p`JUB^&S?*xju)20tfh~B6(S}KbUK9JJucd@1VcO!Jy z9#*f@|8N+>+PWra4DrT7*&Ak?w={14rdJ)M+XovJTt;a(l^Z2Tsugk()1>xoeiLtZ zC@%Vp@V2wRKBa)cjUB*g+jLn)qRwR#&Z!j5*L}uT>hPHVxbtc_8U5qD_6Y7;tbIGF z{?DPKM)5o$?7|YBijW8g*Gx^|4T0S?g%NmJ=?xZ44N7mf_dHXzVPc$6qbMZJMQfSh zmXo>e-`Mx`lsyPQV>l{wAWzOf}Fv^qO~K}J=;_8<-X8x=eE#F9sQ4CA!qG< zMTkx#5Y5P$2)YJAq>KvE&jJBM;8)Jp{Sn;RFnOVxBv^Wm9ZF`;Y}10X_}za6x$LDW z$(nQ{3}ShH_R`xfP%fOiwU_PmCHX&QKE2^z?g??M)3~a)Dr9Tqq;g;G@Zf%{qI##n zuu#ZoB?EDn))hoL;#2^j`p0hL=-CDOB?zNoE@RPNsF-})abX8p*r zsLigAa1FDt$@XucO;Iya4Jz{neQ-mCR2yOs?h2DB+pwjs2{W|A!B5q?kZ>yL=)$n! zgq?kP2S{of2i)W(jwJkQ0PNl2^?0ECKLBs#Q?nnif9>~Chwc7YP!I2C%WsTVpMNeT zZ6x=~MKq6_(h=sRmq<4bjJ0U9u)ZV41u6~McQk=5J6T(vUa_&$Jk3Vy4rIzV;N zxUU99sK-}y^{$t_g3kQ+B0LF)#a--8X@MU)+2{~^R{5xJJIcbTsG1lnHlkbj(6m2Fv>3k*sUDF00Zyc zZsjxIwe5|lvN5ZV{x+jVZ?dr6W-BaYjuGoSLdOPc`}`HVKKYuS@OeCIu;z==HfLC$<1i%{9EIGdT5m zljCS^_wUgEMuxsi7ZHHNYxeN3Ow@6OVkCmXY&!MEHY> zv9+#1D=E|BPt+`FCsA;05{kx>l(9NWt+G%VL-`def_4%dMQHDOfYbLsP!X%?3{mU= z93D~(_{NfkB?T-J32(ZWca}QI!fK+f#aTZZlz#UQm-MQf2TOcN%?M&lkPELNZ(M3{}jU2EvV!y;sL;#kxFky0-PZZaYb+wc2m0MM+=+ ztk7sVnfh4EuujVcZXZ1u2Zf)l&|sY?HUvIa8ZIVjuNwmxSgB!7#iPmu3)cX22q)aY z_nHPlJxbJSR_>?T@!yYA&S)WNFt3{3`c13b2NwTZWX-N)pEUzd_DZ)B*bbA8*;}9S zlwH&`8qS?zIx{)U=!M5X7-#X~Mi?cm<=yJXWHh~$KB<%)(aY`SOB_T&f0IOkD=G9(8q-pb5+{Wp*Oiw%cPu8(YsnT{2^IrbIhw# zHU5X>HHr^08AO@J8rxiL($&dMpY1IxE$#NQ*dtrcdWZMu<||5NenQBK_+`utyT*f@ zrlhqc=Ez?PAnejDdUEwNlBCeSfj zzWuyreZgqq-q$MH#M#SQeS7=k{p(C4hWUtFI)JLjbC;Y3tKQBtj{Z-IdAnZYfeIAOLb~1plYHX=n!O zidnDoj5Eru4LyU+)B9!ybcl6CW>&e8idz8=D>GRcy~%|W%0!k`aCZgGY`S@2)ov?_ zSN_jJWwD2q23HfJnlsyZ{QOQ&<%m>+3xU9r0x;tVb1e#aARq19U|yAf&c)z(d@tbw z_Q^?w*YM%q7_1Xpmk0meQ4_049g@FelPWq7jLuUK(;Zl=;$Pdty-rrFGkbbcyonng z7+(<@sHVzvR}!_!#`7`^t#7GHSZK1=7&Bo|s*AucEc-(=yl{&5k%a_irKDX(_ZK#s zzL$i3lzd>Cg-X-Epmodr)VOsnNV&t}nidN~ja(!_QA1Qe_phD=fDhjGR&n{U_hD6U z%_eOym**_1K7fD-Zoklr{Ol5fOneONOS|DJxxNUxX_mWM*fyvf)4{PBg0=#7sR(1m<^L@8(Ebc*c@_bD%>t)g-QKp;dHfXoB#|SchNMo@` z-;BQ=Z7YFEsxj<}jkQ(Fz88_(`%(KI;`@dfJAIh3>49-QmplA*+WJM?d?Pp6PcgHA zmt_O}GiDwxr@AVmSP??+qjA=DE+fqE$wXMCYMki+Ore@r$R3_vxNYAQ z)vV+Vn5@Yc#~Ljt!{pu(&#rN(J=#N3S^V3~px@iN$F4m(o9`NB+U`|$R!+OsuYriD3HlRW-Ge%S@Qk~>%;QD^$;l$^7Vr9K;x?+;;SM-Cbfh=@0klJ~&4 z4twwg4h`A91h&k{d@V76MMsa@S~v0nWDjz@|A{&GXZu%azOVF}i4zd=9Zm$ltfU_8 z1Vx@X^0>-gJ|t#I(SQq!4`5d(uv?gvbL%Z|jo3X+kwZ{Oy{1_PSdiiNQ-C-F#4mU4 zbjN|f4V-!Qv^nxm?E3PLO~Vh3m|NNfTT=n1;A|T@af+*T%A=W+kCtJidG!UCUm?_< zp6f4@<4Pp_d@=HE7-C2TDI|Yoq}zAgL>MaQasL&SqcZQSS+$Y}5Z4HIp+v`jZh0k$ z@Q#cSQ|h1*{e) zocJM!v~sU0Jjf6u00PsAd2c5`aox3_crJY|%KqQ)IaSm7I^Ez?ETsEM#fATK_VkAk zSCg${y)r8lLy1as9yyTn9_x&qiSz6B=dH_^zfvdLY`*3AtW1rx(edo7m5t8S;U4E6 zf%rO|(&810+p(3mI}+Xnm)q*4OFHDH5@^b%8cj$j#1`|pPPVB%gd1YomQ}v5%Z7^|CtDuk61wH94r3Bwf>``5WXvNKd6k?&a~ zxW3Niyegl4kiWP4Di3q=jr~0>S6K>r8|{AByF){r_kYCpcAo^a!dK1~vc?jy4w2eE zhaWn0m+(}x@4|%#ysvw>kpaq|FzG8@4OCvQPttaK%_SCc>E4WVa=4$ujjlVJV=;oG zCBiaoKp)ftRn;M;iGB#%=C>(42;IdzW_1xhU1u|BOb3Q5j~ztqKgTDFDcBT%?eeD! z8NBzeom+9|B^QA9&3gkGm|dTwcKFB?&nW!mSXM)zz5W5Cx5c9TPsu@ELZG`ss=15J zeKf9zH~=+-HNS2B)xud4lbJ4j`-Exl9jbi}4?~)q@N@`FykU6^xR3j`~5A3^Db)*ZqW9m*WNLd9?XkUBb|p3_55pix?$wV{_0P7yxHnY zB^c=q#wm8E0{QL%XkVZ11zdoDm$yWmPn5*dF!H?gE3ajWkvgs zil`}U)$!ZYU5d_9D<&wheSW=i5rmU5Bv*zrt_rbI)tlhKnQx>Weio#80(lHUY8z?>UeDq}R2w zBW5R_cu3w!9#@zqM^s03f*Clc93EUkXMUxU*R)RX=h`R(k!^fA&MSb$p2KS!qwdf9 z=C@?b3rGKre}6Myf{0hE4y<1fD&N?M6u{(XFl(xCmx%}A5y z^&C|W%c8!nJe?ZG6r)7ZgNeu6L!A4eGx*u!X)Qj8w881ORBWcvQd9b%d#ynRED{Kr zRNc9bcCv)PC$Xdo#i?kJlj+;Iol8i*Tp}-y1@qPTg&v&Npc-Rjqbn`_V(TOkx8~*L2YbvM_to>1= z`~ga}I$P+X0k*cP2fK1coWAd~X&n-T_FIx>5UJX4EPM`5#7^{np8Y5hR#C4CVw-{0RW6ccWyn7;ugmG8_e7o~)2{S?phjuL_l5pUl;( z{fh956Vv8sEk!L3DnAUA;J>)<`BRSC5IJo6>}Bh!n!F8N&x-sXR|Pu2?0^9T*fH@GZx7)BAulR3uAK zbi|`{3w~g`-sH?Rh>Z16?)z~CAkR22llp%rI;4-_U1kbNAbbC?}#1WJy;)vc0YMTdKnur^r;C^_0W3_ za=N2|JRvPXuK>5AhSi6rQ@3XER#)5771*zH2(G!v|LABVIFmvNp)oLgiNzqy8ydlP zVBEc;xBSdc=zIVgETq>EA`fh_^0&h}bb&feKyaY@#W!*1<5~dvuy$Mv`w~i-Z16gn zLV%puw<+23ky<DL)=17 zta(`GEzLk(+gp|@WUgTLMZ;B=HgtR3u0kzH*Kx>^Y%%5Ju4rc6|LL3D*yXgwnElg` zJ9!xKalSFhhc}P`8LY5RvDCxzFpe8CVQ2cy^ARuWlw$6ijX3EFz%^6 zVscNJlaD6qcX-z_VH{AQjD;73(egQHOM|%tfhWJH;i}@&qH~rNBjFIL}@s+nkWJ= zK%lsP!X=g*$kThDW_b(IIZTr9La(g;nnE)ItsxEBMnn`;(bisp{;MlQ;#7FYzr5Pt zF|&IXMpMPv8YX+@Ey$xJg&^>;1|Y^+EU|!Oj-e$^2xcioH&^$2jaCLGoqWuPU@`c7;nj);=-9@(;N+Y4Q6~u|VU*J<+Bg*i z6FD8kZFGYPt_FUdxU3&(Z*5z@!Ku34$j*l4YZxT)jp_)VgxbgooGqfe95pe84c2vB zZc+~sLWN*1748^*e0L!1v!EG89*0K<|)(%qg zeSytIe(Ul(01xWF@z}Fk38fzCWRa5EYb@n|f8G33o7)TvK%1^1UbYeP`>QBY+0UiddO^`Um}&$nsy0PS53&{7ZsJ5n&bdG z;Y>SRsBVwl!qHgq>X;}kacYAia$gU4ybjub)d7*MROfPx2+hfDJe=V~q$>$4i0|;i zmi5&WMrA*fEYnL}{xl|v2F23y#(8j@;Sn>cEsRA0(OsV0Z=4b1x?BeP0_a~S4{n>` zyCOI(O`o8N#>Q4BH_klX0wM}jgJ22f9wJd65HYOV7ON=II>~_I$7qDvvkchpu$VP| zUGLB^?`->T0W59Vi|NH3n9-f}^RNOZL-bu(Gk}P%`K(2~7e_mqc=%?!GgDaBpM#+z zg}mdUUZ;ddZ}QvBTJeplZa{x$zl&B`u#Q&`T^~<_@LQ`Bgtq4z{Wqsi+_ zy|XE!lJgqwvaMErzg3QTK04aI&gb#~k_SOqQ`{frHoD3@T>;~fT3mNsn!Gx~e4FgA z!q25bWzl%|fZ=afkNMXb``H2?J$6xkjfb>K?i5TMw8J&u&hvD$Oy>!Qn(6fu+WREi zs8=kz&L<`$U)c;Y4z??!jw7vO&rgl-&8?#@H~E_M<4LJDx6os4f=S-WZHiwF{yA6`GjX0cAkqrWe%mnlfnQC zD1gvV!}Uo*M;dA%fuP6(;AfsJxyMP^0rw+UiCUIDjO0vuj`>&wpDA5MTV>_c;cH|3 z0qi$gx2Ow0sk@7!=P!q*DT|1#mE6`nd8Tl|M+ZnH(BSwqH$3td6gZZ|U72OVZQ^l( zD|Ga$58#bjI;;&7xEkZDlGfd!TqBXv(CX=3|lzII>XD z!R#deO^)E@aaEqtP7hb>>Pk&_F80bno=jKDz604;pAN%+*Y!d<7H3q_NN`M0e!-wa z+Hotp6}LWQX-LJMr(4_8Q#Y-L^$l}c1J#|r_+vn1dEDNHH<$&RuPB)%0M1Jek}2jJ zk`7}OT3T*gfxdkI$K%Q0<|`gkOT%SGwh@qa;HmMgzwIs9l)IHzRKEt}=Q&B@d6}pD zJxsc@5kWNnn&iO+_Xt<=+^{m~XUS$-*q2RudeU}$8sAk+Dm}tD7+J)Hv7uCmqUB$U zA-Iqjm^NdK6Xrn-c`{LHvSO{QTn0VS4B|YFvoGbgo0dJUY2INlaQh}GDnsOFbiT17 zM<#go0KZ3Q46OY;qyP*NFjH|Y0=}Hf$$KB7EyHHpM$J;mT&qe6^S?}u%q;2mR$9Y4 z8m-0s(mSue@UsHbsU#ke<;?6{ehI8mi9Cs#*uo1W8DHDW-H%XO@E(0mstth=GiYZV z;a~o-GzQ_St96j=3Hb8U*_T$dxNRt+T%sYP(m;`9X3M(DwY9#s!?mR%UYXo~dX%N& zshasYDZ=1&ykS5Sa+jafzdW1rs-UdWGA6Zs$&8n+D-*orcgEv&$qY00xMoqX>+FY@ zsOArys3Le_V>L;oTWvCL>AqxX<(>An&6zik=mv6Vo%Sh{K3j@$Q?Z86r6!(O9KWUIQJhycChspN_sB+BLbO zcXu}VWMXx=3;Vms^|DkeL#ghpgH}mWlxd2?+K~_O9+CR)8>C^+Va3pLUBIJ=H^d!{ zrH&q#n6S$xjcC;yWGzUU*jKw;IdTh!jJy&fflWcQ^x+oGu5u_oAg!NU!oo@?;(#j{ z5glaFTh!aMQp;ahD=&hjq(QU^K1v7$OdZi`ZXJLn&;QW-GfV1;lK+553fsT!xc6&T zY+wB|ms|1Qh9oH=E(mgavojk}?YB~{OSoy$5x~o(r>BhqW z2f}pW`*Z6EWzlJgJdsmG-*nu~(0@_A;!ZGqQLAK#?}+h{P}E@a$<3Hy(IySmNfaA@ zc1_QU$XcvyGQxPKWbVvkmR^SyPGSGT9=(C1~8D}ujo zkPhTTkVj36Bj8SZcRt?h9wZ&giTEK2?P&UL0P|7gON)9Sgs%s|=)Rtq1w2wzh?(&& zz5EmI28~ENl6RlAKx6;Z24&D9z2SS!w&G|O49E#}mCGdd zvD61;iptHl#R>iA3SQ%v=Z3znu#0YCL%|P8!rZ%k-&j~nKNOrA!!2NXY0@3+V{DXo zvivpWoFpcyuLUTezw@v5fKL)o&!5GZ{TBq;2e6Wz=Yx40m|wqZ3uZ>_>dekK1u|9J zM!{Xq-A1>NCKa;NlQ>M$1p{2OqL`n8L3JDp};ePbi05xVu zzALs#A8tUW(|a!D@o*}}$hhu6L=o|MENO$!T_Mo0Dqz^fn;NHrCB3vKe3<^w4`-C8QXE|rLB z#+IAt^wNgk=-%PQp5DrgT%LUEHTFt;4ZFvsBBP)IenlgzmJ#QdySlHPjx%*#yg?WE@flZJzio zRe4Lvv@77Y98}ds_W=6BY_cZ!C^64LWfya1N=C=2 zRPXuMkbb*^xJ258dcxAMV6Y3rVyRrlRpb#un5Rb5GlbjVquY@On-^Zzb!6 z1^QAX_>lITD^!l12JJbn<-*0 z?QD84!nGk{_`=GvQ7-MJa+N4K)W6((qN|+K&swi?e~`8smf$C1#V2O|w$BC~V-2$cq8TO3^dcGj$6qI{$2zx6iHxafM1g3Zk z^7#F|y78zr^n_e6PqyVrOh^a1l*%*t&J|GFV_qse0lJByCx#P3pyWU5ef=*j{(nct z?MGdv;7(^gGHD8^7GQ@_HeZZOSvJ?`Nd3J`*qW&pw;$q&|V? z@IcE=%88`^%=A#k;ow6WfZn67WBTO_1jNoLikaQJmjvH+*ST$_IZq2RDFuA9@N50n zb}7uZ_`FN7h3+rv$`ocCSJZNk@>kw!ad;uKPSkRRa&;Rl> zg`u(fZDw2)_wL51g7~kxyxOl?YgOw?qw>k6CPgotvLZoQC&`Tx3)&AA<+6pfp|KU0 zxkCay>jqQ}XTmT`z0ela$_L>|hLvDWsN(b6w+yLvonuZfW)uPGM3^=qoXy|dzRXL~lg$KO zo7LugN4A=%=UXE5+FoH$j&|q?3&HZ;FIc*bjYPatOK_D*Mn3iNE}p=@=!k52h18=A z_!Kkc)y(4jX%Jd8SmA{qlCyReRQ_$j<#Ce+a;PK}zRw56Sjv^ktIxpRbL?&Zxzmiz z{pYA5xkt+<^DxZX=m3%nQYkcB?-)YST(nKZwoCS^44+xz7CA|3i3`sdVNksyv{GiS~y^t~{+7;I09TV}$Xo4fGBVtfUzae-c; zJ`H*YIPD+gD$rh^7}^4a^u_DhI>05Zt^d9SjDj9-fD;f{qj*T+yq$h4^w5SU{+^l> z0LICPzhwU%ttg=GDY?I$R4QpSzhEO^84+x4P#x=EoOLDg5xhG-x>sLO4mXH95nA{( zF)&Y5{Rsa;s<8$orR74)c!$OGkaA00g#G;#zTX=cSt51|;-AGGlxGe}ix$TeOm1Le z^3M!aK1@npb2<;MxspQrTdZ<#N%Ku#Ju*XadtFSC8ZDUdQ@i%~*IZL2|1v^x-U6ZM znI=Tppop_u$E29AH|a1#LM_E}3{4ZG9&nhBT?Gw%cG*8g_(#Bh=MLcdngcdJ&iv4X zeTM7n)q-qkt5`t8LMm}GN_0}ACMqJ|GtT!8&BCpi%&PN6o_xTfP<%hoeL9K$pT8IM z7$A*!*8jH=0a}#7_N`0$n-L4w55?oSWwNQ=Hg5<579N)^i<%K4wv6(oN2w)r9DMU& z7Tuu7_8Z$|Y7hqYEOtz{cgR&_EL~o?_m9>^Iav!@f$70Z!yspmQDsJos@Yko6&GSV*VmN?AqdGmrx8km z45!|#E)zxn;|EE+C5lXk>RJCwHF-3- zSb{K2lzivC*y7o1aF9_|z2(Tj$kw~CncWeGU-~*8#7JXfoTaxWBEyriH80oVh0NPA ziW-vd#lz6)F*dnT|DGiT9H-xu?H^FCf)a1o)zwf}*xalo4iY$0vY@|R&l39f(cq~e z2uc>R1c<-5RO}sa(Q0xjJ&}6lmhU4&vi-HAZj%Z3Z0?<|$l8XB7!&9aMsHfWnoFR> z%by2S@BEe2Q4M__DYh5tcsxOZcdtK4$=8lBd~i$1*K8$u)lH~r7in*%?>vjGr;30;IVYdL$60yeYn6bn~2lCWO_bTPuHK$8pYyfDKE0z-Mr0&`#Sa|?C1`%CwK z{^l=h(XNf3juT5n`sO4E9csIf*~Fw zAn>;^qqjBKLtrNz=qj)9EI9fG)}pkEIRZ|jE@hN2k|ukDSiuYr89fnAU#nR&-EL*3d!6>^H zn0s==X3q&9=t8Tt*+~loEL<6G_mA;BJ|AH40)DXZb!vq# z7%zt#J0DG?UsDC2!lY?R-9c<=dQyTwojv^5j-;?!OS^h!*nY6p=dq|^94alj(`rn} z>|a~_z0#NVxR7BP21PV&w-4ZYh<2hYOh zLc3%q0)5`3&K^rlV3b{{POjG006gE_+w?2oe*Q6i8@OA?9reBccem;{_xBj;j?#Vi z7ss-@yi7&zpzu+PJ@u1f#!TG~9wWPbvi<&U+Ofv=hQA_vxE!1J&iS$@lK%rd zshh}HJsbELO$3zbCl*%?%YIA&Q!iNf%06-_240o*M}tXImUwbAc`y%r1k%3 zy2_}iy0$$u2#9n@ONVrKJ9Kvp-6bUrBHi5~CEeYPGz{Gc57OQJ9pAOSU#$7bnKOIe z_m!t_B{pT8%Y{HHaD~4PDB{{OZBFsq^tSja{2v!pV?1GN&m7H3t4+s-Sci9K=(%^f z=J;P*3G)yjqd{b9_A2yWV?YRYDUFMRNh&v@Ac=;9gp~&EPitx&o5qcxoEvuSk5B$p znP=eO5MNkRq<9|&X~hW?A9|Gk@)$ca_vh^_a%W_g?4Jt+g|^tDvLyxs1+eB3qyB72 z-V-1y8XhYHCe1E{nj4^ZLE&r!I2-PaxACsO0SjX7-FQs)H)aFIomLM3=dISe45R$3 zT`_&)r;N>E!L7xzk>=q2l95blbzp6;hYe#WAFhxnUSD?l$EF@D`ga`)2;0NT$6fz^ zAZaAq(wsfn`6Z2TmljdMjlW62C0AcdS|$slWv(O1XEJPpSu)WXiEQ!A%|yL<`Q@e5 z7_^jwSSrU@otzwlV^o|5rkFpUo(nLBm<9+I_B`sZhvL@$8sU~l+8i3dvX4bpIe<(7 z0@bfawzvhJ(kpT0y_ec}sHh4Zh4Yzhu_O1tJLh93P@j%=->kXYp4JKbiz(e~q;}J0 zhRVa-V1JttX!4PKNQ-mwW6WhdBDPSVw?6fF2jaEna}$`jIxGBi`nJod`y*mH;Kpmmhcee(wSVi?cNO>& zyW+Jspqm)#oOZF4%BB+h({$Eo(Ue`dI^T1rw!6yr_t7nN^Z{}+jc*KuL`Cd;M#**| zz|hc_?buJ{C6W>~?5+QDBnT#lE`4eL;eKBUD2Olw=8xER>jrxO_0N8jcpiHe0i4wy z@pn$>=f-lL3-B4Z);(zb$ZJZ;_2V}3Id-yQ{@A@jFLI{x>`)*=E;ISDArWPX4Oz7< ziCM{I!*kgq`uR24wYT7+(;+Bx2+#P2&2eg%^^6g2^c!)i!#e~#=CsE@=`QA(8X9aS zS^VpjoB^8J692k#rOcK@dZOrd@|Z%3qW zUPxw58Ykc9`4%H&!H%9~;14a;W#XZ+_%=|#>lF;lb@0T_N7zWHwpgur21?HlZNd*6 zszpKv@GZsg`8t`#I1lM(-wqfSomc7(<+|bUBE05!e-USEb$2~JXU+Fj3>5m_azr-i zS~9>ex@RcOXiC&zjhd?dtlM{0T!HV=r*#AOH8)vHxn_GzjarV)aGMvI=5YCV9@%n0 z%TZ$05BlKZ)^kI_+3s9%>R<;M(=m0ur3a~7dIBAT^? z`q)7KduWp{=VW1m9}qRLyKPcURX2|-jS>f3n@Skq@cQZf;f+M+7vczF2#a_uBu62{oRl zMXz5H=Qq*)XJ;h^Y$cJx2RGnJ~)xO)RcNVl!r%|p$<*G7pp_`DzZ zWV6#Mi)8Q9nAHVu9x~fwafz=Egc1Sz&hc{sa}*$KsPg+v0t;Tl=v5<^5iH z8(}3;Ks0Vktikj7UVKe-VJ;J>&L&s z6*>IEcV*eH=gmx^+xp96A%BzTlAU?svZnaynH00%Z&yKPsnXUPaD&TWnUdmipao2~ zhlFbLY^;u7ko2^|`VfcthL^Nds;H)pkd%sY?`$06k3t{$T{4v6NLhSsbo1mVbO~CF z-sG-=txlVkM7tZ2f*%`kg`4j{fV8icJ?69sPIa1~{bgdgcmmHs3}< z!g4=dxWc$7__SfW4FNhbtH5^y);#c zc$*fGQN|=+0H(?-4D!Qx(ZAZ^Pc|8#5C_I`q&q9ur{I&G~X_JX<-|L zI-8!JCJ}zjd8H7>MNZxDGNoC;9h)s8X6L8uc+y|u%D!rQoJA%?b>;UxbV|_rh~h8c z4bc?Uc9ScY9Wko?o0iC6)A$hmRsBQz)gPrY&10s$$qv-n{8jZFeYOcRsMI?Y+93WXcl#|;RWi-!0%TUG%$%4(@bYE&)?69E*mYT!@m zT1;@obYGM(S^LJViobZvdVBsxk*TRJV$f&t_uyu*b>q`M5AeX)C*)gq1k<_kx4kUL zH{8>Q!wu9_Lh4%NukD}KRBMcI+9%2no@oZ$<=Ak(olMpcW#TRwK?g<}DWMSq8^+8_ z``$S7!gmviM)O%^E0x`b;Ter7*zLusn;-6_c-ND9yR7kBQYAvJb(}3I#fOK(tcwL{ z&Yp0S)sXaq9wJ{=7=vH+Mo)jNBYgu68CYwwgr?o~2haeZ;BUT1;Lf&30;b2m(kMnx z|Fmx}_s)`)g_+Fz+h@;BpH&2`P3h8HxdK9>t6OX*TSzUFR{OUgstdf}uEX#xl6|lG zoDOu&GiZ$~^!~%l0I=JuObeJpBWc#c)Wb0*s50m1d{U7BVI$IVtXNBsys;_M?(YDuy zhg#BRcC|*apcjwaSPC`sMB|*D?p%5rv$lyh3V>m_0#xLAjzJWypSW!^24OaRN9DX( zYkcq!(=d9{3o^9tJp1a4PMRe`Eeo@sF2yd~X7K4i-vNe{lT(1u-NA zkw}p%ett%u`fAdi^f!gZR62Xrdh_+;M<*tjo*^5|ZU1>%KC!UJ zT$3_K_YIL~#ir12F~QB@eGgheT(IaOa&q zrVJw`FO^2Q8Cxxj+k1>NP;-g731WU>q=Gm;JliP`G`jaLN|X=EK{o8C|{!T zEX-?Y;ApZ%jB@)`=1? z3+Hin}%WS7?1^FIo*8mmqvy_s0Yu=E1Jd zdFhAQeh+l1Z{juFEaTH-LUI?Wr1ZIabMn0qU=Dn7L;FWjOsxM)NDmz{2BJ&&c^UUI zX=08sM9MOu1IT4yM97^a^8T^%#urAUj>ZE+fk)9OToF;%@z%gicwT zMB@Ba+&8}!B+v!3fys{AhRgVAu$MRy8@;Y%rs+2rw<^z2r|jsO(Ker~lA^@%_x z*Eo+lTBgbncc~rR3#8i`-dMbK|5K4~PObxZUkvT@Gw{^OME({fOSVd@t5`^Ry^Nh6 zr#<%SxZbPu7uK}!20p*ZhzO_{-i|M++|p`%$4x;ATqvYL1lzstNPQwsH#54WmG8 zb%hLxr9Rm!>+L*d8*};=VXeRYsm-x0`V^jSVwwb@cEfW2UFoQ9;*s9Y$ejrvXuPuq z<*>CaH`%3t#Kbub8dsb+Iq-@d@Z1c&{rS1ht{Qw1r!&%ygTJ9W zq`&-QlVsL`oaRL%`I!@~)lG?K+oMv~RbX)c%N zH=&-36T5MxnAmZ=U3c`G9kS}u&_w>#Wg9WEI|$%@@quHcUGcflF5tQt#i*BW*Unj4hV-P98Ju zk5QNjJ#5NcK-{%R1R?K-1&Cfy{*I*BkPVO>&BDlB&tgA75ng#`-{KuGZ-nTl8FFR8 zY(9+3IqsReZ*!T2CqJH9op6ivb3>LKMv=D#kU6SQUTO4H&A#CK`Hu$=hSOP(yD=sLqIRf?nhr}E z0O~ZjxOiA+i0!!_a%NHWENSaJzEE;e0riY_h%p%Zlo8sK6v?KQy9v2+oB7A z*-truU_8voP@fz6DNhOEgdH_APj1WyRigC66Qzc?Vi@Vmkg#ZVle5PP1KN4>1%oG(_Lqw5 zzA!mx#&2nr|4RNSmMxWF>wC|ENAyd{pFThXusvN8Qr7< zqJH)n+S~VR!h2PGsL4ODNo1&02>xDJE><->c6F;%L?7^89_!PTk4-V8N+RLK;5MBO zS+su6-N~Bgq-meF!mo>oZ7?HIdoORta4Z5ZNRgLzQ-#aUX2G|Jz3K^meV?h2EiIt% z)4kas%+PstiR%nxN|3zA_C;=Yf8TJu&~)Vy0dpUET*x)eR*kY%$SIWbD!dzQyxLoJ zl9GHXJL<4AP5R|*Md()RbQWC$#^kG_S4t@?e*5CRLqN$@K`x!W!uK1V<>@p&tg99p zXJZDjbTRyU(+)6kvbKemf-k;(Sd$qYH7mO7U*+^U#}R+f+w>O}CSdz-(7DlfEQmEWG;9E_1A z6M_aoBVr%)`ORMB9J}Znof9SLM{kc2y|@5+z&PWeX#AMU)1}Hyp9=<|p3WC)z#3oo zATRm74cyLQ*@yNV4b{u4-zP9|E{=f6-@j6>vH||$THp;TdVO9nZUOp zo;Z_mVw+{3m6WFp-nigw7Bs>{njaakX)}?L^>lF6?lx(-g|l%@w&d8F>?l8kL3=;D z*CG5)B?cif{fr$Z-Jl41M2GnA0V%x;2P%VyU$F0vOdth?rR0ZQbpAA@q`Z?|5P4JM zV_-d-0erk6^j=Suggo(Y&h9je8IpkFxs43zzJ zPKiI;o|T_6XTzkIUYWS^8#m`K@qNf3skl_2p2qoUW@_*@v@XlQyv+OcO0U`lafduj zp20>Y7>@y-3c=Ou#+q0}!ox&CBlZ2;!t`jPp7L$q!(m2EolhS5qIqzamH@4Zs*03} zkp@Jy@kV^-Kp0{YLcs2Y?a3yar#d;`oDRLFPiF>{5O@s^>Rd6pn%I{oiOyDz5A#hq z3ASfs^O^ zV@;FZ*IA)@!CXUoxExw8)eqT(?8CB&ZcNyu+eX%+0C;_1pE2SGJUbU#0J?q#-Yy=0 zwAiPw-e`6)jyP6ms4j%SiksmcX)CmE($nB zUK8my7mqx>0rLQ(I8v~8$~$N75Xjl5T0}cJJ(dp2ls~h@>HDxTs|0pv4GyF)4K@s? z)HBC)j1v|%RUd?K$BYSfV0U&-=4I7==Qz##JOq+&nV;yC^wVVrSNIAmLSj&X(P8$`)KqOmu^zvE|nCuE5yQ#0iz;|z*&@4w0B~I&nma7tQN@I2xZn9{7%4a&5A@P`& zR&R0Mr|*6{ouqf*;1F!U2f+-z6UvWA+nz;{?e};pCEF73>AE>8qoK}Mvb}N9l>bGj z@rA9|%LDF_Bt>V>+-swcS~6Tp9??38TLHpi7Se2!IgfH%f+IjNr69G>L4%$Wr+Op zwlq=8PS35;n)Vl$chCRkFbM++RzKZ#?FDW4Al1P3*qyFEXQ>+MdzX@3nb-7b-GvEd&UTo>g4?x#rN2;_<0-FZHeu)@BiaE{|mA_YKhP%}z8XLCvv-aTL1!~bB! z`XrPXg;0v^W{o}ZW%c0DrSHGsBoR$>TF)r7NXY=30&`8{se5Zl^z;u_TpD@w(hoI#bi@EGG0fA5c^S3Fba!oH}4J3Q+O1NJ^N{Os+h>h8Q+uyn&D^awGlzA0{hUjU{py`N{3ucx zr8=}T!yPwMI?ludU5WCCBKW8tv0;IE$tmPV!}>pQ z4d_=sW=@8gj!6aHn%kGs7}kGS5Vi|h!Af}$7tIvA7&b`vHUr$fSP3Pop|j)98V8BfZi!>Kv!_A*0?XKMD<5`B6EL7XzduIRR4e* zSg21Vs;EZ6IBrFomU(oS2q-QYsxMdujK=tW82=nYLnlB`P0T8;_kvNUJ9h?Ze7=_& z-GS4#dbdDY*!@%!DRCh`C!doV{8>bfRt6I3d5CW~9RocBGS?6x(=V_!95G|%@E~#% zeLdg%5K&s}?6x!=VLK_-jxQV{GfiJcaIyI@26 zCm*j8Zt!M@V)5edAuUE(flTfL(!#|XCatXPtmxn6puI|uV@9~ibrowfHWGl~@Y64} zRj)LShrPJ^neNkkxvYA99UEAx9G$kGPyq7Yr1!64{VMdt{LOT7*%jqc#NHg9S@=AXtRo8IPxUYq z0!*Kws%TCh`@ev{J_^q2r*>kT3=iSf?v}yk&J>4n4Do7nc@uq9Fwbfs5%g6m!>}d- zknr5pUlK;;77$Hk6r?|o!`-~$q;JPmE06P~t*;zqZ3tH=&Q_|F`0BT->b}I)G8eiA z)#bE7iXSr!s&Esne$kOfmw9myJ^AGKGdC|&3~~d*vWFosEc?2<0d+w@;@-qP;7Wb1 zuAgY%)+c`(Dcp`J?cWDq{3bD=Ft;YCMdn+nK^+p)pL;8kU!YXKfJ338tgy2E4>~C~ z{&nx=TMxvd03wMJOJ(L+IdO&F^*Vo9uW@aA(pW3Rr#V1oO)1UA3RQw?%f(`@5LW2k zvyXb^+6rc6Tp(ZGAL{42f5`HEF1N{b^!7*NO+*G1nteon-v zxb9fPkqt7%iHKbL)Kp&QSW^f&^(R(_lQv7~h<%aa%OiZ=h%hoHflW~8w8o_$E1 zt|*v|KKV(Vo-;~fpRI^H`i=E9O|o4+%Zmg^s61gG7wE1hYhN&|mJGc+(kwrde+SkO zxUcU=Qz8*swl5}9nqm7RB-c6$*r7#{5PdmwUc5zkx#wTM@aR67P|EHy}SJmErZn_Sz@TGH= zRbPd#Grz8?M(wg5R-GZV#!}=5pIhL3$YmW8dHzw!er`|P#c11s&E{S8Z24t#02&!$ zP4IhcdNDypFchopNvvB@owE6H={+WGk;_G58IC3Wx!hooMCX~lHv3p^23~>6yf-{C zO>IobM3v~JLmnGgZ>I~x56P*M1r$=Z6}{u~3Hov=G9jI5R34_lIghtCx&J`s@fL0S zrf?V!rwrv&(#FNCHXM_2tfPW44#feQmD~k=F95R(epky#H(>GO)dCbo{TD8KfL~iF zVmMnQ+m9cPoz?8!d$e@$0W1|3zk1JrpS*NcBBtO}_^1*B(keMbdoPw0CRyAj01hr{ z%MzSS<1SoMgotT_r6##b;n+ps^tjQL&&f`2p(dO9)9$o!@$bc7zPpewIxwzT$;OjM=l7F6v|>hk_t|@Ze50V(G;lD!xr5lBq}FOo?~-t~{)&RbTOyB4R?C-O15g___q zyc*dib14Ax_DVmQhQi^yGj>kMf?;k-Nk`5d+CcvBve9DI8PQk!+`UtmTsm1aZF!AV zC^(AjGX%gg+B+w_foRWlQo!F1d^!uQ04{z<%^cragYC_QAJl#R<{o=RYsK%?UE^{n zKG>A{G?t5r8K{GVJ<;LlOP*^&zC7tXROG6oXuaL8bmff<05N1CwHHv2JwzML@l6eD zZ8i)j5u^HiWg87Ex>{)=<)1CVcYK*R{Mi*#U6@&MD=HZ*rPtNh+)Sj2#bw4Y8#VNi z9kV9htU4zIr8cW)xmLJJkmBW#%Ii#v#$wqYAXTfyu#~TzgeAZ5X(udq`g-=WY&ZOJ zB1qu;^s^M+^j&j5<|pn$*IWxaT*YEXuu)hG?)oJK!Y4K|*l}Im{j_Yg+#_t^MUhXK zlG8r3u(gtPz%fPHGr0T8Q`)CkTNGm@;gMryKK@?nyz*0Es)+&(4`h#7$+V&tCzj?E z4F`!L-&(BQjFj*!R_WB^-7-~ig1D;_)-oigu%p_g*bMXQQKDDfN5c}m9NUr>0q1oj zkNiI>0_&f!&u|TW=LN7~&l-vBh26@drEh!6ORmgU6CzAhn%{{gj{L+&|6bMg->w#{ z^!{v;4RH#lWZEbTn;33>2<@tr!l7+3J9zW8lti@vO60|vgd^3G=<}BU`gvl|mHk8v z`#APJG=m|Sj_CFPb;lY_kFl^QA-I?#tMgy|H_XoB0Q|} zur-e`{e;b!O%IK1SbOrhb0AZ*=TD~>XZ;_+!XeT)T%7_J%=TR?9&*|>R!pYTokF2( z%(ObgEFeASqfx0OP>EOjZ{GLb6o^qYvLRIFs6rRb^0n^oA;hY5 zU*YRJ%lAG79dtDFV!>H`D7v@|8A#(~kG7VpPLXdrQ9v{ySVYIxX;xa{WysD5DRzQW<)q0k7Zwpl>DH}qq(OWIxaWRDzJmkf^N-=E zSI_y5DhpJJBO7i$cm}@nw%(^2J^=e;9wqRH@cw;SXms0+A4!D@0dKC;q%0+@P0Al7zv1jk! zH}XHd5ZgYmU;x(Z{Vre*$OXQW1cbQsuhVhHTSCh8%2sPtO>cinHA83%5D?OPp`M^O zkw@!^B&QSH8n@=jyylML*y^wh49+n^!>${IKpj zb$Q39@n0BD-05=_>AK$$`?sWB=g^s3$=rC5v3)>Dr^tdr#B2gX+kby_(fVmW5A&`I zaWD?6FJIWp<4qHe)RROe_ZC`dlY@>s&@~dhFUJ!17cx1*LHGjeK=KQ4^>#_WGABWSBr>&qWP-Pn9w z&Qn87!lgMG<7{8Xihi!!hG@{SnyK;*ql#voqsV4kg?sk?e-=PL_kRf&r}|0XzUfPG zy2h;(jh5yO38(fJt-Pksqz9ddAKZ-47bU+-%BEa*l?Ctowai54C^h}+gvat|y^CW> zdknp5b0ApxRN1I}DpY*Yp;jB=5{lkb@Dwv=I3!Aw<^nzX`rF}*|I*2S*OOx_ZO|Az zi|Eq?==*@Ej#U6q%G?0fp5%WWQr;UtC*KYB8^4U50vMXfg@^FvgyD-&_0$!{uR*E+ ztWh~TS;phfn(@ki)H?rjd`B+9>T-WqJcD}?|9v3oU*VqH}(tO3T^ zijY>~?!~5xZ<)9ck->e2nFg6t$iI1#Mh7~ZiseQprZ`b3b|B>3|a&P*;VGdLB>!h~s zt>$EU+lr?WHA|Ey(sf*KGYQ!YwlYr4QnU;skJh?#fL=kvqKr)CrtF3Aiwu}vcz+hh zOJ8=QQo0ybRCOyXdTi$8yTY(<-_!A7%ez&o$m?M-zb}_0l+B>zSvjbfT8F3&3k0I~ zNr^to%ZMX>47TL-da=;>;AM_cqr841FE??3y8|dOguRS!LLdh;AHn^^+&~$Nx#d5V zfr#`4FiDd1T8*u80U42%hIP&xL?+$lD(#>k}JFiEtzuW{z;AX~oPp3z3dgwaqFoZI+Kl*sKZZJiJ&TIsFCy(!c5 zWn4UH<4H}3KY@D|T0V=JKiL&^c~EGQb7~z9MyOpm5Iva_g*trc70YUu%%DmAE@xUb zl}x(t0`1pF2mNJ0-dT|*ZT=-M=nVG;nN$|L7-6wh0e5B1*W1AVO59u#QhEr-iw5~l zd&-*pZLNnlYq40v08A0v2fa^DB!J4}&!=ZVk%Q_Vb;(mD1^lFpfY{QRf}mRNb~cwc+Cx#E{o zVg?eRoYGvq6+6d@hPObT z<>L^SD5N1D#aHvL6O%i4Zd7Pj$HnRyCJ^FH@B3@9fQ-Lxl3^6ZeB<2KgUCMV>j(;i!PV z9HiTGiVT;iv%->M^FeYm+W>wxo~Q$){F^=O*>Ku(QpF2tE|?O8p5G$c93(K?4T=G~ zKi*IMT?CgZZV-tNS~0F_XHx8FJ_4nq+&P^~|3Jj9mPcUJt@fhw_XnWGO|Dk!i|Qv^ zc^LFOd9^mg-ntvmZ(cDpqR&T0nyuhUUZDpKX0LPid1T_YurY%Z`jfh{xBWdXHI%Kx zyLBK;$G$A%i)dnmjwfqCY-*Q)EzK(s6Q=PFh9hkzT?c0IrtR(4xuG0ILxLZkXP!aV zxvEtBx6GRxl^7%$wzYVu@Ium>!qzBC$qjr6`=gQ;Vdxs$Kyjt2`sMxW=Xec;SKpdD zpBs9xz!hxI3>F10{bbs6JgGAsqHGr1WCB#`F*=&fGYCZkyC-v~#RyNBjatQZcPA>G zt=Er=!c#T;)W?>ajX>fNa~x#@HTGsQpJ9f2_C{{BxMfc9z8{d(TY58VrvX38Q>*DE zA~fQjG%8%d_E=}X&(b=*>^KVoU3nM0|8}wQzkqT1_6}Ijo}Mh`04@3ACT@%Mg=2nF z5!93I(dccjdZ>>2*&t;a>sot%K1?>DSj`uz?AKKG?YL=t4@@IDUDv2?#XvZ*PN?7b z-Bb~eHo6NvF^X#V$`=SkyoV95qIc+((62!j8JO?d%iEbiW&dj(DTRu0E-d@6 zvEY7IZ0WZGwjOHxguO(Uya=EjFI#W-d6F796_qv4l^IB_hsqtvzdRQih23j&z6djPc{ntI2VsDe7tiZd2_QAjLMi#=i6a_h+m` z1m&W-n~}BZ;%r(q#mUX|`#X3o&Fp7`plQ`8BnDds##T+XMUYq#XT8CXpeY;XN-E6) zJ)>&0EPe7hnLJ6ZA_0acG+aImL}j6#eY-2qZ#$>qs%!-RRA2>Ii!qfLmItKRMyX0U=SD~&_vf&0lUDaUc{B%B~^xe;CF zeIF>HY=xKULpQZ5aRt6!(5^&$Af(`*Xr1K=I22P~;#0eUG4EA&t>J$0m3eM=^{-@q zxb8}$?frZKlD4yy>92NJ)bfJ>n$OaQSl64(8emoK6;VCEN;A5?Sign$`A80HJ7ZV( zQ30ghgZ`5I`21J}@TP6vBR_zh@6^L`Jc7mg{S#EWg@s6n-m;L3&A9_Ctuxm0#5nbu z$N8Bamo@jaWc=#_Ws@LdO(m3_y6)UsZ8s2xFi&xBV*1KBU+KVr78|eTIsL#&tAgyK z#2)IOHQt@apKRvdXG$nZD7F-W@W3y!Vfwn?T^c_KmZJ_eq+j$;f1pY*JyaF^-GouUk&ZcBt;Eg33 zA*_(*pYOZFa8{{tJQxHu_Yu2h;ESWjR0hn(|4@D-M<5bX*OWr9wdDy%t=iY%1hB-+ zcWpJuJ!XWkHrH8MzO+_q=?SiM z$XsmFcK-b11dlrAC)#6%Rc|E75AU2Z(?az^%=iYOzkg)h)M}Y*@nY=#+nT)}pWNFN z*R*Fkr)vBx^~Dw~pE_r)q^*B^E~<%!v<&qoG6&T3vhbAsI?i33pz=`Whc*mM>)eRU zO5$$`OhSlZnA9fQImx|wx*81N@$CEx5_AjwrXP$J z&%!!0V0Cn1!|7M;LHI8l?9?4@)hOep&c#J1C4CT(Fo-B{JM54M^j!~iOL`xDi);zdn~PO;)uDM#p2NL1IfUrId$xf zr?iRU6MTl%8}|iSxVhjDaNP4W7@#c{V@6 zf8wne={-Rdh{TwpCTTP_c34iqwe_fGo_=TsRSWeE~oa~#pbf7vhJBSQSU+@A1- zrxES?yTQ>riC@w8xGCa_&>O6>G`+rh>WH>K^H4j*o-J`>)%UZ~RX2I>vNrjDHDnbn z{?X_zyZq5TdV}#Vk?ik`n8}SCcBVCFBnwCtE-o1%*$O`xkhL%N>PT$-b2^7|V0pMb`HA%m1a5McIsxV??p^uL!gjfvVFs72N3$Jg7PK>KJy&~xDv8vD{a3_tZ~!^hKO(I zPf>lTuPPh{kt0_#a7CQ5ymK09-ylXsm|u;iNFwpok3NRLIQ6i8sYiAS z1+ZJur#IxX2`V+LK~g?6`=-a5_7_UH~DK zEI#qq%|#P$Um9%l>lTR*a^IessWX;1S7S9!-xSmD?Yi|irW`bfoe$J3_0s5L{Z+83 zg%YOsqb?-&+KpeIfQTp6vTE28Krl%cYZrC?*CDV1WH2{(JL-3V zb#M9E$gf!57Cmqv+~bkUAd2^$T&)vcfuAUCWkYUbJu3B15KZ$A=Nl=*SxExzSv@dB z=`HJG;;eNLRo~w#ILvGq9yZgdok4rX8aL1kZyPrIxTa9y` z2NIS>u2(*&QwR%t$<=70M4e@h$Tt=hYHA*e#{o`wI73Zzk$*Nx{-iN5~ z6V(&i3TyVO=&P-s0nV_M#C}6CD6Cy2Y1{&$Mq#y~Sj$YJ1C26DFtCTAdx%@Nt-nG4 z$I>@O$N7D2Pm;!NoV2lxMvapOjcwa$I5FDTwr$(Cor%$yjWfYBzyJGwx!0PnXU*Ar zpKD*>NIJ5U+ygC*&<`>7sT28+4tpU?5({BtNf8>!svmu`;-37mg-W+Q&?twrc6v6J zBU6q5Rc{ye_6gbUCr*Dd6|;hnM^BJu-yyw$?LgO$*Wusrbfc1w8K3hdX>5O0{+jEz z^b=F{{9uW){29r%nDL2_WPwtQw`Ay84`k znhV~~E;K3E>-VdB%HGnLFt$7-?qK@pOhO|FEO)~F0qDxD-q<6>h$31 zNMbET)g)$V$oSl6+@(OonQRG~*+qsFcmBa7FpW~7K#W;YbPvC}dHGWbgB_9eMRZU* zC99Z;+d`5Ss_lKQK)mmXGyN!4nsGn!fYsbIG{G*+gaAW$h61cbh+9H};Lm2ePqwxK^! zBqj>)t`ZTWNi~T#q%T~(#BaX6ggQQI>DFQ^vg+b~uN2Yut)M6C0)x|qbK6v{5PrUd zTGA|yrhj(pe49#(Q@)gw4j!hbe+7j89g@1r?O%MIm_MrbOT3+bQ+>-FeD2$pm*w3N zVPxyIzBC(GRiSRpfwCtF$4o|6;ZD(KBEa}3>`4j;K)8g?$4`cd#ME=3&W3ZGH_cEU z-#`bbS=Nw#m%ab$kE%%xkmEYfG0GN-!?woE;SHBEpCx(~Jln z@r*0K_(8O#arMXeVB)t*Yx>gIy*RuA(MgCYbZKlvwhXoUTU~Ic%bJZ4;2Np`e*g{& zRd%{mO4#a5D0VE6k zL-$P50`o+Ss!PTwv8q#@i>e8gPnmI$e{Df%vEbrSUXBFQ!p+R~@I-gGhy{?qI^HTY zdrX!zQ)}jObu@DPQv)*e$>L1EK2IH zIGvut`cgqu^C^hul1g%>uAP`wGY^E!JOz>eb7CC-b!Pb+!elu2X4Cak?u4jA`%U*< zcg*tN)AuzT*dYbgfM74m3m)Tz5|ye;q4%|)jk$|R+xt;dHytfT=Yd0#J{9&EiW zBlC-Sj4#&H6A9}tDE=qckZ{{7ps>XY+Z;j

X*O8r-YK_{>Q*eUjbXniL7l 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 B!;k;~ literal 0 HcmV?d00001 diff --git a/community/art/images/Example-Icon-Illustrations.png b/community/art/images/Example-Icon-Illustrations.png new file mode 100644 index 0000000000000000000000000000000000000000..76ab215aa128cb626fc6fb8a5f18d041765e6fd9 GIT binary patch literal 171333 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

2?Bk&(-?54P;ze1K(whks+ z*6Ma-Pi;((0O>-WFaRC`8DPA7ki&6OuAC9@-W%UGRS}hB94gu z(j8Bl{W$rb>bgq7fkdH&I+^YzS6qbKPRxVdwo~Mjb!x|#io?|O`$478_C^8&Ux@C& zM%ckY1oz;5_RU@TAsHlEEta2&1ZiPchZBnjU5S+X?JxRzl57WXDbcDx4NK>73HpA% z8IEGEX<3065%2%3jp_SA^d$(1N|~@_N@L}VZM^e-rJ_X!{`dI<2<$!??#m9lrDE}+WxpV^AZVnV5RlpkXeCH9+alY zEG5YAc}s%-!z};Z#=tkboWn;x>p3p|Y#TiD$Vw zMdvskI)bCm1dG9Rwiwruxi63;I(cR7kiNbVCf*g^4}4jw29gUj5&45;>PVR-yxP@QV6aoJh^LWjovN%|x56J7 zLThz1`!a|)I}W?)>dQeSooI4O+IYCWAB(^|(V@Y=Mn4o}sFxPTeSF^}=!YaTfqAlC zlWX6d)TQZ<CU#KHIkM&7&U6S8C4WJhg*C5){*IHDuTAsD~3uZPyVSh`*#O)9OZpQ*7+^GI`m< zl~31egS||Y?3cLV;6Uml)y7=n4nD?@?YwaBn82y7Zx)n?K?JFx=FB)Ib2IyWuYY+p z;9)A7{IL3qXcr*#H;sDcJ4leyuFuP28jR8fZ+;NG!9DdsI@%h;DEg2qwpM(;2M~

Jo-{lE5TmWIn`a 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

O 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

U5j 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 U0vg^YAt62=q?O*4OPU1!f9`SzBLDyZ literal 0 HcmV?d00001 diff --git a/community/art/images/Helm-3-Color-Palettes-Dark.png b/community/art/images/Helm-3-Color-Palettes-Dark.png new file mode 100644 index 0000000000000000000000000000000000000000..26f90a2586803f3ac4a65f9062d2e3c33f3efc13 GIT binary patch literal 56062 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%0Aq-#@yt7El&$mk4?Mn9qI;u)mI{= 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 literal 0 HcmV?d00001 diff --git a/community/art/images/Helm-3-Color-Palettes-Light.png b/community/art/images/Helm-3-Color-Palettes-Light.png new file mode 100644 index 0000000000000000000000000000000000000000..0018492906cfaccd2902075ab19ad7c60a0382ef GIT binary patch literal 54824 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 bSJV*UHpPe69wy)wYbbJ3N|I$Si~|2JPu>|n literal 0 HcmV?d00001 diff --git a/community/art/images/Logo-Tweak-Light.png b/community/art/images/Logo-Tweak-Light.png new file mode 100644 index 0000000000000000000000000000000000000000..33a3e0da4c83c75ce824f4c556bf7f28b25210d1 GIT binary patch literal 19594 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 E50Q^%B>(^b literal 0 HcmV?d00001 diff --git a/community/art/images/Typography.png b/community/art/images/Typography.png new file mode 100644 index 0000000000000000000000000000000000000000..157934daedf49950a3311dc93200eed7946a55d9 GIT binary patch literal 196860 zcmeFZWl&sA*EWgO%FzX8P3>90}QkLc~Zsizxb)rebr(jkia#DK5{m$!^a39Ed}}{;s>#boO;N=N4a+ z;J)BKUmAk?Kkslp!2Z>?P@ZQzBk`o+s73#?<)bL?n2P^>e=sk0{=j>>dOW%Ryjv7b zz5Vw)=^%vvXde_2%AJN$n1&N!P~!iiy=Q6tn-ZKKxUiq}o#Esf{w75Y{iFqCEs+JwB3ccr{a^DCJVYfL#(1gSM2#bjjS#SL9kI>o z3T{qhw2}lc8ClAtu_*j37hpVO4JP93O}I=FPD`SD!$fshZEu&)niE6CAH#{>eTSki zkD&PMt{DJ1Eq?ZRC`N#T9nWDb+8fW2aoHP-|3;|%YO;vpa`T&EJe#3rPZP91k)<57Gx4iS?X)69zbv%hK32!VV)# zwQY*iPT76AduW&ZSwBD|fL~q_!d+7G<)zT%a-8|k{jQbydPv@|dJP@9J-(W-rHj&b zUf^qrmZf7nYtK5ffCqU}-ojRe8i8;vB??e8#s(3z>LX!c{8pLBY4yiny zs?LwDEzZz}vDFXY*XSp6-X5?Z?{$FIFO|%-&ez!bn%_85w)Zk$_Lk5&;&%jLSQqH1 z-J8l{s9e`DI!ypv^F)*kMm!H85r+>8NHF=mN$I?<%$P((8RQx`bOS84{bYZN(k)cg zIVP7-yit?%h3&^}vo1auO8Atqsf#K~Hq7*I2Sw$$b&z{ySiF@2m2wo7zW;X&Txj33MrBAcQX z4U3ixK4jExi zE6X*oJ$V;crNu};fq##FR@RK+CLHZ=9A<1jq0qjUC|7KCkIE5X2XDk*F09idH&TAZ zLh#y!>I@ z0`|UjkT90#^GB2l&P{qE{$9o{s*m~(Gpf(}b7C@yIv5QhmP~+|d9{nO8^U@~Z1-h= z-J*x%YC5ju%eE#4z%YmTbh zA%%G?Xy=!$qh0cmyXE+?j@JX2Sgz-n``)XS z{obL>jW$0*p&Aw6)JY%fZd(hqu)w-piz&TcmO;lCWgWDf%Nk+4uW*J?m+(q9`cUQr zB5sflFo-g0Ve~2&A!m4m0#g>k;wr>whw>>o12+c7C$T6@y2xnu>WUYI+7piOv2K2w z=J6!zcM1k?CK0!3L)Y_ac)FtJ9F>s`V`%8)vv#*-T=O?b`0*^Ct%R2UZI%7zcf>~7 zCR&>6@!iH=(G1l)fO9Y@uh&P~$88?p>3f&?U-xFf8F}h$B&f3+pj?cOBTb1wp3x|4 zocl+r59vOL@*E8u%wEg_m%?a>e;fJqGFNPgJYsC2qTK(=N?Bjl_8BY82+EWPSo6{^U~IG#m(kQLNr7o;+Kha;VV(4$EklvGw7t?ljAQKcch2sJfC4M^7NjsD1P3 z6)c|ABvd7U_0l`80w3}rPM-D)3PYcaK`_kdR_W1i5jd)N|0!KVgpSivo`jtlk0;s< zfWfva{v=JMr_)rN_T(M~oD#1~#XPM|oQN`yqko-h3yhBwSs`MN+4xc>7(-%clD2-& zJIOpGZBh*L3Ic*t{D4Ic&1@des4E?((#__Aif}!+Kc2ZjzRq}F4cI|)mo1D)yt#Kq zz$~+n(mG!9eb_hTuF5WKeudBBE?jrHPjijl`<_+vq< z8|ddbVS08s7GKB(&-$&Gwu2W3vQ?k!A9)UEA!J;c_-A(SyvszIG(AgA))am>-7A%3 zlVZyKjBU5I!A~t=r*|?L`1rM}*Q=B1sc%KVwCJ7ISSW;qo{rx;go#bc8ys~Ea=tbE zey?OJO4?P&V)%Q*=LdxPA1&zS{`r|UFkcLyE=2RA*GG>OHy-DJY)%ydEv^e6H*TJ2 zmNNS$@O+fAxEWX!bf;VWAH^cq>M!$;?7P=9b07@qF#6wT{JWE0rS$<%S{oDk6{Z1) za~0LBxy!0-nO|#sAWJqV@wQR4HW>u2CUp$U=NH7*1lukzHOm5Wu_rq@atF;m*DbL= zLxERjcSWyT^ieQ8sLQTRCsUhq#gBQD0Tuq*qvKwK4Z!)z{UD#u#}Pli8<1xUI3}3^JI~6gJYyYp?KhsvB20CTxTW)yTh!*>nsrHNz49h{HJa1VT<(^>#KoQ`M1go}lM#C*HtKnpE)6ACmKO-K-In7z<3LL^!VP*X?KcU6TY(zS~tg6*wg3q6a4r zw|Pxsj64~66f7-ETZ%_4RNfMC6svIm(kaf@E$MbCdHz0Iu|VEuoZ(YpEarNqPgIgiT+;vPcB%e! zlnSl{?##XJQ;yWOI?T1csw{8iIzS+-Fm2z79}fqMJPqjfBLry4~b z*W;OyE#%8m-JxiiW`aWW1x^^6O90`HB~!mURyFp=ym8BMV>=8v4J2uigBU$cHasF@PD!w=zh<^!{GlUm*O8lb-29WB_1U5D##cT-pxwE zg3>ZE`eSBKMqw}90W`QrH~J$RJ9!X;1WWp!1*ES*l6!a}OdYVXI}J~O*Mv=#7MkLo z!ZGT7R-tKfxrE$~c;++cXWMK(llx^eYm19%lQe;JRotaKBxBqYi03wRN|8~dZ!dDC zj2rB&Ats&`>j0>s>A za>AX;_&n2*e9!bhm|D?JHl4!pKiC+YzUGF^-QGkyg-yuxw8+zWULamsDI|xDVpRa# z6k*SucwlozO5{LGw$3{9Qi+ZV6aF|CAu#V*MCeQZAvyqMRIh(mQbS{qbOmA5iE0a& zZwly{9~DjQ`EWT>m4xBaO#|O$kq_Uz`B!fUKkfcwfwu1no)mG}_s<(!JTk+7;$3X-7Nkw86!yp?6^%u|>7|6a42$TWO?;Pi8Vt97kPEh#q4IdH9)#ha-BXwRJf zG(D3XukT6P;F8%juKdQlf3gy2f8FVf8UKG-#-I;bGr)2s?mQLIkP4-MO?qxfZ%w<{ zy&EGRDfEuMR>hw;)JOQJ1DEW=-eK`;^}OB?k97KL6Vzj0cnzS}r_Z9?Tx1obUk&?4 z{uV8$Nb8A#Yc0Gpt~Pz$*<=aWt{y6{n|H*IXf9jq%nC-pNrHJ_J5-z#YSB;gP>)Rk zydz5x(X7@8HDy<3#(w}+8d+QojYM*&Ea@Wk-rt|Sh{rV=!!;NLnXU%@@|A^Uu&J`k zxR%d;E^#~4<{r{ZdGvBwtwpR;#gB6>r|9B#*Z66Xmz&bO&&WILgvwKet@K<{`af$G zx9KPqB*6I*7L-JwH3r=6-`&*$GK3hkH=4U8eNC@fL!?6lvM~Qa<)i<0a5LaNaKo1cdH*p=)_$sM@{SKJ*pPb9r?5;2Onl~y2HDVWotq+@K z>XIs3EM>2k>L%Jz@~qF@6j=kMzA#*fx_rYLFTiBDm}>x1$DbfGsho#k39mco)v2=J zu?R3CAU91DjrhKJw0v;lyzM%3-4)X*)-TTr$)S@VjTl6xH%R!NB=8`YytW#?j31S} z*k-28mXk{Ctop7dtWJY$s+Xco%eclGpageG+lO82h1;4CIR6W)IRrIJ+(advH}ev98{z_?eHT$xLw(`;PhL(wmSCIE1M`h_uFJw`;O zwCn&e4F0`W$$(gzmKH1CBJ~K*mj8NPQ?Zwo*jz80nESTUD@>baRhjm}K#5|y@7_8;19P_Lo)>A;rR zkvQCSA6wpe?yNiR?eKAFEs9JMR8UnHV2_{rV58M|OC}WxLPr^mYwCJaQ0ff&i2V;@ z+QQ{O&Ak0eCld>gt~hSNKi+#S!gLKLt!LN8?rS7SBe>+&I?B3*fc&`%TeiFHk6sSf zA2sVmHI1^F`h7o;@@1qj@BR_GUgz(wcNUW>SZ!lqR!~RE;v&4xtGV=mU^}RE?zK8w zEPNmFKqbgU^LNnyV3rJlkU%t1SbXe|gE{lp&a^AZ%!r(yX@ZMs<2yFxWfV9wQm{Bn z8g@mRYBZqk_FfCYn%vWk_4m;oZP;$D#j5weinME1XA*>LdXo5zy|q519BPz+4NvTi-P)?#J41nqynZw)UIfV90JnQ0H0{}UXy$YbS+;}sEQ zfrkKQQU0^v-J~PA=@ElYq-`))s_>XPK3*V1EkU+@Yd15kN2UjM2S)#%wvIM?7l#y} z?I@B7!=7RzNavA51P#(;@mQ_NmBPkZap1IDVRO=>QubHlQlE?Qf4$5vW{C6kUGo%} z%!9>S@53nXL$Exlf1hA&!J!!ZCiJI4(dei>*OoL4xE0u45DRGFy)Ew)PA#*n)|hDC z)7ngS1?~*eA-c9M1vDwmsG*Jbk>N<2!ZEzbF+{@B?nCMB9QH`L&B(ptmbFY-ijvcxra6MyLseAs<+AA}&x@&5+C zw?g1?xjMgn-IYp}?)>8tp2D1KcBC?5$sV)bHDA8Zv1P?u{L6R=0GnxhjuUUo zKJ6Q+h7;wqoc*3jW%ieDPLjK-))7~zF%C%4h118qKT`S9qa&o8>(>?b*-n|M&^lw@ z+strF$Sh5OOcDF?-;IpmFa8lVESo6$5jSYX+ltGm()ZkR?`2qI)x%V>Qnd`z!n}XY zfQshQt-4UxPk64gTsH+ScaP?N2=~m9p3ilJI}Fw~++qsnsYmH-f8wdc5biUBeD|{E zQdOKur_)wD=zDKy=#<`e>f(yOmzX)H;~(sx74vhFPe&q5W04Z_im^cozVKeY+wbkC(ByjvADNy>l;4qO-zI(&UMEhve zBpSV$)G+Ts90tEUx(%~rupg7yQ#jJWJ98$>d4JMZbR$%PYrysT(*Rx-DAz)XJXDyr z-B1;KN;BH{kVO7C=c>^l>TJbTxhSrasDEhEV9tuz4>2D>x3;)SPU*k*`!~o@Q)-sK zSZ8Ftm9B0+T}#zua-C2B>WpErkP4e1I02~?K#hJGxK%%yA`l93pe3pI32!KDj-_@P zg0%=`8dU!@gbqgFo+%2e0!9I?64Zj@N5A)tPVni^Ja*DfsYsXkgXO%$VM&Tp;nE*2 z2sq5ZJRYV9RJrKT+S4m8y@xmE@;Ta@TrV$;!&Vyc(vO8sU!Dcf=GAA5`)T)*oJe@?pamc+Z_dO0TUbMSok@Xjcqhsnnl7K zkW%wh7e&oW1rr`BszEPm+~hPWme4)nlPUb8xD*DOP8n|q5OEOsXejs|lUP|piL?#( zhf1yXdzLIv>d8;1lf`C*Noi%y$lhBkQ8?nQ zR{0UX=Yb@aFD6hkdyYBhCOb=I}%hqVQVem6e ziN$pycGXkFprCnK!qATauXqF;(IC_`jIJiS^_nV^BrZbtyP?DFR`=a=HM(JYqTs;O zDY#cYSN=kDLK@>3=4v8S47B~`v_>sZqonWZOuo5w_-H!8u&(*I9)qg96gac+k;V{xaGJ`wY)TW+~I?G%`3w3%KIdx zj;Xl3*Crk)ITa=Q`keF(ap76fg3j{an9Rw)L1Q3rW@QF`*qi$1HChv^%xY_k z?oHKVEe`H$Qigt9p3u%oHZ8lhQSR1eG)9+)-3DXIr#;s&hy7`)*2ACgr%CVcO!b`5 z6G(bDPSdNj?i)Ek{kFH4UM+88k0)z)b-u9^6cKR%@|@My;a44eUh2&5>y zfkJ$iJHg3f`7Vgi0ImbxWO3tSkP-ksS^)8LpHLHFQ^)ftNisO;Sgr)Jbw%8SX$8aw z@Fb^AvJmX8w+cOjtnl_M)wv=<0F#?9bO^4Ph0KM|gQIoheup#N`1`&8tGJe2}_xUQb!OOrzOP=a2dpru|2&Jig&vEK4sdR_uoCAjUq z=h1=)$6GglQ;3C$jXH|a(Qq~opM7A1PhHp5Q)&ID6sFwyl!4n9 z@E}~1cV~PaCf7+l8%r#L>Gjw@qo^v)fe1&-4Q&Q<@ZK_RLLAabB~aZsxlL@1As zwnD8cewUs6L$KFBP@RcYIsVmhEtO^wE^-GG_ab4#YE0_8QCYq7yyKkb1&;U0xVvi8 z4#`#K(=T_Q4E}LrzbndL1u;!IkZ1y)v7oFpU=REbmGKBs{ytFopH3=HaFEjwaoFlKRIq3 zhLw=3piI6GkrXP1D?$7`>(Wa1nePMtP8x#dC!=9MWnLQ;&p5OoszcT-04Bl zRwMR>%W8}<(AI}XuB8vXPFxSN&n5ZbyWXzN_8o+0nE4VS@3qIcHs~}q+uRRo9j#6{ z*lt|f>IkGAnBz=;vr=%}jBri-wxb)NXtvksy+GHBFUTA2n3W4JqV9T$X~M&VrMUx z`2nw>_DNqy->(*B8}4@$$Q~9c%6Io3Kw;s7%vPw)5?m1dq%}$Bm4Ad+r0%ot64ok4uKUY&e@ zv8=@cB8Gsh^oFVqs1w$Fe@U^Y`Py#`T-`C+>w_rxx;iHHE{e9r*N86);(VLjqyDIN zn6p@XOgD%ntT{{ zuX}Ustd=KxbwrY7A0<|%b&YwQB4Z%KP^Vv##*ib2S$=a*9SiyG~rcp-GqtSZKOPl9+SEYGZeHH!E=}={2ca?^K6BE=az&cww`2CsI zY4pd@_sFu|GmJpv0;{VP0`3D59+2tPk-cY4e4X&&&QpQ^#V?sho6`WEKZA2$f%kDy zn+UoF$BM;CPibb=RD_S`N^IABcSI=9?Kae|M3B zCyN#f`2Or|{to^ZHz$=4ZlCmBs{Qo!RW<^DjK_zU$leoz6_3RCa)L+p1Z)J6l-zJ^ zC_V1dT>a8b27L$UcpR*-GvUGhpS;Egnt#HyyB{j+f_plrQjzfVwe!4Cyj`r4`(GHn z#}k?66n%>m+>Rb|i^4GQl<6kWI&r_PHMYCi9Z&Cs8w5b}SJepLR0$aYc!^lF`dA{$ zGi|Gi9lg1>787k^3}Xav8jMD?NfZ~J>i--ACNnqnvrs!~_Totx8MJOzKGKf*2-nZ^ z+_w&XuFz`Zz`njTKBA20b6s6<h=4F*xkF#XRW2sYd%q_V+jrpf5|`5 z@Mej{RgknoDf?%h+~Hu=*1EWI>vvUGUvUDIsTZUIzLs(pn>lO|ROzEHze8<>6cB&Z zj9gB*Pi%jh>vC>Dcpp#W%I|&DFp|iq6^<}&Vu|x31sbntkC)W@QH84~C=nRc?T>iX z@Z0s6I10ImTGZ)e2ovG-Mf@7zJH`2IO=uY`w|Ph{R2yeMRH0L33Pf+{s8J&jFmKUd z-QNy)e~QV@l7iFjuif(X5;aZsa@bF|eHnk|n9v<>wE`ykn?ieC?AdQ;*+DN)1U7=J zqDL|_O?~!4&i!G{xlSn^Pej^XbylHyecBBp9@?;qQ+FEk#YTs@U;TQH9K!aR%S&-fI?yga<*mGc4FXN;TDh&54PUe<>@<2UsKKB*p6S@>(*XIye z47rR{f-xKtR-a+yB_2!VGWesl{gDOxey_4*1H|4kR!4GPBpQZIv|eSz+WX~QgX>V+ zQV2E?uW-Ln4KboVGi~&v*L_Sa&9UYU9qegcXwsBfYW!$#1FKZ<@k|^rl?%T7fn znwM4qmFIs;s0MN>b2Dhs^7y7F%}Yd?8EhxG+%7{};KR&D6(?rj@S{Tc`yb;%myYlT-FgdsTVC@@3U*#*wEYp^NpDWUA!B@wi^ohg$F}i z$!LHGRWF4IRmKA3qt#t>B9EhFg${GCA?b<(QDSkG`w67i$Ds`+GNIDh3gEBMeQU*301Wf z7%9t5r}2q0oP*^fv=U^;ayOjsw35wT^uOUih5z~hi2q2uZ8b)b?@HZOpL3}$g2=(LoW zN9ZLdY^+m;wNuvLllW0XCy`3WllXfQODI*7pW7Aw?iYqepdc#wpCA8P26To``j*7& zw14+g{9BU7rjXU+! z>K7`b@)yIYjcK84lMh+@yMLPsN~-WcG5z0cV#CcJuqf@f|GWPp0ZJ-`i7MXT98ZU? zjbnbB`|th-X(*|2Yz#mDX7?m?ZU5bd|AF8BcN_lKvH7nw{4c5guTuJ7O7#D0rNk8aiv2*XMu)1 zMf!Aqf5;9JEA&Jz?0IHXMjeS0cymB;b>1tZ7x9&ER$UvpcH?l~${=sWC@?2gt!%no zk%F1h{Pe-v@&5o?Ob{+!8c#=!2LBLYQ~ay3!A}eG=dvBq3VUnk9-%U?4uhEfCmV=H zp=5*b0=BWo<_Gl^CZmNClRlU5%x#`qGP8+K0bK?WkiBubeFzH=4f69tlKWig#zv#X z1S>;9M@Q@uq2{*pZU!S+X_?xGjqJGTXnbaJ{{x;6CLj{P_CX?jIN3Zr`C^>r>R@ zvEtg2Xv5`@I7|@$N_QN#+LF1ga!g!*Ts`X5ZHX8=TFfGy-|cI^WVHo&L~7PPf3aC0 zr3PHJrZj>e(zAaIKqJ9%2eG1^Hy+M$!gr;$Z%?-(t7Mk?2yh~&>vV&T8Ko;m-Wp1L z-dApHT*>Lv24~A#Zr_TeZ4pG$A(Xr4y>GKKJsC}#Je4C`ytwV3r>|J~FJnlw=J%g7 zeA+cD^f~sP(^%g$&jTw11e)szTUPiJ7-6&dQ9Oy3R zEQv{nL;Bt!ro_3Zve9-qAlNiWu}vW>Ahkj*oMyCgRGqGDA2W1#l^YdrjM+2h%tSAb zn5(ui=AH^C6(c5VvvhMga3Y9AZybL2X@Z~2|-*Qbf@ znAAu^b71r9+vG2F{c!_goMzN#e1&jP3{5@uzP%_Bb5)zhdb9}T2Qp^xUHc!-R{^SS zk!0k7rnRJk zUhRwbd-8gH_n>3oaUu9eOp_E;C0O7Z3YCJUfL|DWrLk_m59u)nfX(!hzbW z;+|iyyE{l@8(psck~OzFa@yvR;JGhCsNNbKHDBs(Kc2~zWVeRTPiMJ20|Ck1o;g;< zk^u3q@L007GU=nzm4ppg4=y;wno7CMhv}3KdME6wvE$Fy9NUf?ZH&}5$4Ud&ntLSE zE@P*f!{S5NW!PZpyV^HBc1~7$X+l&3h@}6=(G6Exiy_ub5qT4=AVtuxk9vJNX8!IC zhf99Inx^j(Nmyh+fAw(Li@?3$^`HxHH+^jA+tm6P9`mp#1wKe?;M;h|#bfu}9ss8A zHmI6b&UjrAXmnq5AmX@ju22V!)PFvx7+kNz(YlKlOY=-^Jw2a29K?}~?0f#4F0Zdy zACl{dJ#+{@KlFvOFXFZ;lY$B@+ z=88FYt+BSX^7{2yR&e0$lAJ#7=cTp0#5oHenejQEZ@3KUJM9?hO2Ghub|dhVQNgk6 zXb$H<<1Q6wlf4OHxo$y&XKacpH#uhO99@op0q(T=Eoj__978^kbycruN}wf z2>Uj{gr(C*%2S`)+2x*Hf0xJi1~-E7rBhNU@}S9nxfQS<%7%w)o&+QO%nV)WR1(kD zlln}}KoiD{)MU3936ax$k!tl<9zdZv57FB;BPE&Lta(}Yjq0PtJ!OAH2A95GZz8G4 z)0f|4@Zg$)8YOSPTCS)7?w#DGcOujMSVT+vm`54v_JhE&cH* zHY-ibLNJU4+Ihh{jDZ?0V(#+lDKssKj0ua>2!NRKpGwB2VL4U>GvVS1R>Lmi^f`jW zvE~qfgV&~bF4yzZF{Ssx&hqU&((2={9VO(=5C`~G49Rn2{76WtSH;~NRsZqL3+=r#X>vuEDQ{1jYRO1&{XY5UXJf5NP)=zk|XeY|P>R-s| zZ7Bkt9yRJ3njY(xO=345rk^J(ofNV^>p2kLq~rA#1_?fm{bM~>oGHk*V^JeWU~|+&9W1Pfgz5n^&yWIyvYNAZ95@aAw|j%C}ghr@|KOeRoU|u|OoCB+?{$ zWt1w%VbO76n#J?Rd5R9l%AJj5w<;AApedAYggOzZoWs*@Jn*#YzE+&jVfZgl{|Vms zN6dVp`==>)`?ExUS?hMlH2IuzH?K+W%N64tZv7zYGwZ-9VAmp7$k&oc(CsI;!50s~ zddOX%c3}Q(M}f68c6ehLd7JOq5krX_!L00Jj;9DgBBlTd&ntEBv&#oUtfZ7$17aJ) zA9h{cUXZ`Nv;QJi1{Z`-4JO`klEx8A!1GfJ)ObG%UTK}o4s!{*aGuDsib zzbS^Kuiv+;V-6YrZDSVE*}}(=@vbW@%V)$xZxO$}b_Z7~$K%5G zH(F-BILyO(XT8>zX_OUD-~W*=f@JupL#19SgJggvq}9FUdki3!SwkSCh$`C?DjA^u z$T}2$uk~<;4dQX^VNBP6YKr`W_@=DD5N{DL+A|R+lg~r+j#Z5=eMpU556+kYWA(zG z$}`2^NHm25&Sw050neACMy6!$120j^(h6Ml;c$r4qh$4f(xv7R;Z0vQu3-W6RL-TK zeH1}Da$&!9A9}mDwyl6=7sWhGjps{0iT$`XlUZFz_EFIH0eJsQ)t}4UdhFp6CX$kC8tz z(!vkbi}WiGJY~aJxXLz8!ZydP9nmFHW_Vd^e*F28U*V1{G0C+k?qCE+I*ksPdf#SAV$4@jy_Q>nDff(n!xky;w?MctUe~x>6Odxl5bn3qUa+eMc zG0F|K99w!#aA_>HMiL3AbwV=NqaNpwFWUl3dH?aMAjfKalcN};99zmD;!6kx8g`AO zqPy;5CkalR>r8Ts_n1&Hf~4=stg9HzeJmH$+)UY?NbMeio^*OlsMQ& zUyUa|MHw-n(p{m9R1jERAS=xa_Da=#`=ohRw-OS==hZ!fyI9h(MuF6bbP1%^Qgs_`9zPEO?N0hW%8SA^gLS>sk z6y(X*Nh)N=a(=VoUv_g1x*6Dg&*!FzK6Gym@1K~qH} zPDc5kk~5juY_J_#b(SLz3r2POhQ-ptr#V;_Wzq$ zk?_yzJ<9#%$0M82S$=hSg@b#$h>{ff5h-O$Xu@LWB%%lmUVu|&< zURG$@Aw2Z|{T4t%n|nj(3mXyG z*;sv0(1ld+pguv#J0k0)lGw!PIvc&CqQ-nGQ6&yM*wrH4aBRk*GcuNLaIs7J9B-o4 z7CJ<9uF<786BS;FCTdZ?3S2EicxYXR$#j!2p|z2&gD=%UUaZ5 zr$c|ZLdmjmSgw~RPL1dU{xZ1FO&zJlL^gRu15@rYScdO41_klAMemvXS zO_p3Ij8;EyReKn+>ar%1abp{SX69j61f&xEXrMVP3XLt=<&IB`OP+CzJMziKa0DZK zxJ*CcCK2)vjBByw9Tn*CWyt4AL<9hKQ?h-1;se@_ApPaAaeI1v&FIZN?yK1 z6I4A?snEGSusY^mlP6S1uzMoWGK)Od%e|`vAcJA%@km1=b@6X0|6x|I)aGD{y!_Iv zH(qJj-7I`|o2~n~S2s(stKejE=M)J`Y4WfEbJp>9yZA&~W=;yDo_rQZUvoc;`8cVM z!{c?HR{3-~Sfh^#{--0#gdE;gJ{|zWaE8pq@nH5Ves`~|aUI5dvkFyb_;~}P zLGo;ZPp(}Dvy->GjzUI=yRO>6_l@UJl}nJTG0WXBf-X3fBj~Q1rCuTYg>_g`-dCdG z`RYy&E3_ooyONj-B`OXijD~CavrnJVl`WaL-IXVTl#gRA(=%iKxBXz##*KB`f%rF0 zC1Eb3sZM__k)+GqAU^|<01BDbcCV+BHe3X9`%k0F_5Lm2Ehc*)YLaUg)qa<-Br8LZ z-NQpH*EZ4bHcwX}B(!_4s?-()vUG5)B2Qz@O!8;zSGosU_Fgl}(Fp<4oB>{~$-M7$ z-{{wrwa)>^@9a%`%nz42oJ4KyU!(5h0i3@prVW9fi3#x!*XPX}t-xxv2!NV*Lzi#1 zIs2v&T!ABQpoP)G+|hDXvF|v0-0=)9T}kLs0+(c>afm^aB@tKLu|SOzta=jdqPQ1P z64PvFCauE3koFCm$$*_09JuB~u}YFd(8llxGRW%X}4(2wf%9c&ZhHd(!z}imRn_THGw1jh)MQjFcm{uox)B({=f^& zV65um@&p`-dQVZN`8R95-l;yv4VynfD7<8xZ7Md>%oxyb_?I=N?GibLeDY{4a$*|U zzq1AC2Qv7BKtAdaDz1(gL*MXFTsGn7w?_fLY20Fx8ShRN`p&tXXjCBn=J7RHIG^9{ z(+bVJbNYTr&|~aUkSD?S6`z635o?N>l(2Kf1x->fMMA0uxy3Oo{%+F*YZlv)CaRLa z-s3%ME(!wIqWTY>yON80B?M>5&u7F{3LOz;OB(a>;0Jup)aSLfK#qH3eQUw$Kn{!`pz&~QNCw6%EX1d$9Xz| z8*3#cZg0w`l=%JJK&AVu#R|1ezp*s?y3^wNj!nYIp^z>9!rM^_I{ymXJ@7;tXS-&M zPWes{jQxN@pFirn$g@esJ6>PFZR_FO?bAC-MV<9Aj=8SlZ0A14UAPu7rZ9SRJY6_q zN%s{G@aI1385ezNJ62v6J4Z3S83H{u2ezjvULyK+1R+AIq zd|)5VD)olq4u^c#!Y9A&EDkx2&1aXy(uL5`PpWq@)Uk3506?Tapl5Um+oYKjri<7-+2f6a&c z!-%KZHG^O(VFY7lW_Li4b};)FuXlP-Kh^dcurqg&6y3T~LrCO%%U6u7Eci*R6!=)S z`w8%8hqkJU2rh6ZVfTQfuvc4%=hrsa);Ucq9VhG9gfth>PsHIN7ezLbic-nze05P; zu)B_U3UEI~tw~F|xE~D@)^*YpLqZeviO21#!|B$Gm zQzZP5u7`lDAs9c^AKxh-^O`ZZ-lp}9=S`7<5ZwHmTeA2BEbMJf7yd{ue>?d_VL-FC zxhRgG$eU$hv`30~`59U-v2N0$!U|}3HDCwrU>P=iMD%O!>lR7&rs|7+cl~6X+h{#M zBiX#am6wtj7e|&JnlZRfuKy|P+8dfPvf7Ltna}24y$gmP{Y-USn0t|L6+M<|@u1VH zQ@hdXEYj}pK~ znq>$fze*;=sj~0u!Ytx&y2QeDb`6pesn!egj9L8Nmp%RaU7#EPdbwm^_GDa4^FvKZ zEtO=EF(wwS3Dvft&Q1TP8aF)w{g}@lz2#J0eI5sbv|q{R1_sISo^}S;XPO!r;mP%P z2FS>)kd=@4J<93ct4l4dwyd2rQqxZ#3y}U~uO*lyYbaK1D&1!ey@)y%kknx`el5Et z0;$W?fds~7qy=-Y)9)Q~XCkKGGXdWy8k3PJ4Ch!YoQNiWfc!$1kv~?TM-6+($gL-Gi1&dc2=fq+Xsy&0!y63eW zWCkryU^w?1)t}UX`-J#j$Tq|yZxvhVhu!wblx)vDyuW7{*clhdwd)T1Slm~lj1%?; zPe7orUhD@+;DA8umjeg$&=lQs3d38Ba4ev$&BgpG#*p(!546y)O#i`iY}-TEnGJt# z$j88QQ%D?GPJok)#ZypvH2gJ)WV_Y==m1d%qYYxXiXzW{aS3xRnC>Nd#&Zr;a;j!@Cd^Uql+}aIF`n1 z=bT!ESgFj<bO;u zR@O)VRW*(!b7uC`Lu~ck8C}sJ!hY@RVURujCfJjje|lTq^nrQ4I98X_`r#s0Rhz*? zq+%a&NjKz*^Y~FfUjuU7qUXl1E!5Zii$!#Y-3W^pa4-w~EJYPaBAkI!g??dvp_A;I z|I+TB*onosbC>_bEr&L&TQmCOR)6;Jh}O&deml2Z^Heq%{?nv)IGn9RlLOFXQYMmxNn6z6bZw!KAr{QX!ng55qw+gGH+ZHwxBzQ<5xVw9Bhu}_dcXxN!;O_43 z?hssqySuwD=*qYEdHS5Q|C_$)zUeC-C|1>)vu0Jz8t*&C91|n7%7brq!?AydTbBBM z45MnJUn%^x_jSqTq(EA2$FT!205yIUZ;6WDbJ1| zcyk%;?)~)ULSVZlkH@Y)&1r{Yl?@PIR(JI_BGg@mY=Ed@9$#Ct;xE`*NN|ncy?fRN zwEBPJE;lLlWhM>P`IU%XTf(S!b)U!{#%w$hn&wsPKAa!?p#@^zoO1gPty27ne+uJo zqI_yw5Stz0qH5;`1*2OsM$MUXF-#VBmBwKW=h}^Ix=#ldHN4v__m&v5QQPKe2W@e- zj9S&Bpn4~8Tr+pSN}i(?WvS+tKQgM>eDB z_BjrzLkTo4tqF&|&W@lUV`x1$X`A01WPc>+J8JQN9$03v0f@1RTR&|vWDWR${j^SG z0Rd`f(==_1C3d2_E#*SU;L8x^W-9Jz!6wI!E2Q(qJc&fPYx-(05zacI$}*VM`_-5d z9D@17y%I*ueL`>PWdAWLuIr^%aGRqBXSyFjN_;E}`po-CrWc%wT2~?it;hl`Ak12uM3jEI)(c0Ba zWXZwV!KCZ%?@An?gI4ZXjj=3#Iu9;4a~m&u8L>l0VDQ9D%$%d|6SOec*Nld-CDZ?C zbpmd5T*EyYDECJ&FvmhBCxvU#p>{fiA?xER{%UAqO(4+&+%OAjbDtQIE2l9XEZ}L>WkCM>h74=xK=6$?^Z=$iU~@|0;)ps5Ae&B%u!! z;9qcc>&gFz=q3PoYiMec|55P}_pj~vAx!K)+&efxrPDHDp!shq(?33+3qIi9fm4(I zt3K6#vnT0*_POTt*Z+Ukh|#G0zy6DQR+WlUq z^JO}T#L5KkH}<4bdW(%3k*tLl`}e}qo9*FzD=?9$H-h)KQ5N&gkpU*y3qs)ijPHfR z;qV~Q|*%%)zcYXjh2 z>!|K}D9=9Mb(E9X`pqf!pw>yg(E|^|cEzEG!Tix=cp;Wn9~r}Q!G2z_2ShpdNfdZi z_`l3YD3*Ce6A0oZ{Y9QVgc-!nosHAYOJ}tn{Y~@vZX4vtd&{7ds*QlqD)Egs#FY_# zgOf&Qa||t%W7ve}BMuH&C)>?GgX{6HfgB@%PSPrR<{jI#{;aTE-=_ZdxI_0I$SL}R zv$=I%XC==Y$TiarTM^;bcVD&KEvurLJGfiWE?PCxZ8hM-FS!WL=d0c+>X@$V>yU3g zyn9xSW|F}Im8airLy5^{7$_HBg+HG)?G_Mc6ETXM&)4c~B{h!a;xvuN`wW@var4^8 zSQ)$CG$~tF)MaO^aczsSJDtiX7ifh)6jISk#vj9Iq#jSw!^qe?|GX)1uG;UM)tM`m zatkOHx+xRf~+hwOun=YID!royZt>TTJo{hu+*n6e`jW ze!hMUm$Q2wQ%&J?ZsFp+@l>rds-sqWj0P%t5tX+e$#f90-kK05P$oiiqEdk61>p&x*Q(*9Vg*;U~)l zF??I@F4Izak*r7t6Y2ccMkDd-A>#Fa9TL$LMj;ZxfyV?K33Z9@AE-khBq0db5JRtC znG{LnSd;<%XW6+`rq*B>f31xDcFnjqPrSV@4WtI2~^bZNlo2vya?b3t_0{@la`Vv;Cz1y=jfq~Wc+`s0H>r+D1 zZlv6r-(Yxz{lUcWm%Eti>zgCHVUi^DKVQ9bHrE*STKDTLN-(!tYeS?rfXP_PK_ync zO9`&s0{5gu*7`V!zWf&ghD>kiyI;z$fD?mXB%KkHpv^_%B8~BJasx18V0j8J zFxLcW+o+3d$Vvsw4jveVYb^7 zb@}#ERv>k zG6PIP4F~McrRaFI8l{1I5*g^Z5t>px=n@!_;u}0P^(|>}ra3Vz%hn6D2!{LR5B*lS zd;{SF&Yp+pb8$goG>Mmg}O@q!Zg~;UNPK%r<@LuWHMc zD&cS5z{7wVxSOl`Jl4Qr9X_B|#5!4?u>E?u%wwL;nL($pHAG|<*~NX@owc^1N)<8 z&_`}-`2Ao2?NoZ1s?V^WS+Bp=)thJu0tE+=5+U|o!Zy4Yl`sUiKcAh5t*|)WilV!T ztp(tDEf&N%p18gBSdZI3WUvl#-jIqOO(&@%x-MInRZ{GK=vElSgpcbD$Cyz?>~Fug z=g{fIuiUH5dI*lc14NeNM{ako8T*6Me~BzJd7g(~osrw?8+c{XV`H4Th~}y~#nQAR zF+t^L9^CQnmzxYnYtFHqP_UZos>_XCB8^rnXNBT0(mNtcpH{TJx$`IU0Lb7dL$^`Xf8`kd|NV z&&IZB4DG^Q%sJ^t99AOF&Vx-RdB<{kxa-BZ+se0wk8TR2L0gT5+Vk~`4{qG6nMs7&4SP>!hkm7dj{Q{^pdTVk+YnBIOokaa7_? zaaV|)NPl#p<7LJMg*f}{izJ$Cw{J6TM+Z%^4ny1lL#9AAOzwHXqmsgtQ!4fSNO~9W z?VveP9I^=whGQ8{lbL(Z*MDI8>k3>zn!B!&`R)R95oPR32sc+9ROJzaWnEgMmQ>~M zHdFesH0q?Lv)RAOpWNy)lcTi6+p0w=tQ9GfVtWH`J|XI>ba}S5x^?Aa_6`n7bhM)Q z51z417s-^(Bv7l0;#vJ$eNdqAlX7~%8aP4Q0O>zNPw(`(o;D|){toH~y^eka>Duji z8+q!&DEt7qCERj>x9NxUc~Awc2=i2U=Yg6GPv|&8m(mB)p@<@6Rl>BqQrMSooUW)~ z57)WLoI-cqc)} zlP6oY!e}k49h?k~l+LB)=hR+J7N5Rcf9`dLHF;m_U=n`-B+mj%x=2>@xm>niDQo8{~l~y zymI%a3%o4KV%EH%F|c88Rob5P1QUY9ldb#q^pW%ViWs1jkp_pRcUQMR3D3Diiv0X8*@tf>6 zyz$U)p)9r7XTf95^QR@#z1c(@qqmSqrrh@eLl9BQOOurQwbfuKTKX62xHS!j;`xqN z#?3yXSR84DhUQLb@qvl6HDO#2ea?fxEG+#;7-E!FtUVQ`Qu(c-DN)-mf-f86RP)PLL%?ku&Yxr&dzLc*2KelZUV=6 z_yOuM2*B5$_e(VH2D+IYgCQRx5az%!Wr<)0Do?cY#z@D7KgEL~-52rb^%`ipDo*lc zc_9Y&`^OyLA%sPt%5~~(@Z}XY1rp!5;mjTe8#TC&(h=B^a(`DJ+;DsONpMxFtU9>T z;2RzAe)hxMTzZduGNKiG&K!eKiDEi6L4Lyj%51yY%AMOixUoYAZ1mGI|6j+$1bLp9 zxri?*%&r{J*&ZT1`A6BkUIP>*yV(wcalN=*PKz>Lz>b)h=Uly3-^}UXGGC02*$kgC z!|j)4JI+%5F?BzSF}e(Wqgh!c?Px^iJw6SFXNEN!RUBuYzABBw-(8JhTx--Xdif|o z#Qi>NBElCD3lXopsPj~&Y(4ELFK$CWVM;XruW_eH#PFOFVf=lad&G`#%Da2_!@7{T zY18=r9*@t5_BOjcOJqJQR02ggsM{Je%hxu-R4Vq z*=KXa(+Y`b$as`9<~7h@i<_b$GiIN^-*e^+QdUj=o>GCZE^7%?`9E##2%2Z~pqoF5 znY!tPemhm3Bfn2QFqo3EBq?J&>lMwA7l$aUteVimR9aFw_a}`gJ7Ted?rYD?@m~p( z&xRlpumT@rWng4<5N(U5cA3D)eL+w5ap0VGD){lBytGqk{MA_-p>yJO@=j(k;37c4MlR-t}p6DhjwIn|N4Np>N2Y)?tD}O)`OU3f=X0`%X) z*|XP-8pjNW-ZnG_>}gSh{^n<_>4Gn;?|(R;J1l1iR#^$fbG#P}deT_6P+v*fI71(` z>WUyOx8%!puMuKoXZ3V~jdIv+FAdM3CoVv=@)Xi>j)*7&$aM#k< zjQq_#Bo#L59-5-%kO$#m*lez6P3MR(E594x+XjqAokaWm3^!NWSr^UYai}e2G5qW} z$A$Ttlf;QjKr!m%4md7vB?qg`a%?~CIc-NrCmjyUd+hiBi*maPY(RfYS~tVZOp8vh z6v4f_;st>5Uc;T;k@HU9btS!bexU{P#&+zc@iOPOG4PFyV6ghe7NhgfslP zvIG{9eow3mDt{PQrpCB!jD)GU{=@YZ>nhn_C$4)au+&`d&p9?Zo~%}GZQZKFHVyN8 zkG3EU$8eI{^yDlEd2k@;W83`8Cee3z!=u_xaah6&JU{nM1$P>kl{CniWzMpBNj#u*%v6t5`+p9 zgG5=|Pq&B|N(As4GI6*BI^TQDRI4xH_=^y+2b*EUY`JICDepX9B~?ijqL&-`R^Za9 z?(l3vos9I!HN4iL(pa({zNnYziLr(_q*5x1A8lBfF+7=9QXFt(;lX$-etq55ACfHB4rh5{-!`aZ#V+JqYW0@XZh6Se+!y?tG8-b$-FBw<&6kVXjR%Hp zvyY45W8)uLtsokGe0P@%!meNH zStbN>xCBUfImk}Qx2uij=a@$VaO%Q*q+aV}HfRB77Nrj>hZ#rsW0`W7c&4Y7?&1)p zTQM0omwHv7;!1E5r||hHmuxT9&Uh)HB^|<}^JmT}3|5`!?0q|V3uM`;s9;Y}mh$Y@ z%aO_}S`me!^SIPNo!l%qbvT-M5X0bJzba26Xj7ZJ>3A8PJ^aN!rr0rWqi>lBmAJYb z+R_=*h)}2R62cS=c~SBGV!-f4K>f4#TMi$&%G@mUsJ)r5J@tjJtEQEpyar-&4fpjT z_R*gce$ZIM{9PGyT7&5lbHhjw_O%@zI)-y`OY;5!*0=qI0}n#ioBb)HTVak@;cbih zD-ygaX5+7Ww<7W21gb5Jvom_4xe(`LUfd2mE13OI_5}<{%h-Bb`V(2pjk;Q4pLHAv zqcDM8XW&i-Lu^a?5NX)*!Ly!0+oZTFg3WvO>J29U)G0r-s-VR6I81oaXo(vnz91C3 zhP1q`FdctkuHvaWwTNF z5ye8c(?{{8RrUvS<((111SJpp{Qb&gRMWRn!1=`uWDBFTfH4>V8G zW*p^d|I}1p0}KQ0)VyOR8tEC!T-~11`5#hhr@dA&=yGTidXT(LC`KTutF<=%c`u)PimQm{Kl~K@KKA#7!}Tr&`=mRn-Xa8rk;ywb zsbS#$i&>$_m?limIxRYe*yiisdTYU9TGH$`s6x(qu;Qs%!kdSAknNAu!>e~fvb zR4j}R$xR-j(TqXU`!cKXWo&}1rvWl$67bSRIpN81*!nmI5P{{z!K& z1V?&w_v^g#!8HS3>r^L~+46Y2b1aZa_-(U+Vcw^oVZ-$SE`|NXlLk!uM)uCv62VIo zs%%x|LEqF|+OP*EtW)VxR3R*&Hy%C@wpkh>Ar=p~dM!Mf^>)97mFQXh9y_=QF`o0Q z{loqt@JEaI{0UMHQvnb&^@D7$AZTeoHV2*FZz-5O)t0z%3pBv{+@F5xx4Z81Hz>ip z3n>!Ptv|p!UQtYGU2}VxQCnhmk8j{aGuM#Uh>CePzM$N!Aa8xV5^N=bfH*q0%HR64 zMngcM2{tWS<|D5+LlQELpG{ui11*}DPiXpK8#LjqL)Yg1u-@hlzV2`D)%9?Gema(t z@_w7nWbDRDC|do=);+Zw%^DH!$ycquSDv=~T1rP_98?kKl)d-WS%*X_F?vMlu%sN` zXfiR;Nb=&S6IuQySlgS82s?bVoxzKT&aIF#PjXQQd%*b`$n!MdT2EOIbGrdW3jOL3 zaK3me8#qQVC&QqIB6{Pygi&rK0^i_lx+pf_>y3mgLqRaO^H#M{B_Oi$`(RDn`>o@{ zS2qaylmW~8A{lB0Ve<3=KshsXG&-7z3YP5+cyRXgyz1`ug-J#B;|M9d-=bM^n_x9J~DVJgI7n&S=9ec3;v*EE1yWiqZ@SRg9>;#FYxenimn*~nV;{=7YK-t#?WlYp=>)Kg_i-6c276v!iE#4VZRfY z5||U#Q#rJo5xo-_3fbWx{A|Gw@?-q|2UFwf-g1Fz~HpL;v@!oA4i1ZP@!HJmCJdpZ~s1 z2MgG?^#6bEZ~y*3?w4S6U(1z;ne`44!7*mL8ucz+RvaEX7CVyTuLb+I`=G@uZPT^q zHHV9J?> z^Py@)WnY@j<4Q8x>d)zHnCiic2{-7~@QHhUeLy3GDfY_uEs` z{;i5PtHpBOwEg2{%3x|FAE5|0!@@)U1Mr2r$1%en)_irqxERR-xUCi@0QU#1B z-FMs4pVrX*q1r-Q&L>K{hk^nLU3^bK)v~XKBg-1P)83oZ{rmn=^TH*y2;VP|q`yF; z`WpKi;%|8p+1wpVEw>xu^+(|aCsM!sa(gh_iF*b2vYh7mp?GAqrHKbG}Y~ln@YdX(6TS1iF;EABHN?){kV6)Y0&B9yg8&C6=tKyk4{o}XLmk3cJ zsO!&S5l*FWF4bahn9W+`V2>@5G~rn6Qj<>k_dfS$dT+(#aR|}mDwgJUZ6f6xlaa$9 z7m>P;!7wrqQ#7SeIvv~y^6xLSz8G+Lx>iJFK~D;TcaM_KcZnn{MZJ2&E%s+UMIwu= zqL=F4(NV}|-B1(Xc((~>smKx#izCTzw$&F3Gzeyn7?erRlgs1HRd)ZLeNU%cL_E2c z#Y8Oa&}FeR2&cU?!iGGbi?SaD4P3K<7>5aEol2BaL|WDo9WN8vGsd*?t@RYW*k#=J zXtWwR?{6AnR|h2=K_>@q~-?O{RhhlsOwDhDul9Jd*@E6L5_t&=jClrP@2z~ ze)KyRYBtxEWF(a&g0pnFK^*C=SB!BY09kVjRQ%;jLN7g0hr^K)r4lt%gQ;eM-tQ1; zi6k$See|=sE|)9Bm&|_SctL#SiQ9NyZKLBq_L!hMWgANEbw)bJAuPt21&~0ST$0zrbuYziN}afoHS*!8wu4^4W?rg;F_s6xaF? z_7=_n#4Vdmj4dhS0=!t7CWJwcAzI0Y*DY*Br;+1%TA{1${zBM2xN6wQ2grqX#7+fc zLa(Pi#s)K{#OZu3Jql4S zolfd}dlrep&*>faw++GR)Of*}tKf|XvWEtYT|dnfj=!`I*c?qODne~O1fpTdR&e;E zG-`pXc(~jzncSWOOE*jq345As^|i%y**VJxe+i3ge+g5UXiz#&#vXSuhE%LvRtA}E zc!GMPKPhbeN;s4Zjh)RtWml&_p(+b3L7lAXdK0d?PZfrQb>N^A7f4RMsf2i27c~pHZMIzewi5THz{_!*UGq zHQO5ZVW6l~Mlz`e#_{OBFxKXz@5RkYjZWYX;^7RqWl$ye`u2F2@zGh6+aYg>u_$FQ z0&8Xo|GV?LX2}4NiI~YQ0%!Uf7$Oz87%$#Sf))TU8cO0zPLKy;TW;p3 zQt3JscUA{I-XvtC>91I6kDj*KbDuvXNQWoUkNJJqA7e%)rmaHAC_7f%w-|>(>H~+8 zN$n_cE;5};)@iq1b%6MYT>K`JRnu#CD%2qiV#&(WsCNmo8%!=ID?0K`gs@5ejbtI4 zH_$itGKl#6-P*A1F0J#~*c+5NV=J5`o7kh*5YJ%x@AniNeFkC$w1areX=mKM|Mn9Lwk1XV?;xE}z)Py7V26Wemv0&Ff z!^~!k=_Hs~J=%RU<950k)Xo5OurpDn<2|M1f^Oc zq&)3m5~x$sj3iIQgu?b^v9OZaQpCcFoYodh9y0S3GFhdkXls0q#;~A_mixR)=deW& zTm^Nfe2f$#N8PV?g>HL-&BwLo+A>(oF)n@c)*9ur`A|!5vgtbwNq>lgDUx*;XKe07#LJR>R^^Dn}QhOZ=Yf*g4YNneX_q1s>~IXHakkx9{j> zKpJ=wTHgiMv>)26`Kn(Dzk!mTU~%N8;YX zbgr$bcJ5iq8dR6zH95?tFWuA*2Nv`Bqt%pvu7D4eG1>)rTg%Osq4F48f(9}vtxekz z-r{l+m0LM1?K;0BXBL~QR-o_8(I7E@U0mG zox^2oO(%gg)5HY<(qfw=TsGM()9H+(yw}mqFm`|U?QG6Ch{|<@gO=ywz)62NER2Mq z6176OZOw!G8{OQTVzUX^USP#-3!|~+Ii*}{S)117dC9LV5{OSM(xYq2IAHo@uFjZE zO6TKh;dX1Co`cbd?bUK05(ZBe@a74c>+;1D2J?r*E{{oP1slcp^-Rlw&QRl`hGA%~ z+f}||ZNgi>l(qc$^d}_ZTQMUah`H%2nWfTB(YxcclGW__$)-E%SDw5~{4-!d z!23&1&jGtT1W$iqX$E2Lt#KR_Y~4Tit}{LTSmKxxeN}O8f!89-FSqW4-QaW<5mSm) zJ+l6sbiWhcvp!?JG-q%kQan7tv9yBn*3hU|dm!OoV`kjG{_^6>B29#ES**>cGCpTX zJcIOF@TmE@7ejV=o=trxe?|z%XjZJVd5c$+?z<~kPSj8G9;!Qi4E)?zEVQol3+!B3rIjKbQ#^UNIXp*$e6uwQrpIk6BbBc9?;KL#&j`17 z?P5p!zQI?>`)!N8`C$e5pPXs9_q`%n*%UckYb-7=zH_VT%oA4c9#mK~c+IH4pXP7e zuuhnm#%uHAGZJ0em{U&EK;}95RnI^j1-{Xn)*6Hs{|HStdl*qZ$7J<#A;*~}dEFb2 zi($N}tQTI?h3tV2&YUig5L0$BKAAlVJ_mPA^4!Q||Hj?wiAC|{PT#m(;$YeBULjA| z*3bmJZPdtbB!7-z#}QF7s%yF=kwA3tGxJhuN<$`B{%5i%n(P3Woz^}dXMx0CkllPU zQH3k?C)Nm&W-nV8oVGzs6x#F%Ef)d`99~x~d%Jg9m1Z#^;83x*1hme+dQ zIA`V`O~x~V>1;J7&-KbMv0qMYUUKe3$gcFtFdLOJk`=x~;uH@$9_(PoRB ziN?i1y=qtr+BviaLKz(M-`QA;m4!R-SWC7A#u3i6wAVwC`tuTLsIYp?>3SNM_?Ca6 zHqC5Is*HS0;CSUPfHmvnf>8qfeD{)CJq7DeCc75*WD&kSq&`DGnc+xZbK8@SPYO29 zbR8H)%ex6%#U&VLf7}s!ShJ#!uQOh-xF!vpv9|%9_-lx_cx-Wsqt<`wo7`P2>7oY& zW<|R4YQ5>>KT%fp07(*X0=TTmmV?u^X|Am;Wu2O zZAP>r$SD?=%vSa3Zk`uvSwJz@xY~8Eg|uQ z<1GX2i;b1K!h2{GI*`(- z&jiE=Dix)dlM8QXWXAQLYIr1gt3-IgLv*^zn%8d3IB_OjFuTAxa_`rxZ;pp-e=adf zWgb5<%csLQ2oys}r76fB#NVcUFv9hXZ%YY&TC-XQkKk1OFi)ULDP+H)F38!%ov$!b zsnsU7P`So?a9H3L!;VKGziR!n$uao32Mr5FwvXXw>i6Ms>0|D1mh-0SHIg9+BDdyc zyc;DR1CcoXjK(P2SjAl((U~`NOJ33_UU{% zujVLXbJ4Lc5NNUj(H>8A261@*dei8FIgBWxd!TIB@h^Qs?;N$94RJE_M=(om7AQa} zs}u^mw~=9!m28iY=$zg=!;T|kp%*jQkW*3vWv?ZxG0Pbd!u{CV4U@_l(gF94-rF0ae=8+nup?h;2(m_*i z^oPE^h816MK$F3|IShHrGc-KZk!?!XyVfEX?(Dp|NcvYYOt?Of`X1{YGjG*#!E37m zkacPSwN9<0$nxo~e-Jb0dGK2Gpm3l9vm#Ia`YoZ)Z-99g8GC%etuAim{YA88IjVf_4vG63-4x4utJtHWr!N zZ_op5yNEk@KS>=)l(LNUc}H)liTZEGoL{CQs|rhmU?#qAQ6s|BJl5sz*J}mT;`#h8 z;KUm7iFe$7oba;!je--Y3ZCQY?iaTN4lf-nSJWddAc5 zFtCD)i{OQNs^Kc}T&$(N1=R#YLw#%f(a>kQg-aW^N)Tbs;J%dgoMhne_AR2aklU^= zNU|{nkLQs2`kg&wLckLv%AkP>%Zkz z42_a39VDYfleOlnr2TOa9N>mXCd;tx@|qjrHF4sW&l17o=01+zOp+;;n$YVo8pNLHZ`w9}$T9xv5HnXW52Vb^43OTLz(!UPCdrbxxwo z+TaiBDHbf%6>)rYeI}i!*qD*(iKY!uem-vW5FaXWw@X!_6(P(5b_aavG#HOMX%**Te>;7 z?B$@qMJfwl)L4^Ctao9uvdzdBYz|0ZdK-KOr zvbvUU_rcV+Hm(*XHbe8vs7sTD=*~WeE@4^6Pg-+8rj}9VMk+gKh|B2H@`Y*gP!;}{ zgfCxUl+nfEj1>OpI-RH~OC8e79=)f2ugsQgRZr1HBxOI;(Z$39FBg{e?^!}luHtbx ztluy9Vh)WJKBk&J?vFv%EXvZWD@nGqrZ*2hYbVj?vA3 zCRw%N-NAV?&7RfrSvt>{`Dfu}Xm8G`WHiaENqTUBZoQ;p)d3l%)YwapK7&tj4JYB2 zFt+TLb^EvMmQ;wNqs6~0_OVXg@zGh$RHSJdzdStJK9JoM-}E5mUzhwOBRZol89+3S z%g(h((osY(p0Bor=>5^CwKg4}MmE&ujCVIYVA}DaPWBeuctT4amCM%XTd9u|w6Tc2 zflS#fsjgy^UBOG7*Q>xWb9@7-&Hel;@5+|teVxS;iyjcp8tb}TA?HyZGMdL1b3vyn)>GGbg9>xL7Z`kl6lO}`q3 zWD6eB2|7nO351p|I09Yda48>Y`&UvVGYOv{qZ5LcNX4^U!FLn*ai`M5`5nn)<8#4k-w00e&_a z;KU})5{OvenzNuDnERtHT+b&=)0m4UP1St^u+a3ZcbK@@7VH_tMMdDBwkw1;&#>4oBCDiSxHPULH*{Y~crl~_3OX(A#YS0Ik z((34sTZFpBwdx=owoO-EI(R>yTS`lph1Ifa&*&Z`7H%7B{g~dRqo%N|KNTn1(-CFb zQ#E;6(-2y-7R&8PM&qi6A*3pj@MB;ezPHvGWu5Dw2W>|Nrit{kmp9{7)}}5ft&hSz zN`~(8>RJxEUrQr8=n{rS!q7e|PrGt!TeMm%u_;Dqs+1>EtO%Oc>F7d>b^c6H<-V}t z;XHZ};GPIz((YCNav9XkRIPe(me(v|36Y)nF*J!Z@*xpR(&+W6M*vBltat!I(7ToZ z@w8b_dFJz0G$Xv#Z{T|KS(J8Z^8zB)<+Rc1ztOlvNc|M4RSpE$c|O;wpF15#&)lv= ztl(*H2G@ZpIiexa7N-S<;g1K_4^Uc_v7I%lmQ_oyz$%1hXrSn#6yY@4=v$B>q~gIl z)7#{*E>(HjU&Ed1VE0(@8ttFeYjK@>b*Fn3T}03Fx!sN5W39dLm!4XD%9R#KSUy)hvng1j&~5{1u?=7p znWDV=@nu5~`BBO460airf8e-c+;f{!Yg9lx4_reAPc``Q4`t+q=F|LY9JB6bPGM~V z;y>_KJzn?d4iZ22IGddV>kF#SJ*8$B@B5S}oyk#E{@BU0?fI;;j^8=|yIA0WO#F%Z zAK;Y#0{~7jwJOANQAi&}S9KI= z_n$!ysid`TPi`y|5cY@oqItGfVN&{#{2tB36A#oKWxM21LF56_%=wA|FKgDU;%_7zfnAa>;F6;gzty1(U8hM-D33r zb(H^h%vS<@I9hM$VdwwDHn6{)_z{e(=RdwC-N0EyRM!uIWKXtgjyZ%Nmy%HZ80$=vQX-^2PvV&)1gn3;2+m-0Q zbk15ezY#eJRe3Mj)x!#w_sU1{g-)*(17ZGK>GK2L_g9ewsf*5w=CyPlot&R__xPzy z5B5d;g4^EL@%;+Lq9Wq)`JYH6LL!6MQkvr(v; ze*T!toh{L)aoY;auXi1NsCQUWRwy?>d$t>g7>VJo&~%Df*LIqaNc}$Po^OAm%qu%* z1}xFKR1i-r1{QT8jqP;K^<&N)L4m*3xlCkdz$xGUz^e!{j79E2d81IXEo#c${+Uzv zX$TaA6eW`B5;{c%X5HBk53GQWZmGr_7)vT4YP&OVeXRU~?+Enm@LR-JBDehE>?SXc zX<}I&|Sizo&C6& zcnvS?nA-{UH5wf#Np$u74ixKtgHwBknCq!r+c4nyVZIPvlq+Q4ykkDoN(s!aVtL*S zxS1{GeJPd558qIia0LQI3`Q4bGBat^yNY@PYvr!C*)0VL9D7(4;)qH%m;A^4ZcUja@ysPO@*1Ai03x2o|>dHrOLX6GxlaioJnxyt9~?NMv) zPVUgpXmoF1V=XLKynMU>^pMJ0W};%@`&2h6oOfmIAb+JpfR#d_;PPXiizmXg&GUt} z{})Q1+gBb;6YBPL8@nfTf3{f}M+hOQp7l@Mzclyc&ycp-}vb`=0hi5WBYQ9yjwE6pjndz?BC@Kxkyy2_i11_~)rO3XZ8G5xe0~00As@uYgx%wi$pdBV$vq26zuVmgi_7nX zW!=*}*F6MI4@QDY*)hDjRJb!Eah`r}2BFQ;%reX}bJM7`3$^6o9*LD91C?1-6YNtR z5GZ6ioxa;n3+y2{mH{pRiZDvqZ4L-Z`q01ZK=$%OUM-5-boRo2^AnIqnp9f#b3-k6 zwe-jB&kHsaY-k)V7kS8=M)h=nPf)5dvYNitvk{ge$~p?VFL>EjUKCtcxuF+VuNZw_ zrT>$8H33_y(NOg~_n79Lv1uDO`F?x!5XteL)TQHoyz;L3e2~Ryln9^`HyUtWo8Q0j zEOE}DEk78?cyV|PFhb`u{sZFl0T7o!dEg6Wn1}c!^386~n6p^(E%`q*f)7Ab&J7&ce?hC@26yvvxZ2pT1!C(HO!ew^i zVYga!rDytQ<8Uf!$=cWK z|7N+0l~wwN3$jhJvYvKY_koEQ@U6&jYRa0ti@;uInKD?0J*W>K1J$F3B8Q*dqe%}k z<@Z}*Imc?zL_KS_IV$1_XJ&o=d-=kQJgs-Qn+1b}^Tt?7;dtjMQSn zQbx^}F=BBAouMbE#dWsq7_i(>QuwId>5(8Fe{5#jfOwSrypP0en!!*}6icYH9a+a< zB+$vT3pq*E9^!G{0-^AWtaZcd0aoXf(aaV)nothENJYmqu)Odxw)vSH(Qhdy~81S3tQiIPZ@MIoIkBgiA+YCH!>6 zjC4GXm%j)_8nAz{y|xLl{kW$Clfycac_+kSe;=z`o5-UHo60#kV*-mRNdctpiVc4E zl3orET4}z@npVk#&y}1hl**~OesuH`0nfDX?mL(pNuc7Z+4)T&6grPgIl=^zm^;OGCPSs>yBVAWcloEGvu6Okc>q3d9{G55bb!oiVtbN}z zool|>g-#J|zJV57d{xn%MGumG_lV;E#ok*6)v>izN|9(sZXUtu%TT>TzegbxLaDl_zJS(c}FUc!6B zk+*uOPeh*TXjTbUlvF$OEtIP;<6C_wpl%`k1=*DY6$4F+HTb*dpvx*9r1#qGUQ&0v z=_UY;o4<$(W5{!B=>MC)VM}@OwxtU^H;0wYH8ymA@W2<)YYQu*YI21gTjzIPrlNha z=38ZHkWFq+X?3ySRkTD;o}5Bkl6mKq6u@*kcdg?j6!8 z_%K~7=acvEP~3u;!?W+K)*v326Ivo=BN*9Vuo|e2=kIz5gIvayk`l`L8&+I9b8V@$ z>VlU>*18{{@wMo2zqI%$-AT4;wop5s2Mk!qZ5`)Z2i%wYcZnw5|0e4M)#tg2o?ZCD> zUU29+wz^F49JD%Z%UrQG8P!y#jad)w{%=YLQY7{D=Q zC_NW4$+Cy$xK>w@a#)NYKNfvze{>#EsTS`tQ#2-m4 zAhzb|GQV}YBb_s#>@DHBlWaoYsz|NVVV`J0RT9`iZwVA2A#D_^FqM;Q17&Ee4HirQ z_?jk~v8l*Frtx~<^k5nsg8@M!a>!qs_fj8+p)&Lf9VoPEdM!2#{KCh&vev%$17BGi zuA|ATUlwPj8inl#|iw#KGTryP2||Gxu{L=meHVjfgaAQTdpttUe*m)yrZa)MBzY z;8)yt6pnq1?W@BS|61#4(T>k?B0tOGuq#=?B@cF_F?&qJC=%k!$u*wJZ;hjHz#Hs~ z`4};ci?G-a1kZkx*G1kQTvwC-bEV>3n&O7y7aQj@hu3~`*g z@(r$2r19rn{Ip|t5ML<%iLt+4BxCv^wbNL&$*G0ndJA=%Qn}{*8;eS#+QT;6w^^u1xCLk(lNr*udr7)rF&g>QIX>bp+~Fj zLBbE4*L4T?_Uv;}BXE|2rf8dA!R zS3viOwMJpl#D(&+=f#X8Kt%i53Tvx3w=Y%QDPD%+K47BRC~sDD?;``WPY z?g8*AgBIz94-_;mrqPtXeP=@Ddw$6MK`u&-I~h3#ajBT^)2BAz)|*@zzc zlY3|jY7xct5dI)~AXX#FOr|foxbz@ABKq!uA+x4b0xz0m-=9_wMsAB8YiKA9)|0vBw>@SL_&-BISuKT@G78+qae*xK7S!yG*JS zfp{0me0*G1tl-M1Ev~owy$iyh9gpep^xi`3{;UaX<{yJ6P8(`=K2BKW${kbv_2_Yn zfyY|Rx3W2cgLC&QwwETjD^gnh7tFcXZc zBwIFNB$VT6KkX}14<0buq;2pP){h`ND5ph|u7^RhvI{VO5AHtbOp7ow7O6#8q_0 zW?cUK0uq05QzjqI7rr_XX88io&KS$>#6q#{mx~^wbyRscV3s-&>`5?|C2j-Mj3^4c z7J2`;K<&rmr%2{@(PREv_ohINN;K1$(m|^aBnXxY=%z$meET$-*`9r3bU1*efzLsI zsLX*Z`ut|F4R;?UPPZputY@G~5e(1Qk%Qlf{wxu&R4CImb2_Zs ziX)BC6H(UygLZNLoSLUeV^H%H%SHbjai0tr(NlAWzhlnTxFEu!-t| z*L`f5k9fm7p#@<-KZ(?Qjxq}Puh;W;c9M6OD>|H(j|Z?KEid5~H-AO>4&UTY1<0$82a|+X7OXl6F-|6ydmwak(Nsy0HLIF2kH7M>9$l~o_X>`5~d@6pBhL*TpC_19q`aw=1B801Mi z>>AXfnYAvb@~BdYOD+UI94)iZipTK+f428PAsd7AM3u-2F*i!_Cq4JZ%|?>bu24?| z^MeKNjWO`sE1nJ@M%VPwAe5Rs@4bxK2Ji75ZUd(+sHN^~GZ2b{jqMebcPd?(6!*LY zN(AoVT*QMH;2?;Q-~Ph!Yr!;(2mlHMCyHm*-i$gW!zUctZo^@DkyvuiY_Uc(y4kh6 zgXF7SmQFi$fv}D+w5=ziCQ61W^kc^sd-YH1ygNEnI6V7IY2hX^iw(eQ%w_0*JvsqH zz|0Alqk+04{hpt1yH^-*{b`H~m-dQ2U85gFQr1n2+|LiQpNORZoNLj|f!32+lM_GH zB5K_=q1p^I(-I9cuF7DV<;ZElHL07+-wkCo0P^9%>PDJj8RE6sB;2VVBt+Q28T|fX~2Ldk7 zO|(~MCG;p$WuByZi(yHzfog+L@7v!sk&V8t;i#f+CU{WQqlNxpJ!N#8IP*cotBJJHc;%hC1ZV&W4RI|+}p$Fk=H z+JO%dQ43mxziW$&RhEP|fAbj=;s-61-KP%1$v%EHLXz;)!C~~(`P^dnjCEqn{TG{i zscg$SV6wwP$A2qF*2DEh+*#2*r9rT0-VB4MXFu25$D0nJ#-?s_duT*PD@4}}EBphw zo)x4t7_wGaGh{B* z*>+@8X?uS6zUwwHo^dw^+#!*kfu4bCD>?Sh;}X$zyUamx17s9)a^lx$@ zXye0O-B)Gx0(I|9L*iZZG(Gk!={6i@lyKVQ=6i#CwT^i{+X6$3UBJFG^NeCxqq>av zx;$#NgdIsHR#k1nUS2R`jA7$iXfL;?445YA1iKmL;!= zHR?VsGM;yJ^-g}o){m(l536P3E{k+RB9#pzcN1>IIe?iLq8>=R@gi{Vt0XaOAWUVv zyxk^t4wjvY=`%uz8|Q$6})^*tQs+I*S^`*6@TQE|H2T*Gw5AjUS5mcC(1wGjh;ZVw`bEhm!LYH)6~)h%*C)!X2-_UMrjA z)$j^NL{V`-u@&?Sbvzx+Xk2ZE4OoexLPE)@otYr4uy^+#p_!YfASe~a__2p@TNNO4 zModYh+704AiA0D|Pa^Jbtu$NWkYznPL$Jvez7|^Ci~>e@w3{52;+xaKh6UbdiC*5G z)$M0bZNTN2wB_)pYZr5!Mh@q2{xyIDfvKeJG43ZD{9P^EJQC4-U=O=B&j7$E0YlDI z(tDODcy%D%MZ!L4@x&1W6_TxZ;N}byA`pJPk#_Yms@VK;gs#ozGLC1Jbc{C32x>Wh zbC?6ztGrN2TTi0QtrIgrJfP?w!rYrrP_|FuOypF{6zo=D`@vr(YAR&}_=@4GH3>9x z{uC9)s>cxr@B8(KSUAi$xf17t7^`S`6a6Y)Ath8KX zD^aWX^o5_iaWuDCYZD=E6A;JJ5F(>Ng7PiEfBoH-Z)KYan4;#tNSiP7I}&AtZn*MF ztp8aB{F&PS#h(H9C_lQ=|Dkj1`!6bLFy zo$Z!1!|e71s0R*OXU^0XaP$_KT7@D>CRE0z65=VRsQ_X2#K z>G}`3BsnuHz$gUe)G9dDpx;}`69kY&(HnYkFqE%&7_k3DA`{c) zJORcd+D1G(Z<(fZfQbngZ-~`+%eCsm^n1$1O9Y<#SR`Ja0fEd&pS9L|rkPT{5THV0 znI)2Hr0Q?LSNF5lbiz1rBm&=i@#3`S3rT~`e2rM%?%4*bOm=9D7nO{jj zM>rRub@-Qtqer`p5byqFY;{Vci_iV0CXRCCl5~UOGn8*(fFSkK#B7Dv4^=z5sdze$ zE)=1kzrVp9vnwAZ=|xGsBMGd%`tCaeg{uS6EiDZH;_d>l%Ou?utNjM8!S)GZd-(gR z*DGTFddswftr8D(s0>Xg;e|*>%?9D;M-XwNW_cy#Y`&6GSLS$*kRbS1haJ`tM8Ayi zU%oRoa1kwt4ra9@Vn5sBY@WNfJBW=+@jfX;zuiNFGvaB&fnLfbLUi+bfD- zRsnjr43sd3&7-s@xK$)D)G_w~dg;sB)9IwZ^Kz9TG|jk$$gYB~Fd?-=-Oe;nG_l{& z8Jpnc$z{FfkdMY)i7Qzhp`d$UX9_7noD z_qmHWP6V+~vn*3NZN9Z3Sc%H+xr{$u2Q>MEA3DV>u162J6mQ*_jbRDqZKh6;g#`kh zgk+r=A6`$X1$#UQ{Y~2HrJ^Yr(Kjg=? zbNzaLea#M>AUk2%Ff1GS6J-bZp69;XJAkV5&-9bas)>yZDVHvnn~;wA33j~n(z<)4 zkXY2wfd|u!dHg`2Z3-R-t=Nl!b=G1u1e(s8BA1LNL5XKd&1_q`j^&O6&(u8Ow<2#3rAjaiFSb1db?OxAkbI*agxvWz zZ|%h*rj;))A+rcbOd10T5adu=+LCLxa83jIE_m%ZLmm-<-cjtVgFrqHuGUgMxlJXk zU~UhKN#o44{g?Rd#PjK*{$~W3WQ#+@rUIB#CJj?VZtXBlMoc9d034pSIpr#gu zVC-nvBK3&Zky!5THw1a+Y_OAV+9W7=89Snnj9NGGEHaSsBGX*A{hN;S zXCUOKv+S8NyDfpdD&DF{Ogfl6>C~=c)IK6P(9>N%HJh`#%`%cSYL<1X>5{;afXpGs z$@`vwrpoAuiaidswjE?b9LRxWzVuET>T_0Rud~V8B}Mh0j&!Z;h0uJ@9{T=?{WD^C z=;!Ou$8cfb1qYQcGlQaq-fNTyOSCg!w8fx|v@0i>Tkay_)k?%%UW+-;2xkYPp+u%1 zV0Fth$DNUPtXvYAT%{E*IEg6$2BjS^*a$b{D>9uR0Biw#G2^cUo0uX6DyT8=oTfUY0vi#*Ykn#?XdxKHyCrj2o4D1b@h?Her$n<|l5o4mxxj zswP>-ex0ES7l`w^4q-QxsKl=Xu(KGrE;~I{S_06@FL%9Nyw_?ED-ovl<0Y&)j!Eq% z@fc4&)T)3gFp1f@Y;ZYF&l=Y=U5-~a&O3sj;=GA)kWXB{6|Szu)5+pvOZ6?Uxz5e@ zDxhPRKsKzj@Kr*|o*NIO(gF21d{6V-31Bavt^qPk+tawg)n&j5JSO5r4!#`ceUPcDJq-*f~}~7GcsW0HCnyEtewNGe_C^0*-Q9R zSeQ|Nv^g_WnZZyB$xzwTHrAT;gG6k}!4=IQ7}+LlhG+WYiN+?)7hdJz%CWePg5s6oySdz!aXqcmlU(XEEHNH_AmxV(wG3NrQ&N1Bnh4M+E$~7L+ zb%-CfEbZ`VyAJ3!s4fKDi>TFI|3?Cw%n!@MfN?=yGG_SH2n4el+y-H1TopBVaX-9~ zYTzm2Xk$jHvwFv1yeW->Ed^R0ZF%*@ErhV*XBZWawM&9}gHKhP4jh{oUR#T;@;Q*j z`<*rzKthdES>CRip1J(Ui_jjO26YD&!qx7hlVd)Hbfu_f4m_R~-@t)IUMRLnBg#48`ij)!C!s-K`+36uIYe z9KEx)JeOE8J#?-4GbMpujtGZiSZ{s7%yYVr#o?Y-b`f!3S~t9XLF_(qD14 z$#hmheJQa(Y|3jg5_HCPsmU|fLV!)>eNOHfX|dg~yy`-f*uNdPvV5{YZv?VSPa9qG2 zTxFafXdaMm`iAM^165}GJRhH%ZTR1EL?a8qLZQB9AgXMk_y!jM6L4`1vn~StH-g517}=L6)oK1dwXJNMMp1J7u%i zNUr-rbqW{rGhAvzvL(}D9-&MDSQW>k0+SH3n^UWqk7s2(vnz>- z7(=vWy9qlZy4v%D1E~3;j2N;QsC)!4I`pKNI>n~wN&OS3{duC3SeBMe{8l361L^Ss zTWXVYkp#sWbX+og1xW}yUGt-Rx!j747Vxw;yz=2=u?h!-FqO+#zW^HJ zUbPYrwOIKqz5bX;JRN4fu{51Ru_7vV=nk{;soXbKS;Gxfkgd?8i0ocrMP7M^%&i~uUn-kry*#i`;XTk z0faBBPvgB$XA{#R&lVxj0&3wxWI_DR$4Rup8E=o zW_O`hj(Y`Dl4aA~{-eGwP&0Rx;iy;_O|l-fLiUdqxnEZS0ZcMV?U4g0P?OZcKA=>N z1L{p=2FzNkHi?VtigvZi%-_Ehwd4(I0QGD7W=sH{Oj0-x8t557j8{pT4nEL}I=Q|U zx_dBiJ=5q<>~T3gPY6W}OA!2}`7E*^rk)4;XppL`G<~Ojg*rnPiiUME|8X*Qs%?}} zrw7gQ5w3=JM72QN&byR3N~|+qHY(={_i=0)G&??OgIaXHc~G0`c)a+?+ONFwldE<0 z;O{oDO*el&L_?|G()pmg;RQ*1ZqVl`ob##X3x4b#M?&QyJG+HXHKyK)zNqi47@c<8 z^04{NS!ytci4ZJG#*eo&8DGXOWZ%F+y*^YYhNFVV*hf=sGbERah$(^W<@5>jFHL$w zf9qHnbDPBK<3K1t{1ng^ZZ2DYdq#soygRTKx$0tz)jvG7#^anUG?5YU>0GTT8vtP@ z8%<7S1>{aow*mJ&C_UYUUDXrW6CF<@rURR3HD=w4{ylW#AC|X!Sw>Ub@Z%u159tU- z_XO9pG+YlJh0S4qItX2-^MEMwCK?~I(e+4uMHxpGQ)o!%L_RMI3uP5^Y?!77A{cE$ zd+PJ|*J|M6cBqvN#v{l>Nwrlr-#?=E$3r1;c4*0NbfJco?X(O)(%_do79%5jwq$uZ zFN%E)^WJIpH0@WJDm;?9Go`Rm->@|Nc>Ov^>p~FB&ExSsU-wX~Vem^g-TalA$5neG zlTJ=oFZaZ~$4vtalP#(A6HpL(aAywLTJMt~vOu-O(Cve6j__9I^JjTnZL(slJRqbd zC%Kw`%k2}N(HUf4Pbl_~#OcVs&6&k6#q#xp3Z6dyxUSDR8mSNo4pg|tbEj=g<#(dj z1U^v%!S`#)6JZJ$qh!;F)y5JAa>y(u@2r1y?GHhsa&iqcui zAtJw{{z(ljY6Wth4OH|~Ogb02 ze=@2P65ku337PN1=X(W|@YdFBa3o#r-0U;qDyqNr=4*jZ2C3OAq4Y1Z9_uM(y@6g6*}bnz}3y z;lGgCG>AyXWzHx8`uvoLtoL!#in^^vd)p$~XhNP$dU#DWCSEsCnG2$YcKdbO_ErYb zUuQ%g3;+8B&y=$@F-hS%jFik_1V?!H0(%uJveZ}0Ga)tBnNf4$!E3I>{k{=*_%IgM zK*V;A0_QI=+J(-}UU}@TfSHuHXdWr>_EhFx+{Ug8g19`SBM2TYw)v~&YjzH%1D8{F zbsERXxrJ@~P%v8g1r$-1IPq=L{s-BMss(>(2tKPz{YahD{xt{SPStF*$HeE{&ePeW z;qBj`-_y{}VdIjfRcD!sC-p{P2Vcys+mKL0m|bUAmxEa5&;aFxNl?e*?(B$WRizw^ zC!oF0nQ1XQTG@qxWtqu1pUa-a{EUVUxM&IM zmm06+G8jLdsm_|T$OP)toj7o?m>Q-iJ@fNFSlrNxEHgv-Xwej+2~!cdb?~vgxNM)e zYEVYrP=92~`P4Q%S)DWuOr_)`hU3^CjGS431K8`OBQdgk&NmT+u&gnUQWAyEUpr_UJ5Qwhj$Z)28B<@*F809hf zhs^SAH?Sj?>OV2hM2QNVxFNuD9h0@@y$*8_m$dWj19Hr_y zaQ(r>S-^>t2)oI6Xd>p|{391plxyzK zq*FB9xWBIV! z=%<;@`HFREO5faTY6%+W+O_0WDMa)8ITfB1-YQn7ea+xXU!O3U_dhn7y`1ZQ7D`lK zp>^&_z2_HUb|%mf*T`>X8P0y@PluhUYuW1pD)U9;Kua4(PPLNNn3EyiW6VcQnqF6z9;CH8^d04dvLP z66|h}VD2I1fe8! zY&Y5pZP89Cn{Fp}ZL2_o*yk4%-?iHRyL9kLv z*>aa!M%yH|>Eq0aP4%EurFGUpY*8?hEw?+}}4XTG?cik(Yg^9v`g4Ads>}fPV;!~i02Kvm%G?)31 z-azpk%w(RDCqeaV$;>nK0aNgNVLrNclN7baDLHbLVj8YoTA@HSnykV%>gR-2go0?y zp`EYk(j z`~t?SDzJ%V%wu> zixiGOm+e{qBMU&}IozGtWK4VHGTO$J8b7i#xleFF!toGbCl3EJNy+cT^D6J7!afB@SZ2Zs)x`oW)-xk}tT5bxtV`*6P0nZ&&?F z#*l~yAl$s@E0evShBAaK@#4+rpG3VU#Xhwu#Dekf276>eZ8N^UE9tD*b-&V`Bn*gv zRpmUMDC6Jg+W+-QPQ*&Cy;Q+H+|n%eiWe6cBs~Pi_WK(5v@t`4Vnp#6^cv*HG6@^z#jH5k(7_^>OG?rP2Z`TNlJ z&(A*fwh0-%^8adMmZZRVl?L-SDj^aNIL(GzvD+j>6CuIij$Uzvxs&C_5~=uq<>$(> zzfjsQcmHS125+k1l0#u)Gkt%0ACbsQ*{jZfv6fi2Xo{V@FyqA=YVukE^NxkaFBREM zp~dkU5e~)|Fudf+tu%u&eRqG;gcSh>*$ec+S;l5q&0dZo;Ipvp4_o>0a4}?r2P78$ z(YJuf6Avbjr6Ew173+j$@vasLN@Qy+@7Uv`{+$BxTwLwRT;m1XeIY-w4KSf(-FebwsJR3d7@ zY{66f++_mM*(2%oL6V8bS>ST|1@*$FfI1c+;gHrkqP|||N`9|o+$0&^vm_p`JeL2L z%;W5)=u-ip_Z2>;H-83%1f5y_BAw=KeK>Nazq6QSkzZPii2Uh-L)@Przy;ckAFoFW zH5VQ}BvUmLdzkV~JRH|sTmgdzt`Jts*S#Nq%ExZ-4zx&j>)43gT^K9G#sk96#&>h8 zDyJ~29e>!mAEjzjh0r5DLe)rKOqwmi072op6BQA*b8TsdeqNzj z+x^CHB8DN3Sx8f6sC&mqsShXu&El?=DymFo$;d+qI5RwN+(nlwifPtXS2NJ+}+*Z(pede?6t=M+qTn7h}8Xi zIAe5u?f@D_sZviaW{S%|U6xk;18ir~M?jCgIXkH#;jG zl-c|IkE}`zd(WhUnNazz06X0KfdC19IK+PT<5d#zuj=d-xgZ&3CupLyX&s0AP+Zog zVjWZ2AOA?eEOI%{6Oxkqu@MoxUOAuy%HCPFr>_TlEL0d@b)qV!5r9^0(8 z_k>thg>a@36Zmy;=WO z22{YUi^k9iZJPffHx6xIuk+~~W_QZ>s%RTji`Sj|A!X^~?`4C>aF)r6K`z^aQ+>V7 zy#Qw*X;kgn*!-5V6ftJhpo*}rzn=ia`c*h)9Q|>U2ICKbUy3PgDA#GYmrXhiMQhFu z%R`3&Rc-Oh+g-@iccxRI3_gO^h@HaofnjajO64u05&9?jT3sr}EU7y&ne+m(WXjhnmn@cB z!NayyxzjIPi9=SKyzs(oVo;U8g_(7lPuqv4t-}|4{N#+@&9MrTSH#oVdzz0#R-8`i zw_`aYwiFNMDxkYt*n)z-*MD8F@x*)Qe&*MN2jn@1QA7ld0lrr5;_?PrU!BLz5rxX+ zu0^wIQ{jWl@l!sXwO=u#t`Vh;Q?JBht+`GJ?7pZcYdtap@@f}Xkw78US=7ZO2L6$p z-DOb7>cSx_m^v5JGa*?n>VOT$+}3##maAwj1nN#G)B2?Od_fG{5ZBVLY{m`25rtXr8J~bew_@r9o%l0W;56G-re|*yX#R@E9T+Av~jt7 z&BkBm7@d%LTU(C|oyZF3W=iF|*7LqzZ%RsAT+VvJxE$ww=}%eA0b9vcgoF946%v1@ zVnbHLGDR!&g<=Ak*$qqsovo@GbzZVs+;gPb)Kd%9Af zLlRK^j!R~9P4e~_gVrz_#${h~DLM|1EtHO+&hl<`J%du({;Pu|hwyT=+*n4nx&-p& z&VcFJ?jc1I_%N(u#m4y%mHgr_MCI$09}dd1pzfB7ZY1K`_fMO)VJO2?_0w)~l{uby zyl)ulO@H%`OEjbgjyJ7VY?1s^S-|;dRZ57F2Xo_i0Z}X?)pV5zGB|u@#{Rdtw2|a) z7BG(dr8*xI@U_Wd*yZ;9z<88UU%L$PVsmwWS>r|LvzHYYItX+6EAVCG=w$^+G;1va z@ZiE+xnwArEM39hUp)%5Hw=GiJ?&kur-yYa%FfbAnD2r=Ha+`bTU?YX?MFTxD?z|d zQ%%Rfe^FdAHU3gu{Mpa5--&<~j{6LD(Eg?{hJEn6o~pEx0#B}? z+>U9cx~Oc79{vaBfDB|;pyodha5>@3pxmajN#j_B?1yL?msqyAEZo`|OD&A(kKb)=2&`5#y23SKL zkcD>1Rlagyi9TwsRIV8EPW2-2=krtWmLvpByDdoUUyvZE3WjOXF6eNG4P#n(PDj;y zO=O0jZHo|yc3@eL^*Q(ZSTEOEnjoP!qrdGHi%lX!!PhyfGXxblU_)vWnF7-Z57|fyyRr-e$6%LsfBj;VFI8 zm~6&gvhS0e{=xJ+7EMh0S^r{Vjs7-@`HFKIOYVD1af^|#xj!P#H{M*lcv}9nB#}TQ ztk)%6(Fty0Jrdf(yp=xd)yg$i_g)E`M|tX~io{iK{NE#p^Xc|lKH#Sh3*}7T|4GUV zW-eqlQozxG157%n7$uIH7Au>SxKzM5^O(PXx2vvvK=9tazeBq=sHk3HfCi@yUc zvzyl+;R6Ayp*^+D?ou15TEJpjC?0mJ-hixkM^PSw1XBFFtJz$28V@WUaDGYP=?Wnm z_mQT*(%VpuV)(wjBRYMulA(-%jK=3Wka_w}^b%`QS3k$&;2W@HEx@~gm82GCY( z+3O>fK3@l1dTi5OXIHedrz{0?Q_x%0*{Enql-gloBv5AgnFkBYd!vnYgRxQ^6qU{T zjfYg*h#)4VRWW$&Hq(BFH2N>SZ(E=cNBmMC^Xc&R;5DD#1Olcg>q}QXYvZ7~*gR$5 znV($G8iFT#hxzxD)Ww^ZIGVv4m$6Ug!9*@NdJxX*>k>{>N)NYv)t}n3BhkpXJNKZb z;p`HiCoz@@KX`3I80`saaQccpc_bHJ($&svBDsLm^vt?q@-)mkek8}GW5exF=G%%v z#~vpkRc{N_k}QE9->;fwmJBC#$7*+NlOwAl39&%?zlwg9&gqt64CJ=Oo{=g34B#u$ z*yviAhjN3G{g_CX1Mw0oKUV2E0+Jn(3rotErfs;~xayS9_BfB!{f3CLY_Y4jj%^;u z*$g!-l{i>74NTrJ?(HAP0?dU_6A@w6u^!~iE`GXe#~X!r$08+Xpb%?JHp6EC!bZAO zB(zwZt|rh$f~33yhUIA!@H&6=0hMC62tHDZfny|#Sst31dai~*_DulKEXhhwx>VvF zI6zL0dXZ|8083W&!$up;v=Yvw>4bfaxyV-uR;;bErSP1qeTDJgu;|@c6}9h_*6zw# zGzZqBgq6I*eqP}Q9OBF6??BhKJI>!l^5?3I1sxo%q%~$@oFsI=BLu55Vu4chFT(pPyw zZb>mg#n8a~Nu}I*XiWJOl98YXk`X_Jo}iGo@%{{!)XpMcRbMT$9~tR*7P$IG<1F6U%^Meg4gVVqP7*yveTeta?8>A zayUYbS;Dg2w3kd99uSE?wWMMeySi7AjucMFp%NP3prKw^n`BStR1vkqS26Q2oE$+g zA#!p!sTvn%DSxtiz1hx?G8gwOjju10PiXCNz99Z6U%2cpC0)x*V?6W&CRh!+IVEzA zyCYKXTF6nsH^a11^BkM4qnqmlWLFBr1@|*}Do%%>_$PCrEmb&MMZf!_By}bP z3nx8a6IUt^tKTADwYb~~-{b2IizoAa=z1;L7rtLBr(UK1{@yI|-j;u|ek|P_>xQRQ z&|$lHrPe2m?f4zqyK9d~!YQdH>MRSOGS3fWPP6S~yBYA5U@olcGk!Lk3hCd)X`Hg^ zX7R(B|3bGOE#b`DXT69)4aGt47tu+|SwyW}BWPPU`m0}-_&4Z@eb5#h z@v)h6dx#UAcSB|m z1VyRct++bWtoB*zy3|s0r5$$64q9|rAkc=Y`YcPGO~Hy@JfYNUwP@l`0SymWdWc^m zXr9j*m%jh=Kl<16cR~!eMOlP1O;+2vs#Oq+xTA};a%DtC(0p(PRh$iPs^!$)|F!oG zl!Cr=<*8BeR4>P3{+-W4;e^4?ujVPNp-{PJDELjKtYLZ!>YH4aML2TGg-2||?|A4N4rYK0}d_(Ji|mjE+8A^=+`-#PeM z0{ESOUj)f{Wl_k*A;<;)b6J=4fk>poBYHVQ|GxO1!O5*7L=lex(?|Ztiq|R-ZyPix z&i-uEUt9LqzX4*v_PIW|vj4rk|6JFA{-a|%Gzj)Tw&!IRc!5vq+Ul?V?``dfe+A8` z@`3liHdPQ}1MNo#CXqmf^ndPyAVfLPCp2bn{P(7!!$rMb~fh5ugh|DTHgI2-@}srb(p_5bLq@b3s$JIuTECmtxtQTeq$wHv-? z`1rULwS^8xZthwywOGbEz#>D*C#TNFcGPvdc}bgTlF$Mov4?Z-_U zn{xp!@R(WpTuZVQxl}?8+5pIYfE??tmD@OQ_};eK+Al+kPP_!GH)ochde=IRQA+?} zXYKmwg5_v|yYtc1didV7y5+rDMCqEXVB~|RWO);9Z5(xm2$)w>4R4l-U?e-4<6qs# z#{j{>kl$UO>7gQt_!tD9YR1ra>tgvmY3oJM!gN5Fuem&a=Z>BpEqIe9oNmX+(_bvL z-kY8g-EWO;$y_VvjN(F6DN=5cZrY9(sfW({Kcf^C8IR=tc z@YN$7g8y|S^dnv=AsCd2suH7zyoWFv`dv3&Xt~du@MwAzj@PU(vaS|bhGgzMM6jCP zCX@eoYU1#={$E`g$qt-t5FLWFLb)c98gIJ@^KRxGar7!A*8byX+^Jtj&$TE-&6}Zb zJFTpv1?kcE9A$Ak=@+|tm-4Qp8-EXU)_6-9J2}Pn?#DEVzzc zv?}>D~ zfkc>fjJ-qlrjtkA_WKyfk8MgITk;FnZGn2!=13=s-w)-3W7#vnyX&xGj=>My$=nv2 zZvQBWfMKxK9LVg$&tjieP;Q_1)t+7^**!P`)l>HF^ymgSdHj0sh@x4(Uubg<;(JGy zD3-{cLM7wVISu+>>+gfOMm3hVemuU0WaX>3KMR3vtESu&{W|xI33(g~BLINLQ?WnM zQQcLh+TIQy0lmm2B8sr74jngRSEk$<7zDXvl^Xj$-s6j|ns^m8HGI*Y;3v5fav8(o z)KBa@X{G|}%G0pp>5xB*wCltO8Eg>5k-anW1yXtlkP%Q+@9+bUd<;b zrJXN(%j!30(`*4Y^rlx+u*igfv|e2TWNV-&mkDh5rvbw8u3ER_c>x=jLq)x&Cq63q zmtRz#nd-5AHN$>-cV|wV$B9TuyUPM!A3n-HrZlEJ9bnZty?6(_J7S+(XzI7u>wFR& z1-K)9d@aSlPn>#l-mMBN8Z0hjJXbvfqq!Y;q^y+fN?)gJ2fXmI@``Dij~R%`Z^_^@ z@%_fn_||7OFr59AmnjDuRQ;vf3i7-qFUxl>0jUMObgI%pI8MWSUp~j=E>^yFU!+mk zo9#XTq2W8By)pO}wmtPC^6nI5HaV+@@3Y9Cl~kAIbFBs#wMUq+Hg$~UH@$Wc z2>K=_^oS*u`Nr7SibeSRN}nE=TuMC+C`JoKOCn$Sl1|XC!2WA0wu%)C6oV2_z0eQ2 zZ3zYzuRxS)jJ2uYfOI6JDUsO_T1O=$Lw6kMa)>T#~(% z`GJh?#Guop67Ygk`%BVHbv3Mg>%#{VJB|HN>ZMmS~ zdIBYqls!;rndQAr036o`r8Je~eI}0+bAv>qG=X3P(JM|j24m*14uMNdqk&x5Y;*LP zvq;C7#U>wO_m<_S9C%cT_dCaigcef~i>~J1GkjhqQbGH*5(+o=xl!L{#Y+5tO{4H7 zl2@N@Kl6G3px{o>S!zFq-+0pn6LAMxS*>&$1%e$>`V-B+{keb?YM7Trn?9&tsy)fZ zY>ReXzQ`hv_?oq3|C3ZM(E0uMzWo+hISnYKOe_bJ|{hd47AfH&qh6_-nS+ zJhf!`CD`C)viqs@#ZMfJYi*=@7sZ40H#i{ly)CAm`Sx@d536SFXJH(vO& zN%FXCzsY|*;%_wYQ%J(Kn*HM)tf^du3-v@+=nQ!s9?2$4yN6S>ryt?mn-9OI68UDh zL^@s$xj?E79$~B!y=pIWiD7Sg|0Y1DvCKTbXs)p``B9g;slQT8lQnYN%KWeyovM59 zIdTA+&ZD3|ntII$y;p7i;c7Q&$6!z6DOD%@uSEn<<7}hr#LXDB(e>drzf0p~V05DX z6-qLNOG!wnB^une+H6c`bir1=w7uGLg!KrVG-k2yO+{FA20K4niLBu%+_HTIEavbH z^N5{d2!h##^7O_s98SN@+|%Ao9tVPhgQI-FA?S@aY(A zb!yMV@k_EHw(*6olcRwSekD4k2`WN3M}AJJrtTofWH!~ey=~8+s}Aen;slMjjc#%t zkK2oyPwG?jQ7Ptf0T8bFWc2?!PE@ewiOdu#6}kpEXk^$ z<58#xfXHN?cQzZ0DAC?uCB-i&x9n4OcVlLuyrBuodXijo+9C2d6Qy+1>Woy)d+@#h z4FNxQkM>@4DO>KJd4guqYh}MCrfC!?R|dw>*a5nc-wbxyY!pg!jsm}+D^)O;% z%t$ww3LN2AC6GQ#S%xl3vELq4Hu}faQD9}=-67N`cD-=i1NC_V&W@kQ_6siF^HFq;4iNH3i@N!>0jNdtc&s(HS}o@dav*8 z+U3mg(0dE1u|AQ7d36(7_!A?YLXEAiwb`TCpwjbgQLc=voDH%Qoip`LO=J9jT_-&> z@*h5lhbY{vdg;BRd{ymj&`kQi;?ezffv{oBq$r}4D#7>H3hcbMKkz6?6`Ut0yQtDI zMswSf&GzbjC;v_vYPQ?#a-CggJ*_qho2YGicjAghr<{?9YdhKG_sA)~Be}xbJbrll z?}s-a0E>KGHvKC^|FwpHK34J5zu(Gf6Na7i{|@Zm9>P4?L2raQ@PE9+fA|8m3b0(m z|9#+}e$oGZOaE;h|7RNiwTJ%CH2(jY#--f$&)j_1gNcLQki}Gj9;r==GDxG4f4vFf^GubOEiE;FGrOuVSt>8d4(ZKRw~RF!(&?b?j-_z zfvRkTX8#wJCPQbvN!Sfng_w`8Mq@&3ZVwA=Ug2`m8 z={vLNxvjIdu+b`|UZhMbu)U}h8`K}*5AP-`>;)=?6&_ZQx}M&&wsh9W>y%mE=MD^pH>{b5{=>8_G~x13 zfgwyd9Z8>Q&cDmIj=T@j_p+i@2J7wHyZ~S+O9?g`(RO8m$Sc z7kdauKz8$se4}IQfKX*ZfxNK&j*Qkilqvy-Htr;^^BDikp7QF+IC9`Rr2<|jrGTqd zQhAlUoeFk5B!%PoDV!&c!`#Okbf+_0?3tcYMrTEFJbzYcO?Lq+O=bDi)mJpQN` zDQ#AKO8l-9Zy!P6(ka)Q-!8*;DWc}z$qMAsX&ZN4e5sMXWO?5?c<=3K2iDbFk6Wn3 zF+(zicoSv|(ZUiE8RoPoTrS_kx{Jt#JS4jwtup=Y9`9$1&f+EPVhvFXV^fFA~;X+#|RSSKh#Y5z=1Q%O@{m%iKHYbSMm8*MR!bw!& zTV5*LxiZp&uDJbW={~5)b%$+Kf1WGYSRUym&z3AxzAWKDYP`*uR@dM?YhKs$%%;qOf=FbA{7y+uE?$!cI7P@=f9pGV!s_**G zGh<$3>DfrL1=Yj^B34mW4d#cNUvLu({2({PyBl@Gy$!0ZS}h+UIqQejzRTG zTP=lSKtzl;stEuZpU_d8^S+hBMD~g`lQ{g?WN$8nNivFtr_T>VZZha_5DRWOtWfF1 z;ea}+%674Wt{zdL zGQD$!pz~=Ay^!}gTDa6|RHH!F%p!jK;^@Wx`B$wGPDc%a=r`XQ%W#9ei|%MtD?Y-{ zVgAX73r-G?5sx$;-bKYdxFH^({l<#|wYj6?e$VpLwU_AUeve(Nx!1#axNq<#D(gMe zXO_EPV%Fy_y%{tMI`>$9%AbGXRb5BqS|3y8N%tA_XEAG5cJt&igvRp1-t}OxyL*AEAN_TK-tW}W;dCa3<9FU*`HjbVC1MoOnmlGzru{TQiI^}_kUIW755 z{I#!)&4(xB)16ppJ=cwSYWKh^;^c@F7`c;~D#yG5MEL^So8F)QP*3iMe)jx6%N^5r z(v%*L*o<>x5QN&l&hL3{;(c|*SLnLn2v2NT2uBeVs+hDpTnRw>At#?{YVw-*gzpr+ z^r&Q}zEFQME6Os2TKU7TF{bLD_vWmHvksV!(As2cq`R&b6}JP&qU_RU2L~J0VTUz( zvsdg z(EU1s{P^z$pl}F~9L#%Ry4LC`TFdcu(^1gbs>9VuH3X(tmy!4*zk}n5%0{(15B>L& zwrLEOFU@i)VXk2-<*Xurp5i@ghRV6Uh61c%)RJVe8+aUz0|eWoH%SH5-Uzyr7Rnnr zjZT+#4S73tc8a$#Qm~}gxs@27(LOp3B9)el;_*4Y$>cembIQ0;m83?@Y^~2y^B~N$ zh?m!?U+k}w^&YZ)-ipXCbe_W$WkkYA%`+LxOaKHW|7>z_cs!}5T0QS)Mfp4+lo^zX zm%-e_dblTdGGU>tt4%(2Gog^wO z1Z_3d*)0KWws!RNt{#bsKO64)Om8rVL4k^lcq1QdG>jw#6RR=eqQ`##wIBhW=bI&-O-j8rV2YoZr1Bk{rxA!=EoEOO@rK8QpRAz%FWg;H$ zc^50%+Af|HmlWcbY3VL-m!<~b&+<%XfqEe}{P3H%NM{rb?tMZ?_i*6%zW%D=_lDq` z?`XYuZjpd>UyX$vsr=By*OH9_Ew{tpMYz12c-5!)@8~6tE@jrr@BQ=$bCFQC{Oke* zARn6}UH<@se=bx{XTmFm^U(sC9oEDu!ItI3I#iu&^`{;pEzSB3WO<}X-1fS1ZK7Ub z6%gv_;|EULzPZw{*$;m+SBX7jTIyF+`8bYQiZ`SLsNo?K7E}>t~P4+{9rJ(HYpdhrsu|uT7qxkOim1w zNnU#F;Dgqib{uOW>@%&C6L5Jbvtts=pGg)2T9WHAlC!~7-3>YmXcl9u^xH*q=b9$F z9q6gVNOz}?IPHQZGr-}t0P-=l{3mI3C}dwp?D*z5#Pqx8s#^Zo>cLpFLlDtE=DPd6 zw*kxYNh#sD_#q?|c^+9q+&jUIkv2!v@N4G$NZ!5|Y=^+Atg(gcbC~Bk^G2o8sh<%7 zT&kz%E{~-)u%k&6!XZv;cOt#!pl5Gt)s`=ip2npu!U%;g{WUv2E~6Jo79!RTOHD?Q z=&YszstuO>MdUk@*0-Qv6Wsx2)m3Q1&#{SxvG@7p&qVwH-ub2>72_oN6c2P_Rvrz9 z9~g+6KvJm|;(?ZRMK%&aA!6YBX}gpGa}`&T#CzD*M!Ok4TvB^k|Wc_Y->SoviSo^vd1V z%jARMnt7hnW}SO8w8oNr32{w{4`QV7c`Yi<>?@!u!rEoG2<@JWz$m`kQhZW=)m6U3 z2}3~Q69KPbqvHwg@8!pkm~N9M-7~cX`_Oaqgr)!*p_|4rUn_BMvW5Y=`7Nefj-@+o zuKs|NH_eU9eS{Y*JZ@$T{SL?%<_*~{Mqb%vE0h~17-WJ1{#R$cm14@LsSyc-TiI~QOXx+ zfn5`oR#}sy2=aE)hmoHC0@VANR-#+WcMwDBn+QVht7Js}eq1vNNEmq~mx%I;uiWm} ztao8ExlL!;v!Jpd{1S0fB4}oFR?H6VMTj)`=*1v!L9dF%xi|iUm89(wV|mAco;C6| zAsQFWk_jl%rR|v|&nlZ;%9f3&pz>NzOS3c*Z?1N zerp6{6H=zxI7`M7;Oi1&U z6qVGiUa7TG*}L_*O}JO1-g>$~W^V!co3;@unXE;=Rw~+Ac!B#5i$&`vkKYaZ6DoWp zNogUR@>z=bR%NqAiWG@&ED|m}1gpL0YSoqH+$~ESl+>^4G>01IiriV|vc5Pa{+Y7& zWXno89Ez*8v2In54_RfikDADJ*=6(@I=N=6gno-H%1-_QnIBd(=&W1p#H7zU&h|J?0dHCS6qJxcDQz*x*gYIWQSS2kY$ma}{`zwmC2 zi1&8D+D05T1Ms^mi^*Q-lX}IMfbBTR%j<4*rOw0Let_CzJVu z_h)riJVmT<+qlbLkCub~Js|q{Flf3#tCCs0@r=hpWQ!b(iNg3r?4?8M zT*q;A67HCbKeW-q6ymSiZTwn|3*%}X?P82;jE6%MCFc!_&bWJ`{2OCx<364x3!SEq zw~b2gZ|aGe7T)+}2&`~WCuDDdiM{tH%ofu5e&IkSofo_@r3DSyt^_UJ-UmhlN~9zs z>)nc_)vHc1^m%>{CKuaD)B~YEr17G<5fUfYDw`8xhZAgN)g?>QtCDA`MJiOZ^8Gk% zC+sbod3BmOG$|$nzZ*QuIoMT4tdA+#`Xx;eN-DExmBmCEv^%EnO=Yrp`MqT4f}t<; zjbg#(GSef#_{E7!^Fu9SEHVKW$XwCDL({KbHiI(bNUja_XQnvYKo^;~#5JvxPG6agvU2CtSEexSt7;cb)?IQd;b61glDdCd3y zs-(mrV{F;5m9Eh##5Tvsv^m-CG+!m1+q;YT#j&%i8jDo4EG5&#T-~N2G`L{CG~hVD zx=XOUqj*#0cX)2n8==o7jcW_9q~36Ude5dUt_|c9B?y9@XcY4fhYZBoktbW2WY={& zHxvHInw7bIR#=bMhjlXEtDeUy3XD4_fKms4t0SJV?N9d7GesAeYS;LbH}$rA+srfzy>GNqz0g z^p^bFP<y523*!-qQ}NtdfU-8==XsqJRWDVJnH>KGUqCgeH%ylfLi80kbR9I=(!yKo_ z?p_QOtWi=}Oi^JU)h>UmSz2JSC6uVMctUO06yf81(t5b{UDusGWwC3+fzx}8j?-tJ zY7FnjH^9^_8aucjHN`!UPkth)FLyGHyy-VwtMipG0Q_XC#&}B>Z6yx!;f4>->=&X! z)D@G|r>icQvL&%%h;StzOu0`IliP`Bs=EJJAhQK`lG(7p^jz@$Cd`9zxQygbaka=EG*;Wk z>=yZ4or>`rs3IwX&TkVkx4^z*+>+nf^)saf5D561n)lSG997wZn3vy~nvxuaKcdtm30 zEXXFFDEVxP#D(eZ)V@M5T|T@cYP+``z?L%7^scn6*KTWR%#PSfsqL$y1=FVn9j*yo zepJIdUo1K)z|`oRk9xM7TL|#MrTnhz$I3UFa2b81iHW0(CX8YfU6^PU-0^6utK~vj z(48MfnDCeTJxpg_IBU%71L5*aWrF=f)gVwT<~?I{)fiCLwE|IfI47{#r7vLA_?j{CY7{4W@n_c8(-5g;q8nWdi8R?T$c0^=i0;mA57}5b zKFZDInehY}z%Nkv&-QrIUcEJl1twdk2be!wAiL)+=jp^_jP`wKxy0F?!ew3H(Esiq z{biYPqriB(T-%|^!m@-x@^FLUp|pGMapqglE7S|SKTSv%R%;2KGG5%8Xe2^DCEQDJ z#@ks$t251S!)GK*n47vGdX;e&Q#fn%`Dfc^^ z*N!81i)Y;iR_2#8!VX|;hkEm@OAG;y@9#d<702E}qQ^(M7E3F>GhvO4IAJ$0aN`q? zc5G%^0fux+Ji=HsLf&Y@iN;Mw?xbo8gm9Q7F>Bom!E4$=gJtJ2SW_tw?=&}wb}*)% zm+qznui~$A%1G1^%aIy|QOaRb$LK?52#lr#iOpfoS#EB|^jPj^dGpcG&GPUB7IgcL z3HU~V3+JYps^1s6+K!kC-Fi%~6LsXg?3B*^J+bC3a)}%;-&VoGOM|M8tFi5fYN#KI z?*2G_BC3-gJvs2EvZsnk-Rusefb(91F>D8Ef;CxddihBuDQsDdO}B+nZiUI3Ch0mS zE*w~(m^y-PyhAv=oxK7O0^7H&dtUL{lqzC-Qr;?u4<1r}m-W&|e+Q#2-V^0J!Md;- zTimhvpGSxt~d7bRwk6e@48 zIqI5K32V|2PTxp(c>o8n$Onch5RCPIx`FJDcWpJfT_E&+{vs8I50ZlzR1@CU2ML4W zI!wub(i_0(t%@b1+vdOQEIZHQmMhF;Lap(XQw-Qs>$aE- z?ng&+^g)fawPUkPoij~+Rno(NV@ax^73F(-AXr|ACLNhY<=o{~?kd-*R#`mP{Gz+T)^KfO z@cw&Srx-*5T9Iqw`o`g+qVj^nFF4hKCY`&AahJ|7$2vpxf@N&ytyL^Lj#Kx2pZC&Fb$b1Agu2RzL~zxSX)MSI?Av_e zs<2|mw;oh@E2j^pg!{zay^93!uQpwP7v_6#?)uADl;V+?lH=B8!u-;Kj6hh*=BC#9 z#q83)WqjBtO$EKfAeqNF^_|7UmqwvGedR-lal&C%tBO#HUYB1G{d54B@VA$fRJ9&; z3g-P{b8|*_bC%ZDhth<$U;K@<fq9p8Bq$_%qu*!shX?W)PX{tmNU#+^WTdz_%f4olDZ91xr`#vpbdnjRG*?>MD_)-nXQo zZIFdDBl5Cj8qq6S#V1uHF_&nUA17?{Zx5${(vc*<0(_wX6vopuBoUWpb&fB@uEuOM z9XDDh`VukzKYrRMSvK4Mj)@9*eXvpwo<+jAcD_fmQev5&A7|3g zeqo4aeNdVz`4kzxC(E?Kco@g&J%tu#JpN77_|LO|qoUK%oDP7b^mTtO5^{RZAewQL z*V4yMO6YoonlhF;Q!nPpC4KVjYC3U8f27(S+t6^G4%yBkM%Hl>3q+3$SYkPX+@OY> z5D-98f}8fb>K&W=91#iuy|=?WGn@v0^}|P&)92``fiIY`K2v7jqW=sHL{F?3G_|`s z5cOS_S5Nu=?6;TThDUsR)2JeHU1U5@#`V@x9zTvD9!XbIhDxnTzpICbxT8J77iE=5 z2(-awiq%VC{Fx%+^I0jar|@}N*jj+2Jb>7aDTxJ?ZNKr9W$RQP|6OQpUK`CgdI1o# zf{@mKiA771_OA#g%ac1GSJs^3RDlkIjy-YLf*>YW7Q(SMlW zjv?1{BpW=#eAur?v&V-rKD+df@Lrew3Iz7`r*Pm!3}URGY^HQh>aWon7s%PkK@Wk@ zdBpomHI!Yu-|lpHF}xI5YN!ihwH;L6Pf4rMBdGf^1E-l|BPNyRc~+#-V|*r&i&UY~ zeg&Y*-{u+)x zb)y}+p^;-CSbbTXSW~#T9XDaq&!>N%mYkj}nLkA^;JJbQxEKU8=#7V1xFUTBPzzww~i){3;eC2VF^h(N@GD{`{T%qxcS9UY=Y2~Ge*Srr7DE+vquyOZU)fW_nqrkP;AaF|xzRbGa>J%g?StWRbtdFe!k^3Vaz=SnTj6)B zxdd#GW-l%`yda5}qfd*qLT_F(dfo!npS+>K0^-EE2v|d`oqL?HcU>v|J?f&o>oP6*%AS4}}*W>wwg68Q}ejKmDM-{{9|@YsFHI z`u)F+TRqYrIM3beQ(cq)L%ROY?})F&VZ;A#x(mj5iGPKyn_&>l|!{7Db=^ZHi@AWvZ;NwM&*i(_(acmvppaF!o^gfl=4}f56snSnz%qLo!0ON!0)7${5rSe<+#Gm6EX> zVB*>fBX9N+J=yN<-rpOY%bKI3*{LZ8Zq5T2aezp<+5KtS66D|3aud$EFtb9{xbndDgKSOPaS)ANRe$ zOlmF?WhDrxUaINd4teW15>MCOalMEGcA6!I?*A=dr(2#BSXG8uuKH#_PIdhc3IoW- zkESzJUP>c5()C`x8;(Rjfsk0PQNVFBPIBRp5t#TmUxIp)Ph8s<#s{eYy zq3&}}dXhq#1%;JFaBdjT@w3IL!GW@SE*x?l;8o^I+&YUHraIt8y6b|L4Nhg$);%ky zVYgYarUn8wF&~t1qivJI#P6;Q2(p|=F$Uj}(@l5(ag=QZ!sZpsg}r|;8Q6cyp!ElRkL!2Du&B*&Y$QEOJM3-Fe*9`r`{HVOw^OP+;2Q5xvzv5CGU>?)3l-( z1A@m?$!*&-dYr@r^{<0;)UC_J3aCK2M48%8vOSC`hZr_^FKXrM=KK4l9AlTxu zocwQpOlk#pYLCV($>p9@bI2$JfpH7B8(S?KCwX)K4T|VtD1g_}HE|;v95$cQ zX~=|*rIhO|Cke1G@M_HujUNxv-Ce`RU`cA`UW>=8{e-pSgk+lR>KX7!FT%T3*+j;| z8=scM9%d1-Dyh(~>N^LY z>p(9Q;g$7U_a$35N%G4ctcQo(wGfI$@MnWL7rv;!M|%E{q*lGq5pjMrx0U3pf|F8@__xL@mp!TuOYTQC>(4D*wPqf9cv(a8QO}{xw zO_^}&C|PBs7v-b)$j9X-Kr~JB*g~6~$fHuar(E-Swd_%y5%aJU3|{f|YWVov%;mYM z-dew*k!ST-U{R{fd9`paMWR4(*!g$|UkV(TTD8LPaOpS6sL~@Cjx^y}qhmu)FPg*q zC+4D+#A;+m;sFgAlPzT2Ks-!G=+N-!a%vHf7n16A&sRQ(`PrB@7gCRb{HA6Zc;#{D=E*4#A0H(HR|;A(2N}E*S=$yi9lp3p=-;c zLno=$bB`5lD8Sw|+ak*R$Dds=z>ofm6WdN=ELY*@{i@Xihs9I2Tb^6cSHF=`_9zex z(=h5L{;@$*Q)}4n=qoE&j8bj6y`DdIhgc?8lg@1LEPBMZ?XDBX|Ii}k3sZeGzQX%L zz@+R^5*IZBB-L-Zz>ggN^jU=Iw-XDidFm;RT(t!ItQqm_d@o zrwzEQ`{KScJU-jIu3pirvzmtdbXzp&l}?wRnp`rg(w~-p*kf;?BC&C{#%_WNenrdy z3-SpN5kQBeu@SiBnV)Pus`9dbE1-M|{IiM=DK+>!T}-SnWJ2`UchD1RaxgHM7H@QT zY1lR&Bw@Gp9K_vB(=2`eCgQwYo55yE(y6}-jmt1x%%D;%6gJU929$#dur2G6iWecs zH}|d{H4~%uzRHM(Y4lacn8$uwuDkWj#ITy1*eT9#I!Y$WkgPE1mWt#yb`oWV4JOqH zJP}nO@jy323!O(GKl$(}{9q|?B|lmPMGmrleKCfB)y2GIk}PBFQ=7i-Vc_k3oXXee zZ><~=&FSad_1^$Wi9xs8%SR({GJ}zBu~ETlAIYW~xzmfr6waSZ(_qWvez(aqlf9u| zuOsQ9CmxkaAI;8hj`);)=qa$tx7@5ns8mE&1k0WNH);WutOeWMG!|INgFIe|SI)Yalo*J-nzc3d>#74gzaWQoC|cae%6 z31$Tj3qIe-MoP5GGYS;4wP87&%50t8mdo(N`Z#P#?W%QZ7+5*mk$7CKS-B~d@FORd zxz{9rD`2D8sHe9l^0EINVWC{S{Ix_oCAXcn(S`MBhQ!4#`RQld(tv2Og$Ti{#;(pa zdTEesKP>`Dh(yDdfh~J(Ig$8i5mIoOPP<%}L9N6wquJ1C(5jKA7}KtCHXV;`LYz$E z#_{*~;)J>A0DWC7?Y;&$Iza-%(xNL;p|)hrGEGTipGT0sDKE`jIs{k4kGq@QFHN`_ zN&V-&F=T5S3%jRRl4_sXEE@X{8K|LiUOh;SDxv1#z+kcWt#8*Ip!?q5^~To``hDx} za?N^qg#cm&CcFXSL(|%L_kOh!=lQ)3WO7?; zUy8Fz{)Zf&quFy z7g>WNR*ASIX*ss`ay>1{uX`#3j+or}mI zRWYqEUY-8({sb=028?GJHk*V_U?8-BB68NXPHyh*RJnc#k^$lc=yNrP*Dkc!r8aGm zCNm7T=4$%Y>MfJJ@-bFDy=a|}=WWJ0P8)0>1?Qj%cda0;0OB8;h2x$l$)|*mo!0pq z7r8)3DC*eVswfbGE`)C`#sC;ySmO3PC65r!1oi_ieq~19v%n_B@hD%|bzi7;A7xgJ ze^dA^@QJ9n$*9#ezbgy5z02MrA2dVz*UTtjW(GTW?**hEQ8%!@-wpzgL+h}8MPoyE zW@)w^1oyCUICmdit6=5PiKngjtNl2g+b@tVDDrEKEnG&Ck`7Ev7t+o_9;pRXn}mGy z(TqpNRFP{N2E*S^C=ID{LEyxO$mQhhZd&pQfbvj;&qr-$kkQ|4B7Ls>^v9IBYIwd~wN~tzG%dRlRU5^6twL zbbqUI>G*S{!G^8e^^@DZ-GMD9Ex`fcPo(zN@n)qBj8cL@YBMJ|X52qfUcWJ{v?lAF z(!FL3yE<=zQ6OV;7H(9jCr&V~tAQw^_I&2oVEKMg+*0{U0cV|fsTaYHTj8df&Sah0 z5QRX$%ffSsL9V2ByX5X>plz}Mvrg61&JQw=;DetnF1VHI50A;`wu}cis1EHM{z?>9 z)R8eFzO*7}g`(Jq`H4HBGzwih9?Fj_9>l4fMupaW+gfu|lo?lKe%l`7M?=iNn$8Zb z0g*v}RNplIvReRrL7b3XsM69FHTV_jUS+7ax6zy(qs2r!5`?u*L6}JT#tJQWu`J>x zzJN7Mui(s}$RNu|xH@%#dD%%GFvGC!;;Y4DmnGs=(v-FV^9y#HpZVq-NOVgyUEci# z&fXP*$Xi}Kcp!MT-3SXO`C($QU4T{HSw4GJwPr%Fa`8`<$+#kA($x!z+p;6l1!nij zIGUh!fTu{YJ$A&k@3eINmO@S5an91;qp&40odke7hI!Z-ew|zT$^m=XDYv?JqO`O7 z@^1`Cc8fx{yw)Tc@;UI(s$3~^Yr1{Lki7Y?(Iw6wE*oNrtpSg%_D=2}xu&Q(Y5%5Z?@pGyXs#1OQn@^LK0KjV^^B2-+$0u- zuu9%~l(w;Mya9RnOAqSQwAe)qgxqV?mB2QcAL&-l55)&nHI@^MyzCQ2#AUF8KDpp6 zH8{;Y;WLVL_tlHmG^o{c+Qju~Kn`$G!l67ocedoWpQuB>bfdSIFv&2^>h9o`RNXx# zh~h6nffB6@x5Q<0<=5MTwoD@Er+J%vsO4c)mcQ|9?OIY)*RU(5-&Fhgsr7UeXXE~# zCR0&oyf*BVy`$~udQSt~YM1Ur7TuI^>O;EX;-PnQDmJT=XpJ_>b%h7GA;t zhVL3>`h2M*GVxOf@uXHSHVzD`duC#ouI)5rgTNB8SGN#9pHj5B0px(6d|&IVG3j5xAnAnqw4J5GuzQWl}?Qy%`a5Am64p7Plhr~6g@ci`SuMatn=q81*YNq#M_SNnv+5qtvoL3$w{GbwM#y#B>n}4uNcxkUietx$u~dld}cQ*1<1OiOa7bJYyNtBi&f1e#uc19n*411}Gw0vbC^=$uQKBX&x|i3N-AZtY;i53KXa8@qrLz-rW>saZeWsEX z2&tA89d>l*`~_W{1a}WQad(2dySoO5;1b;3-JJ>dVePZ)-o4iT0dLiN zKFzB6*znOuZ>_g}jmQFfKiwCA{(Zr<3oW z6Bgp??YPjw*e4h?TWE0uk(uN}<H@4yzacH}DQJbMHHZ*6JenE{7Y$`J<0e7 zX{A(3+gHS5?Q~TA-mT#z`TR89D z{u*1tgTAxsBvr3s)G47wx(ZKemLF&DfKwJg%We1^5TFXr`aKC^{h3=FU{«iaZVlHgc}HN z7{oHLKUlK>Y;&qsz%ybith1B1%94RITEEKIT~;c3MQPc?Z+bkuj*SnGkT|=~D>BPJGc&Ji;Tj2cqnoyhnXTA^s70v;r=0 z^ha{qW}>nz)YR>Mt9OQZ3q7d|by5=N#GJ&juP^cRdxfUN2*}51SzO_AF(otAEcCby zR@0&V)p#ziS>%pu?va%)3d&GF!3DrTkx|=< z;9RcVDz=#A(qzTa?G^HFZbs!sL)c3QxpB64!Q%Q*JBU4k`YLo>1$wS55eB-!xuM0T zwG~u1b4$7Kj-~kSXP>&tES6P)G4jZ6*IcuGUqHw*p^N^8NHWos;^Peo-Q64O+4>01 zrbEY=UM0g4j1yVncu_Cp`A|l%%ous|NVMAvm~qf__;SIWPt&P;zZ-#)sl(eh;iqU%es;$yT!YPG1YUph^`lt`Anyv_z-r3pW;AcLgjnN zK~_ILxCUIZfKBAmZC^^-${o#&HhoN`DrA}-GRQHww=R_t*h>L9V?CF_ln_T>h^70G zc;2SGM$0@@@n1=nTtL#mK64!X1Z~Kv+7SDSt3D$6GClCg4pA8l?~N#rYJO?FE#+h^ zu;d4)Pu`0KU%ncl=tXTk^qxJ`+khGR3L}*Cvspg-X{&#AnL;Z69Rxym&vd_;9s|8I zypxKwPxV=}KZs?k;^05+?YZc(Ucx5ECtJs(hN+J_I7{iIrc%Q-^GTg0$Tw&J?1s4vbTZX z$kxe{UySn^6CsdMR7x z%n?E+PlcfS(Scp;Pjns_OIVd%8_uKngcJhf>vMuP8dJM%k2**@``9Fs-xp=gn@w@% z#P4QBI$#(otKNI5!>P@po;Zv^Tq`3&!XjWdDd$dXGe(c{1nVyyQrt>RK%PHg-PvsR41BtQs#vH_KauEjr#V| zCQ#?FUK^qjv(H|(NPO1IMeGfuKc!;8y098NdVFbYNPKw={>Q2weG&LL2-eHuWykJ1 z?ggzfIjm@gEVw*kLfOM&7#9kXM$Xe2eFK3J3-0t{Xcu=>FQ^BascyJ_RQHfhcnKMc z)hcS)G9#HGun7=~kZ%n@76S0M!qsaP7|vI$IY6G=xN!6DuR$>JOdU18hFD?7cw?BF zlZ=|R@+?YF_?>Q5>oae6z5?7Lv=$k_jFcP0eL!Dg_gLzBY%*TP#k;mULou%9n>@2@E?ZtFgs7SQ7qItxX#t4iK9HO#FRs`ZkJdJk za7=JM`zXr`)m18an#N)=%n4BjFaN19<5=|U^U$e%n7PD}hiD;V@4fb6K&=%a*aMS{ zG2o8kjS^Y_2c;J(_Kyu`^sjVlLgMq&cZ0;{dh`61?uKX-!RMVjtly8(f7}Gaz`>i1 z&-X-A9@^H%DJ(B<9LIHwG^)pU5SQJO4X+WidYUX^>K(sp$&A6bVYs8l9%ke&P4laB z=z=#H@`L2lLm__R&UznAEKwTvm8FtWcIA=~7S&<^V+qE(bbp)5fHSSsC^9wML9_M| zvDP=kc$A^PS$Sy_!cb@b&dr6BcjC4*ff;-S(!Q`4$F#~=kEPz|I+j?vVC{RIlFwMD zas{1I_A5JL|OuoGVgPic9B*STu{Q#ty>L*=sQM}dYHJ=z};u;*Cl{xl9P{pk_OqkN5rAX~A-Sk{7hyj=#1m>>y=Vr!pUpV3jj-Mfq*LIWa z?Xb5Ltt)J8ey&})x$v%v;sk?c`suQC_`%v=?%)6TxWv~@e`*8RPi`ZBZJ6M5V*j+v z*|poIvy_!0VtC#H>HXFo7k75ofgza}to>b%sQH*I5TOO>~~m zy6duUF&Y!019)G&zH5D++vLfaK~$&_Sy1vw=b5k78uRk7tP}YiswNT}{=m^>(LQ&r zcmIA(cul_5cr$Oz#tf&;DXowx0#K9v1WChWnxINf{3@^uQ31`=4MU9_g*$z#PBjTg zNB1y7+~A!rI+k(*P&YdO=eOAE(f(V1>feG;XHulLIhdLi^8d_<|If`GDwTRbKQbyuB$8Ui7M*_g z-&!!2JkDp!3g*ccJZ)du!7938Y$Slb0*)lyay8#Pq95+logr(<<##0qlu#LO^{W zdSz@h7_%VPX|+ne*#f8OZxS*5^ZhfH?GlqaGNNtf8WJZh^zY3h7W2%))0s^N-E{8X z$2OW?3No8b9r;CneVTh!jnNrPW^MnSSE@H3zqCDRGPZGS7iSrD*65>vs4# zcx$U@lG%O-=K|oG8vYJJz8HsP6dg@f`{MPZv7}tFu}M|b?PO{G%Ldwbs|HJv{JpUI z(e3KXPc{3tcz~3oUlT;haP~Adio*4M zvdl-S{v^84cZ?ooxl##KxvmZe*HJ0r+Khm!hGh$vVk6_fX}}P?;21VTF3sLw>R5(| zwT<|tr-iC9vO~g8&mI%@_F;RA*6V(8p}ZOmq9-3Olll@CEpL~5Xi!7S2^SG^BNG&Ekj& z_OEm>PEqgt;qKZH70LIktX@w{PNAJd21Rm;#W(R6@lZ{qac>#c%QONzXZ9 z%|?hCRe*Ls!}9f}#kCNxXsSqI0G5Qlh9qR}8IV5_2e>0!00GKvSFKE4Z2oewG_%ss zK(@?GtQDSBka4}F!ZSLW9lI7zqt^wXrNj%6l4dYy>VDN?ZU@~GwHTE9<6wxtxk)sg z%tzt1N$N}GbEmR^tU5coYl=`Uw4VFJc!@+l9}qQsC~p}r$`bO!BZ1aQJHhGIu&B96 zy@;D_1F+?SlE~*WKt-4T0d+AvMGA)yk=jC5nh<}gf>f>A0B+!Iv3G_W&#)XWq8OoY zPu=WJ{PE(gx*ec919j0=X(|tn56u0ZRX@?XTN2@@h6eX9y^^@U>6O?%cs1o2nR43M zc=UfnKN|f`$F>odMCLNnT-I=Pz(VzYCCJMX+35Pay>gYEippXtKxRRl>Uu7)ko+za za0O5{3Xex32sx=_3!qbg`02P;oNs)*ulAO2vfd5=2i6_|9jIo_Io($o7QU62@pIv8 zj3<8t+9?4#m18QkYWAoN_7#eMiFLFtuCF%-07@vYG+KcX@>eYs27|w}P^v6)NdN^O zi-i`6W(Uu2i-+@=qsj+GPW2%1i!E~+WPIeGpY(Ul1n1MO0L7n!LooQ3zb;&FJ=+Q9 z7;F8%@4wn&BjoNS}@52R?Um3tL9^S~Z z8~K&bQGtF7M~K&Hf1C~i|ku+w0IvIhHH?_ zuqC}R6G2>jjH~Vqf@2H5feIYO7E7<3HFgy@fx-B8nFnNN-kyNzp_)x)MkY6x9;AEc zXFD+AD}z@s#q+VuK85<4Yj}1iuWj6d8p+7});z~3sbt%H@s!0px6iA4&elFp+t=e^ zR&(ze9C*bmS11Y^(8!FlLcL;??i^z|X4T1w_~rDH^+?ttAs&D5J`&kY$Xp}wa6Jz> zYDL0xgOahpDL{^--8~@Varr~{VZ|yRf7WBCWZBC> z7>A;l*;p~-*mWYl6LJZ2oH^@Hh)iT^f5Xe1!XwM=U@*Tv80q{WO|U2X>ft!5nh-09 zKu(MH>!|}MEdW6-2*W2J!0jnlH0sL)=Nx|;x0AGocDvBc$s^tScBvG{ebm#RP_%jt z)mq)K+*5SAPVvGc0$0v^N_hP1-9NYZ!L?FUC8&Kse2!>}a)Wpcckxj4*sO_nwr-5b zb>DZLy!a$`YiXC8Ca2n;x?@`a)6SebJ%*Yw>>zGEL>H_r%UE}uTX_gD0ztk~&@Z^TC>R$;x z&!1qILPz4yic5_5xD6>ZRN$crl)y)1MYFo2eG=|D)6!@C3&kU{ z15p$;S9>cMWpS|FV7feQ@mX;&@{(?Iqk#=xKalr5?kEE6S3 z_!3Vq^S@A-XhJA8#YZ`P4SuG+hlLs7-2I5BXotas2Cc|U+j$2a`!OWM=RFpX^>YC4 zJwh}~bHy{CQBqRca@u@KD|gkwFLI#PxeI{tggd-E5<2o$I7~w zIHflM=cF4na@8dvr^vO9YjJR>Ala)ki>TiUhotFoSGA_>!g)}{Jcs-HONKsy{MEci z^CQgTadfkBVLTKkm#M9>F8J(3`05f$|IB488p zeBL})@NGW~o{M!7I|E4NvXYt$b!-pRU5lt3q4>lLiZmBIz%lLE^>3R*TKBecW}AuO zP@_j3Q^(If4~ZUJ{n$1FuH7aSaeEqz97E)-){q-~T z_LnCC2d`ZtyPPs;I;W5+2i_+L-Tq`1^|(@#7+3WMkH9XpYYVC}sk7qRb-Cq-Zbkgq zZ!(<^5pkNLs7T|Ue~ef+utehmn@9rWQNj!E*?+c39|o(`#I@`}8GX42b|VECU&aM? zI<|oGq14{dR%L$2$5QNehsAN?unHr+ih5#grQ0*VoLls>UXF=+Fs?N&L+X_&wHqtm zh-Cyl*Sj`c)a!SJDClDY&KO|{?M}iU^aGY}${Eco4`ut@JdZnR+rQ(QswO@{oZc#5 z_r*A&$E27D2`D#eDqDFjuXFpFk9J8D+T$;o53Of8!+w28 zYbPRCUT}N1TE1|gjJ(UJxD!l*?@~mgQfDfVV^~Jq&F%Ch=Gu1N2>!vdc*}A801k5c z4N;S;(J+j{p@48n)A;rGpqxH`&D_s!Nz?h5Rcew;$;}L@X@E_>{FdA&SJW_2wFB&VTZVxKT_yS5})H2Ju^ll-%q6TxV(rSXMZI z9FVzohKTB;Hz0~8n74pQzRe2#% z5^2~lc|_DXJ?DCi^q9hXv;}ylb(fsq<(|%3&ccE!emRxww)TE&ZySN*uv)~{jVR{T z>?UTq+#1ck!86kZQl!e$`OG=N-8SKKnl`8s@z~iwP)fv$N|X;Kd{oop8rUgYr=s4T zFgRC%U9bmNq*#6%W1qVoNpXrbwH!^wLzc7O9?m_vzBUZ%VBcZOdh;ot_TO3nWqw3_ zde)4ENg31bVAt&rP!(KeivB8-^0}g40#WcTgCsdWuQ+;i%gH?17D--h^acyj#fP(m z={Oo(;Ph$oKR=YldyrP7Y9ysH-u*zHF4799z5oeRsD4r`(hTEW!S6$)c3*(kq1Ulb zN@gq1B_`Uq98Hx~45Q8p!*g8x6;mC+wex6>Dt%E;FuVG=O6#r|M@{IyT+D-k?En{) z&{f#YHNgp}c}tyh4BZ@M{n=`G;JA=)e7Yo=qg$tnQ}ThfrC|p_``JNT`#<35_l6ZY zk0~P8twP-NJDA0hxe07i;spg<)euYZSScH(V$^CAPGA&C)#-T%w-g@@@lQgi*+71I<2AvxP5Lf3rzc5SPP( zRaGGJaf-?V9C4}DO0(3Rs(&`Fw4FMG6t<^BCNKL-^R)7?8`QFpZ6G}Ajr@-j#T2Ga z2ubR;CIP99sY1Cy>x-UX4BYhJ;rd6QfIza9#LFP8LtDslC&>sNas`xv>?SoCr_<#e zBYJJQ7{kOu(WtJ54DL9YQ0sy*Gu!i&0P6kWAIA$)hJ4SDry|ph<(?6(>P+-~E)Gm$ zu=B^0()VWf$%{e{SLlO{O}r-OP~ZT29(adgri3va5UL`>Weu<_l-zvZAtJh!QzK@7 zbp7$2(gh#g<^|bs>m}nCo$}{ayLj}%wIED{P8e6h=faLqDq54#Qo(vGU?IiJLunJLG*(l>;5ejmEN%VNUHgonMWxr%ZF| zl{2w_5+w2}O?6Dn7Ct<_zf5pB6+-PAzV3japR3V#6pvyKerP1(KJko-r(c1B{jlS% z=#8t>;;iH@N-dTAhgzLkJJ{!oNy1NlLTVG}0?f*B86&`rOD9Ll20xWuqVww*yQGD& z{Q-i`zHTZC3XdgU86-ukc%Z+A6Okf2xUCpr(-0?c@loq4dEpeckAY)wy`sIm$UPBp zCp?!NHTFSZUw^Qs@I&C@HS{-jbh`4Gl_M!I?5Ke;p2UDkt>s5TelN zv%Aa!gqBDwPaEZIYHoL6A%5T?2Z+Mw?`eCHe&IH90{M4YQqQxCd8}@)ZS=@nj>$+7 z5_nTB`dqV|Xw@C$AnBe_jz4Eb~ zhFN;+qY^F2Ix5TaQ2dJk5m#$Dp=lWYcxT{9>*H;a$nD#B*iVmNXJEcN=$>y}w|tQg z8sxR1t^k#$O8hvvNL-MN^i3Ht$Rq5q7>N8vw%-b4)-syfl*v$IAYB6UyMGmRuA7AL z+eaO)0JF>D9N{7trB399*4;uq{W^rbNPcC?b8kPa1~a9M3t?Xuipp{#1Er}HFUHD& z_O{W_==u4;QMHn%THx|y;M2&v(&aDOgrnhciE5`POz&rvnUK91R{hi&sP+7Ql|e_t zph&NU?Hnh8fu#+%qXlhKQ}H{2C_}+mb~d5aEanQ0>^nN;kEMh@VeVi|heV#?q%Of7 zK7x;^AJ&-md(7r@*+DR&C+@_hGJ%7$DT41Avh{d^Lq2sgKwCxJJ6>Mlj6FTiQc0zS zvC1hCH#|1;OTOnhK>Nw7$)K-Q|HH`DRP@_+Xa6w%;7m{!7QF43yeNu=614|->yKx; z-jx(0G73e}_ipL_EN>X>tJ)D+m`Rbe=VFwC_^mwee=kUowN$k}*okzf<8m{14ZqnD zE?W#gS1S{6bw>B?QmL2pfZ{&d97yFvE>o}jjTX^uq}#O>xkfeLlHIrwnlXjs<_$Uj zL}|}Um`{`mx((Bghcx^VhK1`U+u0&710({;Z?AK354!!mXB>ULk=*bd8Q^tmCY{ge zbwvTmj>@vD6`+Np!}*WoZ<%On$Q?EH;EehhpiiX%GCi}O?@PVqV_Z_yb7wCgOk;6$ zk7N{zKX2J!Jf?iV<2*QsZPInPJbn68 zw`R)P;AQ@}rt^ZP6O(Ap)0A%z(yn?ERmkp_JAQEL8LNTbCY3Bv0CPI21hqc@Mj&Wd zfY|ZF)TdPxYkFzY7Icxti1X>$l)Co^PWK@s$hQkpq#kl|#Qp2J6++q#tDN}Q7l*`< z*)~mqc?pwVZH6Y>7s`qy!VKaW3{?-^tX&W7cQ$#QDIJ~PassgCb-&U1h~a|TC@h}R z#z@+b2_j{UC9!A|eVZMN4!!iZayBUN=&+f#7b|TG7B(Rp_B9$#6c}2{>~QZd9uHEB z{X=Kecy9>a{)V?|sv?&!>wTklDtFMrxb`P>`EtX8+M>~V;?9(W*x@i%!B}q{i7wR} z(mpxZ+O1f5`)S0cGu*WXn~^Rxl8`rNc(6^QRVhhEJD3ank~PtMkBkgv zuM_omfBVTf{Um0MZ@)Nx+9 z$$_Uz!tv39$sn;$+GdMx`3b!{!-xz# zUSKzHu(rJ=r5{{B=rdlRh3G*$Ghsa>kaf@@6Y~wvKsoK$NQAdraB6(OX}3_`Q@|e? z;r3*D;Hg2d!6)HaV@Tq+zdB3DFZtMFRen5ZVAN$y=W>@yEK?op zpy**kpTTWSuzj(D0F@hfIEC{lb(`PBI*qy^)Es)V~_3Im`M8Uc+fttkYczxPH=3d-g@p1gJhjoE<0b$S>XIH># zy>n8msdRzd`HrGtK|Iq=qe*8s66E05alncWhSDckfROoEsE=tw2tn8QwyKV;Q#_fB zuFV=%RgL9Jr^z(B zKTzz3OL2*Fv__-;#ED9$Ld$gk-AE;>xlEA1tKT+r&}Wq~y^(ULFqS~=#G_Pvt>BKJ z&pQa6u%c|xAVX26)%I-AGftCL%UQ4)+h_Z&%6U` zhN|oW-350pH|uOIc=A=u-1Sb96_v!fbb%G5dZUXMl##N1uHq^E=$ctITVR8MMi2M> zMrltc>`ld$^BIl;9HWINN!R*MbP_0zjNcj2hH=yrYafvddIG@<4{J7qv!-s}k785X zTCSe1NsKtC14r7gA}JigYlLM*dOkqq}-6Ap2>lbIXOdjhDsPC&5XVb!3Q6)a8$oY2& zfqXt_tHm5G3BEaL9ARi$UMIxI`M9XBBcq5e31Pz*x`RC@-6opDuhA!s-!l+RNxvv2 z;+Zhs@_r$X;Jngv1i8!h4O4}E==WX&wq3X$g6jZxQ^yZ-*>?xS@40P{>orol{V&^( z(1v-wLmskm(x`lJ5vecZpmD-un_vFT&`y2vJXxkeakJ8CfC*~Muj=C=#E~5yYipAo z#1>zzijip?L>JYjzV>4ab%pn@)Un^cK)$*V)!7wsyyM)j>AYJ<5_it66LNg~?991t zPHpX;D&VkZzymQR&~oLHT(L~dV#D)xw8PIOSHX^JhkKg@iNXTLYamk#p_g%K+dI|q zu{ow{*6N-z9RwVkzT8&6llJML2o?xHqM_F+6Zxi_CE5)Gl9c_Clil)C$I}~mD4f*j zF;5sEeA$MkEvS^zKE6|lYJb)dPv&VLOc@_3&RNPNl;(ET$+U=xJYifW>sH&fMuyur z1qTo5EHnj~>{9E?r5X#YxhUin4f z9Rr=>d&z&_{y+b}{@|d&jTA2Whxz-HlET3OFaLjkBDsKFnD>D7<2L5M-t>PT^ai{L z@5)VlwVAR1aY=*-Lavec8bAKxwY2~53w;D?0lQeGR*(@7@$Z*9aw5DwXhymsOWZ?4 z0Isk9`z;7T(gid$f4YUtgfN)DUs{tB0SY408j$Dqw{LloqFKTPbzxclk?8%$rL#f` zQiRzY?QVI#zkN#pEr<>J>v{;=9;N<2E;&!3qxm1oRp`=W{71cBYx$J`XsvGqS6PNn z$4>2kPI&viNIa29!nE9+aGz(;+!ra}m`pdc|JfdzePJ;~5fL0qZ4w2%YKXAr?L6!j zOJa-l$G49>#l&~!La?adtc4jM?IosCwjVvo)N!3TyYGdF&VuKf!5`#?g{FGqo=8+LIa7?jaZ2fkkS|6+6&@0%wS9#tOcrV>bz@xnMuny-&*8)q zbKm}!l8r0ZX~(K>$@cklmdpzJrf86Nac4A*?N3ly^H8FA|4pPicWf$Az0PICG5K`H zBF_~$V0@*u&$0ksq{j~HvGC&7Mb}K=hSeNZ`JC&AEARJ~LTBfrJGEj3>koNit3RuE zOa#TEXS3a47ACLoB)~?IkvCgK2NM@#o@WGoC%)2SQkm#ED-8s^7UxfOS&=WdWo8=e zR(BEb(u<~ZeyAM)8TZ%c^Kcl&oEg&c&9|{!T2O;Jl~Ap7)?DjJNhiy{Dh9cYPZD-S zu6k24Fa}!y11iJV5sL5e2=x19jGu8)Y6Fw8xR0F#LK6X(_eOs(t|1&B@hxiFHpXm! zRWJ=$j?TZG4X04Y%ye4?7;M=j-gD!OKB8zbXo<`YpTNzVq-FPx73YWdkI?AD;}mlB*$t!a8n<$^g0CdbV>MYcKOpC6aKe>{$A zsW;ltkECBxTCTJNw%t8Bh{sShmC;JZuyJM$pJVpaVCj(Gi>&=wSNIILiLW*grHY2^ z9X==xCbC34CM-P17?<1@e1Wn56D#I^L|q+3V>t@>4ju#g`5Q2St{IC<3(>Gh-pjrl zjHgG#n*YXyn&<((9OK_QcP1Yhl6pI)Oe1Kit`h!vsIG)sBw6IgC$DJ#dC-U7O0+n) z==%HB$fZHN!k#b3mmdb9b{JL5hM5|`%qi)^kACbg0DLSv%2T$lrA;|ar^)}+7%FYQ zD1oNK*9f63X4Qw8vtyOV(=?n1tA>#z6_e|Z16 z!wlhp#3d0(%pFXjme|7UWkNBQ*2#suuMttFHMNflki~_A91rn2t+lTWp-2*8hn$l^ z;@dE@T_Tj{LTw5l&u%JP z|I=`z2Yw2=r^!BHZ>Ee}n`Xz8IeMln=?jHO?QOuox8ZMZN>qW~%~R1i*`hEwO-BY! zQXE(JIQ$PhFSA0ekw0)>;j@V#z2PtyVoX5R&LyiB2%9{1{%DeKpbF zr1%6x3Oo+5T|I?P?lowM)B-#_!@*nmN1dBvenDQ4R5tnVbQYezaH4rP4BIz1qXNAH z3OGf5a|zxc3)1@RiuQTQ@Z>PX60B={qyoS^Z3xNl`Vu$5*!>38NB3&D#@%#I!u}(t z#nK&tQu%_+F{cmbQeTFfIi3vS((|EU9sg3xlm}rGQt|k zls3OXl>_}nzmuvy;vA~*jC{l4$s-ep2t1F6eJ8VpD^sE82ZCIe?K;#V$)a}PmH+X9(gPyuEt(6pZninE@Dt#$U`O!_f@jP zUF?j^N*`Ek|S^rJ%VjOdg-42=J%p~1Xvb}*#B(qL}l1;%MK z^1U8JgZk*?TQf4goQ_^NpnP&%qMj;yOo^ocy>->slPOlOgKp(|5XyVAzil>`$x~;d zt#+(CkVqESY&Fw!_bCj=I){n^j`8b}@7{C{nP=r`_JTv8st41_l8dT)X;*M}`Lc)$ z3|SzbL^WLs*|;ykQJr@Spf4& zc7ys&n2L_m*B_>PuVEEs($;b3dw!Y5t%9ZFnN2ePR3NgcR9us$^?4xuaCYflg3gVc zq4Ek4iSng8us#n0oNS*47OOizp#sCo|3>iNcPcND*>T_PHriPnqH%AIjb+LLyStC1 z@Co5?j-AfpV`;j1WuhF;FdW82V!tsaiz)b+eX)%=KD_T<^ke^NPz_?CExj_q=mbRP z&cm|di=zE97)MtaY2~7o^@WU9vww~+t0m{SYjYFP9bY3Kk+M?i*C%oKQq?LZWW1>m ztL3)t$IyVuaDo|7XKJn3uS7ws0w8y(+Fye$(z&YuR;Dp`tCbV0k->8ZEI;k+(=iAt zjH!MbE%JgiDqA_mAoIq)P8=)rPmPk>i1xMH)htt-Ke@+a{df#zZ+|ZjdH{T-dY!mJ zW^z4&CNwlWkR{$S?b{&+s$2?p}ve+<55YoVFvAwksHBIn7vnSGDg=s z>o?qeL#j^b<YjPPad$C$Ns7y?q^$R?yC;p?})pyzhdGK^r}uGxlq1Vii;Wh7!Ber+IiZc9Hqr zAAACN%Us@~c=QnjAg*K{1t(M{8=tmq2G}f}g_RcAPDb&q!+qa{ptW{yrc)^gF&mj~ ztYcwkeE!L58nQr~K62xN9b&;J$??VziWrAMv&!|z8!0$u`ht`{9H@24#E;YSeC%A0 z<)6XE$ylew)3DC2H|a;0eS?8yV*ICU8=Y1K)E6xr*Xrn0dJV%0)e@5?pmCq9|R}umm>kg1^ z&csW}hDW6Ue-dcI$fVFYTjt!XdetDqD4FE7ja zSFeo$I+XyC7N4vxxiNeqPFM9hL;JKy5Ev8dc5C30mbTaM#^ONjY#*QA^p6gm+cN&@ z=X>=AqT^2PUPPwY}nrS4_hige@_-Nr(VhEluF-br%QwMHXsgE8Ep zx)~A^xxsKXjyB|PCXrZlXXXYWV225pVnpA4@m9IY+oK4P4Jw737 zmRktcc_O+aoFpzU&^3lcBEQky7Lr+Ro>2gWUFkMDPEe(Nf4d^Rh&JK(W#<_dmX=2T zeU?z5G~OI1O$nLqPXfzrG`iyT{OOVgc@J${dd0J>7{8-==06QO?SfKJwN8n07d^1y zB(ve_^@SUvk}Pdjk=9VKwThsn;V)Hsg}qQm(^GIp4S)%kGi@G5x3FMe&~DXcUwVOJ z>{&ZFMz~|3$yQKjpAo*e^1Ho!Vq70pMJ2HMThC3I{Re5n^CTl!pj)tFM zU--Tu>|PAei$sLc9`y`dUQH>uOtYfQKzB;+esaJ%AM56y)5#(6bBLs8)Lp2uei1vE z%E}+R46%rSiL{@)^^H{G%@eacHky~3zq(h`qLz;Bpyse5T#aO8H%xv~CRx-*0PAj1 zT=~Ay9#I&im9!g%rp9`PGjgAUwMoR1avp7VIb=IWDjoA^1H@ct?DOvlZ<7i_X}`f! zc`@C>Z&M;qDmJR9AdqmWr$}k2_<8M&pxlLG3k!wPK2UlS9^`cvg`xK4#qYM4 zaGv6!q!)EiK;4nmimJeJg25=Oo~*{r@ni(ds9f3yZ~2U}SwdZ4I9-7JBaPpa?fS0N zmsigF?jD5wNjN=or4|4FYgO`(3G%WH-kLFfjtT~c0|WKSvC}3*)U%}(fr&2!}SAQ1RL%8>TyFrs^^ zzIB}ExPQFnU_NRSNUx2)IhVrV!1KQ0n^n7gDKoMY(BqSYMovJF*VwO?nQJ|yQvb49 z(WGS4E!Qr4UuUHh$86-r0bv>#*@F%Z?cGm7N~ams$0Tg?htKaksxZot4{dZpyo*k5 zfkZj)Oz!L*H)N%RP5wFibX%SC5u@FF zr;?8T^O)dQ!R=Ho15AplH2+>Y>_}=??M4Qz=FE-2O)hew*Jd|>|Bs0l3I7KQ#Gh4_ z^Xrep3I&2OgMX+)KI+rabzQf@2H?37FoEkwP%&xzW==~trfNK@Da&j)@MPnkgPWq} ztP_C%P5)wD7XS2Q2k=rlNB z2PIWL#%jCWh3(o0WZn(C&h7=H(xoZ;VNr0DdO0<1XILv5$%~TEvYK`Uj#Qgl5n46J z5P5e<(x3^B`|P%DOZ0un6A4XO7+arVk}K)UuV$jN=pdMGu;v#4FxZJ`m?wXlk38=2 z3~`Ywb!Uo&W%wt0)~QT5p-6^1&%u#)A4H4{&j6`QzS6W>G3rE4OCdfVf3glSwKRjs zHlNEh<;um|#Ri=#&KpQ#8HxB4L6=LTtXD|7YXJ=>kgEF!9VRpb=iXLWTr;u(4Fe`W7FvoN1(Y)wJHi%eSlzoUagSG{#})Wx&oKObs~EX5i*h zjOwK6vc~=1v>YZGo2$5;$Jl9TWeTuWC{l)qlz#6t_$HHBR3TrM5h-EgPFQlN_syQJ z!rG>xtRS5KNqBw^gw^tMp0dGUQW>H2CUQRRTj*}QB!0UMxa&PKNdaB^!q%o0I7O+q zIRMFcOgNPc=2C!HcRGN`a?iJAR`%l>f;%?JU1+_(yH-?IzErxdO3!SO@u^sG+FKTC zp5BxC^DLwaN7sdp@-r~H!PiA%E{pmF3TT*N6kS6klEK7l7%C(6>L0Dlo&MDQ{n17z zh%6+$RSFpXk$gzAf7u;Cdcb}RcB`HzLY{Pg-_%&F`^`-`AYlEcBnKlh-5KVJ>KZ1p z?$Ml&c-*kDb3hdg9f$Owh7UERO@7MrFk7Q*pDlvXX|lSJ0@bY?T{_I%6*??S`{l`Q zd>^yPxe%CM^MhWO!SRFTTkJ>F)J!TV*va^jU&!m7Rw3^Oe-k5k-g4&aUhOsUWHD2! z+G&g}yX~qP;*LHCJrTEMxXC!78fwEvT9FF{`y!iiwpguUR%#K;NV23=-=+v)Zz?Q$9509@K^&fl#&ASjZplWY zdnJ+hR}1v>m9!Aaytjy5^9IRk^0E*g$r~wSV9aNIA8!3MZV?ZV2tVKzGdxIUy%%#E zxjKvX4>biE>4;l0qfK`g84Nr8K2>lllB>Q#@NnjoG%@2918g^`@A9@}Sh4RVo{Hrp zGtz>RlZ%Lqdv&a-pzu@{hw`fL&J#887s~;O+EO!v*sPW3?Q+`NYnhaKI!lo8TXRQw zeeo!V-EBOGQaOK|s16x_8ziX^cttQ~n2x=JDXFA8+CgItQy!f5>cGNBV0s#tu<^HXm^@hx)#aOitz5lgswywnXXu=plb73`Kc;2uBQs0cMwvqaqZI z%6&c4p)HW>Y*@6hG3pKFV)nZXyRE4@m)fHWSJ$)rav9p2(~p^o`;ZaUggmu5$vpex z`h=E?%?W@yEmOw%9r{RmYZyMOM=v^~XVmK$*+zdIBj4NL3-}0}qu*iXE%1HgL3Gd* zR_DDxOkfJ`O&17b-K*&**getpfxw1XSP?$!Vuu9fBRi)T@X0j2db@YwcnJ5?3gX_4 z`*rjuEXX-L+jK+p$n02)07rLnXU>#k;@ItWr_dQr@a{!MX<}j?SEHjD%aW~2CTnY2xviH^KA{cCV$l)w4Sb-AJ zm$lp{ld69?6BUn8mqd0mn@zt41+MWoABm)J=l5_U$@?LdQU7y$U)UE`CdcjG{*Q(= zR|=Casm#uZ_{-y+l4F~FASyj^?`}k^00H|^=6DY1%s_iwbO_niVupyD}oaj@8c zm$rF1P<+m9|7Xpq_WL!#V57zN4tDQ{?WK9&J^$U5Lf?|}GB1{miOa1;oT0v=Uk!9F|X#LV}661D4Nda4EBY@NEsz zh+8+ZO9w?Ya}%Wq6Q2o`4ZKx>b`?62G(n{tAMW~}?|d>6$Nm@W+$3Rv1Y_&jeD*t^ z>s59A51>8Qo|`Sp%kGq;DjOhIhM0}TbB6KDHX6|b`24Wcj=%uWzW91NY=~j=>Ifl@C8PFhZgq+zLf((ivx#0IoIMKu^R%=N zZnDQ|I&Qk;^Rg#$X6PA5_wEl)_`*U05HysZx~EB^aE4b{ca?Wq(!z#zY8TuqJ%V$X zD>t@pK=MO69so{5$^_scFufw_2#_x{&^B!NOYgc{9{@0b#&|TW*2h>#pSd&jf;45Q z%fJ{Q8BB{SB{4_YBcR0$(N%-l(QP!=Lr~sP6)T3vIC?Bh^M&{vv+|2O0SW zGLe#q%?(9sbN;~i-fN*szq$8LzRW--gk>IyNu^xUf|mQIl;pShkn=byNG@T4SggLE zVvv6!I(kTu)m>Qn#b2NSWA#4)C2tXA?|$nYmnpQUi@(ERz#(-F4-K zGZO${CE%gIj=TS?0#Fi4;FWgpqPi6Sfb@L4@PMsuIH+T6DKlfi6?7J|4J+hG7G5(j5NC2&=LuKSPq_5b%-H~xDE;KNSvzdT`T z%}cbQpbKbeHQM~vrCr^-Jy|XQqH6B=e*P3Cv)S6iQ@=iD{PFU<8nr)nDV#2-r??Ef;S@lpLcYf#qfHD=<-01b*k51fpbQzYW*U z9#%_{dyovL`F7x{SguEs{P;YW_}(ZiW;>jnU&+~W)q`}fLpr~wu<{L0xXEM z^b`RK;Z_nXwcmR@U0Qvgn$O5J!+;u;*VO9WbKvur z6Xc1dg}Gj*zdA*)GVb`F-%BlQ#WLzBhh&icANJn*D~@kn_f3G{8r%s99^9=75Foe) zch}(1cnFq2aJPnFjk{}bcXxMphf{pl+WYK#*0}c{xMvK0U{Lhv?pbqI&3d2b^Srt- zlx2_8eiMzG3^+pG+L|}J43$Rr9urWt_eu9l@lqP)3^F0AC1Zf>pqwLPVcwSos`T6? zu$(BRd;|cUSi0qqtC@$MvgEW5l(0`uRe38>lBmKITkkP-9%&YC*94=fr1{d2)oZ*F zI^|VTnRFZX&ShXy-eV#Te{v?FO?9OE5I~`i;X8AcAz7I4(RHOu=f0NxE%RT``hakcMPZ^RoA(li!24tIq(E&goPpV*SnvDL< zZTz#o5}%x7Romsa=ZhIa&1%p0RRF!Ql*~RuT;o#2Hj!taESWiAdBbHC$Og0+NBOvmjM-_mh=#ZMrWIjt zrwh2OgwKd&5kLJJLoCn~vQ9YqT3vZ^wuwA?IPbcs>wV~CC|yv6fmy(!(vg)Xq4Ae-C5YnTUx(AOyAZ7in@>8c&I;*nlUbSjE5ip=!(wcl!~eC1=dU<1H6Q3*cJV z?3)if!#_wbX4a`UHC=DgD|doz{mm%4MXgeCrJuy=n7BER()Em?O7gemMp-9Me^rjd z>BhQ>Xxk*WLH+3#W1_Aft_tIDcJI*w(EYqqKk>xE-e;ILH~r3^Cdu`#vfc*dNxQ$6 zkr0u{=NIQdT`~4oUSABEyV9U+|!OeGuFr*9DzlPuUaC*0S-gzIozzkWib8L8_wNF|m%5NaNmOBkQau1rJ-3In? z7RyiA6BW}R=#>t5MNd;Ixj!_zJmR4dTvX37s}+96C*rvw%_bpEIFl{q+RPf}jUD}n zBBMskMJ6n7Y+HO4p;Evaq5s2Lto1}B2}9^9kY3G* z2D#YQ$ofZZcZIenZstEuG^_lsBKJ8fiYq!?)_?5ooiXHB4%=bYJNdLImspp7djC~zh96BrOsBp{c-Emh>!40^%*qH%Cl)j&K(b+84r_EK97hK_HV#q?uf2sntqbS>J zh!MQYjOg#{`%vN$%`PzMr?-Cg3P|GcnB8vQd=cg0 z@b06BP7CKs_|fyxItU^Vu55)j`*E{o9hc@XbG>U=xlcwlmF;{xEglygs1j;>i3G}Rc8AnZ`usdv@`?$>u#yJ& zr);yj0r2W-XDmoZie8nYMqcCMwR-5>-vU*ZH=(!;U?7FJr7?g06nncMT)jdW;Q+(q z!Cnuhx1j!(XHJ zlRq{VpIWw3j?+{Mj`Xwr_tw|=Fm=J8|2O4*V6Bc+gp9mwY|0OJC5A3qDc~$%XM4~i zm&hmOc+s^jC}6QV{+%fO-HlII_`U5c9on7`;F(AD6w<1Ui=vV>p5?y4VwD`v?M1vJ zXFyXII|77yhJuD%m&JE+eJJt_fgnc2G?znWqM9Q0f{85FP zw{f#vgGXe`!j3E>#%~y;~46i6yi zw8x_kKo7_T4lAh^Ie-B}?fA<70fhM$PDJFpP;P+s=X8?>Du}TK4cvohio!25NkM@T z_ciL=yF+nfFMZ8tDgYkLlO zsZ?Q8zr+gy^nG=|HOCilgl-sYztxPmbEbd(sd!8W5>U2XQO?#BlJDcVL^V+57O>jy zji@VwYIiP?c?)ZZm7ylL=vM`qef_%hFM0b3@#-Wf$HWuv4Bm!neDyuF$zFlH?yUOC zcyP3hI50%vp9}T@t=Sk(mEaa%D|^Esn*C!{K>cM9-GZX4JMvV{!4)qJ+ur$fvBza% z;T(L!`qU2`Jc9RNyd~ls9k@1>Lkh_=O)}ld@r;7yQ6tb*hqU@&g=<>bGXdr9w+Mte zx*LlN!0|{+qPN2@3y7+6b4z_CTy$g)zT2Cv1-cM_NlS1r&i(<~x+IePkB&(}c2lOy zz}tqENtsS%z3LY|eLj*0($^-VFk3-8!Nx3 zE@e@}#n5Q3RStOwi}ItaUX3;5YHw;yXxnH$`QGPqUHF%|ipMOv_-2X9{5e;P{k9+f zRH5eJ_0$QdlOL}UoK_i+JBL4~-D#$K5@>->r!;+88ZUAq~zIkZ9L1r zxgh5m?IwOC`^-CGTXw0a5AV`u z4V2xHC{czMYS!I*rylnqQYPJU+mMtk??m)kQ)*SCIz^gwgpqmt zoK%2NEjBxc8Kf!aI-qWRP0^R5MSbI8XQbwxK&8*g3TU(NTy72~rsr?NH-rCx4EJ3! zCoLz(#4?fCzqugk(p?`usq=Q_D%BATXOJnf7iRZeC~W;mFsaPQAC6OCz@4j5$&1P- z^z;UJ@i;-1#=|wdBlm84quKH|m4@yx_SJkrT2dg_> zq83(4nXQPc%PJE|iA2f=c>E>j+bxk*om%d{6&QxFk53if$8Or>3OE~1k@niUR=KSlL?ugr4o=n*dCUx{`dZTG_Tn_WCW*g3|)X3D>##!_FkLy4G zA}cmdFBX-;=6BF*UP{-=YbAPb=&q^ z0zLuzBzyAIF+8T2_Wek7gk8DhGXLw+kD0~Rdg$Y%2{4Jh*3I9y-=LVPF>PJiyFR&m zSzI#`mA4yuHBRyIUQ2Q9GZJd+?zn`f`Qj*V#3z5?GmULq-}!kN$Ig&sxK~9@)PDu6 zqNl4tglhrx2-+J#A}*UHt>kty#B5iW^5#H2cT(agEH%g+E7?HRXuRMP^$&2~nKhx; z^WsK?fTT#Ie@3Vf#Lz%FLT@*A8uZ}+x}w4F?sJ5hmZ3H2vD(J_Re*#!0&vhelhQA_ z*rWI~(OlEBXz+ySBZ=sxhRjgrr|a7;JpWAZV%KVLs3+J9dD)V#&oDmm|$aW*h6_Diil_c%n> z;(V*gvSbIiW5-CYHs}X$1U#ED z8Fnwv*DCN1Kq5-;eSW%Ey|=J;FD)Aa2r=iwhi30u$5E_rbjz;2LXBf2g^nYoX;<#LJN zEp-D$HyL-I=3kzg`Y-hg&Fv5nUDkN87&sXSN}9$JO=Ub3z5IRJE5cpq$b9}LU)!zz z#zfr$;{RJ|uEsLM7NplMWcSi9f5xaGku#p^F8W$g$%nAN zsF7A78rfxOf>j`6(vQPZYdsAeEmkXs^?h+-zIloW`MCQ2RRIq1v}|Td0M8 zE!TE{JHqZhXaOvt)-*pj{adm2sOV1H*u*$mdvk``rBHoO{ihg;UN&dp#J*bNL7c=q zP8i|ShlS-Tp~9Pst@Cxr+7&>7*m&@uzh;oXIeB)uWLBwn@~(0S?8Pi>{$6VNHBVdlMM@|`rlPuM=rBFsvW_8mQiV>h~ z+3?lT;?K!u9&NIB*OpY?{C_>z=@? zCd(R8O5Y?91DOYR{DT#zFV;@4*>(d!e~zf8>=r>)l8 z>(z+e1wBh2Qr~i&w?AMcXz+HM|8>Top+cBdk@f*4w|Kf7^X8M`(mmKsf#^@dirs6X zON0s+&};S_d)})M0;H%+HuzM4V}J2AynR)oo2Y(7vSFt~0RdyOS{cVEYLq}$x7@sL zk!JRe%Z`y?f8Y$sY*IJZeb=mTr7R#+1HWoVme2r2 z_XeYr2v{I?$*>6A;xOKwWD;X>V0iF^>c|uO%w&HH5xSum7pm|G^(AETXHBqxQx=)o zTmQ7Z*br{fY7pC=EQyFO9cR7bWqZF%z@U3SGe773RI1gfJGOGgOHgH@6WgR4i-9+| z%^M?7TL|H}efLfCL*q>KL%ABAcbx-~tPJKh<}tqrN$5#=%D))l1^upD+Np-;8nWp7&84yT6N>hSrWc~F=sK~ zu1kBs?~Al~b%-$Yk=M`=u|@rosJCEirr)ruBTc)9+>0p3%YE*q-PYfTSYOJ9y5SLd zSL&pjNOhy~D{AO8fB?sEe>q$#(yN*G*JYBq`NXTgO%;gi&~a-TTQ;~eE_TVON^f`? zTvFXeFnO!B2`&1fafswJb_{W+&j@eh(359TGYi7IOaDF{fU>Cq5k2)D9S5Gmc5R!0 zz&bPKX+1BS$_$O>H3?giL&_8zh5q-L5KWSTW&K^2>c4MIrVeoX#6VZhiAY9o1V)l{ zHj>wSn<&!X0j49Ow@gpyJ6eI<@}rUlZf4bRMOF>n%jrh;U|fq4Z zOy{aLOq(P>cp~%w<1y(<)Xfw(ORhs1rN`^~Kbv%^6>Gm&|JP|%bi)2f z#`K#JkK8MuudDsMbR-*6Ec0P`_y&eOpo_pZx7pVuzFOKK6Nr`_rcIpx>$rV*M@>{(L-$fcw%seCu zHUP-v7z;Yp*i)<`J>OsGt@>F1SSa%KN*c?>M?UhUT<|9h8On1mWtyL_G=$QSiJzX* zyU-9)bkDHrs5IDi9y+w$knPAF=9%G4j%Y7?lWrwcOiG1bCt zYv(D>Q2c2i_wV_4f#T<%p|y68#l2*N_4ilu^2Q6L@hZU9JrL01S}~DNd2tGQXw{y| z10)GmO9RWsI8O)VzXo+v1Q9N84bnSqA0JiRYOZsdO?}!E($C?$enVWjdbqz>bFbyz zm)xp5ymp4lI#g*mJ=G_QafM=#Mlc{rDe7p3L75UB(Ee-IrtmCF^>TKN!$6zc&y02h zOO98B4wh?V%{p6&>YUCtk_EQ?_Z=@t+3d~m*=p&6hNJ2T;6ey$Te2mh&Eu~g{)&tb zqPFLuM!ZC%x(pfarrUn6ifR`pv&Yek7-TOp1^BzO6WQpp$a%I%4_ zBMhS8*>?b(r=-h3P_L$V5xDBtC6yw~?JDc7U_4#NI)q%k9`?2!-jT3F#Zk^RyN2)U zzzK>cpA$-hfGKS%gW(YrO~56`wbR?99o!(3ZOQ0~EGTtMw0F%}2+~CHy1Mh#`;S^9 zkgm`}DfQR@1TB7*(oZg$Ea5bS>h^yP21@<^diRk1CcdIgMv|JCn~ct5NE_|$CZx6f zn=td&|IHO&VhWBD&pd@ON+49j`*2CF9?x27vF2HZ(?0XMEAKQyPxvn@%z|RTQ#Rts zO74)e0kisR>GagHHnK7mft2f3YP8qmJLGEz?*J$0nwKP*s-blmI+UauZskkCw6*fK zec{cTME?h#`Fy#iKXJngs2zkX2L|-C(kWJL2s8O$o@7+;e74;hsm|rm2fYR!jm{96 zw2dQsQYW8Q5q&7v_loZ9nEj(E?@>B_lKbA6bJ_fXAlk(622TtaOoR+5~V#71Oz z*+%Weed(LF1b9Jq1D;_TZ0_+BhP873IHg+6$4&E4`2rt*mB)3EDWCyuu60~W)savA z``=K(p|fO=QJyAMw`Fkz#R~k3jPGlRy8XJM;y0nPL|=e4DzjnCub}vqyDH^fG_GyW z;{DGcQJS?qWUX&}h)UJyNyLy{iGr^0LN}fz+#7w9$6GKOvavFl>yWOsBvU z#rms@!8LhaUmpI)Fj)QnscMhDH~>cB8jTtLLqHD)!8o8#XX;ENZ8b+p8Y?$3W%06t>_<06KA5>@mchXn3k2(_K*vKWQ`kn1yE3;-EO;9k}L zI7H?Jd=U4GeRV0?|M&v`-`@=&kMEp6QsMlc_6A>bK>sf`htVy^{f|QuL=X$F==}m-_*`zupjL(fK(&+i@f7xGedoqnmJ3cF9v{xh z(#94VT+?23NyjbkT|l18!1IL<6(1>_Wys)C?v=#^!(oCqp(ruVQwHt_pS(89%Z7;#&f|$U8ygu8P@x%p;Ar1<$x9nD30J zVE{K_IzZ=)cZR5uBHdVDK26j-qe@tOaF}>!ch$9gF?v+MaTbJfF*VglYT4h9c8DJ*k}T{K_ix>q6mdi^&VwohC)F7_5mlzb?k0 z191L7<;Zk8xsM!K10P0P(0x5`%a!6j?mjs?2<5}{-=8WLX_##yFBA7BlDwUN4I}xM zCJU$2Qc!HS;Agi{IWfg9MNTcL9n=5&p{r12~{#T9;4FmG*Ca10$qNHWz?cj@)VIJu@pk%6q39?7STW4>wRYO zCAYWOe7yOoRyw%$tIY&EH-U^%E@fuoIv{5vXOUp8>7D?P7=>~|KAv@cf*XQ7GJMDz z@=ss_Mj+A#F5Q}O&LOEGU&%;d8 z1(wOrp=W@b%Dg%CWAIsxVx90NVsi5@0p{h6#HXe3r?OjSL9FODiQMW66WJ0e$D5yz zO(_2sx)cGvmTnwdHqX0#wbJ$(Nm}LU>7LyE-;`yHz*n6bepGn>W$vs zy*xe7Z5tm}u1;ahQ%j?(v|qOcono$hhG&33_PODVWtxvZ!QwbSG*M~V`gB4UO3J+YNl!a_207*N|f(Qh7{^+Fh;kt6uWTjlZ0v-0M^^QPgQ^8551y(7m>34(EHSvrQR}_}G{= za`MdR=_BPd&h6ZhAPKr-4+-;;JE7ez*v`K_i9N*&U$#}k=B@E~LQRU!W+g8RhCQxq z<71Vo@-^@*i{7uISQSm+)GU1_v-h4w@Ia`Ho%+yeM69uV*7N4pBO@jOua(> zn;QbV|4WOK`ZW==Q1+1l5#ew8k37PDb#jG0OkJuLR+EGob2qUJ+=yYQEJrH&4;k_* zG>1(xx4Il&T}qrsR|lNGf^j^Cg3|C-D%1D~tw0Yq#GJa&|E;RpRgT%X4or9LD?^z^ zLICf2aia~bPb>P~-5AwAXb)%j-)O94)3C$FH?c`e)T}h`I~~8#6DzfE9~|f<(%qe- zN~lX0@BFL!OXIi9dmCHKt=4G=(f(eYt(45TV`h-OYl2Mex0N@-e zPS6nw%i;&`#001DIudE^vPf$t#X=dit`xV!s&+RcNq7FOXGxa?&iJF4WO&|+a5%c_ z(d+ODHJxrj_x$wI-odMSmJUPi-%J+j2E$`mOU@YUW?oUu)jPL<=y_vXBW_v;d6^Kd zlp8??WT8e>80^Cux^@|H2 z;D7wMA$%;c0{^mg&z;;ux+6q76MVWx%RZ@H$Cj5Kh{lk6ztQ{FO7Wvl2>!4r8nKGP zu)}6w;h0LH!VKp0uYo}SdScHBZjGlPB};L&FS4CuUC?;0r#u`M9S-NZ^#{^B@HOsU zTX4s?#@n$7rM#V+SdWRdknsyr1_M*go<7xcTqxo`ZAqNGXq|FL_S1426l-8v#>{pB zsyDot!&ms%hSxDU-&FQc0q$9W+;Qun{eST$zf4RBxk{eqCVQXXcwpXC0l}yZsm)I}nzpr6@(i(vIMS(7dF;agX41%GZTMv^Jie@jJvd-3G#sMx@b4nH{MT9# z3pg&($_ujN!NLV_CKa)J2tinE~B=8WiW>A+`>qO3f{PZ ztNPjt)F9P|-Qae+({6Gf_qQ|!o2!YUqTs!vDa&{?1rDByA7*^kX^ zz&Q+TEKpYuev24@fec^Un>a>~*n>rn#$7ZZw88ze*U_Tu0`XyA>^|hTMiLloG7P+d z|9yeSmEoqra9rR`Eg|3{iG@GxWzuPK7tMD2bIj5ILC(0^_^?z{p}O1`;W zEHrpJcAfLAJFHHLj-(o{`E$diR39=299}ur#5TG-QEl1u`+#-Rh(~UVA-;MSVGu`%5@R_2KGMFN?v+tt2?aZ1@pctCYD8_Kt=Px(k39Vak#R;b*ma_j?Rvnx#n}|o zt;XR9xSS{&rC(@%(5+U|F~9J%Kgtw_@jdGU_a>M`HPXO4gS5gwz$)1eteQ<-=38<9 zGv(J6Nclx9-ZprfK8ihX49r|8K#iOZspiO~{;vL(DBI-0IhK*9_cA>-7f?55>uc@F zht8}NQ#Mw!QeL8BWpa*|WAVK2kdxO5eoUf~B>nBr5~q>|N%ova$g+=c zT2(7T7BqHx8|BSEf~!7a8GJ>8&@1A*?6T@6{z7&T-8yJ=cRamXc8U?4vba!6RH-a5 zaxv7y1gS7;iS#8t7-)S-rNFzSi~Av`*CJsCc9zIY1IKQ6E&AlXE;-xD(;e#QOR*fZ zw_*>4h(+&boo(l`WB2DSXN87Qceky|DuO8Z9z zPMq@s(s5$5;TTBzh(4oWTv^pTae$tdhUM(g-f%ZK@a-b}X}sqoNqI_I9-l2YNe^kf z13ZN7xC4JgHOB#Z7}4W4z>o<>iJ!IR+k+H*{31*0IIVKmMBfJ^AX3nu%9`K5=~W|) zXv?#AOudUodjwpLDHxu;uH)Bx&>W_(S(`bK;(+9bwx(V08Oo#=c0)1AfDh!uW&qJK zmSl{6ruG2Q-!XgOcyyTOqxzZavW0d zrQYY)Izd$+BZgWs6&k0?@QAw4 z^*1p;t0rj36Sjnp!!B=(Vx+qF)wQ)~h8E-%41~rX} zbONVey^M@T-*dazUZmq?lCGBM0)qaVAIt+LZR`!l=z`=73n=(Qc^R+nFLsspGVhzJ z*NlpVybKGjE0ncGTL+6%9*TjDk zLcd>5OAW-`3Nh=rKvrjJw%5O`zPi^_D4Z#yMJkEd$%840TfsPL<>d2uVmrRx`vZUD z3#+LBfb?`?eINWoQ;oVGpGi*7MPMUx>IDtAvoj8x|~ER(dWMw{Y#pJ?qz`YAv^yV9SH;Pk&yAf_11I z&G>#FS?IiP0O7uPEWZ2ONa^La1uA*qy=7j^MBuR57&bA^2%|0<`+2QB7}QZ1|?az3XPl;i0#WK=pF0JSt#Y=(M@|K+-6dE zp`G8g@FM449EPF5gMIKX?4_Pf`f0Qs%6=!NpC9QdpN))&>mSn}G!w9Yk7tKLsT?ne zEj?Uge)UIkLM3>lKdOGrguw{$he~Z!#b&0m3K3+2t^e4`y8d)hS+S5fvgbFQ`+G(^rXBAp~SDEFV)_ZMw9T$6k)48|G4rHk9TL+SdcqWwN3Ire2e@hm->n#5ll(cKJC2OxHAAXdAs z9CM`k&feeBO~ea&SDRmG1$>jPpGQb@J$9u;$gjpK3=BW;4!$V(CSHCUbFeD{c+su~?2wpyLJ)ID* zs=oqnjv;z9tdu!S<}(7ux6VIBjgixsIg9B{-%}3WcqDAC28VZHv;al}=y>rg9X#jl z-N&ZKhUzDgn0E%&dnd+h^@E^3PBE#F@a4?HkHU!~h{Xf=C;8l(;p7$4_nZu`iPEZ z7;w33;zOGPkH?;bg)51BI;QJ$7uWoS-sZJSo%chl<)76*gT&l!dM(cwsivFvU4l9$ z_mSbdYzx@j$8n%a{tzr8W{&jk6+x;vZc+qU0?(VVeDO z&|{DM6TeJWWI7~u9{d53>CpiCO|{F5ZROQKZfl1VY(sUBhsPkEZpglhDP!st3KVmO zpX1xS-o@!tfz$87Yi~Y}T^>F7apSM5g8`P;i&G@mgp)lbxM z(nV!oTd34oEe5H7Ra|RlW6WxwVxB(*%N~fACtsiKVk@kZG;bxt!@vHP(sNi%!cy_D zwSksRa7mjG178{)ZqvAin;hTVT$t>;r6w=2IkR|I`j*bZB=t8aOd{RfWz9?PxIF3} zsbNs4)zqs$d`Uq{i_AqlinF)&w~c*}ve+X%#k9C~< z-S7)?3x`UR@=uIq4BjVxswT$jdZRZ(ud|J>2ZOza>gtlob1+Lij@9{(aU>9 z@X~`?#&I7lCU4c-11s$*{ygU1YD8+4?{GSc%K@ZBOr5?WmyM^-k$%4FB^|lAZPREp zsfR!gybehiBD1`$%#N_0*CqS01Y5B#1uNGI@TBs+NpI*qt?9B4x1<-`EeqG13lj_@ zSor2ahGf`WvSc`6@z9jM!tC*9xx9$L@`InU$7O~bH_(t6|5R0hRJzwq+H6hPyauqk zlaifMntrinhzznUMIM=+^!Y|?siI`qeL1E9>#RxT=g4TA>_ti)9x3!??Z1!;QxZLm zcErk^4_{8F`JgWT^(h1@-pE#4Y3lA?X6JAT#dpW_uxadN5ItpVB%xd)xcc5RKVv>N z)X#AOy^mp4w9fBeBEQFzEH=X)bLMeFc-sS9)Hc_}J+8a8P%x^}EO!T65(*_d(4*{V znW*hbm2@k_>4-Yb*yr9IFx(1xY`-QKJMBD`2*PwfZo=Qy$wK)eVG&G8;q&QJlD_CC zEILY^H&|uwl;Ci)zhFn`W?jpDR}hs%M0)ppO+DLx6uY3~;L3aCeSZ6)hMoVC-^1hn zs>yAAM^LZec%Qf3VyAT0a#%tGfuV(0&x?y%3BXS^5^z!1h?rnY#% z%NA)J_Hl`>KZYqwcgo_Pj&Ck7^W3ZiWL8VmTxcAvrhb|^sd}cC3h(!{Q1E%8}kJd!cOhNyYo7tS5 zY04O6M#*DLIU)i1XT(Qctiw0AN&WC6?(r9=u~_WbgE*AUo?F|-&FhY``{rqvVe|v@ z5wf10eiX--R-79;c42(@!=IGh{EV@xk3fb9Sg*y+Ua6uuWF$a0O&!HtbDs_`wU%kr zF4sk;CLa5!{RhE}npG(lH_Szv%g(>2odyMPGAhBD1;m3$myaW1CW9$1!9Yep#wP{OT4UiYTtct;M%$gzdzWj`Ky`PJ9L_ix`GES{V2M~@n{WLH4FRa@SV zK^{Oqd+VE4Mka$tp(f#4OdSumu+pU!}>M%>Amu+#F68?s`^R}vmEK2Tf9hxcr@zjC(%m3sHFcCD5l*S2 zMrV0O1VeNDc`V=Y&jrui4An2GyVH5BF6^JauMl};UbP&fXNrhpp3uW!)-JG+7EB*x zOzb9&kTcZO{c*Yf3beRrtH;zQxL&{xIxV6_3rG z(%kbhoo36GBcFr$>umWnRoAJ!F(jHNhQd8#i=|V89?#zCDn< zZ?jy_c?1f57Wq02DOK-k1qZR0U28Df{Llo78X;5O9(I;q#dQ5@3Lx&!%OoR{RyAIZ z`nn)`yX!Ngv(_V>^S`c-iU&UmD(RwcDTGmbwGg#UeCeAhU^J8vG_;bqY{r_LPCBjy z^9UQtAEB|+<8!uZL#Zv3Z+!dx*g-z6^!XYM(k4BlYFF+j zRgUX?V;Ied^EI0=WK%9Glx-)hCJ*HegUfzSZ%??nyaIS{$XumIxLg`iMuV$p9uU^6 zQmc+nuhfX*#c{-c*|nr;ma^O3{0NOH@@l0_otVqZ8ODJ6JPTSEX+}MHac$yj-fp{0 zmSj-XM{O)u54wAwOOdQTjkh^lf`D&kNn1R4pDjJTJ4v>l_h~gg*DxFM!K(Sg$9re? zNkC^aT;8}fa9UX*6m?^KOX4XJ8-F{Xb|S_Zwob!j3B`Wc4Xz6bb{8=MX@08OyT}}v z)l^J$C>cW__ZBrU2rF8TI1_Z2qhOtlvETD!=xSQ4DVnIb{@kaxLp9k2z~7V3dA2kh z9NJzqP|s%dw8AiAE<(def3=yxluL$Qfs6fTUP0x$crgvLVhgX;`|I|JOAhC|x3LeN zAvIqgCU*PptUuUFEt7M~Up9T-jkj3QV&7T$QxPaoP1!HE1f>TwX~_md-4!QwtgN+V z(lQP`ZHG0G^8@40^7FeC>JaA93oqB6TB&|jhOlhC)u2OHuH|%Olp)2{IFNzqZuquol-O_IedooWPWc&@54`$Geb!CSrf`d}x*uGVL7g zE`gGb6!_?5YwM*@vj*II4wE9gZSY`8bTg2aT(!F;^>{rz4!~O09kAiv?4fc#Y`(QY zV+-S666OQ5m3jK`xXTX)4E(}75))9gP`>KWHVdsgc3Ax7hl>>Lx}4KTg0blta?2O( zD9Wu_{Js&7NNiD6_s@^UDVFVn@!)`}x=6l&*~%u@FGDS5TST#`K5|hufq2ZnRhF4= zo8ETgoM|y$o1CuD2MF1s>5kKf!gwK%6Xgk=ld@++Oky*Hma*yKuMKUl0t z-ORR+mapsXKaXEHzg&&)B>q}|dz^noOorp6EZBg{e90Ee_?*Po?6}?BjNH&YbTLn; z>q0CZ_<`mXuxyku2W;~@xf*TmuPv@2*g!u+Tq%eEVQ;%<3pbQ+BAWiIlu|?WrOMJ; z=ehE>9NO-zJ1%1%fF!0Z-7K5Muo}JMv{XoRIpWJF!F{N>{Vuj7-}U^(i^q19(#`xV z%X=bA@+;B(Da_?7i^y5=HeXn?o#b1ev4PnZB`7|zLIc-j%y$~@NxUL)B`_Ecjd<+W z*=E1+I_Oq-(R{GLA&0!dl^hxviZDK?<+|JCs;lUX@MdwPT0A#M@4P-2YzBU?@V{p5=J`mca&QOUsufe#^{ z1mfPr;tfxyAC+)qK1%)cOdG(r?4K`9`Z#bf=bQpGBaqCLXcC_;Id3;^;@<7(mELN1 zraua<+wU_<=CeVXG%2nyL(fU#?5FotB6}i5vPDmjl8*b9alPyn05~}e>DPko`@>D3 zOh)QA9-ocGuhXT5aiEHs+vEF9)CqHue!01{e4ZO5I!!M95loTm2baolrsos~#zUP* zJ@1&b$_y1n@qmRTDjb$287<}20{BFra#dDp@}2Bv$Q&lIHK&LC-k*SG3UPduCGtSG z>GgQ@pj;}S?TyvHy0j1~PG`pG$o#D^4d_^*ojWdb^x#dP9@!86N3txL)~=~RVXE4N z5wz)DKSu5Y&ef4yySSg46%?n7kqsAyy}voq9q{HHcz<`ywwtgQeOdY&Q@L`YBid9j zd%x=KGFF-rK;fm{0i&G5K}Q=v+L>yuie6!dZ(>^Q7Lxkqi+gQif2Ui}ky1BqJl*ec zq2l;d`fZthkrgzm@4NFg&IbeF?6Buzp$ywPSuB$B99iMvEqRG~jauuAelb4x{wiH^ z?EY)_86!@7cT)>6%myDrB=1)Jo&uXfCp+|)8(dxz1EVu-r0^VED7OK&X5sChEb zT+*yX;5FYQ*^s@A>4n62~AZi!F_h|9=jSFf)7>6=ILpf-jUP%_yB52K> z#AkHPyd`xt`at?6d|>R@jK!Gi)f3L6wV!Yf2d`Z<`6Gf% zsHu&H)0ZAtWx>KCrNc7#!I&IUb)z<0*7eQY*h$c#y_v7*r0YdOWFpsbn%s?K0sY;; zEJJXKHVuuu4qJB1b?bC~7|?2*HM_SJV23gtw=D3zp4vE-`K-b-G?H;1`wG@&ERcA= z94wS|sp{Ak3UhD_w^b+Y_w;lJI)x&ju+Zxib6)KcKAvY>1_DhhI%~BWSt#p0JIO{H z(fd?d2E;b=n=;>1Qp#EY@tz6?K~0YVbh7;V$I+vtx+K|RvT1EhMsabY4u^>dW+fKq zXPVm0$quRN4MJb^HdCHF=+}F+(v6%dw%V)c54?wFJouBSNkg^}R6-hs3$G-F4nI3> zFZ-cxcOBQ_4w4;bJlElve(`ZVcmAr@^BzynNjPJyYXz;fej-6sGTKqXR*)?<`i$2! zHQ4k|TMRXVPl{Xm8CgA6e9hrm|7czgNjMY#b0OWa4%7c)@2!I3+_q@pC_zFXXmEE6 z?v1;0xX*bu)RjSGZW^%8@>O zQ9BUS2_{TUbr1T0u9U-#6SxIVw+vd`BHPL@Mp3Ml?tF_LQZpV~CQA=yVef;|c5ze} z;%=is9pJAprAXnUOq)g*jm;l59Vd?9lyp*bo<0Lpq6HFjQ(TE%4~;i3&8aOnzm+nV zc+QeFSFhIJoFK6!tF`ykwVf*VF4)XZ{eoUNDh$r-PpUGhHS){%^_HAw9qW6%TJSy2 zUM$K*A!ZQDYe|orjUn^{&q3%#JutCg1O6s3g}DDvrM;cO{wycdL=ts#N7s%w`pYhd zcT2+c)%X`O@6QkIfKtTLwz6ZKW*(@r)d+MV zMz4fwC{5)arJ-Si>@y@Gsmy1K&r+CltRJHXQYEqjR4Aq5-#gqnL>7K<#&?DvU_&jDzB%EZ(JXF*fuBthvi_HL;1=~UBYos5V~(lIWn z$;nnz6TvwqBF@6VxMau<>vw-T<8u>^%#iPmX^DxlpH>5#9ISJ=QSJAFZ87On1Fg?e zhU|AY6Wf@paE=!tththLlUXuaa0AgAYB4M(GPSjDuSS7Wbqiq(9*=je%2mQIsdb8e zP-*ps?#F@MXh2PVUItxkY+9&F<#mw!A2bY)zxYlO-aJLWl?v!yxrg+8< zAGn!vWo5Irk!3L1ZQ#S;VdOQhzSZxzhq6g6jo36G=hYa9X~fvB1BVmYE0wI~ zL~(@uC`6$^8a8bc&r^1w;RznCbQYs)(WSw`J5cazSakAb-khNZY4Jp!=S4IFaWEz2 zG}IRz55mu^TH^UKGbDb_MzuXTT+r8UfXcq~D(4-&Y}u)>{dqykQ|eDXTwvYi0G1`A zq$65o*SZdT<49N+d25qY|J-J?YO74=Yqnezu0O}{i}^Jl%v69(@9Jl@=UzWv#H$QTJPH3Lj)q^BN^do9512w0J!ym@5qgDleh=^7BG{q zM>1+W`aT-FI#X-`{QbIl-Xv+5OE{r}e{ltQ`{osI9?diN5cxwR`lGq5$al< zCT@)6`sb0$k^W_@mZBUbnyL%7mqfho4}O4xG@T^UGOp`ycYv5Aa3!*8tjwHbRZw!V z(5j?H?5)9oi|IZm27CrXbb2?c9)Qic1~V0}Tvhi+(vZ`cO*9GNTk{WcHSR%=7cgx* zhLNm#1}ju~-sR=tZnng?^eYj{yC>CKX+J}wXm~%9U)-AQ}#QWzNFk<1tlB&pntSSc`gct@^0pMoJ_y zh!*Qzi+Lv>F?%|Y(SRsd^ySeNww&Rx*c0mEa3~E`SIVT-V2-5ae=>SNVrwSr1P{^P zq_!hVTS`h;ElzK<2HI}g&omg1fCmiuCe`dc^Nnf!zB5O_#b6X&27~?3Q}CS5{iJpPMVh35 z+wrLD5xJ|%7V^Biy5ZFvScr3eZj{~py17@$S~WS;lAz&EM6?+fSP(e8k~(GxS^>qN*cVJTs=IcSN23JfA~ILO691nH?0S zim*^J&cAa+Aw%R{ny+q6A6u`JW)B?D1#I3bd7@BT}rt3%!FU8{- z+lkTj;FRX%ECfQljtaK9lbJZJ-OF(6TjY^r#BQ5A7slD&$!7mNqN;&NAyN`{6nNLx zz0j0~Z1oK%tqrptOSfvSq_#{rjizddOTQcO-SMb4@Xy-GPYq8PNtWasnj855i@k&J zIj+4|FxU(;xz{=i#I?TVZAMfDS^ZG9%5&6$AEQcNJh3hi^J;&u6>p;EaY5)VPzFDx zx>rh&`DCcVihb{)Rh(-CcrL2uEE{5eMJpFod7fL_D3?Kvg{W7W`k-U{(&P<-_UUPh z$nl(?!st9a99DU0(^A|CeH+}djVyR;Kv&eMijh8uZTo8anl3Z6B+mYtw_h^_Jh=rR zZC^BaIZ-3Qs)TWNLkaZIs%mU;`LdI41q4qt+_t9AUKC}G@`!y$7rE}-`jYMF+;xN#6evs) zu`QPzLYg+_l03DWox~a^Y<_8z2~BM{_G@642EZQ)YY!~TDq-XoSAC&E0x#f5(RKAZ z?@}VgX!1}2#vn*0lHj(WT``ZjmhB$^3tJwmgBRc;@?FFh1f}*itNo#JPbKm%ccDRe z^$*{wAh6p43dL&Da6K5hbp{-ETP^V=HK1F_?hjUwQ_|!XKbs)Bl8UJ>^Q?orW1o&Q zWAbZ{mBBd4Uw7W97(lvuOI~qk0KMuC*WCjgXIUhj=-h2WYuA3)RWT!WRd9*Uc%X76 z{Y!%6M)d?Er@_G;FVWJ#*f_Qi6#*MBQ(z9dK3G@t>roG4ACAa!t3^&pn#hVsjrtYY zAsUR};Z&GNwQPo&I{zwc{MqCZ+F7Hz@=)zia^2$C0+c3r3SLIm%ph;W<0@+s)!pME z+kq38D32S>SpeW0c*(?7Z_d=81{tbBX6{mnRqa?)OdPpfN))*7e~wq-0BFuwt781m z<*N@Z-Zu{sv|Q#9l{XVZvC5un4`{enS<^et#WEMqb#nbFzGp01t9filRe|JDh%V>; zFt64*g`b+n(@4~>*`l-qrThAgYp+_N;*6uU!ASbD+a7M)T*)4&nziu8VLfvTE_CKw ze4$wFY2v$lS0bCO9!n5&^H)sv(*@0s`P4xp+DSHOt!{1nP*p0Ds~REbn?>~lEpQ(o zTe@DPRqrlXKTms`=eY%^Uzc)3ZmQXK2h+N$FFtw+P>75N+Y>c zhcvJ68wgZ$-NFbP(M17Xv(x~{7A!hvlzT?uQIP)j*~Jlvi%r`Q31DX4#t1%Im{M4 zZW3{{&(HoKVmORh3t!xu40`M++q!%e3#%P>v$R9A?htydI~k&yU2K}`V3|H=xa_#l zgES*H7i#+n6gpZ7W2K09c!;08h4f?Flz@_bf2(k212IFbg)x`Io!r%VHs>?$v(u)NfFbTOz}0&4zbZ0tWf@p4=9GF z+OSw|c<7~jaN)I~V^VlzyI9Lb91Xa+g8~Dliy}`sB*@p@F%BO5LvVzj6I(amKmgJ* zF4;@PE} zOqs0=2@NA49JJhUF28&S-w@sWdL*gpJH}oF`X*H@J4$?Omywd}nJkCL0l!86eaXHM zT8eeQmf-y62hpX_k#yqPTGFgDd47J!M-(wKeJ}OAfH**<^rxG5DcNdO|Ac(O{rc22> zg-R~%jN#~iUY{5ll#n= zJ}+lpJ1?=Z+;W}vIE0OyVxQxy3N$^|N>}cd(YqxCwU~g%^gkO; ztK}sz4RX;v#+Bu=n|KdT5MmdtYVN39UTj{fm#PAZCX|CDvS5RE$o;1dpa;1z^8`Ds zAJ_oD{EU2rbDq{tzk2B`8P(!ZqW^1cRr=jDN0U!E*pyMCbnx&r?+H_oP7Q{tcY*Wv zNQ)kI8P-jZp$g`#Yi^{W7GkXa3AL^2T0_h!bt3lKe{t9?%A<3IC}X?UEgkmXC!k#a zCmmZPN%7_#W0OkL^;wO*JBJOqyxq{<1GTK4kX}jzI1f+LlXJ~a)88wfBhaXTPYsp3%>gv>>>muYz9HW8U_)85zRiwrn1ly5=fi;Vh(F>gx z>(6B+)Z5I;iiu*yQg~x$1jEBmhD0;4~?@h&yKzVh7yzz$U+l(l2 z#olYJEd|QOSYwuiX#?gUFp1Awh6zwa{#G>^V;O8rDU+BjpcHb45@9o1DMG+8PQX4zh0)ARd)V3zXDe2e72dYpw?{!5@5~ z%KK`t+9oQ*2VHN5-_jG{QwQvbzWSxOC)!Ye{U+LnKaFeKg?Z^gVuEGi%^#i{8N`Hc z+Jj)`GmTF-)880B)gylk7@|{Gpo0DO;=g_s2|)h;cK7)0`tbz`+OCuJU`>G+Z}|V~ zhfS~j`tPj$@9#BwC<@aULVNJ`zx+m!f4M=K*@q{T7cc(qP6GXQ{`jq9o4%?5^S=x4 zIECY1JHMCuZO{JKKT9G|H`P;x}O(8Tn3ilo;*}j}T#UiiRV7Z1`&UFKOSU!O~w8 zXk>^ae~tRLjNhIA3HR*wh;OlcrNiZPK(2p_v1I<-J_(m z@bxnThF`P{pltLoS|+fIeOZ3@lqa~f-=X*H^}f(hZi3mUH*y~W8R2eWq`0g8JTx0i zkNF?~LTa4o8Ex_K)q4lu!KN8*&mt@MJ8lw`r7nhG>Gm``;blX)a`}2SKsW==D3nkC zcLRC0p##C|k2=>dFOSXR09Kl_e?C6nzK@{#>}V&6ejmo&)hT{*LFJCoAO9mz`SBj& zu+~fB+9)l02kCjmvfr2*OQHjRx0(!MG3#>7z;>IrG%wKWjm0or_`(>f=EZxN+Q61zpd&2_U1oxnn9>{>$is5b$%?M-D(#y7)Q6U=zCE)kp>s^!yrj1MU?Ce zMPp+l4;5hdixo765AYP^ZpO?~Y_k1Okebv~)*@Ja1wGL%OdxQX%vfXd@nvsIN0(;C z`z}bil1ns{EPPa(9L!7NMTr000pDz(+v1QawXb;An$N%W>Xbf2wAd_9nH-inos-_0 zYn|j>3cbI=?UDKW&Um&Oc50J6GYr8euHAbORyp8n3F6`gGok7@JnXj)6t6c$1 z8FD((tQMEKx`QQI;-BNy%6q6lfDE%4pQInEM~U-Zh4XI(VXpcW8TwZfe-_6_(w z*Vnz08Dh9~J>bNtDgO9Fm-9Xnu-eggWN=IU=|g4V@(O7E;AY(rbcX~o~_$Eca`T*>rM`lXN@F;yO87RpcjnL?5ZP-lVn#uUd*GUyno+3%u6@%aea z%O^+rHj3I*@7H-`=Iv83@SF3Y#;+!~J_Tr8@N21dgo+x~YJw@{vzn>dMLT;b*K@%& zLg>3xo^vYRuVydYmMm=LAY*2EG08$2ruI06m!Ox{glf?R_-sJOj%r z)Ho-N<*E}xeo8QS`P)0^BF3wL%& zB^u0%txf1=eWTgav2Xhf`!?^gXV%S9px%7hr(U1o(?Ro~&8KJCiQv_Gi{M03h;;%Y=C70pU~92+zqQ9>BbplG~cfdR9J*=~?{5Eebf^20Bb4SRG z9jW;KEL0#7*F=CNxK{U$@bWh;sCQ7*7Ce4)>D|oYaf)}K&GovLA<7%91Di|UuATGS zUB_v)EGq8YR9u3X74u>1##^aUo zU@Xx1BhhZ7sLe!lZi?CTeR)w0%$Q165v@bmt=UVJGUe2OD!n|UtkxtB7ot|yJ&|Od z%JO~XfQ}c~>`(8od2Y!5h0*i2`9d&#_O~htq#vK%mhoM^{rk&z9z>_|Kd_)X=8eSD zSxhdKKmQ;R8-rlibpDGe%T+E^oIIG}Ht)OvP#-@%enufu=7Zs^jMa#x*7)Z6WR6BA zg#qbECvh{;9PZRG+A>s$DC+3to3IQbKU?#H$l$tOT1prXw&&HDfK+AbDEBGfh4@s$ zp&snYi)FDUuTWB`jKsx{p8MWfV}!=n41kJ1A!-vypV|aXC7NN0^jBbzAGPFyr62F@ z^r=%BdzH^v!GznX9>Kj;k-zL|7Ogaj%Vo~^UE5WMYiVAIL(yG{H$AAWAqoSujF5?zsGLv7bRE-yMf2>JlH7Fhf=mnw_inC~iA>`$MAY+!-qn7d>lJ`c9 z>b_D*hX3Fu?FOW?KA1JcxN9?&F1 zgyCG{Om2oiP6w_Ad4bg&0j2&}4KMY6|yH+pi0_@cF{C!cwm6y%r}F zoZ`F~ol2f90sMAl8r25@b?}&@LiN_GhRofdybEV_-v*npStoxwstV6XAhkx;H;K9E zn$QvvRJwIlutU(e2|n(&9&nV$Gg)SUg#wHCJK8K~^ye{}vleeE6;G<{=b>ou&3IYd z#kHGh} z-0UfHg$s$|3oX09gprA_HvBxs(5cGxm5Qa$hvSd?_y+B__cl)&yUmJFokqVhd<6@D@c5*24CFgsqj zdoP_a`bBc3H-v3pK{$0j*62%~%vmqFW>c-#Y2HtpR&l7Pe|8`eK_%Aq(BQDm$b!y= z=&5RrXBU7iXjqDD&Qg)!u4N+F({QS*swArD*;2#;T*KvfxZrob6E@Mk2T3Lf;aopM zP1w7fO-{)$@GgG!*yLV4*%FkL1>hJIph0zKww9TK1HP^yq722aq*}@@pt!ib`c&QH zVcF@#O&i_&V4qf0VHlKLayi+Vre0m+N&Ab%G%V8PQ`cdtY;}jzBbX#u? zGJs9%sFU3N?#s?7iQ~!p3Lgc$&jQjUAK}ZIyW<*CKjOwP;pL!nUMvnI( zVwI}momRl&TsgI%%4a)>KSz_I3Gq|&0C}9f#$K}X5q<0EVb)-Ue4hCxY4e4cPbi%> zBxCH%4auOaQH$q9Z<&Tz?NSBzD~}1~9ph3n!ITMUghEDo{3D|1FZY9~oUx6d&kqW* zB2Avs3aWnFEavKK8wtp;|9KmaEjC$ zDLg=iR;jTQJ{;ih!NFP5CFU$hSrW0xC>xsPF4wn2KwO5SjZ0n)#eDfb6uw>`Aq!v% zd0#zhrFSJ;cwnV0xnfmfnzzj5g;%Xc;-L;33BnuAlbrkE(N}$Lmci_mPEIpHj+Pd? zrvfb63!3y^rru}1|2C+} z`T@iXTx3E9JW+#jQU%pIT&#-ZL1#ve^HipbmOl?0U=Y&dD>7;NHW%g$(6BR{lw`LvoaM(031&SF zL8n1u<%=u$3XSa$f5J#>lAE6lnA$z+7wn`tEK`_8!P@s1jK?nVV@Zr*6**6c!ea{E zY%PuEN;M3dJ+S6=yeN2i>_Q%qVUGG?GkUqbl8C`sf##Q{5Iw z=(NDOSt4m#y4N)kSdV{Rpk5>|5EDX7wObB?kk5B@7d5gC-0iemP3lEJvt`Q)CXNOc z`AC5gso79bki(ei%ET*)@6+jmDzrPgGt`XOC9IZJ`AAiOA}G*~VZC$dg5r8)nc@$> zlT~F5PX!r(y7g9R=&{b!xCetlXrR)`9EnnCq)U%rJta|FXdKuAic(b~%2T->o#gU%daiaD8C@Gi{QU26C@x55A%xd~Z64gz5m^`%QU8go zSY!VEgwUrB{D4t^!v5P+GmaT{ez)-Xn|UmeudPlj3!R`)nYPAWU&fOvD8XnMe8Adl z290)#<#tvLSqZvTxU~~8W9E)W-bGo!rXHY7M{v7#_cj^U7KQ9QOF*G&a$Act$!l8+ zM78CnZMp*~OF_W}%byD+8JMMN=~yDw6au(*(?u$(F2=E}Dpe~|1l=iGS4T;)SnDk| zPs*F|t)t|!Pa05tv$_gE^Nis{G92GLlI8ssiN$m2lZ|Zd9~g0IysgN_yjz6KtN5>M z?ZfGZ@YNx>)m4Cj=yF0>W>gJDEaE1R|&sD7cFD{uV3 zCYBFxfTWCE}sC<=dWIfa0C+jp6NvV*yMQuHIiy(+!m~ z1u+jMAXE8-=q!1Aw2BG=s@I3CGon8*@zj}l$U=Tf)EnuxNn=ni8W)UGig zh!tN-R1JI?tHx0 zOBgtAT>OeZF?dpAK9HI*ELLCb7$Idl?{oYfS6Q2=j2DuD_W_YdXW4Sbh#}Qp`=~5u znQc3ES%b6y?TaR^_j;HI?X|;Q=_oN%!$L%ozg%P3VOECew-(W5RKISDXcOn;g=hZkpC}9kXDwo=V@N)i@$wLy+6iF)x{$QP7oiyGuoBole|I zA)Bx7DP>rKiNU_*v(Ws00PN2!4SVCy*Fe)!>uuJ_1vt!He=(7%*H@n@WvMq1Qo{u2 z!7?n0C-1WanupV2s_nd3BlCnQN4)fd12wGW%2 z`|$Q;$-qd0zvH7f4P28yIn>MU4Lw6Tt^?v9{m|xzqEiTjS@8csGXD6e5bbEK69#Jv zWB<9L{=`{s;Gh7NC)30y^8fzl+wN}!jK{tP_HVHuzY#Wy-|ZL>Hcb4_{rc~Z^xp^= zWO(8~kj5VuPX;m+WTHR~)A#wa%6|hqUwa)$PX@<~dm zYLnYfL(^SlTf|k5`&FVBnADb79|yW@kJT;-yIrp;3_z1hWxEL+4_9;G5wL9VB|mp@ zDmCKaU@P4+VaeEf@!eSVN?=3wKcWWY@=fRM$k?T9)P1mC4f+9J3!Yqdi^`+LdZje+ z6K{l4tZq7w1^15){V!YME5XY|v?g0w42E{;xWm%yo*@PeSgpwtSiR=!7?{{nnGO_(Iq0hgW~IcfL8JLXDKXTTZ(Ne8f*}8Th=xRf|5b zz*RaPxv6#@V|E6n8v<`0mq`sg2Ot}r@ZU+kU)H~aK3Vuq!vVtj`Vlg<@80An?-*u; z7xF_)RI}^v5(pU)rUENb!zTx(kS-)RU|v#dQNMOPR37KgQo4V2A?+_6z#{y2p0Oq3 zMXE`IzHB-V(Lycz=#muJqEu5gqDXbnz@iiZ{l`;lu)^a`3gwMxgJeXgyC4pmZhmyn zYnj_GFJ1}iom>=6H@N`0zHs5Cx|LsO+-38xbQV$bM@Z;2>pNL=IQ7I$@tdaG zu0L)O>Ex_jmlY>{Y~I9hdk*>NimH_n+m3--b}-G|_(i0(RBI~}X@!2%PG9P)^|EJ7 z_fIK7q4Bsti{WbmQfq6}1;F5c2)}RN>VHENh|Dn*&YCEt@jG$924}up@-yu32-Kk8 zA)^^RW;)Ngz1u5qFHfqnzS-n-LbBFaZ5Zg=%kROIx$Q;;Hcp1Sz`sWf$r7+R&6m-# zPOPz}fOMQhIs#ymr8!QfaFt{8yUndzgJ3k1IrbnPgCbN#pRFkXawYbps>6H$C z|4zZ8e*mZXa7f1G#W)>Hrqrvf+-P8O@GNR;F+bea$5*;WP+T@yU>k@in9`v2{KW|C zU?msX@w7VRs@v5zmML(a`bB;NM*^2Y7^wAbJ^3~%irD(Ymol$Xth^vti zi%Ll~m{=!+&}VkY#3bMja%cE4UH7YbF;$^Ziu=Vt!Fi46lw)+`yw|S}63=8?+m{AP z0G9yahHA{53<4P*NxmmLZ|f!ZoT`vMsYYNxi$*liG9@B!m`4KA76H+|-JE4DX>+fb z#Tfkq0fO$Bjwwl~ZH;3>FQg|)tw0+&Yq+dd%jfyvm+U+zn7v9TWi^i`{k%qR5)gQ! z4@B6X)LczC1RujT&Ff}>)w08lBWTVrlIV3LQNqH~4c+lcMSh%sK@nXpTN5z8v0N>wJdOCHU!Q}tF83bJ2BrEYF2E87;`>F@wf5x|qysUJacPG#C2 z;yP|8Kd@q`mBvo|$p$PqoQYzaE|(+%!&g{Sz0OIKKj6Y=vcsHY9vxKyS-#&@^0;oz zU78i3ef(?hd=36hzD;cnV5f|kq<)_9+*x|<8dpp1y|1JgR-{pAU3xT~qc2-@E{#F0 zNZCrItBBh#WcP@Hvp@cEv#Yv|ftbbf*O`8;uKF?d{6)Sc{#deovL_Hb-->zcD+ElE zOO$lC&%Bc_eTGv{yw`KGC~>}kz}&_qg4C6*j$_)~mfQYT1HG=M$zLR*t+}Q^D8nY~ zVN7st5;K;|t*tTeTysMF0OE4+b*L_-CcIY5wOS2Q$M>)WTe}0A0|RtDTu@Ey^`&$J zOT^H;hp_~dbn*NCdVQ_Y{EI9m=fl;Af7)b!JY<8x(Toh#whblnB9P-M!WZw^Tx#x; zRH`cp2MN57Ya%4>R6Up;DC`^Zk3*(Rrn7w@+A(moTBx{2nrsK*R1M@jiso99v0b~F zikttwa)kGAM^g9+_*}-6ZxW0XHqawssy}CA)=8ob@#D=a%dowVXB7j1-%XXb>*fVk zf<}xsw}Istl}+n*U%!Tqn^~kHRhdc&wd&Fc=1LmLYnJ+3hPzw{Yd>GOl;SOy6o6OBbhGBIr5;EY? zrR8=t?#V6(z_8aReO6#g%5SiLT_^u~kyB{1z==-OM~N zOQNzIRu4|MIRe-(DW5Ei>82M}4{*S4t>Dr~l#Xs(#YMRzLbm}_Q|#Iz)3A0yfL0040bVXCvr3Y zh%o&ZKu@?f23>j@Nsr&(F@nlVQthZEE>untY56^L2Sh@=+C>+gmNSpt1oyyJL-kKp z7=>e6ZiVXJXv$3uxk38MIhE4Fd#{5lHa^l*6L*gH^;gJ`nl{oONyJXvuek{YD+WCb zaFp8~jm1h!*j!Qx$C&i;8W8}#rWM6jYCEH&n_D)|4!Ka>8k+N!N!?bX#%-LXap3LV zY-~*&#x_dsG)Py9xjFUmK1eBUpL<`7)Z3aQYrfQg!~zK422CNsxw+8A-ExpV_OIid z>%*TS(MxK)BIdBsZWpm-Uw<@E9+76Iy5y~_VmsQa02Zzn~D5S2EtEp*$<)53s0-HWfY>KUaNC<;vJ-gMW0=AP+bv?Wr6vuPs>?om%m&YoX7laH#f-N^Qy8eyFRvxM+&_ek_tM4d*A=O#u*q?uipJWH4qP`vPv zTD^&?=EWhp+p_ch?IhW&(quoj5>xGz>%FM$mj17oWvd|NksLoAP#VU|8ghh5uO}<7 z(ULf^zoA+;ub_CAbz)C^n)4K58pdJg6AWoOLaltBuxoTXU>RZjKBHn_-Ptyr>;tZ? z`(vbP1`PmVN6NH1+2=N_Y>}bz9aMeEjIYH1+qX}sLZICX^MtZ)bKi^oa9ln;tAxf5 zM=DC$Z_%t~E_OXhD9N))5zEy(09*HJ97h%x_>Gzk{~@2d|;5Z z_i7NAOYe5rShy4;-SLO=Gg>+!M&;h%&cbR@2qVa)Bv;2c|NX7yQ4rbgg+Tj`M2593 z?UhRqtUtmh0&veX6JE*(E)+$Ld1e~9GLDy#rO5kSZu~W5XfP0-IRwsXtP$$+xp|)3 zU@S4W%jUxtk`Hp0wP_@7xIzPla+I}w-KyN;e^MvVt5BEd_u^sJD06UKaQ-a2rrEq7 zui`BQ(q!x3)=5!jQ7JMiNvceZS3XjaC8#_7kV*VD3>$rZ)2y$pfmP(UC++jHOCVS6 zkRj_Lo3#{yBwDSuVIJRU(dJ~y+v&i}$B^-mQv1W0RId11Lsv*$>+^ChMwq?&wCyAL zsj*4kKqZuH+BnyK>OKqd6Kbhf`IO?XIfWL)-)dhTl}&vS`$*HxfVzbp=dnn7w0)=@ zPBy~RZ!**TEQK9b>Y|JMS694qi1plq<%)ne>dokbCM=<5g9*E4NPJ6L2)gtQW?!0t zc}72G0%x<{hApJ49MaA9SQ-Z6!Y!*iUF0aCxpxguy>`Cg0qp`(JVwVI<>0i9C9&U@ zjU{E*wq|>3Ii>|fa9V%fWO3kNQ!M)WgUDqmc1n_;iPUb(_l#nmw~0~Z>beRe7&8df zwTH7iF(|*pIGaj0H9N)>CC{TqQy+ya_^f3ufXmY;l>!?2cp6Tl}V&_c!XUkm7^ zlu9t))R&35X2*V^>RlZ|+Z95ARDBjVb9P6|xD;xYe*W8e2RZQ9(nW_D@OcJcx@x0T zZZv_?1PuVTY>}wm)s=V5(?6b-1zRHGIcn?1DfJOs&X_l*@uFbt08DZy*)*0~pXo=o zY|U1la|CV46^bRv^ABXrb`Ij0tFwb>Nf+4R`sU}wmoc5jJJ{isZWX;9$ZkF!&v^v4 z>Du|Xz5-kX7p>Q-j72)U)$7X5@to!fvc(*y`9nn+PARBpmUPiw7BC9wSg z!46SrZl{x3=xPpB!n<=HLjbhT%!!LZ_6@{>iqt#BQ zFCDEDQsB?IY7r8;_IHid%r@KOahJhV%J2UIo`L@|n8`(@2lKo%;};xPK?NT3gCJ6` zI>DEo>K?nLS*mjE1u-*vZC5w8EMa#Sv3FDO{U&uu%(+>S&9>GJwf0v4W4f3UbL_6< zvYXDtk7Sf-N!RT+=M+~~z~Pfb_r)LJQJ3`g$`Kn$x zw>$ftzWmXEBCe6COWTj<7e2sNYz-drFNg--*J3;F8oSd*%Y5t-PZt7LsHmol&Vs4! z_?MS!|6xO3yh%5C6>sq^--QJ@eSKG3HGULiOohPLz>Q)=H(t+7P3b+L=~-wxEx)o! zl}>ovI!CR>!&#DnqQ92GXEETCaS~x&kVhzdzy}$j1er zr5v<^$p}1H8&mz|$sI#+m8Z)HKd#D)sB1J<6shduXXPf|nq%F$THM|geOcuEcwSdt zBtw_7MfmZ{urKV3a_1qrL$6Ya?YZf3V5IGEvOL&8R+wa}&dJ$*(dedf@luD(%s;v5YEL=8H3q$62X z#N?Lpt9J<$C4h@6mD(`HKHr%g4y`wUmyPG@JR3pgs}nIu zl&lEMRbxtwPTHBPyTcP#TZ0LRiAV(Pa*Zy4qVt8??qsQ8&RqfEn8Uu^r|rS0fb_!1 zAiD~xOol+M7W}id%6o^n<&E9ZqyVVA_2LWHi|(nG573FZ@uDv=(T_LhGT$Y1{ILy& zcM4u(`O79I<%C|#s(BqcuM*<&BHz3M$mng&pQje8Ej$wZxYf!#tX6+FLgn84SU=C7?^PEd41(<^ z2Y20JIxPrDqc~!Y{KYwa8-ndH4;YfqBK}W<|M>Wf@=YQ$>Yc$~b^ZY~GC=_%?En{def+_jiZ!?}ylXGU``dLEoiV zlFD!X8km2#LKIqcC=c@Me-@PR+w+?#wgC3cKPnG}R*mIC__w|F?}F$_px3@JrNYPm zuK5M*C+L%y>74)lKMT_SJu&|u!_;BC<^AcO1vP|1M+VlR3*Y%v# z{C+LU`%aI9$$5SK^8pL zB5H)HU{QHxCWyBsXjIjcV^uGWdC)c7wUMM6Jy|_I)_h5Oxej&SQC@kwTF#aOiWEq0ott>4dhF3=1E{FaitR4bO{ zTWEXyKJs8^Ff4|k+zMuTyg$`1f<}GEvWnqQYdx`2E7vezx*DPkgz$@XZH-|RKAkQ) zPfif`V@j<-MR%ZqUJgBNM*C`%w6sgzqJD{(++nI?4t8OZK)ME>Mw)}~q3$Io9=c;% zg^q|B*5r|sBbWC&mti<+Duz#iHf3=%={qegV$VyTqA!=v>ZGrGHcGF!2G^HxV&5}M7Wh9d(FE-VEx7k)crvS#cZ zsR#rxYod5AJy_RjOT4Y$sMCi;`S~-QyTnq6arTiB`8(e#5?t9Nv<~=k>nY z>9gF4n#&9_n*zS)Cn#_~2A|?_X4hXxSUfLN+NrOiZ zy&rLWYp*t~e?a?z=l97TqL4tP6S;*zj#S~h>N+8R-z&rTYBq09?or~_j$E#!#M<{y zEr9e?Y}S$zIj6k_=P}H^!*aDr&~k<|B_Go*gLl|r2}r&i*qSSyoRyv33Nt!GQ(vI1 zF%*bczQ3jfj>_3einVgvWbuF;XAG7ctodS?2fUV_JogDha8?9V( zpT2=Cmk{<3lSL_A3zqKBn4b8Sy%nJGQ*(Rkdx3Ef4 ztTJ1*+Ks*<0h_f!nEEzKtiP9VDq>X~sbTNM#ZfhS8eQ-M;SX47g#Y59xb|fyzy*(# zf-5$bC#K4Z0@;Q3kne$CwM|>!w<4EyB}DhfKuClN$jL$i@OWFJgCq3LIcs~UH_4CA z%1*PsNC=DR&3F)MFDv8jsBUiQ!{Tbd7^pKob|8cA9jksw;w8>iRLieP!Rovj^Qk-Y zgYqBfpf>~cUe8oBs%Z<`wFU>(j>QW_VY;QXTAz)CNhjV2uf^TgVGt7&Q_&%`!xH|0 zdIw3#b&2$aVXJ0Br4;7`_)~Q*%5?g~!Eo+8brfV$@u4hM2`nzx)|5erwM*_JzH_Ow zZq`4lZZUAqf?_;X`Fii%-+i^36Eg(PQWS1#I^ItWYqU?Ep<)*5K9B7u4Ytyr_or}a z+^duru@6FJB7a9A#jO%&r@hh0ASXv{Jg-wbq~EAUa59pn@m!Q-1zlGkL>j`h3zTSi zefw#m*;IctJ2KsPs6H6ep3M{ybLjwPVS`|nC_3u4xeLv&s})|s#FgK0wL(_3Q$mvd z8B^uPMj#>n#puZEsaELn^qQ{@D>)J*p6Cua)(vn7>Tlx5a)UbNO{?e0LRDyJ;zNGn zu;5FdwmsJtwrJ-o?oRJZDK9`QH;8R*$$ub?YEu~C0KV?gQmf=~Lq!g&n4;`Vbi7OQ zBWtP^Of3YpTK_aqR`YK*O*&TwHf zS|yL#gm2%Q(UfSm#w_fUFq_;1ACe>YT zqqrUQUk?Lu?4DEEJgDgIjD0n=$gbHM`34tg8bw{NlcfDa95ab~n#aX9+n8JQs@0r} zVyX5!d!UI|O?K8B@5aWL7rivi@Qs#}wGWj5x|TrU<&-UMQ+#bk80gvKxf3%BwHMs*UwYW)<11(>g~6O3Jp_T3b6EC;<7ps3qv$+cS0Wsz#(v%U9W%o(3z#_}^tcBX4{g~-9Xsp(pOCMG3=W}ERm@@Us0-^}_ zM$q}|b?BZeG>wR7ah(P^Jl^3IDV@sX^UP|Spu)P$p`!*>X6xp&SPnhxbeLbv;7U=v z4iEn=iYbBd`5CGl5de@fy27NPbS^7FLq@*ts&km<8^rQ^s2Jer&hxnW&T!lNP%3h( zhhP6C>g{3kb?OgM9$lylfD+P+#}W>@`7W1#2dy1HHIp6cqjTB3TH!92FI0RRE6;kq%n4P} z3MR}2m-lpC+8>&m|)g+lIZ~uIIK|8@w`8MfK+${EzUFMIgf8LHb&%2Ed z&-F{u(ybb-loeo?YZq(2>YMK#OATf+=_BDjjUbaVx#1(~wzB1EkIOHa++D(Sr-J$LssId(mr-%yw&W=Qn z{$=YaMC&hYdjm9NQi}{aGv+@O16EokMrG-wUP$qFv^`Z ztk1H4u1?bX^*sX3GK1eDrS4ly7uWT~#5%;Mh<)f6CdJ@9zc1QMx7WKeyU< z4k;GOl_zXW+cyM+EN$4Ny0M(^%o!uwN_5y)t5PKr+J0{bgkrfL26rwYB9|we8^Q|{ z3M8_&C}h>D4D?X-Qo0_J)4FDr$X*UZ+lld{O=h+oyKm=mjCKinHR!*$GQ5>4ce#Dv zSm^Gf3Z%u|?DqIsSaGoPV+y+>q=oPA`S`~7mZ$TFdP}PI64n;;VU?vdq$r~4NyV7O z+P;`{mtK5IjHw)wyQmq@6uQ!N_Zmxwr>9KUwPA3v9gan!qLwxPa|MLT(Wp{BTEsPhm;O-C8uzTN>UyFzTciy zju4nCq!tyGDs%?|Vk*|;?{ls+Mi4(1t6%xCvjC$ZT%J#vg|C$QVL9=NdkCv2j-KrR zH<+Zxk-D8i*%tvzgnkW6Ae}~YT`%D>_K1z(-kb>r@@jOV-;cv`L_V)SJHY;R#e?jJ z@^%0<(P@K7p^sjZ0rGf_${xlbmBH_qFZOp}0W|!^e8Xh#c^BGY6<<7XISGuN)h;;J zzl(uG`|ine*+A?W4^1k2eLNfVK|>#|)1K>jz1U>i+PQfg!aZbSH8*Yra(~BCiJD4L z(B$dfCom>ConQnkJ}7OaDBHs2>l4yU&-CfY0Z)Mg89`jBeY?(m5UW#}sb{6OUSCXK z&7OKgL`In$m1MIY_}Z*rII4J=ZutkKo$kidyB0xJ(*uwd_KCGUYrZr?^1Z9rphXh! zx~81cVOoHO$2d867G0B$ZT+49-ugqIsvDnrO(5iIcqm`>)vBsU-#4WWJ%kqPP*IMm zlfU8+^~~#(35nAYc`^NC5G}LwT>{g8d+md3{hgwyz`zE@2%O8mmmkOT5&uSuILHt| zPtj8@IAARp&1;VaMl91VV6`n-lct$*>{lRO5d$GqAHq5Z?NTK5el6o|tOGsZQwjgBkM<5GtW z);~ooYFohLJW8z;?drOmTqybEA#pWdZ!iAfvrZ}x%|b^lzGotbhMu$5P?oD7_|eMX z8I7-*;4Dyp7!9A0)6+ty!rVktu|Y(nW*X94A4{olDnX}DG<3k(`up*`DAU@^N{2XO z5~tL&$wNAK?HF_N?(qUz`T+?D|8JFufy8Z`7U$o z!T}4p>R-GJCx+nZ`X3ZkoX7TlWrq9so`SFL!@Y|;Nu9m;kNohZl25M*l+JJi6CrL^ z(HRpWsG3mb(_RL+V7a(@`mAtv{vg zKBsdZ6Z1k~kHif)2&`|8v70%0f2YkJe-h+NHYlHP@0?P{aC~lz zsXd?&;$t$TMc+SO>56%KaMr>aUYQUm=K#R?ANGbOo_@Ea_K_HZ)A&_rKb48q3hHC>a}3T>Y)N=Lmt9Hmp1J3kT0Md%*Do#U_G~n!duKL4~nlurMh`1hkMulkyO@ zv0VTHGt4f_pauGwxor8Mc;4;tQP+5?5d*2Fpr|V}DTBV(4TH0>E+m;S+t)4PyreWN z@SYOI9zFrR`+#HgA=UP0(bKlI?+br5e}>7^8*@8qy!C9uW)jjxd`z1UslKb#)JfhR zsN^A_*i`4wmyVl`rLnt+IlafiAa7|k1%uR>6=%ew5ut+@oeO87Wz*y^De*Z7N@k;CjVN@}unD2HeX%%~bf z=vu9)Fv-%1iZO%KX==$F)i7|E)uqF`F^X!o8-H=NaXM;hIDR)ZVtL6V&2NTduTI1r zZIN4t&SZmH^ABU044wXdS%Wk`{2GW_dMlb*5)82iGZ+?YhZU)G2eI|sC zoGX4*xr<_la5e2v=FWTr<~^Xrz$YiHZ7dxT5+VEG8_@c|rw96a-J?>B!o@m{$Byaa zglpca??h)cmRw(o@uUa^DmpvxgIcS`?lnh~Xv)dKm{-)EiC@oTdQ zQ1OlOY_H84lDF64pM_STZz?(E@90}m5Z*u9CNdNteefqUxTjiU`4`L((oN{2zptnM zRx9_4K~~gzKpWj$Vfc8g5!=KVy;q3zjkOO~IvlgdfRfJ~t7A!jE>L{a^g7fmMnvij zvd=upg}zeNxo}Nsi&FN?z5X^0|LI%xddf%Q!auoYpL_l@goW0+k-4f$k2?$58g9j1 z88CeZCcHHxozf;GaROULp!&QYFTP{743|4aTH^YDFpnl6DW%7VcS!0ddfl73hx z!0423N8-9bJ8(R36r#L%mM)e5X_vJzxzped!DZbK?u^}PiicNeK%j~LebEGfSs*h1 zJED--auH#2L!@(~h)7=ZqPO-rpQpNp*QxIAYKkGwF{X>HpWg}6qz{9~1x(cFS~;C| z(@uAL(xhX$S-LRqe!UklApna88@nfp1y!~`P>Z99Gt}@NZkQG{Y_+;;Dyv65BS| z&`aa=L3>Q5u?N;dI6S;`SEjQSBZhhKa!iCMdoFKA z&F@S*$U0}vXM&(W-XdyITw_UBJKSJ0U%-(acA^14^J>c(ip_?LQ0ls*NH>-QPxr}h z=fhHkhfwL)Xj11L*rl%q{J-hIf7j%eD$>L`DwMeYvHSQIy2(=i$!43%q)In*YA+n~ zBLeNTR}>Nf6HL9vnZJw+`yHJQcdTc1+}e>$`27!}-E)dQ$E*FTP9(I|aoe%7Apz3j zg#p0~jj-CPB?&y`M31}ser(3(FA*BFeu;1vPULjBe%KC1It&{8Hg0yU;2^Z!*9u23TexUIogolR1tpA7JMQ4vho1@>({uQm#`v+aYuHsAb(hHULvj_O`P^YH_7baz#mjSM z^u>$T6LZmM@G<}mP#9(AR05k5y1i@sV*EUjJ#`@3ZF=nPUmKxzBpsZT=aA6mSc4hl zCpE*$8fg@4;EDNmjA#hsIPiwbryRK3#I{7%tb`I05?W1ppD1VRQ^2vY2%&y4bcy92 zgt06kH=bBG4}X)KG~&dMD!EJeMnKh-aGB8AWBXppSk4`+$WShbdQZ-7-; zF`jBSKQ}@#K9no4ER>Lf3-8Y5Q`#BZPfLN z1OQ%fdQV)Cy?KuV#bnr)QY5W2m^Y(wJ5sP30vEovP74k^;5HxqIyfa5y%s^k6Mt!S z9=%>q zE5+YRoo})=9-U0DwsmXo*0oxGr`KegS89B^X z_12I@$2(o&YZ9$OGj7us(PXw&-)SRB=PVn?>ykbFo0_b@QSOvsY?sa`qdGMqq(dZdFKyaNT)n? z!aYdeIf#5%A43?GIhVEHp!w6f{6#=w{U}^iooXLcz}eJl=fVMCw8wnL5LVW8^0R1y zjNi7Snb0X9-3%{BQVKhZt%C&`X|4-hM(L?!J=eZv=h4(%GvgrKWipG7(t9Ik8?3lL z*#~N>9jd%E;}JZbzsy3!KQOx^q75()j2D|rFo9*qLdkYSyYIT2QsTad=`b5l>Of{! z=O%lSaq zFg5!-cc~UIZ-vS z*om(7x^&`s2(h7kTg`#*zgIaFeSCeJJqDtmMXX~8sn`#jagF*0kuTcUT6bEpd`~Q0 z$0gMQEIf3Q13U)ZzB*nl(#ez?zNZF<2#zB+uY#L>vY6e8_l>r9uty7BwHvCM)}#eX zVvnCOH$}IKwuC32U+#DcEqI|(%L6AWH@5LcO$b6~ z{QDJ~*H{kt7z85*Fl)u^W=rsghz}bI--kn&%N zAqenk$==fM@)UW()o~C2Jb7RrNhs!Sy<9{%WcZjxDlyMs1XE)-TT+@1=LR9Q-Z2P5 z5Wp>FrzYxG?yZ0>HbqvEZ?l~ibs#-7!omcg7{aKyg4Q$o5n&yS+mjs>g`h?=P>_-o zG-&|W214Sq9{Iu}L?VAevwZ~^S4=D^=kuEkD|XgL?@CLbA8cfSpUiO(XxWLs&v;~w z^qvlcZPMo*iC;i2GSGM$A2zC%=eC9kgm>;^k2IK&@#-8hUF%M{xnt@o8w)i&r(hhh z$+nNhB?;{wx*nK?0oZw#9Pm_3hmM6M9ROPr1D1#EAD0W09Qly#j zvfB*Ki}15<&Wot(CnN<&DGOY&ST6;uiCS-|t0`IDM=_2!2=F5&hJgY9uNR?rVq(0? z=N{dkhyhDhO*z~@Q-zv_m4NC`z_yDv#5shA?k5)ksUI>N9V)wmus>(Y)F4?NYIRn*W~GI zH%8H_UD`_L3g^$%+s#PCr^jO<09?&&MatB!>~{HupI?r$>DX*u9sc65CVV%y5lX$Z z6neRJ&G~>hLhaN%$(-<{(G0g_v+fr;qq_2pHPS7$4({A^J?oPs@)qv!m?{XlZOpgk zPE#DDe<-z#629MzRw&n7Xp=`fSq0*p+3psomlz)vTkrWBZ@iMJ;sZG6zrs2Hbic=| z2}GVVZ(T9S?Wit~Lz+4vw1Ycn$D zoV=Os0sG;s3f3y#FL3xC=WO;Bk!aZn^SsR_hZ#Sxu<6$g<-#QBpC7iVpvleTU-U)F zpP9rHDV*A}tCR-KiU`}sJ(FI-fm%WMF!5nMMD@8)NM8R}3bD zPatT&jpMLM5dkH@JpHh}Y;TwcAxpF%jB~0<2x*&;1HhB?-9$<*=D|YtE8Kpb>(*P4 zTGfiM^J!EL_tbrUrS9pn#7v`{Gp*9QVYaPi-R6n2)l55_Vc*mI{-uc%$TD0gT}h~1 z)Go?9uwr{ie?nus`9|#?eq2Z(tsTMog`7mV+fOLx0|jd@n}p8(_IW2nU$KuepT_xg ze;)LZ`d6!v+IvjL9H08(k~IQ}NZ?0Z)+HL1`%DCM}@reVL9Yjcb6pNig4(LK6+kzYw)#V={+0tS?6k=sif#nWA&@3xw&peyMzppbVZ}%u6K- z(?+=t`CqrR%S(I=_=2@n(Dm6VOLUngiCxTQ_-?agh-%2fZ=_+>dRB?>syy$DMm8A> zc@c;#SUksvRV)SYmBKvtB)Cv1jFUk`qD&XXh&t0=s$gB11n+XW!EsG)( zt0o$D%m=OAUB%8lE$9XH!pbAwt5S5f^Ke?!uC%lp-?z_S|7$69(`r{ zg(tPmg&AG`KIaV?sJ`@d@}EB@MZK^S=IU2w-H&Hmkap}YE+#zdl{4NcB{Ilh*J}%n ze+@mF{~AAjY@C651K?333>lmVq-_y)L+%c%l;ay0 zvb&y`y7+!HSSID%pD4e%`EzY*+wz&V;RGIm61o(D9tY@D2*m~R#}Q1Os+(Gkp#;wr zh7w4&qM+o&f)K*irPq-KPwz_Q<1a!gL(*CW%;MoDiwY!NycN*L@Og|~{4en|6ZJ(<7VwOfB88J z-o`WJo{_)ZiI&qR_mEw@GUYYD`-^%e*q55X-ZHz$Ct5gl@hUTqd z%LQLxeRgU`nx46?(lKB&u_6|iDW}P0r#E}P;mv6@wT)sUyO=`G?e@SAO0@bVNPuw_ zXE5`SVJNoCeUL_=)q9s1@KJYGB2htdx}>p~4&?q3_gN~s|K_-Pp^T276Y#TGe&=rD z)L@BoN75J@pkG}?brm2aA}qwAqf`Q$aVtcB2^RP(geCP!qpCzZ1}A~TM*8p1QkaXC zx5A&}Lo|g1HoFtrvAxKOppIu9**%N4%Q@{HQ+@Pac6zi4OvgaLlid)(kHjuM_e-U0 zJP!J*&ADP$+i>FejlUC+>^J-@MG!rLn3Kjs9lx+DV%A2keAM9Mp{pVuUfc{q!ZF}z z_#xVC?E*V7er<2RoN_MvN=Ew>w_^`jL>hKm^#6Y7^t}4c)8;ej{JC-Jgp4OmCtQG{ z)A0#p`o1wL$8Ui4JW@R5=4h;E2kc#!Z5GW2Y<*Ofz@53gU->qD<4{6ba}oipYR#D$ zpX6_Zlztz3E;e}ap;y7R#&dmaN3 z`hHGq3{%k#nK$BSvjtV`up{~I^T|=&{lJdx0+&TU#Nxv?fcHjR^r{Ebx8rfYY)8rOMS#`QI$C;fH|4(y} z$vD^tSF~vhnhm87&-;uWXI6o0lkL>!eL4xMhjGjum1ZA^!)Gt}{qA%sjOdA?H#gDF zWuv%axi%`fEsdkmKDBqgHWzO*hbB+=vx^wj_qwC<#<%mOs1_gE^+7ozT0wYBfZ~;H zXTus^k=+bq*7t)qx2*?=Y(I~b_#AzL&r`Ot1?=-3#Ly`sCL^z1kL#VrED%il+zde` z@bF-deE6r!KvDsutdQGWUxaWJL|4-%e3?X_+NY68eDf2&lfCr%TfTm=>Nm3YkZfQx zq0eL8qEy&doK*D7ovfmIccNt}6Jtnq&1!9P{jr^p9{Crv#q5yVG-bJOxpK~|IFFh` z{Nr)WRGAy2PP0kWVE!22LFrQaRwuXps-xuSDed^uQ0G%?3~q-;OU-fF(!>@-b|W2r zN}u)ZY~9ivExqcrz z7PO5H+F%SHa>L_#a#^s;?FUpZ4p;6~Z%i!nRPN_BSlWzc;Y1QZ&Q$nCQEgG_?sb4G z@w=RyLa;Qj9q=mLL~{7oit6EQv@BhfZ;D~rz`->zCc4deEi7v+xhiEB_OVx|&F_M4 z`N`m>4R}e(FF<}*T@X1cs7>UOkkHjx%7W0u#5Ee^h6=e0=0A)-Fth|<@h^%%^RVN7 zw^u%0qLXpm%A84mL-nF{n&MAA=E`o>ge?{Z=>T$Dooz$Ww18r_-cLjNwJB3u0g6?qyY4lVkA#T}xcHkj(jESQ8}-3Jwh6@b52{bC^wzkELsko+4UBM?w#=)*8^ZM2}hA%<}(LPq~l4tS>IBJ1#EXa3s57ec2<{MCp; ziuzZLjhCpNkVKyfGp%Z)tj{Z>kf7D(xrDE{+c6Od{-7^eaKIGG;j6_BkFieJ4bDZ` z7rZgQP#We8?tE9Va2$Yss1zkRsxUDe%yXJmga~PqR)R*q*;vwyBuLxxhbOTr!?CvD zF+ILXV+lSl2o%*d)06)i5d}R=oAoT!nc;MlX#tx@&_hl1_7ynJ!?S~esSBS)AVwkm zV9@feo`9p}dvh@6N_2+mmE)vCY;~Dr#=pT?k|;u8E{}c&hJ96hhEn38dj0Zr zcj&qheltit&&mM=9m*c;V@y_g9FC{3VJ|om#gj=koOK7SkQje|+)vv(8$ir$N(9_s z;V)v-%)6k5@kx>*8Eae`e9XTSK;|Lbl~$18J*9d(+YrGqjO6A zYggvk*@_;{T*L!JtX7G+v~6XwA|vGY8^qDkh_p!IhH#scIqKB*WU>XXA|)p>T*Aa! zFe&PAGtvi`5uAu;j_(i2tbvd{IsPA*TwwO%=2IWJn4Z&2bw69{OOMxIwv+KhV&Eds z_8`ro#!fs1I<+mAr`1Lyz0TAY-k}05yr}=R)%eTG4y%{(frS1^R9Clv;p{) zQuCtN;*pk$8=P_1B292sFPnOp;OaUXUX zf%bJ?p2NrJ59Z_QxM<`>*?Y#3a81?QmlawKft-~! z>FU-7hA*6`c#QQ|e;1&?MJC=Kv@udep6wqS(64|0;U-MX@(t-(3+Jo4zif4x}m@ql!?;hMx#QFnJgOvata%Ba@Zwg#^@lVb;b z-!%k_a$X*=apoPM%5`@zZ{negAFnn#PWq^=!Nd;puuG3=zC}g?7qhh2BBWtKFLsZa zs?R*EQOsRGB~=PVO{Pm0G^kGR$kf0(Ssf+B47(90coyK*2=dyS*!ag3_vRua3~}W? zmmn{e?%v#ZCrMKanU1|SVqvSFu0L>?j!W1!ldd2m`QliSG=elM^29%V!qMG@fQ|cO z`(p|2{r1gLZhRx_todNH{b6s_c0+kZQoH$kk!AXJ>7*m}-w*Mil&e=fjASJ}yi~OJ zsN6v)pg%E8b8-h9YOWV$p#nI5H8XMuF<#UJ{P^o?EM{h#$3xnNc^81Q7kIV@y@(gW>rJtA zb*{iV7>m(~9>7={Em)J3&s-G#vMi-7#XNbHij9pXOq##$7ZDx%4QXP{adjH@y|3P0 zfZQe?6cSay9ZrQbA$8o=c?r0$ zM8?nkj|ewf_+R!=+=sU@!z$c<5(*Qa!oY;k!J+iY^1@I$5+UtvQt7xLWP*F=x3QOD zKiknZ#ZQcgj_^uG)9c}Qm+9|$md4fKWs1vil)hCGgO_mIr#SJrMjAS9S|$F{qu|i? z4WjDl5j~>Ig!1mmWf5pIUoZTs)cqq~pW?WFA)2Nl0jOT-5%Ui<{Cazo2hjC)wm#nt z&~_K-xR@>FU@)BPb_tSO89h*-R^GGDmA3Kfe(233bZrtUHea0cww@qc8#tOmjGsK2 zGhZPVDYx*>@1nFuCBUM)+G-26nH$0*QqRhF+(Xb^-E3d_hq$uTow!FS!dIS;`cH5CBR6RJEaIk8xEZ_)a9pW+IcxV8gdxd(D)P>Nc_l z@fSFkvSB5dqT1b8Sp%{V|J-w)&oEg1sz=C2MnIw@Pyi|U8;T5DTRpqPE?c2+W z_-`WS92`W#+w!zuBobe~E*b>!^}KHF(^SpWpH$7YX`BBXIZI~_%H(wYLScMn+pJt* z+qE((f`$HkR3jhQHIc2GhBgH1=3V*~o)eXk?W^zz<|~Rqoj4g45AC2^vFxRMcR!Kg z?q zevLiE2mS=muap7XP{}!1oKznbPU*WHhN42EdpwbxLp%p&<#xvIchzGFdObF_G|jug zs6H@jsb!Vg)?}CvnkYO~a-D6P!k|U@@|QZ#5T)Fw#)+R#-)`BzjMn0DBq?W~3TvmF zeUl68HP|D%T?-K3fI>*C;%JkIsC6-|X&sRCMj)Ke=$vcd^f*bW&T+u@(J9Dv}0zxo1ZsrKS?c& z{J!I7Pro&S#n763C`|Agx_l;2zEhH(r!!lj z43_699yO9IzD7<9Noe4&8f4!cpZ6P13R=|5usRMLeAoe9Uw8Ia(N9E&mui6nOe|x* zMe|PIh!3+&x|AcNkm(CQhDzk_T~=)Izk~sWd;1_DjX|+}*-xYjS^C3XPJT|}BWIha zRHkAh0S#Z3$_CP&vcP4xJ`$xY__*k>mKPDLvP)=h%O67j+t!@~NNG2gk-JQXF7ks( z;1t3bzJG< z8wmObH%FZ0PH6)4JO2b2K2 zb>~CTpF$u#XTH_aM@0TCl>Ffkk+1R#x9`VKgP5jm_4@ce{VXS)+h=R_Xx5YI{CfBh zp)k(>C?0?jXj(9!6VHgteCw5qKUsASDQgw;hI-}o zd_=ZQ#bv{lgU7PD?;IKsU4iqaF;04QdcD_N+h43)E4=-jJnU%PB0In)GF@`_Jy>8+ zsp^q>y_@Q4P;UPKY;@`$91X`_?XnZ)l1IB3*8}72t>V6S>Iful;3? zdUQi84e;_f=3=+zOZ!<=T6*2)L}M695=*OJawD5@4|m{R64h(692!iUmaOM~RP=XE zag1>X(%^Nlx^{&Y_VM-5Q+mCpBSm@((P0Euc{|D(9M$F zbUcLvNx9QK-g2!7Dv?gRTiego6~92YO&}j6Y*z$1|JpBUls9+0qpLz9us-uZUYD8h z0|hY#_}SliP&V_Vm0HFq82`b0tt>g?f)2g~-wTP9{;hNBS{*J_QR&yH6*>=u7b_ip zm(66QXIyAne&d?6%A4&^O1J1YTOoY|X2Us{PKV>%*}s^XK(oYWI^jVzFi(4O$FBnI zyKFlAN5U{I>8K~&KMMo`3%uN8+iZQ0|86QTS^ATr3#XP~fsgR>P%;gKfz5a6E1#|w zBAK?cx=j2b@wVP5`a#gqn&?jXSCuYy=o@(LPWbm}kh`cvEDaQ56$XWvszBBCmg=yX z%syJm6Y)`;Jvr<936vy^8Pfc6BVM7c%ARX?aH`s{1A;fXK~Y_k_Y5TM<=R~ln;vh* ze+iU%Xjfu6&@nXfaZeP+AG|=!6iK1~gj&R5Vuzu?W?Br zhg{<~t)Q-cA&~y6fnm@XcvNEVJ6NxG$~?WO3={oPU8dZ|wsU2c`{d#!LJ=+~YdYFb z$hc1b5^W|>a{|_2qnt_T!5qR_3iUAd?IZ8U_bD+n-7wxt6qMLrYO)T{@rG8HhX|BE z5fMirBVDH6MRb6kDftPiS>7jl0b3r(TR{gw44U^Z4|vSUAFp(Lu}r?f$sGI0sX=ES z%0X}59j&G(J0X{a$O7+tJD6GyhvHv&>LQZcg+ZsSVlz29_YJhuzC=3pJwB^sCjG+w zk@x}kR#@&Hx=2`R0lQdtN|Gjok#yyM3nY3e%DZq3G?i%-ZbI>Vsj}h%t+*!S(C6>7 z;N(p;o^M;ezQ0#pGi13PIPyU}7F~-QdDrg&SK@f&jSNe6=(*gf&YFn@5KF6gRH;n! z<~;$k3u>NKUIdTzasL`zg5$(wHlbIzZaIjcdd2+RfMVD@+4r6$(G0{JSe(`$G~(CH z9(c^HyIY+cgCw@Qx^y5Kt5OAj(?#`*z3MI4N}mbY5UKzOuvp)8>}W zNT_-hcaXsQHGDR4Z0`isE(~w`|IQ@c{wI@^-pkaLp=|TT=c=WNX2F(A+VG6iZz2Rl z%!y3#^GfaT`RtBy2)y%tEpz3xfhldK@vN?Qu5|7&wrBfXaaPG+M0qIdf_@DqK@9B$ z<#j~NnwQJC6IoP=m7jAI@njPDJSV;)XUK?0xaNZlRx_bW5yw|uOly=7EOVm^P(MMA zC)G|p5EQkT?Simq-XQ4PCI1TNBqft{S?aV3B8PKd-=}xr-^EWxfdYrC*<3gAG?93b za$r?m?Ok_&M#%=5eD@1g@|Lh~j@p6XZ?nOQ#fFZ2@n;jw_NjZhzH&)pZOgui_kb#PIOnR9 zXRzz`y15zBPkR@9TlZim5|$Q;7d+2t3+6gUAoun@hd!OPNjp{kCqzh*Nov2Q?08um zvdr>KeCUeYhl)42i(}E_8=A+dybXIn{jK@Oe7r>seCPl~GN`n9Z0~SDM(==7m}(E@ zE5Kb2S&!FN-hvxAB?>T`(>L>CJ;EjG(PklEr{~WS;{IDEjH1fdsv|ytPq^&ch*&UPiv0pN6<1=> zS6$a5towu7jj7#u^$CzH4WGa(4)$u}T!AdCP!@KXpCI$oF z)EL`kShPyBA|dWwKm2^@n6i|}w|jbG%mk__{?iV_zS~oN@7DPx@BRiig3$i zS9($1F^FLt`1RhOJpX%iKUN=!;8o&)Kmtxc@SOpJK4omb5CrSPqB#Y_eYJR=R=a-^ zOfD79R}zR1LaMjjQu?do`~~Rp2p)wylLS?FjOrv|bc%Gh;wA>pnF*-(+48(XI~~+0 zl1q>Kt3oT{`RG%MKy9F8L6LEoxEs~I*&$i#IJA1-pMoTfoDU*=?iZG}v^$`^n6&o6 zJj!j28*m<*gqtL`3pO(wN%}8}&gEwpUltw&Oi!)YQn7lt+y{EMU>kM?IL=a4RVsDB z(ga<<8*v!l^elH-4CiD?f2yqJ zJll6X1A`vlo~z;42xzm&Cr8AajWf{6HM__S;z5=GtcjBkfn_!YM{tyK|9YNYOyE`L zxHt!Pyj?~@8na5Q_9h9iFjZ_l`_H7RRd4EnFuZ1_bq$HVn&hhg-{S<8hZ2%bgj?*ox`>Fa4N1c*8iuJ>Rr)Y~{-4s`SPo=KD&SgV# zzI%1?_EQsl#uH8L@ZhjWV3*S(N+Nz#=E&L9p2p?}rc(qoWu8TH`j;Tusk(tlVRm1Y z-z(tM`QxzP0t4z&pXhD#Ou+Kq=)m=?5va$>*FTSQIHF&jAEH3eaT!`ARZ~fbIdR>( z;}30zF=X4N%iOYeaDTGJ2V!`r1qWlw*~)Gm_m5pA%oT1`*!e72=O4Z9XRs(;+pkBm zr9+&TWw#E;b@SI>?kD%7lQ+H1-7lx+X8S1XJGM|b?NYAy$3Wi+s&3^VM!jb?je{^O zTpv-e^!XDb^rF={P(iCS6Y`t?qPn{3?z!XFyaXH@dJ9(JIqLC^huzfMd=@M*OpB)8 zdh>yBaYeml>Fgu_kX5%)wc|Y-EH970v*t+tG`LL5Y|7i#AjqjQX8M zw9tCX)PA&k!SI}`DC?=pg{Q`Yb9C3I6!oHw(uanCa*(H&hu|dP3*>ep5W^*ahYosRZdQ!7IF}uYXe+v*mub^w$;} zkF8|@`yvS0RmCnyeCtRQ8kq=`xhdBLSj9Lcawp=u*Hp%LGqeiI8U$(Q*WJk~-+kTt z`35gGy){~xv^yuxh=83MVE{q{l*skQ2&qVjK|U7q;l3ma{uuP*Uu*i?PZLcpW#4bX zH}Mi$^#1Cj)6TA({dP$p1$FUpcQ@U-5P zu#x%1kg;?`_h^V`@&>GUl*%?q?qlOn655OgeC_#tp@NVT7&QeL>@c{CoXmfR1Bb=& z$CFfs1<<)Un!`|eZ|h+v{$MqiS1=tD$dj)EPplM=z>_}NX56V#>{-A6k}Yl33rhzh z!4;XndbHt`q|n&O@80JPnO#e?-jxzZ=?ozITJDn(`Ea?=jm^JMp)G;4+I>=+Nc`QR z*rffX_2edt|1>?o=}Il8B5h@CB=F2`ciBNYnK6+QVOM@gr};`DRiU6E#LjNcUhE8O z^o)ytQ6;ax?>~68=diiek+-(@hYRVRcMwT`+gfN4Vey}w7BGUugI}BQXOXP@-QgpZ zorqm8L8wUSlhDmh`dn>D+T))dhD0BeYOmv~Zs6`q)358C!_^;C9q(xg<6kM_x+kdZeRzU3b=lqaBbe>h5mf+>7Z+(#}!fb2sP- zz==J&(&hT?Wv>^<*lvxHlphHJuf|V&jA>?_8~FZ+WoO(&v)St0HOfQIMvRGkme3AX zsJt|!H*WJEPEg}-x`Lu62+v2gc58(DEzwg59b9LjqCNdv?FD;IZ*AUhU>?{0_|mpY zA#!6G0(KF(L!m7F(tz9Qba77m#IH_dQ7XmqI0H8UraGJ^OPw40LvmU!KA^hTiS~4{ z2umma^XHpgC%D3Jp_HF{-|jbhpOp9kv9gm*eAjQ;e^4DOt;Kn^nNBVaEqnY@!=1Y$ z6QZ%~a;*4H{`rGjgT$3O-w8@cBd!)o^a2>pRP(J@0Q8ShA3%Pq8p%*MoMf_U^U!x} zPA8t|@zmKf$+;^U%#|JyiY1`gH_T9Y6GOD|517OIT(mFc2AUUDU7sZM!_Sa?98z4( zD-zhkLm(6BLr6(YNj)kivAJgCEl3np2-ql27ZAON-6EEN%M{`aa+wCH>-A$Vw!!qtMQ2TNyE|{i)FX6&Th3< zJe6$cD)GaPPITBGHgf)X6?tI`(J0Z5LGf&UaN@_T--n#VR2G@Eg8h6bhjb9&E~x|5Oi8!UH~ePZ z4d$3>Qs|Q1y$?$1?uS?MTK`Sv0vKLDn|-jfGp4Rg-2PyyT}jGwdNTOI*cN9f8X@r1 z^R!>0x?CmK3rwpGP>dQ9Ox+c`zQ6O&psQHcd`0%+Fq>%|PCy#I6PNxTl&!|IMor3c zxgtRy9UufQzCHLWNr=_0&ddr!n+j5xhM<+`6*-=eT5A!GW!l%wBh@LH^}DYQT%Ba7c#fLJ3v?qYkK9Bh*dD{&LW@nC}7*X3rP^( z+eGz4gzR@i5y(n5_gGOUi(iHJfARKKVRdcY)@E=5!QDx4cXtWy?iwJtySqd1;O-vW z9TME#-QBe&dw=_!^VdH0)K%3b&tOekea$gOe|u}a9c2u~;f!B=em$^X>n(8)WxCxH zn+o2LoW#q`&D!rXoR;i*^cVHB*U9red{xs-4*Lv=_)`J8U+sq4I`sZR*SD!t(6GZc z2ZIUoQzv;5HHt6|WBo?D>a8|KoA7=@F1v*{*Bhg*%&{0-?A#0rSVqNB4!O zc}M!aW-)W65XWFMaHI%Y`BW_>vZlbb@i8@^jlYgqwuEf6e~20~v>*r5nmtf-hv-96 z74uQ__xGn+nzsQzV%x;0v530f_}s|NVjeWGA}C^DmY{IgMWfc}8!5!B5|pDi4>5

aN(UnAcifyD8x-v!$8r;UId~aU+-*b?nV4 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 XaS@oAc}AO*W91S>i&y^xU$4@V literal 0 HcmV?d00001 diff --git a/community/art/images/Website-Exmple.png b/community/art/images/Website-Exmple.png new file mode 100644 index 0000000000000000000000000000000000000000..a6b1f8606a50ee5e0491eed44111b000033a66bf GIT binary patch literal 276413 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%0AJr959VAC|6O(s>{GLtwWx5oP?B0 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

&WC@7LD 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%0A|j9hvHo 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%0AJr959VAC|6O(s>{GLtwWx5oP?B0 z>Kjh5!pp>Eu$R!=9?$zM>Qy*Cr~ct7pC#8v%R=YEQ0b!&M4xN=XPcVa-GJs4q1S~- zWsvMTPyg^9lT$RQ^Li8)s$<+ksyCjafLe=zo!&6J59rXQ^7qMAsWj+;T&1- z$!c4pekbIFHPv*|G?*My%(ayFxgr!xtd2Ghs#~57YtHVw4Y+f^eUdxkK6`q-> zA9;N9Eko`hkNlGRgTkG{2oFxu`Ro~ganF4I_oI)`eE#Ss{^)*j{pwi|zYm-R zro8t97rB?b>|A%_e|7*We7>*a7cZzxxPR6=zZMFPClaM89<8Xz2FCK zQebO6u_v=PGu{)oYpO2d2!p);5w-nP<(wtI zV6O~f_uhARx32)tC{;0Md*t1Ll6U158{Ci1xq9Z`mciO^;oEN8HuD?zMZFEfIsq`? z&55qyBR_`EW&K5dtnvI1t3v*sVLDj_%;oQ})!D2ywML!l!?B_4_5q?{fVE`WsU-#g zGy80oLCwHu8Cvkz4UFS{l}AP(k^{r-mUVIf$S??JRJUP2o9CB|2}wz(eO}CZ8BwUB zU(f6)k>`qe!d0VdQeW~?u|AXd<&N4etWVxP+?(6Cx!&zvZpBoO8(pTH3-nsdrjw_8 z@CpGTrQ<~;jfkSu0J;I_ z07wO58S`jnmF@-hJ#IitHza66|mB`I;~vU&ao{xBTkOOU5+hpz}$MD}l zJv*iKMl$Il^zOGm%pLXcGX-kwP}Di<`TF_l>VT z(*5S5_3lr9{?AMq09WsL&#&E^UU!tqF97uXBm53g2Ki(8nojrr_dlW`{lp%FXV0>Y z+udtlbfkOCAHG^+EZMwe)SdE*pSYL3@~3vx`{vD~ZqsHzZ<(1!Mm})*(}&*oNO$~+ zUyodM0@5zCe>*E=lEk>T+&WbAJK)zF-ttR#$zN}_(6^c&6TXD=8#n)<8!J}v*cG5l9PPYQZ`|cs*YKjm%K}C5eeZ3|c+Yxi$qURMWMy)~Sc2a=`Mc5U`yFq4 zhylP+{!rzdW&N$*qszVHw1>K=t*@ zbG|!siBtN1`^)Fdd=EdcHvqm^Sc?u7L6@m9hK4tm{7VvMlv4Dg%JTM>XxEPE!c#AFl8_h9>&1T^=}TeNyz5=ojc3ao}=VnG@S2-$-7WE26%(&no2{{L&mC z(AyRPdG|VwIa`-0A+JKOdZ#3q$~yo7*A(1>9mNKPJ31M$$A#2(XfFm?oJ+#m#7RV0 zQmaF3SAIc zcWjLO4QWC`2`2>A?@ea8*G|pGWnhUg75bVo>2JWqtiB815%>2suQ<}3`r`Y|`iT$| zypY(GsngHS|F?U}v%fj(zWNJ+yJtB*@}T?g?VfbPq4h=Q`cB{AHcvaS0?h~N(P=SX z{_F|v<*)gPJL_wg&Z_b;4?ndL#xwrew=l(qFaYCI)k{qR%z2FFU);Ip<$WxMs-u(Kb-T4<> z=i(9~bIdgV;s|i}tTT>JJ&HZBqRElurkxGo%lGffH7I^1FRxs!X!;|_IS{oZA>?gapg zdeCqK$C?us`TZYVIqUwk3lBbOANQmu9_qgFt$)nAEv>#i%1d+FsrR4tOzH*kX~K@X zMx;>5(1hGzo^MiotE4r%>;P?k`@8iup+IZac;sEuHb;05$_n*6bk}_ABJX%t)ppVX zpnxKql0X?bBPxG4dfwji?z_5^o_crlBCBsxRdW`()FO40WK{Ub_f%;74X8Xsi)sHbOmZ=t_hHXNccChtLjqh+1sQG-`S1h+y3 zSO3r?wzh0%_nH@5M1YK%V**BcGEN}`@Zo?R@|~hHrV(R+Oizew*1gDEda+#9+wU3(hl1&>Ao3c#Ote;q} zipi;!j}=VQEO!;V)3NYqBb#wmM0uc*Bq-#FT7U$+Y69j_{w=2b3&0>2vrV2LoZK-g ztF^)L<%_SZ1nLO6yyT=}z-A5eDO*`&e7pCR=zK?zISa<46 z?^gqSq&>Sz-gn>o=9AqacdgCAllDyXx6p$WzK4Yr!$vs&qW2a3yvv%tnMbeq=j}B) zn9{_snO#dzNhS8WJqMap4ALdUD2>R(e+{9Jy?4d{fGMNwfwq0C`%Z1p6qVZD9+;+cXnIU-=BYU+~^L3mJE z5UjplVRAVvIDjpKa(gCJz+y=&n83lt)ovO2IV}JWEnh}lU)P3whbb2*7}OsoMCec! zAxzEFG>EP#FdmC(pP zK65G;AP$H(N+kfSfv>eiM2jo^nfD;bAyLsQVu0W_==kDiA7_Hu|33A<+^Nb(v&ZfO^|z*e=l(Cr+vdC9c#^|&Ac^qGdGQPGly&tTi$S#JMSmYaGV4NXd6cZ{oU^5 z7ai_?d%<%`z0bF_V+TOoxf`qGro03l{jO}QuTC%`8QpQ~+N+^sR!2=6NNU`$!bmq?w#`kB$Qs#CR+ zU)rQ!maSa-om(j@lX5Q{dicldi?8|q=?_1qbjVdrf%h$n}GtT;pJMHy9oq0#xhs!TMIW@%PpI6-3}7~|~& zK(s`)J%FduD zJ$G|}EJosu7FsPK+Vb1gKb+(H(AF_`<&_)UKd;*0Hf-GH_T6WdBdPX&`>wM5JvoX> zy%mcl9|sleCNZz{&BJ+?@%5h7a8Gj|G46I8;iYlVjbR0oRmaz-9`{f z74m`^%QPm04>gmR7v!}gWSp@2ENaAfXT7uN@1gvSl89Uq-TNBZ4ixxC%~?E9EdPZR zS@eo3=PX_u04;>Nmkpy$8Z-Kae3_&2{$|c&oZ=s!s~{BTZAya>dg#x!7cg=z37m_h zsW5#=a<%WXgtq~J_~dCZzN649!ry&E;V@L=`NmoTI9($D9w0RbDHu%G^nc9m1aK$k zB&Uxyl(aT6`~vo2_(4BLcVrJXqgkD?yPr$d%#Sd%Dc@KgT@0|-mIOddq+@wcfK#a2wphNp$^nflMJ@Qb? zkW0f8vQVn9uJ{n^r@cqXB}u3&OJZ4N%IBR6;U3&p+YJyYFc0Rq11|pSjqVB0u1#K= zRwWV>lhdZrl=nFEM%Slh%a@Q~lw;}vKBJ5gBI}zMr&GLY_%^~I<=R|l`@IkG`{GbA%`J!=mw zQ^(M-Mffucqi^1eMvQlvcBDNU%HQ-W@^>$}bu_Oq-Ziov$oGw!vj86$3puT(L(Xee z&RO^_r&HOwlRVrAqHh3`yH|CYY>9y`kiWTBo;RVJtk_4PyHZNG%J57+MaJFD75*Uk z+t(;j-`|AsZ@Vq8GY!>}99ICZk@oMk>RKYF&a zsaMyX^i}UJohGxwbA4pKGH<6H`~w_7W<(YQkTLnYjI69a0dOa603PaFWF$r&uX-K% zv>h1)V?zn}~ zQmj=)dSaeGV}MQ|e->#8_KGq_qayD_7iaxA_@(#^bs*mn9&nuEJ1#G~?bA9K>y`C3 zi}Vcg7!%9nD;38Y%qwfnD!0Ie$^f14-7LtC75a!pmmDgfk_f@uZkZGUDGwyM;+Fw-D3^F{%7g)8QK`DW zQX8xVg)(0>`#(SsanHDAcdhUnXf_5EG0^<1O$e_Z!l$q*z(BA}`Vjrv-tBYe(mnJ5 zr%BoIjebLz*lCwsdXwXy53O1ipZmh+*{beg6AY{)+KlA7%=+fUKp*0{C90qYH0QAD z;E4xs$l?j%8;u_*Oqsj@gkJgZO~O@%B%CsKK0*VYi-3IOGRZ6Kv)AIeh``dJ{5!2c zv>O0(SRTRfNW2*5D}agh@8xg(sr%(c*S12}Hm43+E6hXwaT*N(1mF%zsR5$6zN2VM zFwP_E1w2sYnLGWI0sE%#HaWbjIh`2)md4B97$BW{(JAM+pZ((B@s+6PD)RSs&52-N zFS)7L)d{cc4teJgZf_@P*8SdyuK-8zD)T6We{ph^fDBH(^W87v>IJ}o4uO{R?%xHzdbwod7#(7gSs--6XFBDx+Cj)%g~s4D8(w-bua1LRr0q&wJ)x}u@R7`#k-au@$1;dZnujR1nC zCUlejLhu*bvqH@V7_HG zF~ZR3i|8Uwt0(Wm%0pfNQ^fQ=jp%cdoe}@bTsD{Jvmsf`%nF|bNwCQiZM4u4q;+?gT%Xy^%jx|8StbA^Ci~w^6g4?JRM#M z*x*CNn~y0GI)FGlIg3b)48QXRXjBcXpyZ9n3+PZ6gxZmfO4P1>+_z0xZ7BNtnDXP` zP03jH3pn%gYAX7&COsFOt9f2Y0_)xe<-EyLk23c%e(lQdggnA2o#R76jwsePh8FsU zxo-PAEQ%$?f2P+uYugT(;IHum0Xe!K*{X`%NoCsB63rE`EhhVdgG7|i$P|`lWB>n?E%yC>DGdL2L4?rZAP`t zh%GHuw^Vz5jr7sN0jdEQ+1rTNfyb7mrp#&tRW@BafvISn^&BqdWT+kjRmYmy1VZ32 zuMZwWMwCDq1RLeTVn#Cniu$rhM0sA_R5-sqJtM@pVFk%H+byyZ2C+GKBnKX%?1& zBo$kGCU@vj_`EM~=Na@D05Jm@GhU6p)hAD;p&Q1;E66FAEwh*Dm&Nw%qyYIcr^w;C zR%YJMxBf;RB~1-RDh&Mqy5!v|LyZS?V4B(paHrj@5ETH7GN(qt?8b*wXmQ?=tG|e) z%yUd^uEKRQRw%OVgEYg4=Yq+==-AA<1?=DkI(Yq<9c^8eR}#Y6#4rMz)U1kmXdvtb z$tCmlee{0ng_6fu`?zrOEaTNj4h+REcW6%fc-^q^*>UEC+G#D6akY)sf9W$8S~Auz z^+cW?K+*4)rHinKmLu_a>IHCt^&XJMPEb&YXuA^Cn{px{az-K6dW@q^d6;x6*AdDg z%0ZUZW5 z@L(mE7<<17`w8RRtU6Wwo-6>b{(a2%2OqtUd)3PyQ2*0{`OeyIS2SxJ@QMdQvz69) z+p$_Jq5RG1oP>iGS^r`C$x}t5VnFjeRCLb57s->QnULpo-uI$ZVH_Tml8;h>g4Jwd zt^-Wqu`?pj+H&Ej9zOD1>`iZ7lN6LQ-oKCKK@#^^jML8#c2yjL1YFj_VhKppyr4LGlmS4I6` z_Jjr5v3)w~k1(uWToWsh-%-fO*%NGB*;Z)Z_HZ=2S;Z?*H{{#v= zM_4kasawy^96K5}wsF^L-)F#&cvy$#hHq}6+7g=ctxMJ!+`+pBbd0$`_B5g|nCo~f zadKf6v7Z3mS>k$mG2|uQ1@ESQojTFdmp|rxPk29kjgthK2XJb_Z=2l-Io`Jf=H%!sZWVh7%c}OCYVWi9Azm2F5JeK?}@N~Q(M`gK3wyZ*?L0Kle z0|117Rp}QT&5jao9y%pEg?%1xT2t)R7rxXl&oclT48}h7VDID@b2FmjB_%_4QNpWa z_;!rI^2{x%*A}fqmCu=Xb3q1+v1oY#*&?ieAisy-7S~_qP8IW~Ie^ae*uY2vm)ZF< zSS04d9AtSIim&_32E$}H`W>bVa{@@g8a)>TV8*-g*4ZMfPVcVePOd_sS}tXP(=4z+ zAgnJ3v?|#=fD9}TBxJ6Fu&lF@PD+5t6VJ#-G%192n?N0(toziJXAm4LiK;-fqDiSu z$yG-(XO?T6I^_X0U&#_=DsgL3tBK90l5=Xl_T56OH=#9z2$(RtNXFE{qBMy)PS+=D!#kgM!I(TI9hS?2!x zt#-Ti^eZ`QS7nM;mGxUHYhm<2mGbv~`(pKKJhApUlLW=Nksu5E49Ss+BpAG2IabKQ zBsq942-$mJ?+(ezQ*H>kPO>ucVqsGM!Ap@bO}>?vDtoIBc%1f5fG18NgKw2Bi}wKD zEt4qE9>Ct_OUS@@IUs)z=wvFNd16L%Jay#diuV`&Q-siM@CqjvYR}F(k{-juJS6}X z4B7x(K7ClzOfXmdD`Qj!$SVsr*VJhderb$Ume!F41j(f0u;$}U!s#Mapj)x;(Sild zw#n9D1eW)}XbJn-cI&uVr189%i%AZn!m306auOH9Jnpt-7&qv7|6V%2QAloCg8AT% zPYiTb)&|PyMoH2pMceZbAjIIdaf>ncb=yT?=v7{FEJJxt#);O8I+K56e5(LBc|a}O zO;!q7Dq4kp_>HHfR%M^PcL;_c{F53}w|e#?_dRS6msS=+z&?BJC~I~J!Id>T^~RP1 zV7pZ(2a#ws&m8aQ@Y}%O|BgqxErb3R&7}H=*AF>(ZTKeK(&WXSC!_MlD zdSY#jC|5!cUSFDDS@ffCK0Vb1f3H1OW)(5}cTHgfD`)@Glq+}?P6<>Xr%f}7kXrx^ zpXBTu6Fa6O#ThRjL5h6@YbtA{NLU#C(6<{o-*mc&^6}uYQw0SfxxtaXtV50mZRTl~ zRkWd08Jg?tx2Ck}?-DKbK*M^V;^~FQAIfo~WK{Macov>|?bWcGA{KaY16LJeiXdP ziVz+Fc*j-c?Ny`>t?~@K2Y2L9P-&HVHM1VZ2L!Z|_W9Zlwx-UXoA zC~!Dh-&X&8r(HfQd`#ZZ?fHzr{cV1$2LJ5Q+#5Tc`pjpihVi_ z{Uuo#%!IW`(bXF~%qj02WP2psMDX`>Wc#p5$sB3c1X_{mZ81~ zVGQIXwmh;+=($9{@@!FJ&dgUZhc@rn>+-KP)&qL-j=d~jFK(An!|8yF#g-H~sh7su z6cvMIE9X$;iz`Wb`y5_p5n(0VDz`)cha%`;R`pTzu%gWc(H;a{Vl&y)5S|GM8oq72 zLd|sAi@*o_r!X7KH_^aKvZ1s~(E+fi;)u1hs?yuU(M~BbGmCr~Kua@bt2Pw8q3{+l z*U6ll7K(89ssQm{fkLSH=|en+tLV0yrD=(?HapbAr;d%j$4>lGoOcld7$~}#@II_x zbLM$gq`?h-hOoU6lEJeObFP6rRU@f6o*EWd`l=*WgZX`l{i#GW^*_aQxWa*Yg)&tC=-n9x_v9SE=!r!Cai2QBd$I*+; z`aCTUB99>>nEWl-kX$rDs2Qgd1~Pb~Gz7k(#Nl)NWlTsUjYrc8a*}!K42)fH+OU|vHUM(+EH+|{(eYT*dCB(r5*rwM z(=rJqEh7))?SP8!pA$eUBr8nX>V z$Mv%45I6}nLkJ}-YwC8Sv>@3oKnR;)k%gJnMihwtE^XinLz@^;t^+ANjSzMz(-iy$ z9aovwPI6O>ZkRrzw}6{3;dzr{P($Qok!8h~EXU9u%jEtUY-V$DguQQF8*yLJ#L!k3 zGACvzziD+w(P?H#Wm;WY;Wva-1lTE*S_yQGAUs9j+5LNJ8*0oeDyeqan0WYb4<}g3 z`sWiGOy48S(*IfR#|WYbLB6M5(IN2gN=RcyC<6a1p}9P|07T5v7n=KIb;Ae%ZwnNl z)){DoQ2LEyckvuT_-C)Dp4P7tFiFlG-QTc8V*RbG4;cu(05Cc@3cBL{kyt=T8`gHp zH>FIk&>PLO0y)Br5DHOP3iqmHRV=zf;8*0a#7o{1FIU_H@Hav_=9=IM78WYc9peKE zrNtOQBH2(sKz4*Tz_%MBf6MTP=jgC<#ULkg!c!T!C#_Eb-hB)ZX=N1o&Grku+vbyG z>AXb$_e@ToBD;t56HoaC-bjuibQ@AkkS}gA5$(7Ap-7{(JlhHYLE)=#RxmK9;_WXi zf8PC7Kg?@D2f@O3;msNxH6BKbz-(E@E1ncE@<}mnWYnl|H>(~^yg*-ZTx}<(mu{E! z0PCAJJ%l$H5}OHt2!b^ET&mn$5O_I}3lx2uLcqvdQh4l|*k``4qOSl`2n|5kEi&f4 zN~T8!eL^j;M*9*L5tP268^>(El}S8`&|y|)G3td*p*6ioJLxCZ5A%A7f*xQ!;~j#c z-X@QcM$p)xyx^or78W8JQK<%%2`Cf@{?kfz%6s5H2+|~-T;82+a|z1!KkX{z)rEfw zg#QSiL;q^bv?*N2@Il)r6*j^ALm9#V(uvoS_+*wx6m24}2G5!?ql6F})+hMe7=;y? zh*Q&gcEXbY3#i(tHXzHuGefTfltcI*2C+)Ps@g^_eQVJkU=K7or^uSsGbVrEt}p=- zs#dlpg3dz02Y59HfFkv4K%c`W@L;jir&P7j`z=V!i}hEsIUu%V@F4e2b(Mfm;mwT~ z$`++Sz_VmQ?V%cDPB$d4SeN)wCQpv(T5>LtyKbuv3Ng^jbKU?dnEWk%h<-x|SCRKy zm8RzfUR6bOh?r)z>?PYzSfHN$T;CA()wp7AA=>fv{%Y>FC#@%w zzXk9RszW|7JhR($nl~~WhCRTEO8Z9dM8?N}&3bJG52i9*SpO{GGkr?xgQ8@K|AjOV z9+!*Mx9B#2{gywkph}5HB;m+~b%2e(daRw}ofcp(67_&!B{J+D+9H16OR6Vif%O;)#N%M~}j@oKA8EjAFAU zlRIwJSW|*4a%){KO}{|14DHv(KB!}U30uK> z*_#M%-tfGRn8%dm7N}IusZr6+)N@eLG*) z_Uv{y<_bcUc`@WM5#*@Kg0d=RwOjKGYc4q$j1Oc?RXhWyCIc`wsh_UBZj;-*MW-N0 zAR3l+yz^$fF#{fR_e0m}nBVl5gg|o{FTkv3x61DT6x(F2wUfElrsr1Jwr$*9^)Dqo ziqLMm_PO15#T{0BLLLYxQz#0AY68?E$W?n;gmqZ@+uR=5xN+F6zhO(wOAo#4F0Qk)Ru(}XL{314 z&MRkF;hH~y(0Cz+JgDZSCBDG_rY8Jyij{axrH^79LVoN<{uYmb?{mlpGGX`X4tedQ z^Jd@5bgyQ-+6{OBM4F2bDc`#0y>Gd4mkkMgryqU5_F3htivjHcyz+X=vj*&d6OGx> z4V=2AJtK#w1a*Ojc4|FsyKUSI2Zh$vtVT8Pg0>2PL4e32{J-do#_+sd>zlC6CEC#g zO1z;dBacV@o6fSgAYgqBPA1db zZBXb;fo_R?1f^?8?OeH^c9bFngDOCQbs$H_7I?>ed<5Zeazn8`osaGHtus6UevtQA zRra`%joO+$_fc|FVBKp|Qst0P&_DL6Ke`Wp^bc;+=8^F7tiM-X_7b;tm%droqZim` z0pe-PLU(t@(153k4_$WoZSIke`f|;!uXx%0+?!r^)Q)Q!5(C+F%4Ay`_JU<{=+&9T`_zL#e z@j-#5q+Zx1Cn6LU(!{?2Xm}?Tkq6*UzOqfUNrWkO^r&xkh&j=p7wu<3*w!U*JYPSx zT-1%nli1&fPd2^K7x;IVwaQ7%vc7PLjY&ED!NKIecgX z9x$y;WZ9>Vb$XF^m5VAxxIz~N?7S;C4{v1du%j%6?9~olkcdA2VnXPqPl@gKAw1Q_ z>q3Z6dBsoMTTcH~DwyL_HunH>bV(UN*v!jUeBaSB_ccgZ92=W-FMat>W&tu!Iq`1p zVGr5Qv-#7NYfv3ME0K5`-UW7&S-!0&vAm@pQhGpr%s!9zTzz*VtC81l)(TA4Eir;)E6ns2s%yUB?gN$cUc_-Qz7zzOlm^&PnvLHzO5Flra zLtjdybRhLapZc7m(2Im{AwOdb9h9d|k$NoOrPK1^mCb! z@Z9rL^SWQIqY$1tc?CMw74D2EZmmof^2Ac12Vrd4PufXiV*$v?-REC$ojdz$f6sm}#~m0^+Hr`}@#6EH z0D}RpeF3v7+WWo_{mxx=wT?uL(3&;9?p>!pG;$^Vqj_HFma^W@+qE@Rnx|vB+887z z$EVzu^-^fWFPErsJ%HSV(#U>qfO_Or?Bggu7={`_$S8R97ACQfc6k+Haj%-fwpU&5 zoRp`2g6|Si5BNoXoxCz#T)mN12?Zs!0v=uqf#5xz@{}*Dqu?dQ>0kh8#Xue9D^fl( zJX*Ks1efsACpvx?rIW3c zJHLBmy&2y+*$`o?%KipGKzYbb;!Q=o3=n(_%qhuta@ThrJb*%Bw3}!gkTf&OCmbt^l5}52M+*X=;{wV0E*N*9`gVI zKmbWZK~w;lNo`-cUfTo6O!Rl$dW7%btve;qrxEhEO}~=+AmFgcN%>i0ZAa97qg;wC zD}&V)JEvb6W7buh{^D7aSEh@rycrIaZ;^!U%#(#cJ<1crx&X{9L+q!dFaXpkvVJgv zcZvrR+LqVo*rnvv(1^T*TA4c3N90`1OYn{&V3i#JZ-4ibT@i?VCuTR&4@fb0<~VSiX}&rUax6?4{&r{_AU2v&qYY03Y^^0fn>fO1PkI3`4iD(peUN&#onY zxOZ)*SqTRA;`rKxcg*o+_zFsy^Vf&0#wezt;+v-loFueRV$Sol+xK1@4_Q!_sI~{p z(`L(L?o+z#BsHzs0C=b^v;G^_GS)3gYTLWp-S7W!L(MJw-+3qZ`A=}lcX>^|aaSru&9d}yqR+`MKi7?q*BU~OedGb|gyRp+)dOLu zXc;^QcYgj69?%fd93fX8A=_q+ZOBWO3PrZCTolq>Sm%Ex!F@=?j!s(E3)!aBn$UL%{w-^g>sk66q^HUMmuF zr4VSU<`glgPRdvap8(WcqS-w#!O`UaI$&%bQzkc{!z=OBY2^utYg}pn<@&x=XOd70 zx8{XL2xuh#G6dXn;$-y!R^PS`tjk#Wv+i#F-|;-!t{hTWC(8=7w&BXp4FDn+phGul z9s=YL0%q2{9Ge?)z*FOawIk~UoVgkiTf1%97J{2^8FFWS<*zfRxX>4Pnni_|{=P2v z%%|Pcty-Ck4t1zc=3S!m0)s;W-80YrtJ|s*e3Gb5eBfE?uRHCw<76Iyiy}Z-(mNK) z^)7`!80F-b@QxtCqu+xDj_XA?-8|%O{Lf%b_dWMn_j32T=Wa9Cu#krb9u}n`>hbL|~`iI0wIC0O*qZT?U*?sy3eAD4X!PMwFlQ-iBY- z+9km{p}1yyQ^1ztbNm4nU zYgV6!`7b(>F&L`~M+gt}ce^*7eqL(T&iL|Q+&SNVy4yVhQiKm6JdMhm&lF(I`-Muk zZ`kIJef(MOn(O3(mqM?3#gR2&4!0r@j>;3o=4gdo1o(#4!P~->Qt!F=31OKqANB%M zuzV|_J{%_(8`eROIfno{s`vcq(pvC<*Bx>A9yM=8$pJwB|LmOypd3}b|Ih6`Ap}T5 zLO{9#f*?hTbSo&}0|XVZprWXVf}mi8713m0~|vL|%;JO8%IJfwTG_14|y zsk?7&=Jn~_m=Ha*VuQK&-%nbLtlcz6ci6r(OH`a@iutsStnC)H_nPgV+ULI66Q>g~ zuPq+K!oDuE>+TE9R$C``uSZ5E%)S3wYwo&ZjoIcY-Dby~7MP{m_RSq&N00p``8(Pg zP<{)s?j-cVT#>(#*M?RnBY&fhj40bLvY)g3Ek;jIDVEjBDQEec4PoNEWmWzr%N^9_ z_!=9RrTc`eWU=53OWaR94G2S#lRpRAWkk?QP~@g?mL$o&z5V-Bm!nZ0&@deZ*~Mgj zBt{y&FzwW%3_@|ccH^+@7+x6fr z=35>x*WLKvVuQ16y3J|KrH!lB+`Ro^On;8{g z$dumY{X?75PkSd{d-hLefh3f_{8J~IJ-6CA6j*k{jrW^xedkU?s_y&lUu$qB@~Ew? z#XNK0CFXdLza`$`s-J75z<=yhx0MPdndkVcXQc?j-E+9e7V~F zudn>c{NtaiXX@Nqsn$RKkz>pW$L}_CENfrh`i^VOP?@FM!3S+;u$T%7-MaJnUR`={QcA^z7vEt1 z=lg#%g93FtA|>=5Pu<$Q|2;>TBc8pzci8E3-TG1U!4Lo12Jn91!F3kQ^D4kA+Ij%A`_7k9`oL=;j?+K`#t$4lk5(hhN!o1x0qr^^!?IhZ~KM&mxyKB0d3@5r7p;{<%bq zX;ju5Vg2>Oj2+i2EJBh1LBh0`Y8l;bOf`vgZ$Uko0LLNt-6aH;AZtY6chZ~H7h)f6 zP$1Cebu!rx+ZSEeDR7#Kg@2sES%{AiZU)Ra~06}`#)Eim!5g0d1U2=nKAo)+4E_O%(uRBlCL!e zyh(#UWN^abkzGlbT^+yv*X5X=Blu$DJ(c2wRlC!E%a9IN(YR6tkxeXisVIjJ4t^789-4;G+@_3W>jU;ganX1858t^37w z@ZIlT3@$5JM%v}Gg`xM9Ocn*c8YJ6g8`0ei>GRL2^!o2H( zL#y)1Yxps_Wme*sR}Kp^Kf;m|3L}448-we;_UjK|^QkZYp^*X8eO;}3Hl zFh@C~!xXh;Dobaft4X#XJGY+cSF$z7uMJBIlxI@VB@vZAevgu?!E+sOP0LrY2Q0!0 z21fRctlra#{VzKS$k46vjFSFPt`KpFRFnLXY7!Gf7Xpj`oFQs|(2l=veHsJzWJE#u ztU~Hrs6GcRs3kUp&7^|W%~jt$%`9C~Iq<;!ayJ6_x$egMW(J0Jg>6rBbgt3$H{EAm z@RILT1#^~fw}rX#Tc^l$BHjf-{agu`U~jE;y*5mF05X8G zpl9g18}2g)9{N>ZrQWZ8z^8A2_pj#CkKW>U+8#p*{m93EYfd`#2eZJO;)}kko%XMN z^UvlDQig*-Ey`c~-W%<_7?xRl8mYL8`xN&3>eWN$-S7R?tl}4(cd&I)n{^^%2OeG7 zZ_dBy`l|Px`+}9&yWTT2Z9dD)Utu=_o;iBX(TRPAD@bZ_Mg$pX1U2o_gHK)Dm3iE}p6kJ+J z>p9n~?BMO!zIBJjd8I+ntwamA>^49A_NitYxw+JXaAC!D(C!G=qXRM9#LPHL&yF{o zRsl_|%E&nGlU9Aj!yC+*XZ<)(@g^=+kQL5nzwmo=>+c@+nko6jwd!X-zo*1ytE9lj zA6Vd=cfl{MD;7b^gXnMnSY_7SJ7V7#PL_*76~;XNwQu~{9CY~C%(``@Ip_DZmTyNgQSyW(%=r`P<;Uf$K!78w8MS2x{nZu{e-PR+dU(wohVH$7mlS+q^BdB#3V zY|J*lO5SzJ4St7b9gE7R>t(4DhflLQQuRQv{2g@+uJ@Yp662|un5)dEEf>r-i3GU2 z_yCZAl--;@ZW?VXn&GQF))lby6cUNXnw+{!<%n$&#PwUB ze2IDKxj!%)B-{lNyPlVP@K@&VirewtbB;7yEbIs>+Hl9$O4+>dz1Nv5e)RXMeedaR zH{bu}$u>}F)xs$jXh?Ufjr?d<9Ezz)S!yOo#26ulNip5>+ZE=z8~$BY);zilm;i<{2Re|fL@s4T3CV*_Dbae*v)uDSZOz^)UI2Wu-YR+3lnEpI%)oUeE+ zp5-6+6E{2NR52*_!H@jfocQA1eFGSGcC?l}3t#&0KiYuZUK@M@w*1%UUtkVDYQS+0Z6+kbq+_`T)$ShbeJL|ySdlklM0_5*n zjKS+8Zh6JDqXKIG>e@2|40hO!tK0vy(wy>&ADT5!7Tm<1zULzIg6HmBd`Uxo&*krM zw=I{y!|}A2mFG2+B7Ww$)79Z}-x09ufqk+h19PP|n5mT3+s1`g>oiLVru;CTTc zQsjLta-R8Z*!p@F(T{P{+T)f{4A(2N^;i%ut!E|dAU2jGD7UipIT5=9d+fT6`To~V zG5>MK_m!Tzba$`3vhQ8_SH;4(-+c7F$C?+tXt(my4fp#eKfl|YfAKHPDp^2OBdjnk z|MH1u-@TVqE1I9L!~w8V$9d{iMop#*PeCHb{n%#HX6k~+ADaRc36!ZOWy~G@L^fyYB^*io(+*&0S zgG63^05zZb*sZ=Pg!QQ67SDYJN9uetEt zL*)ka_Yx(U!dv(#oh6mk`3G6RQ1-LtwpxiT`wP^#`ifIaz`$L0-qP%{^8x1h&)L}= z@tjS79QEA#yA^g#39{lt@&5B)9xG|`xaaI*<0KUy#Jb`?PI{`@e);^8;LcZ)sPKxPs|M@%%M0&@LKJqE%6{qcGKK=RMdxz}j{XQ{v zN(z+ypuhk7{gX>v=}@)_M2*$bRX@I~Qn=_~dou_!sQreVzFv z$a*=TLm*-9LooRZ0-?tsMxAv0?q+)dV#gl$?U`mO-Rqe`8^5enJfLDa?2zRa%;6aK zVZUcCF<<`tapni#{ku8irF)x0juw#R-|gaRGXFi7zr)|6T>cKvE0>Z{hF;%%M;84cphi%fnrgL@CMW8;&vQj1%6PYH9UoVbU1?$JA0 zFa~Q6Tr`U5`A6?;miEmn#0+E8MQh%+iho5qYZN|@u)Ih!#kJQ?oX>yVv&LGTobW;c z!g_aRow(nh{p9mXz?|Yf1MC14mbn@hPZJLC1sS@33P)sT);nG&b#`jsaK3;&q1@US!>S!Si+&_`H?P zTz2%)JD8)6+##30gKlK`aXp*4{9VqJO}}&byTFS$^0$i%Iq6z~#zjn={uL6WV&`_~tLAz^Ua`>@dVrkK^_5@FaBuC}5p(aqpDbY{Ru*9h0hM@fthIlB zaAgT#!u78?^BEp)Fe5`wN%>4e(k0_>2=@_4X z)XrM}1q{mif{g>-pSW_IpdEeOK!}gA<(8f1DLX9K)My62?W*i}TWry3Zu`R{CB1q3 zh1Z#b<>s^jNP{y%xB_Ck#l26=Nsfk(V zaDRgeJRVbIgD>EpUzmaI%Wtw97yE2D2o<(%hUpzfOR7-QBP^%ofTc=vgKud5q2?m-; zjoSLw35}0RxL;WFFA0jZq7DV7#p-16F=gl)oU-mWjiywSg{qAmWB2FTiOmG@CG|JE z)Q!fYpnqCJ#-Z(dG7%>-I@=F0Ex0*Meb%1%*%b#IWEPLm(@=0pr z|M$&5nJ;|#Hsht4b?qDOXlI>swYf*>+%G)u&`_7R_XsRpJHE-4HPlrJ6!Mnvl-Hyv zJtb9V`+Tp1ZZ!b5uoGU*#QqP8fl*EeJacLJp}^l*=Zvl&H`iTz->foN8dRgl%UoP= zGs3!{oLIN4RUwOxw0ac#fBmA=Rg7z%eeCw8qs-m5MZ0vL_~|0T& zHy|?~^E2*zTDELnV3&I2*6d34cXGqR1uyEoXC9&S;KJof1W0C6 zd`#e+E3v>5hX-qnh9e$z{S6IGm{ZTZ!d!E0X&}h3;~_@FdoKNz+3TP$n2&zy7DJ%n zED%9iKl!;^&C?J1qIv&EZi)=%6p!U&pT5Ps`vW%=9}4`AYat*6pl>Y+D@!aN0ZJz| zFPWoRApl!fD>|?50Kiz(Riko12Md|K_t+S`wA#fwZ-EwB4BmUs+LF@LgVjkj`sZDx zpbW8Zf{3;l7jB%a@wfkFWl7N`i~FprM9IMh`a$65FMdWrkjsS7Unrn3E+J{sgr6Lt zN5SPC)2blOVW_3KwA}ba@H5{C){J4sTwbOlVJpo>;!}|PUCS{5@_t*fz25q!18vau z^7~W#ds^r*>Eq9QBkb3W^0$-A703kF6almQmbFK+)L{+Jnz_DX0o=#ZXiSjq*=e_+Itiq=bz@r-#lQ(6}!ZR*fl}etwdk?e}6EfkG|;b zhgB+O&oQs3{S?cpS4J;@k9Ci-$&Id^RICJosW%(Dw%2Bvir(>RSE~PEz@R^rrCZ)} z_iaqeM5)4Et*I7eyjnk43QR8Dw$I;ns;IKREBGr}sETQq5Fn6O{*FJF2FooE_Ux5w zq)*)4&UwTB=CfbCt)$!Uy5v_j)6#YoEIUdr@cBV(q9A&#EJ!TnCS{4pT8+zh82Xni z@~RPlcK<-BSvOW$LA1N#EZu&`Cg5)Vybg25%l8f{?t8pa`g-3B8t`DF@Trpg?KB4O zwNtiEyWHz}eeKF}cDQ+q0%PBB*Ifz{UmhHrDS@@lSH6CS4X~Zd-<2Pd zT>h@YpIrW~%pjk$=o)Omg(sJ?;cK0%B?p_ws)mrs9H4`{l6Au=dl5L_q`22RH&}WB z$}uMB#1t4_GpSU{HH$#>Go_l8-D$7u1<_b6srbnAO6^(Jo4F35xBFvVoGdpww1*}(zN2?_2zefc-UO^ zv%Ac%Zoc1)D&|cTI`d`wn7b7F;&*>oQT6hVf9AI~FzqW(-=|_(yDp~~WZt)N-GA0n z)`+gHBrwQ&vzV;Kj&^#YxHlHplf~~~aeumfld?=74?JM08IfgU`+T?e$hcxq6cbrw zh~rUiZBkr@Y*poe;J%7a5{8~su`MVxtV9xSvo$?<~vwt2(384PXZ{KM?{IOdUgKN{;_WRo& zwt!A9e|wzr|IFoYf4+D}bNPECCmiH&o36Z6JoDJ;`{`{sMv2+uTj3l(NI>M^EuX^R z-K4@AFl>BqTA4o_W>F3L6sHL+UV4{G84;L+)y5zxt_AXBg@`mhB-bzi2>U?Ruw%Ft zAwXowjUvh61IXa2GPrUg(ijOIN)Wp!u4$xDAMc-vlv0;W2-an>j?;8>{iGQuwR1@N z+PCg7-@Pil+r!c&!7&nonj9OOG}m5#uX*EnKQ((E@CCE$Gd^ohe#H;W2QItWTrB|R z-}kT8?snyL>C}y)zG1_tx$l9s3dnr7z5XRH|GwGj>7OxsAN(cr`nUc>3gbPIz?|)u zZ(*+b?rG*zA9SSkQS){+P! zA2rKWn1234!D7p;B@Q~M5I@J&^=(gOjVUJP@=t$$Pw}Cd@668+eE8SqmRld1ImQbGYW2`-ThV9H#zymcjMv3qGz_H~;2A^X0GJ9;$0Rr!8eJP=G{1^wn?N zG3ylZmvDm&OMugr0`UUEz2^fr&8lwKU4q^0o~n#P#e{PG!4LnY_)y9BpI>{gd6%-S zt;>ijYf0x){E;O-RkHM~B!Aax4FCA&6L$UC?^*xP9CGB>&FQcFkqr)Ce0#Rqs@uH% z+=I;Xp0iW&VRLs`yr*3LE@4l}k6ivPVaKc=x%?eo{)Tx?atq>}6rLn#)K+8*-?auU zIeVL^jswB}jvd%mSqaQF!ZHUJ7?g7q{H(YR3_U(+10jW2>R^e10uR+CgNHbMZtAUVagLQ+eZKDsb2ao ze|;=;EEsCrVf!u2|6O;M`QQg{HedPPpPXHpydDvh_=cPBvwz+(K2g->^>vu}^E=EI z^E(w>x!nv5jv3tFv{l-G(pK^NJ`PUj^g*^Azf>K1bsXzbaF{?}gP81WnX_sAkO!1*v z-+y||CV;5;yH}7@)y2ng!CJhi*E`)%pJdm0lSIqE59$EO6l zDRBXr!nR*N-`pn<*rPlCywX}6Ty*}SGnpn?CoXyaO~!97APl=E6}aXX_m~&F_`Bxg zA34VC@wBaN(|~)|-Ef~d|Dx+>WkMs{7~oS7VW~)&`vp#WL^h%U0oxZ{aEKk_*oGnEd`xafe&t$>w<0M4}^F)lgyJQAa#9)!ZhOJ!nsQVLjo z`jGm#bNC2JdFSP#vjZ#zw>89_NOF>UFx;#hV5Sx^;N2a zm;|qV<-X=kuRG8z+_DrEMOnr@?1w-8N2Mxe&OQ9-26Ns;zc63_(g`!i8sQ7i2!hu% z?t+@@fS3Rf?VA4`0M#kT3|Qw(N_c5*OK;t}?T?R?uz%YneP-FxK3V%2oAR8%=j|a~ zcu50Hs^8-5MQhd!n^Rx@L$i(2Ixkx~&yb#aP{5-fo&1ugnQAd`&UnpL6@kh(ob$7i zs=xj96Ajs;8kH`V>(wu0Ra2Z+9{#@J&DWS;{P^^W?re-1i>G2hhhra;vi*ZA|6%st zYmpfh(DIi%A2%x>^Ung+q1b9s)^%cyVENFawPTyDd(1;C)|a@g&<~G3^!_7fz$Nck z@h9u(e}4Qq=7f{KUwqhn?~1?Kzl96Cm2kDmtX?x%avlqvi{E#n!IJB1|9yPPIq%0+ zKfc>s`qAHbKWBa3`M1Z-%U|`Qnd1OdzrFEQGrzO+B@CYkTK)K{fs$^A;Zw;4A%0x( z!+#k5ifO@uE_2WAZ>lJN*J=zeJ!MauxvKd6f7MU!79jYLdB)z01p@cjWCgeUcEv0U zM$QLPE`OJ>CYQfU*x~ylm%n}4;(rhe9fy5N@SMUko`Qf@-b3{ZJ!ndD8#=F*57{Kw z=Ji~nOlf)JL(^73Npoj43pWo-i$2AxY14!veK*;qYE5I>(H>ntvV$?)-&2-bVqhmP?b;;L1HHn43Fn1cn+M?ZL!@3our!OqTB z>w0B38jBcl+aDg86*Rf%^vu_HzwDUI0lJ#j?W_w-@&}#c{>*$^8J3qv$t1#lRbRTt&tUDIhf-W zWb9b!Y%WxdPvu~a$Co&KS}rTFuoOoAuEiL3-)*6J*9C{p>Nb`-zq;vuYu$zGUb#Ce z;NiUqQ?|5~=)cgP*oXtn zvG2|hRk3+CxN_VKJ~m;!YitJK5aSC`bt**=2{J<+0ysJxgFR-Z^AS4IsU79sjf#Gh zI4KdDw3pz{Vl6)8s^H?r6Scic*R{$T%LY2l@Iz9m|6$Kzg=K>rYjJS%Gc71^%oW@$ zTo*tBPh<6l*?S`qE`Zeni2vj6)#mg6{d=cjz4h#atUDBox(x`sao*u(bm4i2n!o<; zP38j^A7yslF*t67Q-cW?-hHR7%_SEcVeb6Dv(3BSahP@Ks?@~3doMA^JuiGL9qKy& z;$O;IX}nUknLo$8XKm$~8(lYL`URZ3#+|7&NMwRAS*j}4QR&>;wId~#AC$%2$|If+ zf(ecZln+aNB4awz#$6`1B{9Yrg;OmzXWftiM86GRF%Zxc^e~dRhFH(}yp+ z#Sjam678`4d~=~6P*Zjh7BH_lbDy%K?mu@|yqhn7@r8!;@zv6*jj*>T%`rclFxcN?1#r z;shF!*Km*TRtO9}xu0RIbCB~o7s!hS!vm`~%c~{)KAKyn6DXZ2KnL@-S_kG$fQPZF zAO-}ft+AHDB`0lSG7`gwtT9;#KFvc#JPH?6y|j6hR{bbp{1H#bmD>86>_Xyf&7}pY z8!H{{=DPw(u6<0hJPRm)mFNQ>xhYh97_SbpQoZ3dMaoyR%rDE*aQDb9<($_YU~aqV zb>^1qUSq9xcHgzWN(b#=_cy-I+fKuML_{4M-s}VnN^pbZT9$L|& zE?hjm_?6PM%p9*o>|BtsjvbB6kfskA->`<{1wNwwZIBD1wR8(9cm$0F*V)#d%JVbm z+AzoeczdaJ4%c`VI^OlH;lsGimd#=Byx-@iE<4uz?5fkOOOM}qjuG?eMK9b{?ki`S zGheZHP_g{@Mh?8|ZHJntEH90jLtL7(-(2cq=Etye-+Z9?<`-UU7Hu^J;AycbxZK{A_c>FJ56?$%3+{ z_4Rg`bI#u1{Pw0-nS+$EEfW-TEpQn_t@(sPa`{(JFfTdrsWwYvrM`xhziTyyPin2Y z@!D6I!wy*<*lp(7sVDDYZoB0*k>V%i@^>zO2Trb{6S@3d#EhV?T5HhbLhEuq@^?_x zF2|AY`W1IH5m{7YVvRt41Ptoiu1!GD?A}z8zh{?D{z!{5y>?A0vC;f(E{pU!Tle?{ z$@gkAt`So(g5UNmYLgP8S(FmdhIIjwbxu}j{e5F*-VW`lx-Vp9tXSA=cxc?%-7qZ@ zE;OMGa6_xdrJ%a=3J{3}&NV=?OaE$F_SWC8Fvp$z9j7KQ|ME$)R@rst8hFBD9mdjv z>={44<}P#njrWHG(3)ByL}=SP3ei2ZZtUsoAoXKgJ&iMTzx?YdClZ+!WK zz{hvp{e;Hzgjw_CklA)&pINeHpV{Y-MFI?cBx1iorgV%Aq=}8@_g+i|EBxy@1OUNx z0IOEk2S5(HxuDN9sGLvBm(90LR_6z0SYcO@aVW=cLHvMyFHG_<_0pru#w<HgE>)thnpqzL9{c%H< zt-lK7*|1@xr2a5J$cDA&(-xV1p1#=Zv)5uNRg0~=7m7tB(!xGApp@_Z1%Kg=1-P-w zI%Rai9D3|mZL0LJ^}bV<2mHAZf#)yE0pc#ftiaBkZaE`fBLeS-`*Fj?g+TvwUziCGC;C-ZO|v~nbulVbBXMF)SLAC zIjHSMJU+5UmTBS@_aF)Z2q6rUtt~78NRVZ%XNdrv1OS+@?M5!A_s@F8vzjMsxq9^% zr5zavUbD*z@Qo`pR>D>u0?g3>Cnb+g>yPpPb(5IxYX`JV8*KzyZxPUA3r1!}wl2)& z@524alrdLUJ!mRO8a*WD zS3t+BBfJFRU6Jr70V~HgOj{5m$*RW%Tue#WjVfd%*_W_&p#bqx8F^CKueOOM90s+; zL?=#9&r&^X8Pl^cSL2VE5Ss(B>j$thylTRNYc9j?T1XmnS@>*$P#T_J+;eu2S#aA( z>5Ne7NLc|%34(mX&G(1yJ(*lSe(7^&mFJ~nU6f{>seAx4Z``2xJLRNJ!9a(#EB(Zy z3IeLXdsjVa-f-@Z11nmjV9bBH_3T*|7l9XqJ)zqQVArm&3AjNGuL9iBdLm`<3!gg9 z9DmApLc6Jb{o8k#^UgUqFs-m(m&m%q{Ni~oCe|P3dA&0F7563RJD?|Xyq0|=@bQN~ ze#=ak$Tao-OK&!Rx_#x$F}{?$TX`oDTDrDwvCnm1r_6yPJl9@b-e&>CQT9P4DX`$q z+6mJv_ebt6Zn`rHuy?^`{>fC2^G>zkZRz7um7{j`=AX#OZ`CG}Eui-g8xgpLw)NWH zCtH7o+E6q`1>^vNF}Hd5Rsv;sKNk~g0!koRM3A(ta?%#9ydlS!c z`MY%9Z{p0{`j*Sz*|?uk^3Mzi0DgE*{C{@A}`>q~&jKL`lg&UVTwN%jNHhVeJ^E zO!eDe&^r(T-+~O<(M_Cq$4V$|Gy=6m=|*8sD&EP6vb-R{v}Z7b*p%=AcA3i+z(%`o zQTp2@D=ZZ4HU(EjU<^wHWZm%KxOUK|oUWsOb|)uB3yPU*+>KUTXk_JuTTMOPX@2ta ze}!e0x%m9U&0z;`?_VC4vrh1r&{APh_^BrITgCXPM!)^tLxwC=X;X({+VGGKJvM3H z^r{040e64;i@QTL3$I`J+)Z(ZLS5ujh?r6Bnm?0cQ+Ai$f)C<5E{81wo&YLa34)!_ zeemf*)k9dVvF6&{cv(vF0&eY0)>6{16Ce4&QRccE?lbGw`Md0q!R1h;oUTMDnFEhv zk(Io4C)OvtliKI$Q4w%6H6aj3>-MD95v&%bWKoJWEahzc5$++kQhz0Y7|)rg0A3VM z+VdNa+mpJe35RfhP~y9)yIR6zp} z)?Gug$WC&-tu$<8C;%j$X@u)UNUY}F#~*+Q^$#d>CG(W`GHzM1=0YN!3{i=uO)h`W z=2I?z&*sToJ(A1cY2De7?<1CEUSA2m!aVtV=JlA?5FP3*mcM(pt)A?~q3T&h>j&tl zD+r-U`TduV%nE{y;9Fkaas9?D*hcA=AqB#09Ku}Kx>_x+Zy>^;F#rx&6X%d?Ku|r6 zc$_)ftynnhdfT{0A?GWKQ`c6?mZf-0ecNpcd>fVrJ(>&bT9UfnB^HluSAY=h;(k#N zJz~Yf>&?IKe=^ii&wSZF=G-?O6j&Di7pwy`l!Wy5=JtZZd&ixR2Da;+`175Qd0$ii zWJikoH7ModzdwDvIq_u!=C(gQQnlS1e|>+|GNB5nZPqftiPr7{ut;E6o_~N7V*UUM zw1|Ji-?0i^{4?UbV}O zhJfGrz`GKHCcBp7ijhH(NEbrU?UE2%FCxQK7$OMrCqDGtibb&iAi#0KJ+orb&?niQ zT|GQx)~_F}dQI4|RIMmv0bKPgP%+qKzWeo)&C_<!}|=P}>pvw?+VL;&nJFD4HW!_l&NUyMwH-TnTi%Z>f|& z0YW2dv<>b+Z4zEnwa%$9oRyCcRPE`>C+=y!_QeybDp@EOWG_iFjt-q$-CwA0D`Qog%im(3)`eXDjx~*Ha&azym$5mb$i;iuuDKyM8q$)# zJ2r+EA#P*V$dkX*dLP6QL$b!JIn^IrTDa-f{5;~w012>bXQwl3gy4lh&SIK%)8w>y z$1Wn7YOvD5Z6PeN1(4977_@a>}U==?I7cd(#R z?b$fT&MFoWSpQ(HLq@K8ki}H&YqqxSBQwk1rQtvw;vh|8yqFTZ*!{HG*wjuviFt|T zA2;y&}O zFP>yBeB+@`)U$wctP@b5yjJtfdZC0ur)VYv-ctnia&ik~`L-Hk-w9WNk1I9F2?N zuCn28Vz^w{4Nb=-h~hKBrNebI6Qy|Hw<>UO8sx>~>e@;>6&WGkFI}3WSRIm7U}UYb z=qW=SRzy)OYcn#eIp2+3{+{!H8&X=OjyjJBKe4$FHQ@;BYW1HoDV zmGvr2CVOwl8UeK$l6oGK3vG6BEU_(S=wR8G`LaBHaVBkfbF%Me36-!s>|l z7ywOJ3gonj16{I6@Pfo{I$HS~ixxo{haKIfifd)@>s9bbfQ><=GhnYXz{5o^Yp*uN&Ib3gFC<(ju43C5d#)gNL zE~pMvZWVX-Yxg(5zv(RV>Q_9&%%9(Bd(_?4X5$dm!$PMLOHkZ~HCNIyTdmY~EzgY) z%B4u|8ZK6Q#r@+RW97tq1PcKtm(JpfGX9-+oV7GmifXJrYfIBsQE!gxH)%k(`JKx_pjJ!wIdlXQCT&YzZ03Ox%{07 z8ylvQT>h>ue^~j3^i#FDEI6lM=dn7AZJl z7}tlSM&s3^7aGE==S$}uZnRH!vqslR;nR3r1t4~RytJ>G7`MiNE6u2OQ2`)43xQ1Z zEhC-aA@5QQ5x~gar9zlP?)nmtk=<#mxuODiw1o=;sjcz*CjcoxPZ+{wi@qZOMI~Ma z-uSE4@xFH*Vcv4~fo5!MvLwF9@X(~QFpq1`m=xzE$pxfw0e_P0qhDRy%F2mA(jR^Q zvF5Q=19HjglGRT3vg6^w^sY?+06+jqL_t(4h|-4T37MVZ%sW3mWaU_UpIqbgOasRB zD%f!(MOBY5@n(3J46RZi;Q?jkS=b!<+0F_ts`UfGkoAkTi+DD?V`@RHoA|}YqHxP> zNfWeNaQBKJ9F){FM}CM6Y$9fUlSucPcXVras|9LDHwc83n;3VoWn)0`Ha)9kk;4Mb zg>w1ZgDypYHL!Y}(TeOk8dyrLu7`)b`ar5IsRMy!fC3F_$H09fIk z(f{z6{Z2-_D1;j$=`zRUhD#t}_{D|?Yw}zn&wX^@;R%}oDyzu=%K2@xRXLjIpnR}q zaoOCtgXNqF{~HSzEW&vgH3}h{@xJ75N;u@?*pvmOhM$x>mfmId-s(Q{tQK7FCDXPQ zVn@vyqvk;_f6wAdtOL3H9gBSpd2ud(N4#xXf3hNfM;t+IFB88kCH%Sytw9Yok4b*u zzW`Fl3IbF#fis}iNQbR#L`M^5R;13vxQG`%yU~-1*4Bh#Ezx{_mAp(f2)fDNncI{ z1w$3gpbl@a+nLhoySNm}xEXh3J8DPk;_nzKqWjwV*4zSzsz zWwSy=Nx!BCtR93V&geRUIMO-Vq^z@h?rUA7{$Y8m+Roum>qe*T* z))ZOb0Kfsq?7dZ)xk?DSxLysdlBw4M?>i0p-30?2vhq7ct9mOsn^tm<&- zVvXgQ$HF1XGZdvCXniV!)JTtzbr+4XbVTW0rrfC=nF~n4dxdvf z)Hz(N&a^0d3{Q! zC4bMQSK!Q@VYdcBKQ^%_hj@?TyKJTj=BmOW%DeQ-`thzOP%RO}!&h#1{lXV_=~7@> zoAOSsLI~6Nf%`OlWmFr^6K#;-PH-u%!Cf1mxI=L%?oM%NgFD6Dixw%ar38vgp-6Bk zUR;VxUw;4h-j~hEr<^m{ot?RJ@7+t;S_XgmzQQ_!C@=TPf7pFEQb_o!c#M7SIu#@5 z3uw`305P7P1zaWOOSTR^rr4vAqbnRwpDKnxVHE4CnJGYfHpe)@~QwSrl zy<%8G{E_}={Db`|LEFV)%(viJas&HqkL+76IPzB`SQ7sPWhwQLRVbK8RzuJF8#lqvjAzdanZ5g1exj;2}r|6|={u;ohS zbP*L~D57jdGzE40OQ&k^8$3kn^?Le=h^RRtqV21(m%H946&e zrJ*6C+*HBqPDPSf%DWh5GeqG0|5)^`cWNkU_D z9llwJ3+!v{ini^y5-rW}r*ZDUUML8b(-6kf_&&=Rwbf~j4 zb8^>xfRXm+j!m4CH+xoZjpxX7F!#skZ6o*&0ve`$^`^ZDJaAOI{V2e7FOiG(HrAR# zRM8YK;w>PG+x9QU(Z{eO{G~9ZkfoZnsRlkFE#IX{)I|!aY3}{EVFL1cgwsUOQRO=s zgS2_Ald5U`fC)0%8$Mevw!gi}=56294y3xJ}hU|4pWJOa&+x89i;gA$yz60T3eH0u;xi_dbZDoqnh_#yo z1T<#4U`~`5mmq8Lx{n_2T-IZKnUXNKvaGx&!3F_n*Aq$q+NfN8TYQb%fN4P1soAuC zn63Bar1JZb|D65Ik>;u<%wa3VNK3MW+-NXF#fH`VC;~UZ)bzsi1`_-VpB`mTRycR5(YJXGYbNA7s`7fC$-ph5rL)!0ri}G;hilzXJVKK z#p#5LapX)?v>*Zo08G$*4*oZ^^avdeKx?^Hz&S2qAvmxHCSSkrA}5Z{W>f2Ls27=_ zMLo_bj^$e}6e32!1Np9DVWC;%;vTTt!VV;O{JYbR$s2@=tJR}LF7qEpU**s#>=w4k zd}Ao~s0=%u`KnNnbkC(zHiVnQbAD8(vZdUvXJu2)=qK14VBVSpMV@fqqFvlqF=_zh z`2U$ti$OwmAfFeH{%*p_hl{c+i3x0JuUtEBn$6sMcUxaQk}KuARIzn0s7WNiT)20%mNLjNc5{1DtYXaF5`9vF1(9vDs;?-9UVt zKOg>%1`0YNE5&?tUxLO>H>29bW7M&Dje^D4?dr}y+4EH5ctED!bAM#ibdcs})-~Vm z*hbXXKffVFfn&jw2j|8(>|h4mUD=i@5-FK!bs}5EGSBC zif(WOs`~b0w3+Y@HR8y;|?FE{k+by04MI z3n`tTf^fC2-?TOC4hTpxCP^l352Xj<(@g&ahsmcFD?FKt!|A@?fZYV1Ifq;-;(6;0 z*aAA9OAan@3?Z|PORy~r=cb<&8A6~O8*mkhg)#b8=ibtx_C$pe)~_MypiGYAHs>K0 z{?w4$r8bV@tBH{Ix*S;6Nb#kLiYRnLv^a@u+{Uip7oTYci_N+-7rGA#DTA=HSwDpG zdgdj2EATNl2}Kv|GagcZ~~qiAz8Rk&3xJmHM&oFke%;?-HCi}+Lm$n zglC$66nS>)rT*qrwvw`IX5g0ZbO(?ROm5OFIDqVXZm2ksFYk&sa-IyOM3cuij9(#k ze%61YrNhhZp2s-b=r3f0Y!)&!0h=JJjV}xzwOJIfue$|}{#1O}K6lND4NG=i^I)25 zJEW9YkN>}YEXPr z=HT4GFm0zU^G%MO6xpz}qOH?E|F_2rreb2v61g)_k48$fN*Y=qR*`&HWo_?CZk}P} z`7!c&vU(g?5Aai&=&XaA{aTrGRQtif>|OTkL-X@5*0a}CL8`&fS699c#27Oy9`c@V z2ZldL4L{>2x+lbDg5AIIEiPJlO`@u){FRy~8+d^0r}&xmkk|#7TD>~H$ecFO!4rs{xBh#nK#cJfdI;R zqB$84MJPs$XNJ; z9n8$e#jVtlkmQ6%6bPblHdSCYq_|eRKE%EaoW5rZkFjJ{~+Sg z1C0_I5d)4RTF)^}UP}*=*0y9q*x9S(3mP-=ysrBPq}dHn4imam&F5NEzlOvO`dnfL zrBidhT;vMeaJ@L5VLPL2Dt;#Re($l{v6YpWLl4B+6ES)iaT4Gw^KKGcIfsJzQRB*h zPRYJhN5It&sVsT(GMjSt+1dK?iOr-)4L4l6`NBRpbf9F;L?O(79`J6#p?891Z@wd! zAt(Lr8ZaJg#%TCKo|^xvmW)(ug4`nxVzLPJw5_xvcBD~DRjij9Q3<$1FHZBJ6X1MW zUVTUz-?;AlFWZf8%-fk$Ui!5Pk57Fjn*`oVpuZnGbBXKqd~PDeZQ}MIkzCxh-TJH+ z!5m?OjU3ryk(4QCd7uq=hiac5p}@Sw;KSoId-@$jgI*qS2MQT)Wv*ZQ5_a_NP7D-f zfT7B!3Q%zD0swGuYO@)h&}6MWYKN)XTO`f-Xa zN0=1M%vsA=ka$WRB`QoPgDV@NoKvnrM!#Yj2YMJ*2)rZC0JYSLgv@xe=eawf`c|S^ zuaSb%SRTgnKRNx1EH}#n`+7()v|*D=?7q8CovB6~bY};~U-C4W{qMU?f zR8%eZ|FYK1TV>Uk`Z>G%&Q7|IBAhiom&R&hm6sdL)UeXf1T{8kZaC2$BXM5T`#H27&LLX(81P=!^6H%+A4#F>G!M@a3W3ZA2@jiclndprNMWLLI7)SwwlEtBH$n zPTA3(7*Y%h8>}BGzIZ@MlAJ30Ex2$Arn)NZyY8v#eF2QldW!4PKG;j_Fc{-U) zCFvsJ9r}oJ6i3)9Yadmi_uk>#D31`h$Y~ZQJ@F!7{-Uzfc{T?;)tz!1q#=eL_Fu}E z$ydJh=l-~V*?xwjs{L}~%Cl+ld3?il7K?{}J_AJ@=~iU^hwxghFLqt>;WSa$Yi{h4 zkUgn#JG>50(FXR0s*q|n>-3sPRf|X;ahYRE)cd~SG9z&gCurC}EsO!+T)=kvQRau6 zUannOp+=H=4(`|(iJyHzfJP=A6nRK_O_^lE?SE!%rr8!^er{smYc?s#+iFSBF?MpwIHrB&`Y^>j+=~0oRx&Z1Rdk1x^$tXlXoE=H%Fn1B%wioY&!~X!;FPRiU9s zI9fM|1iWg=ry3WdCqri%;oS5L7)V~KF14y|GE6U-wkkkAn5(#Gtce=8oQWt0{@GN1 z%vX3;{_Ce^G0L_SFhIp0NT@_gUbuFz5`jD+iH_4>8XJ_4mdGh|JH5S4njU-9wg=Q0 zT4SkkCdu>^pi{=ev0W$j=+r$5>V{Q0-HJtW+q9|d2{@BpF{<$%7KZ}HE@%sS!>uUv z0+PZGl`cgaD*|^^^5%uuMjI>4$nrqn@BemI=&Lfj)rk_3=m;3Vlq0#z-SN_euElGQ;Z6WsO3l8 z;Y%H~%9#BC41^kUz=JY_Wa40%-FXR0m6Uj2{0AE*zzjfdu*xm&Y&yO$rN^R6OV3B; zq8~dGfS~q&%p_sA`rz>?yXM#~p?>x`lU5~)XRjWpJyzLpH!5YDWHFx(KYeY%Cpo~y z!kzu2$1;S$WV!ed)n=Ts1Qozfw9U-bpBwck4zUvt^+c8Zgkm0XS~;YU(3aam(xqDt z4A4jFh!L|9VPjZFEA)ettjB)SJW@AgsJKpm2f55I+aGsCJl0#!bKi(f1)*4oR^Mi8 z65p4I!T!5cH`Ebe5%SspO15puNUqsQW(zzYc~I=ud&XY)HlW|T-FGUQ!L#XsmqNZFhK4P`?38)1)jQ`JW4 zaiZU+V**)i*92Fu$iM(ee@m`fk35wW7N6Iic|S_)<)K7zjT@^fjo2k$hRl!w9sewi z;Fi^&9|aX_%ZL^M}vb{PR4+T9BIzj{QYwqP+e5BM4gScLi#Btz&V} zMBi*j@Rt&Mu*&;$?by>k^)7__&0HdXIX{Xx(6gsziq2pGC7O0)9G)?`&pl7$s}nhXbFCh2rU6ceza< z<2Vj#Ru39#b&b65Px^2+a{$5Fv~c$8E->goHpb2Ydi_vwhy^#Ck=c zFI%0wM?{JX{RbtM$=LxXGpK%liDsF2Kp%2xQ-Bh}xYND5^_hO0#{D?fnc&H_v}VL= zd=ZHL<0qLq&ZhUK7EPo*>Rt2}-?Z`8Am)?#x+I`}lECl-!@mM=STv#?IQfyDj=y_( z>w>nASPE?(lnQpv0+7ASGICPvFimaKr(c4M>h3jJ@hpJ9cOFV&-)Px5mxr6k#>4`f zFsj09lsA0i#tDACU30Xc;4y75PGw56BM6Jujt=(_YqOl;$YhIvw<^Wyrbe`)?)@`d z*o?E-o_pg0?UYqUkR*;`6xejk2wg*NzNPJS&V2E3{|Y92e1qTGT7nvJC&B1j8Ri-?Qzytln(TT zeUhtT!SV)gf%=-F8jZAA`vINYp6hQ86s36jNb>#Ebq0dTKghxjz6fMq>*>&p9gPb9 zZ&S6iX7xV*x2ax&msUS9e7wb)_(hsb;X-?1s~D)$>F#~sS0<{(YxEY48VP9GM>p0O zuX2oC%X?Ttz$Em-bm*u}=af!Bg(HXyRmG>H7}^wzW5*VfIA$XhHf!e3W1{$klKfS9 zW)!;R#+1^DX_=kCZ&N^NHdQa__CbfGU2Q0mIX1|!I*Ec#G1D;tc$;7f`#R7#wh!13x<2cf+c(pGtY$OAKT7P3 z$!@n+_1M`IiDP8ZAASg=BlBYjjZZQPx#FV;5~21Im3L=*%mCpH>Obs%1~#~X=WGmYcjNKo7euz}2L$Wm5PZpCS1c$o_ML9&@oKyys*j@y8Dwn5&y{`cSvSAyeVm4xH2C_*$bk}k=47+ zC-|T56wiN)BX`zep_2hx&6ow=w&pTHAorD^w>2lKgj9V7L0=@088`O*|0o8|HaD#y&Qoh6}UhQAZXaBJSd@Sew+ zs=vam-oR92ee%2FTdiszyFFn8kMz>{xbWi<)QJ~tqg!eoFvm{;LJ|bvtS}fB*Ts89 zl4X8mTxTzg_1ccZ>6`~p$@QMYvr=Q9z^l@xK1tb1NY-DjxafeitX{@* zam2z~cfsA~K_a;PuZ61w8<%@D`Gu7{qebG+0z>iZ)BoMh$YT9e zv1Tbmg41Gf3sb2Wma8^#!bwq=2d>dA*j&JcD$kBB-omt~c4vY9sqZT>YTlMaSeBr$ z5mF{&kJ^ANC&DDi4m;DE1h^L>Qd%jiUfNZX0We{t*T;4Wl-=BNm`*9B<4-c|$gA|; z6IB2*_uGO3;PPi0DD7&oR%vjoNr_Ly#G3)(rp?5|ayQ?ZKla4zX+BcdzAnFj;R&B|0ydrUh_|3#C1V~Gn1+#;Vom{ z2NOQIm?dPTZCMQLNms)okj|9VcXKPsGaVzw%=vuVB&&O*4QCCfA{Q=C(1KHlT`-$C z&6S98JAiJK#>Gl0YZ49PMQ5x@B1F-gGSPLd6*_< zMOu?6)vK+Jh_^IXL-E%UNe7VM*(BZNBSFQuJi$$Syu+?V$7f;1=5y~~gkm<87ms+c9VIDTT7GF1pNi$vy{$vAF}c;?QG8q2tqa(Gjeyi$Bb zWfuWYE2Yp0l8~!Zo&wfLSVpqCOl`rTXU?HDO*ra=YLp?WYtx>m=eRYOgDX3meq`HN zIJEU(Rh9b`}`6Ds9KU%|IxlWcBt)4!Bgou?IaLAJ9lQufBwQPNe zB)SpnmI5JDHl!Co1(2wyCIE|$lS(LG*Ey@Ys@2kx6@MnnMzN$2Yr!fO>k2B8^JbRM zYXuwg)->Q`=Br+!Uy`47)z^)|e=||V8j+EP8agp|mJIZ?>Weo~Ct4$sdOLj2vJM#& zSpEWm5AxG)vj&85B3y(xhr`DImuOQZ5gWPoA7WGQW}G;^WC!~*@~Eo#hQ5y)8K)Lye95tB1#`WSw#YoeCvG3u)siCrP)~@=3DJuL)q)9RUZzZMxI6chRg6BQ(4@nC|cuFS0 z9!cai8RA{@Ux0a__ZOXM}Y2_(q8lNsYySY*o!E zH^j$<4fl&0!je48e2>A}Y^W@cKylQ=kwaz4_e6mZ*8EPEib4zW@iV~~U{fn==!pFS zP9ukmNh%?nU60BO@?VbOBJVf&RO++Ty?m0^_SeAU*|WPv=MNv|-8nlLU8>BzAgsy0QCJ}>zKix=BqCXf(HDLjPuRKk zKQxRW4bkHuK%4==YSk1$gbt-=?XZ9BAhGFa*v&UOVypJdg$RS-qhubtDl!hTwN0wl zguh95wWTi0XFi}M%Mn4p&Tmbpa64jBmZ!o-!C%({zS)^}5sqT8$mi{D^Pe~5Jbx%G z$=OX|&_f4Do{k`Tz=ed6PTF5~Wy)9jnQ^0bv%413ZgoUVS=pE6uJoxN({;G+SILr_$Ai3fjY3 zfT2=zvwLv}7@RhOs)s*LvRocwWxDIh%(=nY+uZqtYk(+H-QDgG578kePd9mFK4SWE z|IJaptXi5g9Umt$i?=jW}Vq7_!{5 zT_+YXA6-^3QN&MFZWAcJFY&)Ye~W4{j`E}5ETvDU>l0M;sU+EYPx=8u&&C<%qT|gQ z&iGX|3k&Oj

&WC@7LD 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%0A|j9hvHo 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ⅇ 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 K@2l)D-~2!R1ep#1 literal 0 HcmV?d00001 diff --git a/community/art/images/helm-3.png b/community/art/images/helm-3.png new file mode 100644 index 0000000000000000000000000000000000000000..3785a49f8abd5690f70fcecc0ce56b5a849326b6 GIT binary patch literal 28986 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

i+ur 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 EAKs+VYXATM literal 0 HcmV?d00001 diff --git a/community/art/images/type-notes.png b/community/art/images/type-notes.png new file mode 100644 index 0000000000000000000000000000000000000000..7d02eb749ec6d25563ee15a466bfdb61fb1ec99b GIT binary patch literal 78547 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 Bq0#^V literal 0 HcmV?d00001 diff --git a/community/art/readme.md b/community/art/readme.md new file mode 100644 index 0000000000..c146bcd97b --- /dev/null +++ b/community/art/readme.md @@ -0,0 +1,79 @@ +--- +title: Styleguide +--- + + +## Logo + +The official Helm logo is found at the [CNCF/artwork](https://github.com/cncf/artwork/blob/master/examples/graduated.md#helm-logos) repo. + +![Logo-Tweak-Light](./images/Logo-Tweak-Light.png) + +![Logo-Tweak-Dark](./images/Logo-Tweak-Dark.png) + + +# Brand Colors + +![Helm-3-Color-Palettes-Light](./images/Helm-3-Color-Palettes-Light.png) + +![Helm-3-Color-Palettes-Dark](./images/Helm-3-Color-Palettes-Dark.png) + + +### Color Values + +``` +// primary +navy #0F1689 + +// secondary +blue-dark #090E6F +blue-light #1B53C2 + +// shades +shade-dark #050843 +shade-mid #B7C2E9 +shade-light #DBE1F3 + +// accents +accent-blue #3B82BF +accent-green #2F84A7 +accent-red #95297C +accent-yellow #D1AA9B +``` + +# Typography + +![type-notes](./images/type-notes.png) + +* [Space Mono](https://fonts.google.com/specimen/Space+Mono) _(Google Fonts)_ +* [Public Sans](https://public-sans.digital.gov/) _(USWDS)_ + +--- + +## Examples: + +Example applications of the Helm brand to different assets. + +![Typography](./images/Typography.png) + +Example typography. + +![Example-Icon-Illustrations](./images/Example-Icon-Illustrations.png) + +Illustrations and icon examples. + +![Helm-Summit](./images/Helm-Summit.png) + +--- + +![Website-Exmple](./images/Example-Icon-Illustrations.png) + +Example for a website layout. + +![Website-Exmple.png](./images/Website-Exmple.png) diff --git a/community/blog-topics.md b/community/blog-topics.md new file mode 100644 index 0000000000..9b54857c9e --- /dev/null +++ b/community/blog-topics.md @@ -0,0 +1,20 @@ +--- +title: Submit a topic for the Helm Blog +--- + + + +1. Helm 2 to 3 Migration (Blog Series) + * 5 Useful Tips for Migrating to Helm 3 + * Helm 2 to Helm 3 Migration Checklist + * Rethinking Security for Helm 3 +2. Helm Maintainer Spotlight (Blog Series) +3. Case Studies +4. Solution Guides +5. diff --git a/community/code-of-conduct.md b/community/code-of-conduct.md new file mode 100644 index 0000000000..3afec9c287 --- /dev/null +++ b/community/code-of-conduct.md @@ -0,0 +1,13 @@ +--- +title: Community Code of Conduct +--- + + + +Helm follows the [CNCF Code of Conduct](https://github.com/cncf/foundation/blob/master/code-of-conduct.md). diff --git a/community/communication.md b/community/communication.md new file mode 100644 index 0000000000..234118bca7 --- /dev/null +++ b/community/communication.md @@ -0,0 +1,80 @@ +--- +title: Communication +--- + + + +The Helm community abides by the [CNCF code of conduct]. Here is an excerpt: + +> _As contributors and maintainers of this project, and in the interest +> of fostering an open and welcoming community, we pledge to respect +> all people who contribute through reporting issues, posting feature +> requests, updating documentation, submitting pull requests or patches, +> and other activities._ + +## Social Media + +* [Twitter] +* Pose questions and help answer them on [Slack] or [Stack Overflow]. + +## Slack + +You can [request an invitation to the Kubernetes Slack](https://slack.kubernetes.io/). + +Most real time discussion happens at [#helm-users](https://kubernetes.slack.com/messages/C0NH30761) and [#charts](https://kubernetes.slack.com/messages/C6E3XH1ED). + +There is also a [#helm-dev](https://kubernetes.slack.com/messages/C51E88VDG) channel for discussing development of Helm. + +## Issues + +Issues are used as the primary method for tracking anything to do with the Helm project. + +See the [contributing guide](https://github.com/kubernetes/helm/blob/main/CONTRIBUTING.md#issues) +for information on how to [file an issue] if you think you have found a bug or have a feature request. + +## Mailing lists + +Development announcements and discussions appear on the Helm mailing list +[cncf-helm] (send mail to `cncf-helm@lists.cncf.io`). + +## Meetings + +The Helm community holds regular public meetings, including those supporting Helm +client development and charts. You can [view the calendar of meetings](https://calendar.google.com/calendar/embed?src=s5anaqbm9kda435dnh5r8lj1l8%40group.calendar.google.com&ctz=America%2FLos_Angeles) +and [subscribe via an ical](https://calendar.google.com/calendar/ical/s5anaqbm9kda435dnh5r8lj1l8%40group.calendar.google.com/public/basic.ics) feed. + +We have a [weekly development meeting] every Thursday at 9:30am US Pacific Time and all are welcome. + +Map that to your local time with this [timezone table]. + +We keep notes from each meeting on this [document](https://docs.google.com/document/d/1d-6xJEx0C78csIYSPKJzRPeWaHG_8W1Hjl72OJggwdc/edit?usp=sharing) for summaries of standups, discussion, and action items. + +Videos are available on the [Helm Community Meetings playlist]. + +## Conferences + +Helm is one of the projects, represented at CloudNativeCon/KubeCon, held three times per year in Europe, Asia and North America. Information about these and other community events is available on the CNCF [events] pages. + +Also, the Helm community organizes the Helm-focused event - [Helm Summit], first +edition of which has happened in Portland, Oregon in February 2018, [the second one](https://events19.linuxfoundation.org/events/helm-summit-2019/) - in Europe (Amsterdam, Netherlands) on September 11-12, 2019. + +[CNCF code of conduct]: https://github.com/cncf/foundation/blob/master/code-of-conduct.md +[cncf-helm]: https://lists.cncf.io/g/cncf-helm/topics +[events]: https://www.cncf.io/events/ +[file an issue]: https://github.com/helm/helm/issues/new +[kubernetes-sig-apps]: https://groups.google.com/forum/#!forum/kubernetes-sig-apps +[Slack]: https://kubernetes.slack.com +[Helm Summit]: https://helmsummitpdx-feb2018.splashthat.com/ +[Stack Overflow]: https://stackoverflow.com/questions/tagged/kubernetes-helm +[timezone table]: https://www.google.com/search?q=0930+am+in+pst +[Twitter]: https://twitter.com/helmpack +[weekly development meeting]: https://zoom.us/j/696660622?pwd=MGsraXZ1UkVlTkJLc1B5U05KN053QT09 +[Helm Community Meetings playlist]: https://www.youtube.com/playlist?list=PLVt9l4b66d5EY5Xs9OVJgvO5ss9WzrSY0 +[SIGs]: https://github.com/kubernetes/community/blob/master/sig-list.md +[SIG-Apps]: https://github.com/kubernetes/community/tree/master/sig-apps diff --git a/community/governance/README.md b/community/governance/README.md new file mode 100644 index 0000000000..d0cc3bd41e --- /dev/null +++ b/community/governance/README.md @@ -0,0 +1,38 @@ +--- +sidebar_label: Governance +title: Governance Introduction +id: helm-governance +sidebar_position: 9 +--- + + + +The Helm governance details areas such as: + +* Maintainer responsibilities +* Types of maintainers (Org and Project) +* How elections occur +* Decision making +* Code of Conduct handling + +For the full detail on the Helm governance see the document [governance.md](/community/governance/governance). + +The Helm Org Maintainers are documented in [the community repo Maintainers file](/community/MAINTAINERS). + +## Projects + +The Helm governance refers to projects for the Helm project. The following Helm +projects currently exist: + +* **Helm Core**: The Helm CLI and packages +* **Charts**: Responsible for chart-related tooling (e.g., chart testing) +* **ChartMuseum**: The chart repository server +* **Web and Docs**: The Helm websites + +All other repositories are either archived or owned by the org maintainers. diff --git a/community/governance/_category_.json b/community/governance/_category_.json new file mode 100644 index 0000000000..090ef79173 --- /dev/null +++ b/community/governance/_category_.json @@ -0,0 +1,6 @@ +{ + "link": { + "type": "doc", + "id": "helm-governance" + } +} diff --git a/community/governance/governance.md b/community/governance/governance.md new file mode 100644 index 0000000000..efdb3509d5 --- /dev/null +++ b/community/governance/governance.md @@ -0,0 +1,123 @@ +--- +sidebar_label: Rules +title: Governance Rules +slug: governance +--- + + + +The following document outlines how the Helm project governance operates. + +## The Helm Project + +The Helm project is made up of several codebases and services with different release cycles that enable users to create, distribute, and operate packages in Kubernetes. These codebases include: + +* Helm - the package manager +* Charts - community curated charts +* Chartmuseum - a chart repository with support for pushing charts, auth, and more +* chart-testing - container based chart testing tools + +The services provided include: + +* Documentation for those who want to create, distribute, depend on, and operate packages +* Public chart collaboration + +## Maintainers Structure + +There are two levels of maintainers for Helm. The Helm org maintainers oversee the overall project and its health. Project maintainers focus on a single codebase, a group of related codebases, a service (e.g., a website), or project to support the other projects (e.g., marketing or community management). For example, the chart maintainers manage the charts repository and a few repositories that support charts. + +Changes in maintainership have to be announced on the [Helm mailing list](https://lists.cncf.io/g/cncf-helm). + +### Helm Org Maintainers + +The Helm Org maintainers are responsible for: + +* Maintaining the mission, vision, values, and scope of the project +* Refining the governance and charter as needed +* Making project level decisions +* Resolving escalated project decisions when the subteam responsible is blocked +* Managing the Helm brand +* Controlling access to Helm assets such as source repositories, hosting, project calendars +* Handling code of conduct violations +* Deciding what sub-groups are part of the Helm project +* Overseeing the resolution and disclosure of security issues +* Managing financial decisions related to the project + +Changes to org maintainers use the following: + +* There will be between 3 and 9 people. +* Any project maintainer of any active (non-archived) Helm organization project is eligible for a position as an org maintainer. +* No one company or organization can employ a simple majority of the org maintainers +* An org maintainer may step down by emailing the org maintainers mailing list. Within 7 calendar days the [helm mailing list](https://lists.cncf.io/g/cncf-helm) needs to be notified of the change +* Org maintainers MUST remain active on the project. If they are unresponsive for > 3 months they will lose org maintainership unless a [super-majority](https://en.wikipedia.org/wiki/Supermajority#Two-thirds_vote) of the other org maintainers agrees to extend the period to be greater than 3 months +* When there is an opening for a new org maintainer, any person who has made a contribution to any repo under the Helm GitHub org may nominate a suitable project maintainer of an active project as a replacement + * The nomination period will be three weeks starting the day after an org maintainer opening becomes available + * The nomination must be made via the [public Helm mailing list](https://lists.cncf.io/g/cncf-helm/) +* When nominated individual(s) agrees to be a candidate for maintainership, the project maintainers may vote + * The voting period will be open for a minimum of three business days and will remain open until a super-majority of project maintainers has voted + * Only current project maintainers of active projects are eligible to vote + * When the number of nominated individuals matches the number of openings each individual needs to have a yes vote from a super-majority of those that voted + * When there are more individuals than open positions voting will use [Condorcet](https://en.wikipedia.org/wiki/Condorcet_method) ranking on [CIVS](http://civs.cs.cornell.edu/) using the [Schulze method](https://en.wikipedia.org/wiki/Schulze_method) +* When an org maintainer steps down, they become an emeritus maintainer + +Once an org maintainer is elected, they remain a maintainer until stepping down (or, in rare cases, are removed). Voting for new maintainers occurs when necessary to fill vacancies. Any existing project maintainer is eligible to become an org maintainer. + +The Org Maintainers will select a chair to set agendas and call meetings of the Org Maintainers. + +### Project Maintainers + +Project maintainers are responsible for activities surrounding the development and release of code, the operation of any services they own (e.g., the documentation site), or the tasks needed to execute their project (e.g., community management, setting up an event booth). Technical decisions for code resides with the project maintainers unless there is a decision related to cross maintainer groups that cannot be resolved by those groups. Those cases can be escalated to the org maintainers. + +In some cases a groups of maintainers are responsible for more than one repo (e.g., charts maintainers managing the charts, chart-testing, charts-tooling). In other cases the maintainers are responsible for a single project (e.g., chartmuseum). + +To be considered active maintainers, it is required for maintainers to be associated with at least one active, non-archived project. If only listed on archived projects, they become emeritus project maintainers and are no longer eligible to become org maintainers. + +Project maintainers do not need to be software developers. No explicit role is placed upon them and they can be anyone appropriate for the work being produced. For example, if a repository is for documentation it would be appropriate for maintainers to be editors. + +Changes to maintainers use the following: + +* A maintainer may step down by emailing the [Helm mailing list](https://lists.cncf.io/g/cncf-helm) +* Maintainers MUST remain active. If they are unresponsive for > 3 months they will be automatically removed unless a [super-majority](https://en.wikipedia.org/wiki/Supermajority#Two-thirds_vote) of the other project maintainers agrees to extend the period to be greater than 3 months +* New maintainers can be added to a project by a [super-majority](https://en.wikipedia.org/wiki/Supermajority#Two-thirds_vote) vote of the existing maintainers. Nomination can happen on the public [Helm mailing list](https://lists.cncf.io/g/cncf-helm) with voting on the private maintainer list or it can happen from a pull request to the appropriate record of maintainer for the project (e.g., OWNERS file) with voting happening through approvals on the pull request. +* While nomination will happen on the public [Helm mailing list](https://lists.cncf.io/g/cncf-helm), voting will happen on the private maintainer list. +* When a project has no maintainers the Helm org maintainers become responsible for it and may archive the project or find new maintainers +* When maintainers no longer maintain active projects due to project archival or removal, they become emeritus maintainers unless they join another Helm project as maintainers. + +## Decision Making at the Helm org level + +When maintainers need to make decisions there are two ways decisions are made, unless described elsewhere. + +The default decision making process is [lazy-consensus](http://communitymgt.wikia.com/wiki/Lazy_consensus). This means that any decision is considered supported by the team making it as long as no one objects. Silence on any consensus decision is implicit agreement and equivalent to explicit agreement. Explicit agreement may be stated at will. + +When a consensus cannot be found a maintainer can call for a [majority](https://en.wikipedia.org/wiki/Majority) vote on a decision. + +Many of the day-to-day project maintenance can be done by a lazy consensus model. But the following items must be called to vote: + +* Enforcing a CoC violation (super majority) +* Removing a maintainer for any reason other than inactivity (super majority) +* Changing the governance rules (this document) (super majority) +* Licensing and intellectual property changes (including new logos, wordmarks) (simple majority) +* Adding, archiving, or removing subprojects (simple majority) +* Utilizing Helm/CNCF money for anything CNCF deems "not cheap and easy" (simple majority) + +Other decisions may, but do not need to be, called out and put up for decision on the [Helm mailing list](https://lists.cncf.io/g/cncf-helm) at any time and by anyone. By default, any decisions called to a vote will be for a _simple majority_ vote. + +## Code of Conduct + +The code of conduct is overseen by the Helm project maintainers. Possible code of conduct violations should be emailed to the project maintainers at cncf-helm-maintainers@lists.cncf.io. + +If the possible violation is against one of the project maintainers that member will be recused from voting on the issue. Such issues must be escalated to the appropriate CNCF contact, and CNCF may choose to intervene. + +## DCO and Licenses + +The following licenses and contributor agreements will be used for Helm projects: + +* [Apache 2.0](https://opensource.org/licenses/Apache-2.0) for code +* [Creative Commons Attribution 4.0 International Public License](https://creativecommons.org/licenses/by/4.0/legalcode) for documentation +* [Developer Certificate of Origin](https://developercertificate.org/) for new contributions diff --git a/community/hips/README.md b/community/hips/README.md new file mode 100644 index 0000000000..a00dd1e56e --- /dev/null +++ b/community/hips/README.md @@ -0,0 +1,48 @@ +--- +title: Helm Improvement Proposals (HIPs) +--- + + + +To learn more about the purpose of HIPs and how to go about writing a proposal, +please start reading [HIP 1](hip-0001.md). + +## Markdown for Proposals + +Original proposal source should be written in Markdown format, and the format is +described in HIP 1. Older proposals were often written in a more mildly +restricted markdown format and can be found in the +[archives](archives/README.md). + +## Existing HIPs + +- [hip-0001: Writing a HIP](hip-0001.md) +- [hip-0002: Pre-defined release dates for Helm](hip-0002.md) +- [hip-0003: How Projects Join the Helm Organization](hip-0003.md) +- [hip-0004: Document backwards-compatibility rules](hip-0004.md) +- [hip-0005: Helm Org Maintainers and Deprecated Projects](hip-0005.md) +- [hip-0006: OCI Support](hip-0006.md) +- [hip-0007: Document and Track maintainer groups](hip-0007.md) +- [hip-0008: Add descriptions to custom completions](hip-0008.md) +- [hip-0009: Transitioning Security Team Members on Project Deprecation](hip-0009.md) +- [hip-0010: Distributed responsibility for picking](hip-0010.md) +- [hip-0011: CRD Handling in Helm 3](hip-0011.md) +- [hip-0012: Helm 4 Development Process](hip-0012.md) +- [hip-0014: Helm Triage Maintainers](hip-0014.md) +- [hip-0015: Annotation for Images used by Helm Charts](hip-0015.md) +- [hip-0017: Helm OCI MediaType Registration](hip-0017.md) +- [hip-0018: Include repository URL and tarball digest in chart's release metadata](hip-0018.md) +- [hip-0019: New annotations for displaying hook output](hip-0019.md) +- [hip-0020: H4HIP: Charts v3 Enablement](hip-0020.md) +- [hip-0021: Enhanced logging library for Helm](hip-0021.md) +- [hip-0022: Wait With kstatus](hip-0022.md) +- [hip-0023: Utilize Server Side Apply for installs/upgrades](hip-0023.md) +- [hip-0024: Improve the Helm Documentation](hip-0024.md) +- [hip-0025: Better Support for Resource Creation Sequencing](hip-0025.md) +- [hip-0026: H4HIP: Wasm plugin system](hip-0026.md) diff --git a/community/hips/archives/README.md b/community/hips/archives/README.md new file mode 100644 index 0000000000..d00756ba68 --- /dev/null +++ b/community/hips/archives/README.md @@ -0,0 +1,14 @@ +--- +title: Proposal Archives +--- + + + +Here lies all of the proposals written prior to the new standard: proposal-0001. +They are retained here for historical purposes. diff --git a/community/hips/archives/helm/distributed-search.md b/community/hips/archives/helm/distributed-search.md new file mode 100644 index 0000000000..a4dad0356b --- /dev/null +++ b/community/hips/archives/helm/distributed-search.md @@ -0,0 +1,75 @@ +--- +title: "Proposal: Search of Distributed Repositories" +--- + + + +Repositories in Helm were designed to be distributed. Instead of a central repository, the concept was for many distributed repositories to exist. This was modeled after [Debian APT](https://en.wikipedia.org/wiki/APT_(Debian)). + +To kick start charts, the charts repository was created. Eventually there were the stable and incubator repositories with Helm automatically adding the stable repository. To visually view repositories the monocular project was created which was used to launch what is now hub.kubeapps.com. This site enabled the search of the stable and incubator repositories. With Helm's use of stable repository and the UI search focusing on the community provided charts the community as a whole moved towards a more centralized approach. When companies or others wanted to share their projects they put them into the community charts. + +This proposal is about enabling distributed repositories by making them and their packages discoverable. + +## A Single Search Location + +The goal of this is to have a search site and API that enables the search of many public repositories. Private repositories are a separate scope and can operate with existing tools. Hosting of these repositories is also a non-goal. + +The public repositories would need to provide: + +1. Valid repositories to the repository specification +1. A security point of contact for the repository +1. A general point of contact for issues +1. Some level of automation around handling the quality of the packages. This is still to be determined and there are more details in the tooling section below. + +End users would then be able to query, via the web or API, for charts with an experience containing the following characteristics: + +* Can perform a general text search for packages that queries across all listed repositories +* In the details of the response on a chart there will be directions on: + + * Adding the repository to a local helm installation + * Installing the chart without adding the repository + +* Metadata on repositories, charts, and provider organizations. + +The idea is that organizations do not need to wait on the community charts team to publish releases or use that process. Instead, package hosting can happen in a distributed manner while the packages can be discoverable. + +_Note, under the current more centralized approach there is a level of trust with the charts due to the CNCF oversight and known team handling the day to day activities. While this model loosens and distributes trust we have a goal of trying to keep trust high._ + +## Tools Provided For Repository Maintainers + +To enable distributed repositories the Helm project will provide the following tools: + +### Repository Tools + +Basic tools needed to run a repository along with pointers to 3rd party services and applications that can be used instead. For example, Codefresh chart repositories, powered by Chartmuseum, and Artifactory would be shared as options. + +### Documentation + +In addition to tooling there needs to be documentation that covers: + +* How to run a repository on GitHub, Gitlab, and other similar code hosting services +* Details on signing charts and how to integrate that into workflows +* Suggestions on leveraging CI as part of repository hosting +* A clearly documented repository specification + +### Analysis Tools + +To help, and possibly enforce, quality of charts we need to provide tools that can perform an analysis of charts to help validate quality. These tools exist for the stable and incubator charts today. They will be packaged in a manner others can consume and leverage within their workflows. + +Note, work on this step has already begun and [can be found on GitHub](https://github.com/kubernetes-helm/chart-testing). + +## Outstanding Actions + +The following are outstanding actions that need to be worked out but can happen after the proposal is accepted: + +* [ ] Decide on and document the requirements for listed repositories + +## Organizational Management + +The Charts Maintainers team will be the directly responsible party for this system and it will be hosted by the Helm project. \ No newline at end of file diff --git a/community/hips/archives/helm/helm-v3/000-helm-v3.md b/community/hips/archives/helm/helm-v3/000-helm-v3.md new file mode 100644 index 0000000000..065c3f4c88 --- /dev/null +++ b/community/hips/archives/helm/helm-v3/000-helm-v3.md @@ -0,0 +1,96 @@ +--- +title: Helm 3 Design Proposal +--- + + + +This document contains a proposal for Helm 3. It assumes deep familiarity with +Helm 2, and assumes that much of Helm 2's architecture will simply carry over +without major change. + +## Summary + +- Tiller is gone, and there is only one functional component (`helm`) +- Charts are updated with libraries, schematized values, and the ext directory +- Helm will use a "lifecycle events" emitter/handler model. +- Helm has an embedded Lua engine for scripting some event handlers. Scripts are stored in charts. +- State is maintained with two types of object: Release and a release version Secret +- Resources created by hooks will now be managed +- For pull-based DevOps workflow, a new Helm Controller project will be started +- Cross platform plugins in Lua that only have a runtime dependency on Helm +- A complementary command to `helm fetch` to push packages to a repository + +## Purpose + +The design presented herein is intended to begin with the [user profiles](../../../../user-profiles.md) +identified for helm and match as many of the [user stories](./011-user_stories.md) +as could be accommodated + +## The Basic Architecture + +Helm 3 is a single-service architecture. One executable is responsible for +implementing Helm. There is no client/server split, nor is the core processing +logic distributed among components. + +The reference implementation of Helm 3 is a single command-line client with no +in-cluster server or controller. This tool exposes command-line operations, and +unilaterally handles the package management process. + +The reference implementation has two distinct parts: + +1. The command line façade, which translates commands, subcommands, flags, and + arguments into a Helm operation +2. The Helm library, which provides the logic for executing all Helm + operations. + +By design, the Helm library _must_ be usable as a standalone library. + +In Appendix A, we specify a second implementation of Helm 3 that provides a +controller-oriented model with no client. The Helm Controller provides a +CRD-based façade to receive commands, but executes them via the Helm library. + +With this simplification, the following list comprises the components of Helm +v3's core implementation: + +* Charts +* Chart repositories +* `helm`, the CLI +* An extension mechanism (Lua scripts stored in the chart) +* A new in-cluster CRD: Release + +In this model, Tiller is removed and there are no operators or controllers that +run in-cluster. + +## Command/Flag Differences from Helm 2 + +There are a few major (breaking) changes to the Helm CLI planned: + +- The `-n` flag will be remapped across the board to `--namespace`, not `-name`. + This is for consistency with `kubectl`, which added `-n` after Helm 2 was released. +- `helm install` will _require_ a name, unless `--generate-name` is specified. This + inverts the default behavior for Helm 2. +- `helm serve` and `helm reset` will be removed +- `helm delete` will be renamed to `helm remove`, though `helm delete` will remain an alias. +- `helm inspect` will be renamed `helm show`, though `helm inspect` will remain as an alias. + +Other changes to commands are described in their relevant sections within this document. + +## Table of Contents + +1. [Charts](./001-charts.md) +2. [Event System](./002-events.md) +3. [State Storage](./003-state.md) +4. [Hooks](./004-hooks.md) +5. [Plugins](./005-plugins.md) +6. [Repositories](./006-repositories.md) +7. [Security Considerations](./007-security.md) +8. [Appendix A: A Helm Controller](./008-controller.md) +9. [Appendix B: What Is A Package Manager](./009-package_manager.md) +10. [Appendix C: Removed Sections](010-removed.md) +11. [Appendix D: User Stories](011-user_stories.md) diff --git a/community/hips/archives/helm/helm-v3/001-charts.md b/community/hips/archives/helm/helm-v3/001-charts.md new file mode 100644 index 0000000000..63ea924f2e --- /dev/null +++ b/community/hips/archives/helm/helm-v3/001-charts.md @@ -0,0 +1,227 @@ +--- +title: Charts +--- + + + + +The chart architecture remains largely unchanged. + +The following changes are proposed to the existing chart format: + +- The ext/ directory and supporting requirements +- Library charts +- Schemata for values files + +## The ext/ directory + +The `ext/` directory is a reserved directory in v3 charts. It is reserved for +placing extension scripts. + +In Helm 3, Lua scripts are placed into `ext/lua/`. Examples of Lua scripts can +be found below. + +### Sandboxing Model + +When a chart is loaded, the script `chart.lua` in `ext/lua` will also be loaded. All +subchart `ext/lua/chart.lua` scripts will be loaded into the same runtime, and then the +top-level (parent) chart's `init()` function will be executed. + +With this construction, the parent chart will (a) have access to the objects +in the child charts, and (b) be responsible for initializing child charts. Library +support will be provided for simplifying this process: + +```lua +function init(events) { + -- Initialize subcharts + subchart.init(events) + + -- Do other stuff + event.on("pre-load", 0.5, function () { + print("pre-load event") + }) +} +``` + +This design will make it possible for top-level charts to strategically overrride +the behavior of subcharts, or (as above) simply use them as-is. + +By default, the chart sandbox will be prepared with a minimal set of built-in libraries. +These libraries will not include network, os, or filesystem access. The module +system (e.g. `require()`) will only allow in-chart libraries to be loaded. + +Additional core libraries, such as os, network, and filesystem access, can be +loaded only of they are specified in the `ext/permissions.yaml` file. + +```yaml +lua: + - network + - io +``` + +The above permissions file asks that the Lua interpreter grant permission to +the `network` and `io` libraries. This request will require user +confirmation. + +When users install charts that ask for additional permissions, they will be +prompted to allow: + +```console +$ helm install stable/ishmael +Chart "ishmael" is requesting the following additional permissions: + - network: Access the network + - io: Access the local filesystem +Allow? (y, yes, n, no) > +``` + +An additional `-y`,`--yes` flag will allow global acceptance of permissions. + +For fine-grained control, a `--accept-perms [strings]` may be provided to allow a +user to set a specific set of perms. If the chart asks for others, the install will +fail: + +``` +$ helm install stable/ishmael --accept-perms network,io +``` + +The above will succeed if: + +- The chart does not request any permissions +- The chart requires one or both of `network` and `io`, but no other permissions + +The above will fail if: + +- The chart asks for any permissions other than `network` or `io` + +When a chart contains subcharts, the presence of a `permissions.yaml` file will +result in a permissions prompt even if the subchart's Lua code is overridden. +This is because the overriding logic does not preclude the loading of the +libraries. + +## Library Charts + +Helm 3 supports a class of chart called a "library chart". This is a chart that +is shared by other charts, but does not create any release artifacts of its +own. A library chart's templates can only declare `define` elements. Globally +scoped non-`define` content is simply ignored. + +Library charts may also contain scripts (`ext/`). However, overlays are +ignored. + +Library charts are stored in `library/` in a Helm chart. Helm may hoist the +library charts in subcharts into the parent chart. + +Library charts are noted in the `library:` directive in the +`requirements.yaml`. + +```yaml +requirements: + - name: apache + version: 1.2.3 + repository: http://example.com/charts + - name: mysql + version: 3.2.1 + repository: http://another.example.com/charts +libraries: + - name: common + version: "^2.1.0" + repository: http://another.example.com/charts +``` + +Libraries are semver ranged. When versions are processed, the highest global +match is used. An incompatibility results in a failed chart render or build. + +> [name=Matt Farina] +> How would library charts work with chart repositories? Or, maybe they aren't listed. If they are, is there a way to make them non-installable? +> [name=Matt Butcher] +> We could put a flag in the chart.yaml which would make such +> a chart uninstallable. I'm not sure, though, whether that's +> necessary. Installing a library would be a no-op on Helm's +> side, so we could just have Helm output an error any time +> there are no objects to install (as Helm v2 does now). +> [name=Nikhil Manchanda] +> I would think that library charts would still be listed in repositories in case you wanted to fetch / inspect them. For usability, maybe having a flag that would not display libraries when searching would be a good idea? +> +> [name=Adnan Abdulhussein] +> I think we need a Chart.yaml field. Helm and other tools might want to differentiate between these in different ways. For example, does it make sense to include a non-library chart as a library in a parent chart? `helm search` should distinguish library charts and `helm install` should refuse to install a library chart. Other UIs like Kubeapps will also need to distinguish between library charts and normal charts. +> [name=Matt Butcher] +> I'm leaning Adnan's way... but if we do that, it will mean that you can't use a regular chart as a library chart ever. They will differe in kind, not merely in the way the requirements.yaml references them. Is that okay? +> +> [name=Adnan Abdulhussein] +> I posed using a non-library chart as a library chart as a question, because I think it could be valid to use a non-library chart just for its helpers. Helm doesn't have to force dependencies marked as libraries in requirements.yaml to be marked as a library in Chart.yaml (it could produce a warning, though). So, I think a normal chart can be used as a library chart, but not the other way around. The main restriction being: you can't install a library chart. + +### Lua in Library Charts + +Lua in library charts will be loaded as normal, and the `init()` functions will +be executed by `subcharts.init()` (if called). It is considered bad (but legal) +practice to include event handlers in library charts. + +## Schematized Values Files + +In Helm 2, there is no schema that is applied to a values file. + +For Helm 3, a [JSON schema](http://json-schema.org/specification.html) can be +applied to a values file to validate it. The JSON schema file can be generated +from the source values file (e.g. by introspecting the YAML), or it can be +hand-authored. + +For the sake of consistency, the JSON schema file will be stored as YAML data. +The schema is stored in `values.schema.yaml`, parallel to `values.yaml`. + +> [name=Adnan Abdulhussein] +> I'm wondering if there's a better way to do this that wouldn't mean having to maintain a separate file? Personally, I like the idea of annotating a values.yaml file with comments above a parameter to add schema, but that probably means implementing our own format rather than taking something like JSON schema. +> [name=Matt Fisher] +> I don't think there's a better way to do this unless we made values.yaml strongly typed. +> +> https://github.com/kubernetes/helm/issues/2431 also goes into some thoughts around this proposal, which also agreed that a JSON schema approach would be best. +> +> [name=Matt Butcher] +> Schema could be optional, in addition to being autogenerated by default. + +For example, consider a simple `values.yaml` file: + +```yaml +name: frontend +protocol: https +port: 443 +``` + +This can be schematized into something like this: + +```yaml + title: Values + type: object + properties: + name: + description: Service name + type: string + protocol: + type: string + port: + description: Port + type: integer + minimum: 0 + image: + description: Container Image + type: object + properties: + repo: + type: string + tag: + type: string + required: + - protocol + - port +``` +> [name=Adnan Abdulhussein] +> Added an example to demonstrate what an object key would look like. IMO this is quite verbose. On the other hand, we could easily share schema for certain things (e.g. resources for Pods). + +In many cases, the base types in a YAML file can be used to derive a base +schema. Thus it may be desirable to automatically derive schemata if they are +not supplied. diff --git a/community/hips/archives/helm/helm-v3/002-events.md b/community/hips/archives/helm/helm-v3/002-events.md new file mode 100644 index 0000000000..26a443bda6 --- /dev/null +++ b/community/hips/archives/helm/helm-v3/002-events.md @@ -0,0 +1,330 @@ +--- +title: Event-Driven Architecture +--- + + + +This document describes an architectural transition inside of Helm. The client-server +model of Helm 2 will be replaced with a single event-driven model. + +High level logic will _emit events_, while event responders will _handle events_. + +Some event handlers will be internal-only. Other event handlers will be exposed +to the new lifecycle events subsystem (with its Lua engine). Those events will +be open to extension. + +## The Lifecycle Events Architecture + +Helm 3 is internally reorganized around an event model. Some events are +internal only, while others are exposed to the Lua scripting engine. In this +latter case, chart authors may script certain behaviors. + +During various phases of an operation (like install), Helm will execute pre-defined +events. Charts will have an opportunity to respond to these events. + +For example, during `helm install`, the process my look something like this: + +1. Load chart +2. Merge values +3. Emit `pre-render` event +4. Render templates +5. Parse resulting manifest into objects +6. Emit `post-render` event +7. Validate all objects +8. Call `pre-install` event +9. Install the manifests into Kubernetes +10. Exit + + +#### Scripting Event Handlers + +An embedded Lua interpreter can load scripts at runtime, which makes it +possible to write code which can be stored inside of a chart, but executed in +answer to a lifecycle event. + +In Lua, executing a particular hook might look something like this: + +```lua + -- events is used to register event handlers. + events.on("pre-render", 0.5, function (_) + -- Accessing an object + print("got chart " + _.chart.name) + -- Mutating an object + _.values.myvalue = "My Value" + end) +``` + +The event handler format is: `events.on(_)`, where `_` is a variable pointing to +a context object (see next section). + +### Script locations + +Scripts are stored inside charts. They are stored in charts for the following +reasons: + +- Charts remain self-contained. There is no need to negotiate on which plugins + a chart needs. +- Dependency resolution is relegated to the chart scope +- The ordering problem is clearly solved (see below) if the scripts are located + inside of the chart. + + +Lua scripts are stored in a chart's `ext/lua` folder. The `ext/lua/chart.lua` file +is loaded automatically along with the chart, and it may `require()` in other +Lua scripts. + +The order of loading goes like this: + +1. Chart is verified (if requested) against `.prov` file +2. Chart is loaded into memory +3. Chart.yaml is parsed, validated, and loaded +4. `ext/lua/chart.lua` files are parsed and loaded into a runtime +5. `chart-loaded` event is fired on chart that was loaded + +> Note: Values from `-f` and `--set` are coalesced prior to chart loading. + +Charts and subcharts may each have Lua. When events are triggered, the event +handler will do a depth-first execution of the `chart.lua` files, ending with the +topmost `chart.lua` file. + +## The Context Object for Events + +Every event will receive a context, which will contain data about that event. In pseudo-code, the context stucture looks like this: + +```lua +context = { + -- Loaded from chart.yaml + chart = { + version = function () return "v2" end, + name = function () return "alpine" end, + version = function () return "1.1.0" end, + description = function() return "This is an example chart." end, + keywords = function() return { "alpine", "utility", "debugging" } end, + home = function() return "https://docs.helm.sh" end, + sources = function() return { "https://github.com/helm/helm" } end, + maintainers = function() return { + name = "M Butcher", + email = "mbutcher@example.com", + url = "http://mbutcher.example.com" + } end, + icon = function() return "https://example.com/alpine.svg" end, + appVersion = function() return "3.8" end, + kubernetesVersions = function() return ">1.9.0" end, + }, + -- All user-specified. None of these is hard-coded + values = { + rbac = { enabled = true }, + image = { name = "alpine", tag = "3.8"} + }, + -- These are supplied by the system and the user + release = { + name = function() return "my-alpine" end + }, + -- Information about the cluster that Helm is currently + -- targeting + capabilities = { + helmVersion = function() return "3.0.0-alpha.1" end, + -- Kubernetes version, as reported by Kubernetes + kubernetesVersion = function() return "1.10.0" end, + apiVersions = function() return { + "v1", + "batch/v1", + "batch/v2", + "batch/v2beta1", + -- ... + } end + }, + -- Files specified in the chart, exclusing templates and + -- the contents of ext/ + files = { + { name = "config.json", data = "{}" } + }, + -- Any gotopl files. Depending on the phase, modification of + -- these may have no impact. + templates = { + { name = "pod.yaml", data = "apiVersion: v1\nkind: Pod\nname: {{.Release.Name }}\n#..." } + }, + dependencies = { + {name = "nginx", version = "1.2.0", repository = "https://example.com/charts"} + }, + -- Depending on phase, this may contain the list of already + -- rendered objects. It may be empty. Depending on the + -- phase, the contents of this may, on return, be preserved. + objects = { + { + apiVersion = "v1", + kind = "Pod", + name = "my-alpine" + } + } +} + +``` + +Note that some of the properties in the context are functions. +These are implemented as functions because their values are +immutable. (The implementation of the function is informational pseudo-code, and is not the real implementation.) + +> [name=Matt Butcher] +> Options for subcharts: We can either collapse them into one top-level context or nest subcharts in a `charts = { context::new() }` way. +> + +> [name=Stuart P. Bentley] +> As a Lua developer, I don't see any reason why immutable values should be specified as functions - it introduces an arbitrary distinction between access to mutable and immutable values, and I could still just clobber the function by assigning over it. If you want to enforce a read-only constraint on the immutable fields, the proper way to do it would be to use a table with a `__index` metamethod/table for the immutable values (and a `__newindex` metamethod to stop them from being overwritten). + +## Events + +This is meant to be an exhaustive list of the events that will be emitted in Helm 3. + +The following are events by command. If a command is not present, then that command +is not slated for inclusion in Helm 3. + +For each command, the events are presented in the order that they occur. + +### Create + +Events for `helm create`: + +- `pre-create` +- `post-create` + +The `pre-create` event will receive a minimal context with no chart information. A `post-create` will receive the initialized chart. After a post-create, the chart will be written to the filesystem. + +### Dependency Build + +- `pre-dependency-build` +- `post-dependency-build` + +The `pre-` hook will have access to the base chart's context. + +The `pre-` hook will be able to modify the `dependencies` object before dependencies are resolved or fetched. + +The `post-` hook will have access to the context as it appears after all dependencies have been resolved. The results of this hook are _not_ written to the filesystem. + +### Dependency [List, Update] +No other `helm dependency *` commands have hooks + +### Delete + +- `pre-delete` + +The `pre-delete` event will receive a minimal context. It will not receive the chart. + +### Fetch + +There are no defined hooks for this command + +### Get [manifests, values] + +There are no defined hooks for these commands + +### History + +There are no defined hooks for this command + +### Home + +There are no defined hooks for this command + +### Init + +There are no defined hooks for this command + +### Inspect + +There are no defined hooks for this command + +### Install + +- `pre-render` +- `post-render` +- `pre-install` + +#### pre-/post-render + +The pre- and post-render events are common across several operations. + +`pre-render` occurs before the contents of the `context.templates` have been rendered. The `context.objects` array is thus empty prior to `pre-render`. + +The `post-render` occurs after templates have been rendered to objects. Any further modifications to `context.templates` are ignored. The `context.objects` array will contain object representations of the things created after the template run. + +#### pre-install + +The `pre-install` event fires after `post-render`, and will receive the context returned from post-render. This event only fires on the install command, and thus is for install-specific work. + +### Lint + +- `pre-render` +- `post-render` +- `pre-lint` + +The `pre-lint` event is fired after post-render, and is only fired for lint. + +### Package + +- `pre-package` + +The `pre-package` hook is fired immediately before the package operation, and changes to context may be written to the packaged chart, but not onto the filesystem. + +### Plugin [*] + +There are no defined hooks for this command + +### Repo [*] + +There are no defined hooks for this command + +### Rollback + +_This is dependent on a possible re-architecting of `helm rollback` that will no longer include a render phase._ + +- `pre-render` +- `post-render` +- `pre-rollback` + +The `pre-rollback` event fires after the post-render, and with the same context. This event only fires on rollback. + +### Search + +There are no defined hooks for this command + +### Template + +- `pre-render` +- `post-render` +- `post-template` (name may change) + +The `post-template` event fires after post-render and receives the same context. It fires immediately before the output of the command is written to STDOUT. + +### Test + +- `pre-render` +- `post-render` +- `pre-test` +- `post-test` +- `failed-test` + +`pre-test` is executed immediately before the test, and it may modify the charts prior to testing. `post-test` runs after the test. `failed-test` runs only if the test is marked failed. + +### Upgrade + +- `pre-render` +- `post-render` +- `pre-upgrade` +- `post-upgrade` + +The `pre-upgrade` event fires after `post-render`, receiving the same context. `post-upgrade` fires after the chart has been submitted to the server. These two events only fire during upgrades. + +### Verify + +There are no defined hooks for this command + +### Version + +There are no defined hooks for this command diff --git a/community/hips/archives/helm/helm-v3/003-state.md b/community/hips/archives/helm/helm-v3/003-state.md new file mode 100644 index 0000000000..b1742c4e56 --- /dev/null +++ b/community/hips/archives/helm/helm-v3/003-state.md @@ -0,0 +1,128 @@ +--- +title: State Management +--- + + + +This document explains how state management works in absense of Tiller. Largely, +it is the same model with a few changes to eliminate conflicts during race conditions. + +## State Storage + +In Helm v3, state is tracked in-cluster by a pair of objects: + +- The Release object (CRD): Represents an instance of an application +- The release version Secret: Represents a version of an instance of an application + +A `helm install` creates an Application, +a Release, and a Secret. A `helm upgrade` requires an existing Application and +Release (which it may modify), and creates a new Secret that contains the new +values and rendered manifest. + +### Namespacing Changes + +With Tiller gone, there is no reason to default to storing data in +`kube-system`. Instead, Helm 3 will store release data _in the same namespace +as the release's destination_. + +Release and release version Secrets are stored **in the same namespace as the +installed release itself**. In other words, if we install `nginx` into +namespace `foo`, then both the Release and release version Secret will also be +installed into namespace `foo`. + +For example, if no namespace is specified: + +```console +$ helm install -n foo bar +# everything, including Release and Secret is installed into default namespace +``` + +There is now only one releavant namespace, and the _tiller namespace_ goes away: + +```console +$ helm install -n foo bar --namespace=dynamite +# installs release, releaseVersion, and un-namespaced charts into dynamite namespace. +``` + +As with Helm 2, if a resource explicitly declares its own namespace (e.g. with +metadata.namespace=something), then Helm will install it into that namespace. +But since the owner references do not hold over namespaces, any such resource +will basically become unmanaged. +> [name=Taylor Thomas] +> This could be problematic for users. I know that at Nike we are using the cross-namespace functionality and we won't be the only ones +> +> [name=Adnan Abdulhussein] +> Should we add the concept of a un-namespaced ClusterRelease which is created for charts that are cross-namespace? +> +> [name=Matt Butcher] +> Maybe we should confirm whether or not owner references hold across namespaces. Cuz maybe this isn't actually an issue. + +### The Release Object + +The release object contains information about a release, where a release is _a +particular installation of a named chart and values._ This object describes the +top-level metadata about a release. + +At minimum, there are two necessary pieces of data a Release must track: + +- The name of the release +- The currently deployed version (release version Secret) of this release + +The release object persists for the duration of an application lifecycle, and is +the owner of all release version Secrets, as well as of all objects that are +directly created by the Helm chart. (These relationships may be represented by owner references.) + +With this change, release names can now be scoped to namespace, instead of +globally scoped as they were with Helm 2. + +### The release version Secret + +The release version Secret ties a release to a series of revisions (install, +upgrades, rollbacks, delete). In Helm 2, revisions were merely incremental. Install +created release v1, a subsequent upgrade went to v2, and so on. And in Helm 2, +the Release and release version Secret were collapsed into one. + +For Helm 3, a Release has one or more release version Secrets associated with it. +The Release object always describes the current head release. Each release version +Secret describes just one version of that release. + +An upgrade operation, for example, will create a new release version Secret, and +then modify the Release object to point to this new version. Rollback operations +can use older release version Secrets to roll back a release to a previous state. + +A release version secret will have the following metadata and data fields: + +| field | description | +| -------- | -------- | +| type | Always `helm.sh/release-version` | +| metadata.name | The release name plus the version ULID | +| metadata.labels.version | The ULID of the release | +| metadata.labels.release | The name of the release | +| data.userValues| The user-specified values | +| data.chartValues | The default values specified in the chart | +| data.manifest | The rendered manifest from this release | +| data.chartSource | The source of the original chart | +| data.chartName | The name and version of the original chart | + +Given the above, the following operations are redescribed: + +- `helm get manifest` gets `data.manifest` +- `helm get values` gets `data.userValues` +- `helm get values --all` gets `data.userValues` and `data.chartValues` +- `helm upgrade --reuse-values` uses `data.userValues`and `data.chartValues` + +The owner reference of the secret will be set to the Release object. + +### Versions are ULIDs, not incremented integers +Helm 2 used incremented integers for version numbering. This is changing. + +Version increments are ULIDs, not SemVer or integer counters. This is to +prevent any race conditions when two revisions are pushed in near proximity. +The version incrementor need not be negotiated with ULID; each new ULID is +time-bound, but unique. diff --git a/community/hips/archives/helm/helm-v3/004-hooks.md b/community/hips/archives/helm/helm-v3/004-hooks.md new file mode 100644 index 0000000000..073f5f96d8 --- /dev/null +++ b/community/hips/archives/helm/helm-v3/004-hooks.md @@ -0,0 +1,23 @@ +--- +title: Hook Annotations +--- + + + +In Helm 2, hook annotations could be placed on various manifests, and those +annotations would result in special treatment. + +In Helm 2, resources with hook annotations were unmanaged. In Helm 3, the owner +reference is set on those, and they will be removed when the chart is deleted. +There will be a way to override the management policy by setting an annotation +for `helm.sh/hook-policy: unmanaged` + +> [name=Taylor Thomas] Would hooks be needed anymore with the new eventing +> system? I think all we would need is something that can translate Helm v2 +> hooks into the new events behind the scenes diff --git a/community/hips/archives/helm/helm-v3/005-plugins.md b/community/hips/archives/helm/helm-v3/005-plugins.md new file mode 100644 index 0000000000..5a4a74abba --- /dev/null +++ b/community/hips/archives/helm/helm-v3/005-plugins.md @@ -0,0 +1,102 @@ +--- +title: Plugins +--- + + + +The plugin model will undergo a few changes in order to make it possible to +support a broader range of features along a broader range of platforms. Helm will also have the ability to install a pre-defined set of custom plugins via `helm init`. + +* [Plugin Format](#plugin-format) +* [Installing Plugins](#installing-plugins) + +## Plugin Format + +### Standard Plugins + +The existing plugin model (based on `exec` to local binaries) will continue to +be supported. + +The current YAML format for `plugin.yaml` will be extended as follows: + +``` +name: "last" +version: "0.1.0" +usage: "get the last release name" +description: "get the last release name" +command: "$HELM_BIN --host $TILLER_HOST list --short --max 1 --date -r" +# New part: +platformCommand: + - os: linux + arch: i386 + command: "$HELM_BIN list --short --max 1 --date -r" + - os: windows + arch: amd64 + command: "$HELM_BIN list --short --max 1 --date -r" +``` + +The `platformCommand` section defines OS/Architecture specific variations of a +command. + +The following rules will apply to processing commands: + +- If platformCommand is present, it will be searched first. +- If both OS and Arch match the current platform, search will stop and the + command will be executed +- If OS matches and there is no more specific match, the command will be executed +- If no OS/Arch match is found, the default `command` will be executed +- If no `command` is present and no matches are found in `platformCommand`, Helm + will exit with an error. + +### Lua Plugins + +The existing Helm plugin mechanism has enabled numerous extensions to Helm +(e.g., [here](https://docs.helm.sh/related/#helm-plugins) and +[here](https://github.com/search?q=topic%3Ahelm-plugin&type=Repositories)). +While this has been useful there have been two shortcomings: + +1. Many plugins are written as shell scripts assuming a POSIX environment and + familiar linux-style userland. Helm, and Kubernetes as a whole, supports + windows where these plugins don't work natively. +2. Other plugins are written in a compiled language (e.g., Go) or a general + scripting language (e.g., Python) that have system dependencies in order to + work. These can have version complications as well (e.g., a system Python of + 3 and a plugin Python need of 2.7). + +Along with Helm supporting Lua for scripting chart extensions, it will support +plugins in Lua. These plugins will only have a dependency on Helm to run and +can be ported cross platform. + +Lua plugins _are executed separately_ from chart-based Lua scripts. The pattern +used for executing Lua plugins mirrors the pattern for writing command-line +applications. A `main()` function will be executed with access to STDIN, STDOUT, +STDERR, and all command-line parameters and options. + +#### Lua Plugin Sandboxing + +Like charts, each plugin will be executed in an isolated Lua sandbox. Unlike +chart scripts, plugins will be granted access to all core libraries, and will +not require security prompts to accept. + +## Installing Plugins +A single plugin can be installed via `helm plugin install`. + +A set of plugins can also be defined in a yaml file and installed during the `helm init` process by using a flag called `--plugins ` +where `file.yaml` looks like this: +``` +plugins: +- name: helm-template + url: https://github.com/technosophos/helm-template +- name: helm-value-store + url: https://github.com/skuid/helm-value-store +- name: helm-diff + url: https://github.com/databus23/helm-diff +``` + +The `name` field primarily exists in the list of plugins to easily identify plugins in the file. It is not used for anything else and does not have a functional purpose. diff --git a/community/hips/archives/helm/helm-v3/006-repositories.md b/community/hips/archives/helm/helm-v3/006-repositories.md new file mode 100644 index 0000000000..bfc3223a35 --- /dev/null +++ b/community/hips/archives/helm/helm-v3/006-repositories.md @@ -0,0 +1,179 @@ +--- +title: Repositories +--- + + + +The following changes will be made to the repository subsystem: + +- The `helm serve` command will be removed +- A new `helm push` verb will be added for pushing charts to a repository +- The index file will be JSON instead of YAML + +> This document is in-progress and needs input from Chart Museum. + +## Pushing Charts To A Repository + +Several registries have emerged with support for Helm charts including +ChartMuseum and Quay (via Application Registries) along with extras built on +top of other systems, such as object storage (e.g., see the [S3 +Plugin](https://github.com/hypnoglow/helm-s3)). These registries are asking for +and could benefit from a capability to push packages from the Helm client. + +To support registries there will be a `helm push` command that works in a +similar manner to `helm fetch`. It will support different systems via the +URI/URL scheme and provide a default implementation for HTTP(S). Other systems, +such as S3, can implement an uploader via a plugin for schemes Helm does not +provide an implementation for. + +> [name=Matt Farina] There very well may be additional work here around +> registry search and pluggable or otherwise extendable authenication +> mechanisms. +> +> [name=Adnan Abdulhussein] What would the default HTTP(S) implementation be? +> [name=Matt Fisher] Adnan, would you mind clarifying your comment a little? +> +> [name=Adnan Abdulhussein] Sorry, the proposal mentions there will be a +> default implemention for `helm push` to a regular HTTP(S) chart repository. +> It's unclear to me how this would actually work. +> +> [name=Adnan Abdulhussein] Sounds like this is something that will be fleshed +> out more in Josh's proposal, so I'll wait for that :) + +## Repository v2 Specification + +Helm v3 will use a second version of the repository specification. For backwards +compatibility, v1 of the specification will be supported but deprecated. + +The new version of the repository specification will make the following changes +from version 1. + +First, the `apiVersion` field will be incremented to `v2`. This will signal a +breaking change. + +Second, the file format will be changed from YAML to JSON. JSON is more memory +efficient than YAML to parse. This is in part due to anchors and references in +YAML. + +Third, there will be 2 types of files. The `index.json` file will hold the top +level details about the repository. Alongside that there will be JSON files for +each chart in the repository. These chart JSON files will contain the details +about the revisions of the chart. + +The following two examples illustrate index and chart JSON files: + +```json +{ + "apiVersion": "v2", + "entries": { + "artifactory": { + "ref": "https://kubernetes-charts-incubator.storage.googleapis.com/artifactory.json", + "stable": { + "created": "2017-07-06T01:33:50.952Z", + "description": "Universal Repository Manager supporting all major packaging formats,\nbuild tools and CI servers.", + "digest": "249e27501dbfe1bd93d4039b04440f0ff19c707ba720540f391b5aefa3571455", + "home": "https://www.jfrog.com/artifactory/", + "icon": "https://raw.githubusercontent.com/JFrogDev/artifactory-dcos/master/images/jfrog_med.png", + "keywords": [ + "artifactory", + "jfrog" + ], + "maintainers": [ + { + "email": "[redacted]", + "name": "[redacted]" + } + ], + "name": "artifactory", + "sources": [ + "https://bintray.com/jfrog/product/JFrog-Artifactory-Pro/view", + "https://github.com/JFrogDev" + ], + "urls": [ + "https://kubernetes-charts-incubator.storage.googleapis.com/artifactory-5.2.0.tgz" + ], + "version": "5.2.0" + } + } + } +} +``` + +The example above is of the `index.json` file. An entry here has two properties. +The `ref` property is the location of the chart JSON file. This can be either +a relative URL path relative to the `index.json` file or an absolute path to the +file. The `stable` property contains the details about the latest stable release +of the chart. + +The example below is the `artifactory.json` file referred to in the index. The +information for each version of the is listed under versions. This is in a similar +format to the repository v1 `entries` for a single chart. The different in format +is that an object with versions as keys is used instead of an array as seen in +the v1 specification. + +```json +{ + "apiVersion": "v2", + "versions": { + "5.2.0": { + "created": "2017-07-06T01:33:50.952Z", + "description": "Universal Repository Manager supporting all major packaging formats,\nbuild tools and CI servers.", + "digest": "249e27501dbfe1bd93d4039b04440f0ff19c707ba720540f391b5aefa3571455", + "home": "https://www.jfrog.com/artifactory/", + "icon": "https://raw.githubusercontent.com/JFrogDev/artifactory-dcos/master/images/jfrog_med.png", + "keywords": [ + "artifactory", + "jfrog" + ], + "maintainers": [ + { + "email": "[redacted", + "name": "[redacted" + } + ], + "name": "artifactory", + "sources": [ + "https://bintray.com/jfrog/product/JFrog-Artifactory-Pro/view", + "https://github.com/JFrogDev" + ], + "urls": [ + "https://kubernetes-charts-incubator.storage.googleapis.com/artifactory-5.2.0.tgz" + ], + "version": "5.2.0" + }, + "5.1.0": { + "created": "2017-05-03T23:49:01.558Z", + "description": "Universal Repository Manager supporting all major packaging formats,\nbuild tools and CI servers.", + "digest": "1ce86533fca59c77e52d32138c80c332c5102557fd79f9af4afbbd7e93b9f105", + "home": "https://www.jfrog.com/artifactory/", + "icon": "https://raw.githubusercontent.com/JFrogDev/artifactory-dcos/master/images/jfrog_med.png", + "keywords": [ + "artifactory", + "jfrog" + ], + "maintainers": [ + { + "email": "[redacted", + "name": "[redacted" + } + ], + "name": "artifactory", + "sources": [ + "https://bintray.com/jfrog/product/JFrog-Artifactory-Pro/view", + "https://github.com/JFrogDev" + ], + "urls": [ + "https://kubernetes-charts-incubator.storage.googleapis.com/artifactory-5.1.0.tgz" + ], + "version": "5.1.0" + } + ... + } +} +``` diff --git a/community/hips/archives/helm/helm-v3/007-security.md b/community/hips/archives/helm/helm-v3/007-security.md new file mode 100644 index 0000000000..15676ad5f8 --- /dev/null +++ b/community/hips/archives/helm/helm-v3/007-security.md @@ -0,0 +1,24 @@ +--- +title: Security Considerations +--- + + + +This architecture for Helm is more secure than Helm 2 (and equally secure to +Helm Classic). The following security goals are met by this proposal: + +- Helm now runs with the ID and permissions of the UserAccount or + ServiceAccount executing the commands. +- RBAC can now be applied to each user +- On-the-wire security is as secure as the cluster is configured to be (e.g. if + KUBECONFIG is set up for mTLS, that's what we use) +- Auditability is now a feature of the cluster, as each chart is "created by" + the user who runs the request +- In-cluster CRDs can be secured with RBAC, too, providing access controls for + releases. diff --git a/community/hips/archives/helm/helm-v3/008-controller.md b/community/hips/archives/helm/helm-v3/008-controller.md new file mode 100644 index 0000000000..11f520a869 --- /dev/null +++ b/community/hips/archives/helm/helm-v3/008-controller.md @@ -0,0 +1,55 @@ +--- +title: "Appendix A: A Helm Controller" +--- + + + +> This section is a placeholder until a detailed proposal is written. + +This section describes a second implementation of Helm. The goal of this +implementation is to provide a controller/CRD façade for the core Helm +features. _However, defining the specifics of this controller was deemed +outside of the scope of this proposal, which focuses on the reference +implementation of the Helm CLI_. + +A client-only Helm follows a push-based model. To facilitate a pull-based +model, we can also create a Helm controller that provides a CRD facade, but +uses the Helm library. + +It is suggested that this (a) be a core Helm project, but (b) is kept +separately from the main Helm codebase. + +This controller accepts Chart and values configuration as a new `HelmRequest` +CRD, and then provides the following operations: + +- Install +- Upgrade +- Delete +- Get +- List + +Just like the client, the controller will operate on Release and release +version Secret. For that reason, the Helm CLI and the Helm CRD can be used in +conjunction, and RBACs can even be applied to lock down certain features for +one or the other. (For example, Helm CLI may be restricted to only read +functions, while the controller can perform read and write operations) + +> [name=Adnan Abdulhussein] How will the controller apply a user's RBAC +> permissions when installing a chart? Or is this not possible, and the +> controller will need to be restricted using service accounts? [name=Matt +> Fisher] It is not possible to apply a user's RBAC permissions when installing +> a chart via this model, which is why we decided to remove Tiller in Helm 3. + +This implementation will necessarily have some limitations and restrictions +that the client Helm does not; namely, it will not be able to handle large +charts because there is a 1M limit to CRD size. + +It is also assumed that the controller model may not choose to implement a +number of the client features, such as dry runs, repository management, chart +creation, etc. diff --git a/community/hips/archives/helm/helm-v3/009-package_manager.md b/community/hips/archives/helm/helm-v3/009-package_manager.md new file mode 100644 index 0000000000..f40657235d --- /dev/null +++ b/community/hips/archives/helm/helm-v3/009-package_manager.md @@ -0,0 +1,56 @@ +--- +title: "Appendix B: What Is a Package Manager?" +--- + + + +If Helm is "the package manager for Kubernetes", we need to have a common +explanation of what we mean by "package manager". + +Helm's notion of package management is informed by _operating system package +managers_ such as: + - [APT](https://www.debian.org/doc/manuals/debian-reference/ch02.en.html) + - [RPM](http://rpm.org/documentation.html) + - [Homebrew](https://docs.brew.sh/) + - [APK](https://wiki.alpinelinux.org/wiki/Alpine_Linux_package_management) + - [Portage](https://wiki.gentoo.org/wiki/Portage) + - [Snap](https://docs.snapcraft.io/core/) + +It is important to not overzealously compare Helm to programming language +library package managers, as such systems have a fundamentally different goal. + +Package managers such as Apt, Homebrew, and RPM provide the following services: + +- They define a package format +- They define a package repository architecture +- They define a security model (signing, verification, etc) +- They specify a programming langugage (or languages) to be used for management + logic (e.g. shell scripts, Ruby) +- They manage the installation, upgrade, and deletion of a package +- They provide dependency resolution features and version management +- They expose configuration options that the user may override +- They start services (e.g. when installing a database, the database is + started) and often provide tooling for administrators to manage those + services (e.g. systemd/upstart/sysV init scripts) +- They provide tools to search, list, and discover packages +- They implement (or make it easy to implement) environment-specific (os, + processor, distro) optimizations +- They provide an opinion as to how to best construct and maintain packages +- They surface documentation (typically via output during installation) + +Package managers tend to involve all of these because it is important in +package management to keep external dependencies to a minimum. + +Consequently, if Helm is to fit into such a paradigm, it is natural that Helm +will provide at least most, if not all of these. + +Helm is not a configuration management tool (such as Chef or Puppet). Helm does +provide certain features of such systems, though. Helm's templating and +configuration model is a common feature of configuration managers (and also of +package managers). diff --git a/community/hips/archives/helm/helm-v3/010-removed.md b/community/hips/archives/helm/helm-v3/010-removed.md new file mode 100644 index 0000000000..9c96f19c8b --- /dev/null +++ b/community/hips/archives/helm/helm-v3/010-removed.md @@ -0,0 +1,43 @@ +--- +title: "Appendx C: Removed Sections" +--- + + + +The following parts of the proposal have been removed. + +## Overlays + +An earlier draft included a provision for overlaying templates within charts. This section +was removed once we realized that the same thing can be easily accomplished using +the `post-render` event and some trivial Lua. + +This appendix will be removed before the final proposal. + +## Chart.yaml refactored as Kubernetes resource + +An earlier draft proposed formatting Chart.yaml as a Kubernetes resource. However, +it became evident that there was no intention of installing the Chart.yaml into +the cluster, at which point it did not make sense to retain that functionality. + +## Application CRD + +Earlier drafts contained information about implementing the Application CRD +proposal as a feature of Helm. + +While there is a plan to support Application CRD in Helm, it will not be a +required feature of Helm. For that reason, it has been removed from the proposal. + +## Alternatives to Lua extensions + +The following alternatives were proposed: + +- Implement lifecycle event handlers as containers in-cluster +- Reimplement Helm in Python|Ruby|TypeScript|JavaScript +- Extend Plugins to be event handlers diff --git a/community/hips/archives/helm/helm-v3/011-user_stories.md b/community/hips/archives/helm/helm-v3/011-user_stories.md new file mode 100644 index 0000000000..6b92bf79cb --- /dev/null +++ b/community/hips/archives/helm/helm-v3/011-user_stories.md @@ -0,0 +1,49 @@ +--- +title: Helm v3 User Stories +--- + + + +This document lists [user stories](https://en.wikipedia.org/wiki/User_story) for the development of Helm's 3rd major version. The user stories here are not a complete set for Helm but those that build upon Helm 2. The stories are grouped by role as defined in the [User profiles](../../../../user-profiles.md). + +## 1. Application Operator + +1. As an application operator, I want to be able to pull charts from within the cluster so that I can manage multiple clusters without exposing details to the CI system +1. As an application operator, I want to be able to pull charts, so that my dev team can bootstrap local envs easily (e.g. w/Minikube or Docker) +1. In order to have a secure system as an application operator, I want Helm to install/upgrade/delete based on the user’s credentials +1. In order to have a secure system as an application operator, I want to be able to see who ran a particular install or other operation +1. In order to have a secure system as an application operator, I want out-of-the-box “easy security” +1. In order to have a secure system as an application operator, I want RBACs done for me +1. In order to have a secure system as an application operator, I want to audit what charts have been deployed +1. In order to have a secure system as an application operator, I want a pull model so that I can manage multiple private clusters from one authoritative source +1. In order to have a secure system as an application operator, I want to enable RBAC on an in-cluster controller so that I can prevent external changes from happening +1. In order to easily get started as an application operator, I want to easily install and use Helm + +## 2. Application Distributor + +1. As an application distributor, I want to develop charts using a template engine of my choice (e.g., Jinja, KSonnet, JSonnet) +1. In order to have reusability as an application distributor, I want to use common libraries to build charts +1. As an application distributor, I want to be able to override chart templates (e.g., those in dependency charts) +1. As an application distributor, I want to intercept rendered YAML/JSON and do last-mile modifications (e.g. insert or remove) +1. As an application distributor, I want lifecycle hooks for pre- and post-render operations +1. As an application distributor, I want to be able to do simple variable substitution in values.yaml (and reference in --set) + +## 3. Application Developer + +1. As a application developer, I want to automatically pull charts so that my local env looks like production + +## 4. Supporting Tool Developer + +1. As a supporting tool developer, I want to interact with Helm without using gRPC. +1. As a supporting tool developer, I want to write plugins that intercept hooks +1. As a supporting tool developer, I want to be able to write alternate back-ends (for deploying) + +## 5. Helm Developer + +1. TBD diff --git a/community/hips/archives/helm/helm-v3/012-chart-dev-stories.md b/community/hips/archives/helm/helm-v3/012-chart-dev-stories.md new file mode 100644 index 0000000000..58b269ff44 --- /dev/null +++ b/community/hips/archives/helm/helm-v3/012-chart-dev-stories.md @@ -0,0 +1,138 @@ +--- +title: Chart v3 User Stories +--- + + + +This document contains user stories for Helm3 Charts. User stories provide guidance, +but are not necessarily a list of requirements. + +All stories in this document are implicitly prefaced with "As a Chart Developer..." +and are of the form "As a _ROLE_ I want _TASK_ so that _GOAL_. + + +## General + +- I want to re-use Helm 2 charts so that I don't have to rebuild the same thing +- I want to create charts the Helm 2 way so that I can continue developing + the way I have been +- I do not want to have to understand all the details of every + subchart I use so that I can compose complex applications quickly + +## Extensions/Lua + +These all assume a Lua engine, and describe things to be done in Lua scripts. See the current [events](002-events.md) and [chart structure](001-charts.md) proposals + +### Values + +- I want programmatic access to subchart values so that I can access defaults +- I want access to modify subchart values so that I can explicitly set a value + for a subchart +- I want late access to a subchart's values so that I can discover any values + that a subchart's scripts computed +- I want to use Lua to validate values before templates are rendered so that I + can alert users to unexpected values before install fails +- I want to use Lua to modify values in subcharts programmatically so that I can + expose a top-level set of values and computer subchart values +- I want to use Lua to alter subchart values so that I can read the values of one + subchart and rewrite the values in another subchart (e.g. configuring a proxy + based on the settings for a database or web server) +- I want to be able to intercept values in a top-level chart before _and_ after a + subchart's event handler executes so that I can pre-seed data, let the subchart + calculate results, and then retrieve and use those results. (e.g. SSL certificate + generation) + +### Templates +- I want to define template functions in Lua so that I can easily write custom + template functions +- I want to render templates using a different template engine so that I can + use my preferred template engine + * Option A: Template engine implemented in pure Lua + * Option B: Template engine invoked via `exec` call +- I want to intercept a template before it is rendered and be able to alter it so + that I can dynamically replace parts of a template (example: regexp replace + one template function/include with another) +- I want to replace a template in a subchart before it is rendred so that I can + rewrite part of a chart dynamically + +### Rendered Manifests + +- I want to modify a generated manifest so that I can insert additional + information (e.g. Istio sidecar) +- I want to delete a generated manifest prior to it being loaded so that I can + prevent an object from being created (e.g. subchart creates a manifest I don't + want) +- I want to add a new manifest post-render so that I can create an object based + on the results of a render process (e.g. RBAC generation, service generation, + storage class generation) + +### Feature Discovery + +- I want to query Kubernetes to see if a CRD exists so that I can decide whether + to include a CRD definition +- I want to query whether a cluster supports RBAC so that I can decide whether + to add RBAC rules +- I want to query for StorageClass so that I can pick an appropriate one for my + PVC +- I want to look up DNS address (e.g. service discovery) so that I can find an + endpoint, IP, or URL before installing/upgrading + +### Events + +- I want to declare a function that responds to an event (e.g. "render") so that + I can modify a chart/values at a particular point in the lifecycle +- I want to allow subcharts to run their event handlers by default so that I don't + have to read all of the subcharts to know what they do +- I want to be able to turn off a subchart's lifecycle event by name so that I can + disable a particular event handler +- I want to turn off all event handlers for a chart so that I can prevent it from + intercepting any events +- I want to have an opportunity to initialize my chart's code every time it is loaded + so that my chart can be initialized into a known state consistently +- I want to be able to perform installation-specific actions before an install so + that I can do custom install logic +- I want to be able to perform post-installation actions so that I can set up an + application (or notify the user about an installation) after the app has been + submitted to Kubernetes +- I want to be able to do upgrade-specific logic before the upgrade has been submitted + to Kubernetes +- I want to be able to do post-upgrade logic so that I can set up an app or + notify a user +- I want to do custom logic before an app is deleted so that I can prepare for + a deletion +- I want to do custom logic after a deletion so that I can ensure that a teardown + is successful (e.g. if no other apps are using a namespace, delete teh namespace; + if no other apps are using a CRD, delete the CRD definition...) +- I want to be able to declare custom logic that determines whether an installed + or upgrade application is considered _ready_. +- I want to be able to perform specific logic when an application is considered + ready. + +### Lua Libraries and Access + +- I want to be able to break my Lua script into multiple files so that I can organize + my code +- I want to be able to import code from subcharts so that I can re-use existing + code +- I want to import existing pure Lua libraries that are stored in charts +- I want to use standard Lua libraries that do not have access to network or + filesystem +- I want to optionally use network and filesystem libraries if approved by the + user so that I can perform IO within a chart + +## Library Charts + +- I want to use charts as template definition libraries so that I can re-use + common template code +- I want to use charts as containers for Lua libraries so that I can re-use + Lua code + +## Additional Considerations + +- There are charts like OpenStack that have dozens of subcharts (and sub-subcharts) diff --git a/community/hips/archives/helm/helm-v3/research/package-manager-ux.md b/community/hips/archives/helm/helm-v3/research/package-manager-ux.md new file mode 100644 index 0000000000..4274b16011 --- /dev/null +++ b/community/hips/archives/helm/helm-v3/research/package-manager-ux.md @@ -0,0 +1,157 @@ +--- +title: Package Manager UX +--- + + + +This document is for usability research on the UX and interaction interface for other package managers. + +(This re-creates some of the work done during the Helm 1 and Helm 2 planning cycles.) + +## A Goal of Helm: Follow Existing Patterns + +To reduce the cognitive overhead of Helm, one of Helm's UX goals is to follow the patterns set down by other package managers. + +Matching the UX of `kubectl` is of secondary importance. + +In practice, this plays out as follows: + +- When considering Helm's package managemet operations, Helm _should_ follow the patterns and practices of other package management tools. +- When working with Kubernetes-specific concepts (such as namespaces, pods, tunnels, etc.), Helm _should_ follow the patterns and practices of `kubectl` or other popular Kubernetes tools. +- In more general circumstances, Helm _should_ follow the _de facto_ patterns found in contemporary Linux/UNIX tooling. + +Helm _should not_ follow the Plan9/Go patterns that are not broadly implemented in UNIX/Linux (e.g. `-long`). That Helm is implemented in Go does not _ipso facto_ mean that Helm must follow the opinions of a very small group of developers over the opinions of the vastly larger UNIX community. + +## Package Managers and Their Characteristics + +The following table represents a summary of command line tooling for popular package managers. Package managers considered came in one of two types: _OS_ types install application/tool packages onto operating systems. _Lang_ types install language-specific packages (lirbaries, tools) into appropriate environments. + +| Tool | Type | Cmd | Install | Upgrade | Delete | Create | Repo Update | Search | About Pkg | +| ---- | ---- | ------ | ------- | ------- | ------ | ------ | ----------- | ------ | --------- | +| apt-get | OS | y | install | upgrade | remove | - | update | apt-cache search | apt-cache show | +| yum | OS | y | install | update/upgrade | remove/erase | - | - | search | info | +| brew | OS | y | install | upgrade | uninstall | create | update | search | info | +| pacman | OS | n | --sync | --upgrade | --remove | - | --refresh | --query | --query | +| emerge | OS | n | - | - | --unmerge | - | --sync | --search | --search | +| choco | OS | y | install | upgrade | uninstall | new | ~update~ | search | info | +| npm | Lang | y | install | update/upgrade | uninstall/rm | init/create | - | search | view/info/show | +| pod | Lang | y | install | update | - | spec create | - | search | search | +| pip | Lang | y | install | install -U | uninstall | - | - | search | show | +| composer | Lang | y | install | update | remove | init | - | search | show | +| kubectl | - | y | create | apply | delete | create | - | - | - | +| helm 2 | CN | y | install | upgrade | delete | create | update | search | inspect | + +Note that `kubectl` is included for reference, though it is _not_ a package manager, and is not weighed into the results below. + +Other package managers looked at, but not deemed popular enough to be considered influencers: Mix (erlang), Cargo (Rust), Dep (Go), Glide (Go), GoFish (OS), CPAN (perl), Yarn (JavaScript), APK (Alpine Linux). Other than CPAN, we saw no major divergence from the table above (though we saw a few cases where `add` was used instead of `install`). + +### Apt + +- Apt uses multiple tools. `apt-get` and `apt-cache` are the most frequently used. +- Apt does not layer subcomments. There are only direct subcommands and flags +- Create new packages with other tools + +### Yum + +- Yum layers subcommands, but without a consistent pattern: + - `yum clean headers` (NOUN VERB NOUN) + - `yum version groupinfo` (NOUN NOUN NOUN) + - `yum groups install` (NOUN NOUN VERB) +- Yum syncs with remote repositories based on local configuration +- Create new packages with RPM commands + +### Brew + +No notes + +### Pacman + +Arch Linux uses `pacman`, which uses options such as `--refresh` and `--sysupgrade` to change the behavior of its core commands (which are also specified as options). + +Commands in `pacman` are usually given as short options (where capital letters represent the commands): for example, to perform a system upgrade, one will usually run `pacman -Syu`, which is short for `pacman --sync --refresh --sysupgrade`. (To only refresh the package database, one instead runs `pacman -Fy`, short for `pacman --files --refresh`.) + +- `pacman` updates from remote repos as needed (when specified to do so by the user, usually as part of a `--sync` installation/upgrade operation). +- Search is multi-modal, being able to describe packages as well as listing them + +### Emerge (Portage) + +- Create new packages with `ebuild` +- `emerge PKG` handles install and upgrade. In other words, installation is the default action + +### choco (Chocolatey) + +- The `update` command is deprecated, and future version will sync differently + +### NPM + +- Fun fact: `npm isntall` is an alias for `npm install`, as is `npm add` and `npm i`. +- Update, upgrade, and up are aliases +- Uninstall, remove, rm, and un are aliases +- view, info, and show are aliases + +### pod (cocoapods) + +- Supports subcommands, usually as NOUN NOUN VERB (`pod spec create`), but occasionally NOUN NOUN NOUN (`pod trunk info`) +- I cannot find docs on how to remove a pod + +### pip + +- A few commands have subcommands in the form NOUN NOUN VERB (`pip config get`) + +### Composer + +Composer is the PHP package manager. + +- `composer` has only one level of commands, but uses flags for subcommands (`composer config --list`). +- The exception to the above, though, is the `compoers global` command, which is NOUN NOUN VERB or NOUN NOUN NOUN. + +### kubectl + +`kubectl` is not a package manager, but has subcommands that are similar to package managers + +- `create` combines generation and installation +- Upgrading can be done several different ways, each with a separate verb: `apply`, `edit`, `patch`, `convert`, and `replace` +- There is no standard pattern to `kubectl`'s subcommands: + - `kubectl get` (NOUN VERB) + - `kubectl logs` (NOUN NOUN) + - `kubectl config view` (NOUN NOUN VERB) + - `kubectl config current-context` (NOUN NOUN NOUN) +- NOTE: It is claimed that `kubectl` uses NOUN VERB NOUN (`kubectl get pod foo`), but this is a misunderstanding: the kind argument is not a command component. It's an argument that depends on what kinds are installed. + +## Analysis of Results + +Commonalities between package managers: + +- All of the tools except for `emerge` made install/upgrade/delete top level commands. (emerge is simpler; install is the default if no command is specified). +- Many of these tools also had subcommands as well (e.g. `pod`, `composer`, `yum`), but did not choose to fold all commands into a particular pattern. + - For subcommands, the `NOUN NOUN VERB` pattern was the most common, but definitely not the only option. + - The only discernable pattern used for seperating top level and multi-level commands is: "popular operations are top level" + - Not all the commands on top-level dealt with the same concepts (e.g. one command may operate on packages, while another operates on files). +- Aliases are supported in a few tools +- `upgrade` is general preferred over `update` for describing the process of installing a newer version of an existing package +- For package managers that support synchronizing a local cache with a remote auhtority, `update` is the preferred term, in spite of its ambiguity. +- For the package managers that support scaffolding out new packages, `create` is the most widely used term. +- `show` and `info` are about equal in representation for showing package information. `inspect`, which Helm uses, is not represented in any other package manager. +- For deleting a package, `remove` is the most common term, followed closely by `uninstall`. +- None of the examined systems had more than three layers of commands: `CMD SUBCMD SUBCMD`. + +## Recommendations for Helm 3 + +The following commands should be changed (with the old name aliased to the new name): + +- `helm delete` should be renamed `helm remove` +- `helm inspect` should be renamed `helm show` + +While there is little to draw from, it might be prudent to rename `helm fetch` to `helm download`. + +After analyzing other package managers, it does not appear that grouping commands into "logical subgroups" is an appropriate action. No other tools that we could find do this. Subgroup usage is _ad hoc_. The convention Helm 2 used (subgroups for less popular commands) _appears_ to be the convention used industry-wide. + +No other changes are necessary for Helm to fit in with the common idioms found in package managers. + +_Note:_ The Helm 2 `reset` command is no longer present in Helm 3. Earlier discussions about renaming it are no longer relevant. diff --git a/community/hips/archives/monocular/1.0-improvements.md b/community/hips/archives/monocular/1.0-improvements.md new file mode 100644 index 0000000000..71403ef271 --- /dev/null +++ b/community/hips/archives/monocular/1.0-improvements.md @@ -0,0 +1,50 @@ +--- +title: "Proposal: Monocular 1.0 - improvements and redefining project focus" +--- + + + +Monocular was created to provide a simple interface to browse and discover charts in the stable and incubator community repositories, and a running instance of Monocular is setup at hub.kubeapps.com (originally kubeapps.com). + +As the Charts project moves to a [more distributed repository model](/community/hips/archives/helm/distributed-search), an instance of Monocular will be available at hub.helm.sh to serve as a home for community-contributed charts from multiple repositories. + +The current codebase has outgrown the initial requirements for the Monocular project, and this proposal is about making Monocular more robust and scalable, and redefining the focus of the project to suit the needs of the CNCF Helm Hub. + +## Replacing the Monocular API server + +The current Monocular API server is a monolithic Go-based server which handles the periodic syncing and ingestion of charts, and serves a REST API to read chart data, manage configured repositories and handle in-cluster chart installations and management. This architecture has shown issues with scalability and flexibility that can be improved by splitting services out into separate components. + +The [Kubeapps project](https://github.com/kubeapps/kubeapps) includes components that will be contributed back to Monocular to achieve this. + +### Storing chart metadata in a database + +In the current Monocular implementation, chart metadata is cached in memory. This has the requirement for repository syncing to be part of the API server process and also presents issues when scaling out the API server as each process holds an independent cache of the chart metadata. + +This will be changed to storing chart metadata in a database, so that each API server instance can retrieve the chart metadata from the same consistent store. MongoDB will be used to store the chart metadata as the NoSQL model makes it easy to dump chart metadata directly from repository indexes. + +### Chartsvc + +[Chartsvc](https://github.com/kubeapps/kubeapps/tree/master/cmd/chartsvc) is a small Go API server built to read and serve chart information from a MongoDB database. This service will replace the existing API server for fetching metadata about charts. + +### Syncing chart repositories + +One of the biggest scalability issues in Monocular today is the implementation for syncing chart repositories in the API server. Since the syncing is tied to the running of the API server, it is difficult to manage and debug when something goes wrong during the sync process. Bugs and issues can lead to the API server crashing. It is also not possible to manually trigger a repository sync. + +The [chart-repo](https://github.com/kubeapps/kubeapps/tree/master/cmd/chart-repo) tool can be run as a background job to populate a MongoDB database with chart metadata from a particular chart repository. Each configured chart repository will have a separate background job run periodically to sync the chart metadata. + +[The AppRepository Kubernetes CRD and controller](https://github.com/kubeapps/kubeapps/tree/master/cmd/apprepository-controller) will be used to manage the configured chart repositories and create [Kubernetes CronJobs and Jobs](https://kubernetes.io/docs/concepts/workloads/controllers/cron-jobs/) to orchestrate the background jobs to run the chart-repo tool described above. This will make Kubernetes the default environment for operating Monocular, though it is possible to replace this component to orchestrate the background jobs in other ways on other platforms. + + +## Removing in-cluster support + +Monocular currently includes a basic implementation of in-cluster application management. If Monocular is deployed within a Kubernetes cluster, a feature flag can be enabled to allow the installation of charts directly through the UI. + +Providing a good solution for deploying and managing apps in-cluster is an orthogonal user experience to a public search and discovery site. There is other tooling that can support this usecase better (e.g. Helm CLI, [Kubeapps](https://github.com/kubeapps/kubeapps), [RedHat Automation Broker](https://blog.openshift.com/automation-broker-discovering-helm-charts/)). + +To focus on the CNCF Helm Hub user experience, support for in-cluster features will be dropped. A v0.7 (the current Monocular version) branch will be created prior to these changes so that this functionality can be used and supported for some time until users have fully migrated to another tool. diff --git a/community/hips/hip-0001.md b/community/hips/hip-0001.md new file mode 100644 index 0000000000..4e3125d5a6 --- /dev/null +++ b/community/hips/hip-0001.md @@ -0,0 +1,436 @@ +--- +title: Writing a HIP +sidebar_label: "0001: Writing a HIP" +--- + + + +| **HIP** | **Title** | **Author(s)** | **Created** | **Type** | **Status** | +|---|---|---|---|---|---| +| 0001 | Writing a HIP | Matthew Fisher | 2020-08-13 | process | accepted | + + +## Abstract + +A HIP is a Helm Improvement Proposal. It is a design document providing +information to the Helm community, or describing a new feature for a Helm +project or its processes or environment. The proposal should provide a concise +technical specification of the feature and a rationale for the feature. + +We intend HIPs to be the primary mechanisms for proposing major new features, +for collecting community input on an issue, and for documenting the design +decisions that have gone into the project. The proposal author is responsible +for building consensus within the community and documenting dissenting opinions. + +The system is heavily influenced by Python's Enhancement Proposal (PEP) system, +hence the name. Given that Helm is a much (MUCH) smaller project than Python, +there are a few changes in the HIP workflow to make it a looser format for +proposals, most notably the lack of proposal "editors", a BDFL, and a much +smaller review & resolution cycle. + +Because the proposals are maintained as markdown files in a versioned +repository, their revision history is the historical record of the proposal. + +## Audience + +The typical primary audience for proposals are the project maintainers for each +Helm project, as well as the Helm project's org maintainers. + +However, other parts of the Helm community may also choose to use the process +(particularly for informational proposals) to document expected conventions and +to manage complex design coordination problems that require collaboration across +multiple projects. + +## HIP types + +There are three kinds of proposals: + +1. A **feature** proposal describes a new feature or implementation for the Helm + project. It may also describe an interoperability standard that will be + supported by the Helm project. +1. An **informational** proposal describes a Helm design issue, or provides + general guidelines or information to the Helm community, but does not propose + a new feature. Informational proposals do not necessarily represent a Helm + community consensus or recommendation, so users and implementers are free to + ignore informational proposals or follow their advice. +1. A **process** proposal describes a process surrounding the Helm project, or + proposes a change to (or an event in) a process. Process proposals are like + feature proposals, but apply to areas other than the Helm project itself. + They may propose an implementation, but not to Helm's codebase; they often + require community consensus. Unlike informational proposals, they are more + than recommendations, and users are typically not free to ignore them. + Examples include procedures, guidelines, changes to the decision-making + process, and changes to the tools or environment used in Helm development. + +## HIP workflow + +### Start with an idea + +The proposal process begins with a new idea for the Helm project. It is highly +recommended that a single proposal contain a single key proposal or new idea. +Small enhancements or patches often don't need a proposal and can be injected +into a project's development workflow with a patch submission to the project's +issue tracker. The more focused the proposal, the more successful it tends to +be. As per Helm's governance, the project maintainers reserve the right to +reject proposals if they appear too unfocused, too broad, or incomplete. If in +doubt, split your proposal into several well-focused ones, or explain your +proposal more clearly. + +Each proposal must have a champion -- someone who writes the proposal using the +style and format described below, shepherds the discussions in the appropriate +communication channels, and attempts to build community consensus around the +idea. The proposal champion (a.k.a. author) should first attempt to ascertain +whether the idea is proposal-able. Posting to the [cncf-helm][] mailing list is +the best way to go about this. + +Vetting an idea publicly before going as far as writing a proposal is meant to +save the potential author time. Many ideas have been brought forward for +changing Helm that have been rejected for various reasons. Asking the Helm +community first if an idea is original helps prevent wasting time on something +that is guaranteed to be rejected based on prior discussions (searching the +internet does not always do the trick). It also helps to make sure the idea is +**applicable to the entire community and not just the author**. Just because an +idea sounds good to the author does not mean it will work for most Helm users in +most areas where Helm is used. + +Once the champion has asked the Helm community as to whether an idea has any +chance of acceptance, a summary of the proposal should be presented to +[cncf-helm][]. This gives the author a chance to flesh out the proposal as a +high quality, well-formatted proposal, and to address initial concerns about the +proposal. + +### Submitting a HIP + +Following a discussion on [cncf-helm][], the proposal should be submitted as a +proposal via a [GitHub pull request][pr]. The proposal must be written in +proposal style as described below, else it will fail review immediately +(although minor errors may be corrected by the maintainers). + +The standard HIP workflow is: + +- You, as the proposal author, fork the helm/community repository and create a + new proposal +- Proposals are written in [Markdown][markdown] +- Push your proposal to your GitHub fork and [submit a pull request][pr]. + +Once the review process is complete, the reviewers will approve the proposal by +commenting on the proposal with a "Looks good to me" ("LGTM" for short) and +merge the proposal. (note that this is not the same as accepting your proposal!) + +The reviewers will not unreasonably deny a proposal. Reasons for denying +proposal status include duplication of effort, being technically unsound, not +providing proper motivation, not addressing backwards compatibility, or not in +keeping with Helm's design. The core maintainers can be consulted during the +approval phase. + +Once approved, proposal authors are responsible for collecting community +feedback on a proposal before submitting a feature that satisfies the proposal +for review. However, wherever possible, long open-ended discussions on public +mailing lists should be avoided. Strategies to keep the discussions efficient +include: setting up a separate meetings for the topic, having the proposal +author accept private comments in the early design phases, setting up a wiki +page, etc. proposal authors should use their discretion here. + +## What belongs in a successful HIP + +Each HIP should include the following parts: + +1. Preamble - YAML style headers containing metadata about the proposal, + including the proposal number, a short descriptive title, the author names, + its current status, etc. +1. Abstract - a short (~200 word) description of the technical issue being + addressed. +1. Specification - The technical specification should describe the syntax and + semantics of any new feature. If the proposal describes a standard, the + specification should be detailed enough to describe how other community + members may re-implement the standard in their product. +1. Motivation - The motivation is critical for proposals that want to change + Helm in a significant way. It should clearly explain why existing features + are inadequate to address the problem that the proposal solves, as well as + who and what profiles/roles are impacted by this proposal. Proposal + submissions without sufficient motivation may be rejected outright. +1. Rationale - The rationale fleshes out the specification by describing what + motivated the design and why particular design decisions were made. It should + describe alternate designs that were considered and related work, e.g. how + the feature is supported in other projects. +1. Backwards Compatibility - Helm projects follow [Semantic Versioning][semver]. + Therefore, all proposals that introduce backwards incompatibilities must + include a section describing these incompatibilities and their severity. The + proposal must explain how the author proposes to deal with these + incompatibilities. Proposal submissions without a sufficient backwards + compatibility treatise may be rejected outright. +1. Reference Implementation - The reference implementation must be completed + before any proposal is given status "final", but it need not be completed + before the proposal is accepted. While there is merit to the approach of + reaching consensus on the specification and rationale before writing code, + the principle of "rough consensus and running code" is still useful when it + comes to resolving many discussions of API details. + +The final implementation must include test code and documentation appropriate +for the Helm project's reference or the community at large. + +### Preamble + +Each proposal must begin with a [YAML][yaml] style header preamble. The headers +must appear in the following order: + +Headers marked with "*" are optional and are described below. All other headers +are required. + +```yaml +--- +hip: +title: "" +authors: [ "" ] +created: "2020-08-13" +type: "" +status: "" +* helm-version: "" +* requires: [ ] +* replaces: +* superseded-by: +--- +``` + +The `authors` header lists the names, and optionally the email addresses of all +the authors/owners of the proposal. The format of the author header value must +be + +```yaml +authors: [ "John Doe ", "Jane Doe " ] +``` + +If the email address is included, and + +```yaml +authors: [ "John Doe", "Jane Doe" ] +``` + +If the address is not given. + +The `created` header records the date that the proposal was published to the +Helm project on Github. The header should be in [RFC 3339][rfc3339] format, e.g. +2020-08-13. + +Proposals will typically have a `helm-version` header which indicates the +version of Helm that the feature will be released with. Proposals without a +`helm-version` header indicate interoperability standards that will initially be +supported through external libraries and tools, and then supplemented by a later +proposal to add support to the project's client library or Command Line +Interface. Informational and process proposals do not need a `helm-version` +header, and this header can be added after the implementation has been shipped +and the proposal is marked as "final". + +Proposals may have a `requires` header, indicating the proposal numbers that +this proposal ends on. + +The `type` header specifies the type of proposal: feature, informational, or +process. + +The `status` header specifies which state the proposal is in. A proposal always +begins in "draft" status, and the other statuses are explained below. + +Proposals with the `superseded` status may also have a `superseded-by` header +indicating that a proposal has been rendered obsolete by a later document; the +value is the number of the proposal that replaces the current document. The +newer proposal must have a `replaces` header containing the number of the +proposal that it rendered obsolete. + +### Auxiliary files + +proposals may include auxiliary files such as diagrams. Such files must be named +proposal-XXX-YY.ext, where "XXX" is the proposal number, "YY" is a serial number +(starting at 01), and "ext" is replaced by the actual file extension (e.g. +"png"). + +## Sample template + +If you intend to submit a HIP, it is highly recommended to use this template to +ensure that your HIP submission won't be automatically rejected because of form. + +### How to use this template + +To use this template you must first decide whether your HIP is going to be an +informational, process, or feature HIP. Most HIPs are of type "feature" because +they propose a new feature for the Helm project or client library. + +Once you've decided which type of HIP yours is going to be, make a copy of this +file and perform the following edits: + +- Do NOT change the `hip: 9999` header since you don't yet have a HIP number + assigned... Yet. This is to prevent merge conflicts with other HIPs. +- Change the `title` header to the title of your HIP. +- Change the `authors` header to include your name(s), and optionally your email + address(es). Be sure to follow the format carefully: your name must appear + first, and it must not be contained in parentheses. Your email address may + appear second (or it can be omitted) and if it appears, it must appear in + angle brackets. It is okay to obfuscate your email address. +- Change the `created` header to the current date, following [RFC 3339][rfc3339] + format. +- For feature HIPs, change the `type` header to "feature". +- For informational HIPs, change the `type` header to "informational". +- For process HIPs, change the `type` header to "process". +- Do NOT change the `status` header from `draft`. +- For feature HIPs, if your feature depends on the acceptance of some other + currently in-development HIP, add a `requires` header right after the `status` + header. The value should be the HIP number of the HIP yours depends on. Don't + add this header if your dependent feature is described in a "final" HIP. +- Add a `replaces` header if your HIP obsoletes an earlier HIP. The value of + this header is the number of the HIP that your new HIP is replacing. Only add + this header if the older HIP is in "final" form, i.e. is either accepted, + final, or rejected. You aren't replacing an older open HIP if you're + submitting a competing idea. +- Now write your abstract, rationale, and other content for your HIP, replacing + all this gobbledygook with your own text. +- Update your references section. + +```markdown +--- +hip: 9999 +title: "" +authors: [ "" ] +created: "2020-08-13" +type: "feature" +status: "draft" +--- + +## Abstract + +A short (~200 word) description of the technical issue being addressed. + +## Motivation + +Clearly explain why the existing design is inadequate to address the problem +that the HIP solves. + +## Rationale + +Describe why particular design decisions were made. + +## Specification + +Describe the syntax and semantics of any new feature. + +## Backwards compatibility + +Describe potential impact and severity on pre-existing code. + +## Security implications + +How could a malicious user take advantage of this new feature? + +## How to teach this + +How to teach users, new and experienced, how to apply the HIP to their work. + +## Reference implementation + +Link to any existing implementation and details about its state, e.g. +proof-of-concept. + +## Rejected ideas + +Why certain ideas that were brought while discussing this HIP were not +ultimately pursued. + +## Open issues + +Any points that are still being decided/discussed. + +## References + +A collection of URLs or materials used as references through the HIP. +``` + +## Proposal review & resolution + +Once the authors have completed a proposal, they may request a review for style +and consistency from the project maintainers. + +The final authority for proposal approval is the project maintainers responsible +for the project the proposal is aimed at. However, whenever a new proposal is +put forward, any project maintainer that believes they are suitably experienced +to make the final decision on that proposal may offer to review the proposal, +and they will have the authority to approve (or reject) that proposal. +Individuals taking on this responsibility are free to seek additional guidance +from other project maintainers at any time, and are also expected to take the +advice and perspectives of other project maintainers into account. + +Such self-nominations are accepted by default, but may be explicitly declined by +the project or org maintainers. Possible reasons for the maintainers declining +another maintainer's review include, but are not limited to, perceptions of a +potential conflict of interest (e.g. working for the same organisation as the +proposal submitter), or simply considering another potential maintainer to be +more appropriate. If project maintainers (or other community members) have +concerns regarding the suitability of a reviewer for any given proposal, they +may ask the org maintainers to review the case. + +To allow gathering of additional design and interface feedback before committing +to long term stability for a feature or client library API, a HIP may also be +marked as "provisional". This is short for "provisionally accepted", and +indicates that the proposal has been accepted for inclusion in the reference +implementation, but additional user feedback is needed before the full design +can be considered "final". Unlike regular accepted proposals, provisionally +accepted proposals may still be rejected **even after the related changes have +been included in a project's release**. + +Wherever possible, it is considered preferable to reduce the scope of a proposal +to avoid the need to rely on the "provisional" status (e.g. by deferring some +features to later proposals), as this status can lead to version compatibility +challenges in the wider Helm ecosystem. + +A proposal can also be assigned the status "deferred". The proposal author or a +maintainer can assign the proposal this status when no progress is being made on +the proposal. Once a proposal is deferred, a maintainer can re-assign it to +draft status. + +A proposal can also be "rejected". Perhaps after all is said and done it was not +a good idea. It is still important to have a record of this fact. + +Feature and Informational proposals require at least 2 approvals from project +maintainers. Process proposals require at least 2 approvals from Helm org +maintainers. + +When a proposal is accepted or rejected, the proposal should be updated +accordingly by updating the `status` field, and a link to any relevant +information should be provided in the introduction. + +## What to do after a proposal has been approved + +Once a proposal has been approved, the reference implementation must be +completed. When the reference implementation is complete and incorporated into +the project's source code repository, the status will be marked as "final". + +## Transferring proposal ownership + +It occasionally becomes necessary to transfer ownership of proposals to a new +champion. In general, it is preferable to retain the original author as a +co-author of the transferred proposal, but that's really up to the original +author. A good reason to transfer ownership is because the original author no +longer has the time or interest in updating it or following through with the +proposal process, or has fallen off the face of the earth (i.e. is unreachable +or not responding to email). A bad reason to transfer ownership is because the +author doesn't agree with the direction of the proposal. One aim of the proposal +process is to try to build consensus around a proposal, but if that's not +possible, an author can always submit a competing proposal. + +If you are interested in assuming ownership of a proposal, you can also do this +via pull request. Fork the helm/community repository, make your ownership +modification, and submit a pull request. You should also send a message asking +to take over, addressed to both the original author and the org maintainers +(`@helm/org-maintainers`). If the original author doesn't respond to email in a +timely manner, the org maintainers will make a unilateral decision (it's not +like these decisions can't be reversed). + +[cncf-helm]: mailto:cncf-helm@lists.cncf.io +[markdown]: https://spec.commonmark.org/ +[pr]: https://github.com/helm/community/pulls +[rfc3339]: https://tools.ietf.org/html/rfc3339 +[semver]: https://semver.org/spec/v2.0.0.html +[yaml]: https://yaml.org/ diff --git a/community/hips/hip-0002.md b/community/hips/hip-0002.md new file mode 100644 index 0000000000..740c6f2607 --- /dev/null +++ b/community/hips/hip-0002.md @@ -0,0 +1,85 @@ +--- +title: Pre-defined release dates for Helm +sidebar_label: "0002: Pre-defined release dates for Helm" +--- + + + +| **HIP** | **Title** | **Author(s)** | **Created** | **Type** | **Status** | +|---|---|---|---|---|---| +| 0002 | Pre-defined release dates for Helm | Marc Khouzam | 2020-09-04 | process | accepted | + + +## Abstract + +Have well-known cyclical release dates for Helm minor and patch releases. +Have a published release date for a Helm major release, upon the availability of the first beta release. + +## Motivation + +Contributors and users/organizations greatly appreciate knowing in advance when the next release will be available. +It allows contributors to plan their work and organizations to schedule migration plans; it also provides users with clear timelines for access to bug fixes and features. + +## Rationale + +Minor and patch releases for Helm normally occur a couple of times a year. They therefore lend themselves well to cyclical, pre-defined release dates. + +As it is not recommended to use Helm with a version of Kubernetes that is newer than the version Helm was compiled against ([see here][helm-skew]), there is value in aligning the date for Helm minor releases with [Kubernetes releases][kubernetes-dates], which state that "X.Y.0 occur 3 to 4 months after X.(Y-1).0". + +Helm major releases happen rarely and therefore do not lend themselves to pre-defined, cyclical release dates. However, upon the availability of the first beta version of a major release, a specific final release date should be chosen and announced. + +## Specification +### Patch releases +Patch releases should be done once a month on the second Wednesday of each month (assuming there are changes since the last release). A patch release to fix a high priority regression or security issue does not have to follow this schedule, but it is highly desirable that it is released on a Wednesday if possible. + +#### Cancelling a patch release + +A patch release should be cancelled: +- if it falls within one week before the first release candidate (RC1) of an upcoming minor release +- if it falls within four weeks following a minor release + +As an example, if Helm 3.9.0-rc.1 is scheduled for January 7th, 2022, the expectation is that no patch releases will be cut for Helm 3.8.x after December 31st, 2021. Similarly, if Helm 3.9.0 is released on January 16th, 2022, the expectation is that the 3.9.1 patch release will not be cut before February 13th, 2022. + +### Minor releases +For minor releases, it is not necessary to aim for dates that are the same every year. Instead, the following is proposed: +* Once a Helm minor release is made, the release date of the next minor release must be announced. +* To align with Kubernetes releases, a 4-month minor release cadence should be adopted (so at least 3 minor releases of Helm per year) + +Extra minor releases can be added to the schedule when needed. However: +* An extra minor release should not change a planned minor release date, unless the planned release is less than 7 days away. This is to avoid postponing the release of features that are still on-going and planned according to the originally stated release date. +* Extra minor releases should only be done for important reasons (as per judgment of the maintainers) to avoid increasing the burden on organizations that choose to upgrade at every release. + +## Security implications + +Security releases do not follow any planned dates and should be done as soon as required. + +## How to teach this + +* When a Helm minor release is made, the next minor release number and date should be chosen and announced at the same time. +* The Helm website should have a page mentioning each planned release and its date. This page should be updated at each release. +* The Helm website should have a page describing the process for release dates put forth in this HIP + +## Reference implementation + +A reference implementation for this proposal to be accepted would entail: +* Proposing a date of the next minor release +* Posting a PR to helm-www which: + * documents the next release date + * updates the release check-list as per the new process + * creates a page to document the details of this HIP for users +* Creating a public online calendar so that maintainers can get release reminders and consumers can see the Helm release dates. The calendar shall contain: + * monthly patch release dates + * the next minor release date (or major release date if applicable) + * dates when RCs must be created + * it may be interesting to include kubernetes release dates if available +* A link to the release calendar shall be added to helm-www + +[kubernetes-dates]: https://github.com/kubernetes/community/blob/master/contributors/design-proposals/release/versioning.md#minor-version-scheme-and-timeline +[helm-skew]: https://helm.sh/docs/topics/version_skew/#supported-version-skew + diff --git a/community/hips/hip-0003.md b/community/hips/hip-0003.md new file mode 100644 index 0000000000..e44ba0fe1e --- /dev/null +++ b/community/hips/hip-0003.md @@ -0,0 +1,121 @@ +--- +title: How Projects Join the Helm Organization +sidebar_label: "0003: How Projects Join the Helm Organization" +--- + + + +| **HIP** | **Title** | **Author(s)** | **Created** | **Type** | **Status** | +|---|---|---|---|---|---| +| 0003 | How Projects Join the Helm Organization | Matt Butcher | 2020-09-30 | process | accepted | + + +## Abstract + +Helm is an organization with multiple projects. This document describes how new projects may be added to the Helm organization. + +## Motivation + +Formalizing this process removes unspoken assumptions and makes it clear how to add a project to the Helm organization. + +## Rationale + +Clarifying the process and the requirements will make it simpler, more consistent, and more transparent for projects to join the Helm organization. + +### Legal Requirements + +Any project added must meet the CNCF's legal requirements, including licenses (Apache 2) and [CNCF intellectual property commitments][CNCF intellectual property commitments]. CNCF allows projects to choose [DCO or CLA][DCO or CLA]. + +### Governance Requirements + +Any project added must (a) agree to be held accountable to Helm governance at the organizational level, and (b) have in place a formal project governance structure that meets the requirements set out by the Helm organization in the [Helm governance documents][Helm governance documents]. + +Additionally, governance requirements from CNCF must be adhered to. For example, any candidate project must use the [CNCF Code of Conduct][CNCF Code of Conduct]. + +We currently do not allow any projects to "bring their own" code of conduct or to make any additional changes to the existing CNCF code of conduct. + +### Security Requirements + +Any project added must have security guidelines for how to report and resolve security issues. It is acceptable to merely use the existing [Helm security process][Helm security process] for this. But projects that require special or additional reporting may do so. + + +## Specification + +This is the process to submit a project for addition to the Helm organization. + +### 1. Project opens issue + +The candidate project must open an issue in the [Helm community repository][Helm community repository] requesting that it join. + +This issue should provide: + +- A link back to the project +- The GitHub user names of those in a governance role for that project +- A short description (1-3 paragraphs) of why it makes sense to add to Helm +- A short explanation of how the project is to be staffed going forward. + +### 2. Helm Org Review + +The Helm organization owners will review the proposal. This process will likely involve some back-and-forth conversation with the owners of the project. + +### 3. Helm Org Voting + +As stated in the [Helm governance documents][Helm governance documents], a candidate project must pass a supermajority vote before it is accepted into the Helm organization. + +If the Helm org maintainers vote to include the project, the project will be considered a _recommended Helm project_, and CNCF will be notified of our intentions. + +### 4. CNCF Review + +CNCF will apply its reviews, including but not limited to intellectual property reviews. This process will be managed between designated Helm org maintainers and the CNCF, with the project being included as necessary. + +If this review fails, projects will be given the opportunity to comply with CNCF's requirements. Failure to comply, though, will remove the project from _recommended project_ status, and the process will discontinue. + +### 5. Transition of Resources + +Once both Helm and CNCF have reviewed the project and approved, the project becomes a _transitional project_. Helm org maintainers will work with the transitional project to move resources, transfer requisite ownership, and make any other necessary changes. Helm org maintainers may choose to grant an incoming project a single position as a Helm org maintainer. + +### 6. Completion + +At the completion of the transitional process, the project will be an official _Helm project_. At the next governance cycle, it will be granted representation as per the [Helm governance documents][Helm governance documents]. + + + +## Backwards compatibility + +This change applies to all future project additions and implies no change to the status of existing projects. + +## Security implications + +Not applicable. + +## How to teach this + +The steps in the Specification will be available in [the Helm governance documents][Helm governance documents]. + +## Reference implementation + +Not applicable. + +## Rejected ideas + +None currently. + +## Open issues + +None currently. + +## References + +- [CNCF intellectual property commitments](https://github.com/cncf/foundation/blob/master/copyright-notices.md) +- [DCO or CLA](https://www.cncf.io/services-for-projects/#legal-services) +- [CNCF Code of Conduct](https://github.com/cncf/foundation/blob/master/code-of-conduct.md) +- [Helm security process](../SECURITY.md) +- [Helm governance documents](../governance/governance.md) +- [Helm community repository](http://github.com/helm/community) + diff --git a/community/hips/hip-0004.md b/community/hips/hip-0004.md new file mode 100644 index 0000000000..6f8e3916b4 --- /dev/null +++ b/community/hips/hip-0004.md @@ -0,0 +1,124 @@ +--- +title: Document backwards-compatibility rules +sidebar_label: "0004: Document backwards-compatibility rules" +--- + + + +| **HIP** | **Title** | **Author(s)** | **Created** | **Type** | **Status** | +|---|---|---|---|---|---| +| 0004 | Document backwards-compatibility rules | Marc Khouzam , Matt Butcher | 2020-09-18 | process | accepted | + + +## Abstract + +Define and document the backwards-compatibility rules that apply to Helm minor and patch releases. + +## Motivation + +Helm aims to strictly respect [Semantic Versioning][semver], where minor and patch releases must be 100% backwards compatible. +Backwards compatibility implies that when moving to a new backwards-compatible release: +* tools (such as Continuous Integration tools) using the helm CLI will not require any changes +* programs using the Helm Go API will continue to compile + +Some contributors to the Helm code base may not be comfortable with the details of what constitutes a compatibility-breaking change. +Furthermore, in some cases, there can be a difference of opinion, even amongst the maintainers, on what constitutes such a change. + +Having a well-defined, documented set of backwards-compatibility rules for the Helm code-base will allow to: +* avoid compatibility-breaking changes being merged by mistake +* guide contributors in understanding helm's backwards-compatibility requirements +* remove any uncertainty when it comes to enforcing backwards compatibility +* provide a basis for discussion and possible updates to how helm handles backwards compatibility + +## Rationale + +The maintainers have agreed that a formal definition of Helm's backwards-compatibility rules would be beneficial. + +## Specification + +The following compatibility rules will apply to helm minor and patch releases: +* exported Go APIs will remain compatible as per this [article][go-module-comp] + * the exception to this rule is where Helm exposes Kubernetes APIs. Kubernetes APIs do not follow semantic versioning so Helm cannot enforce compatibility. +* CLI commands and flags: + * commands and flags are case-sensitive + * commands and flags must not be removed + * commands and flags must not be renamed + * commands and flags must not be moved elsewhere in the command hierarchy + * commands and flags cannot be "repurposed" to provide a different behavior than the original (even if deprecated) + * flags must not change type. Exceptions are when the new type is a superset of the original type (e.g., int8 to int32, int to float, float to string) + * these rules apply as much to the short name as to the long name of a flag, if present. Specifically, a short name cannot be changed in any way even if its long name is kept the same, and vice versa + +* CLI output: + * the help text may change + * the format of structured output (tables, JSON, YAML) must not change + * errors can change if doing so increases their usability + * a message containing a "bug" (including spelling errors, misinformation, or egregious grammar errors), can be fixed + * return codes should not be changed unless they are incorrect + +* File formats (such as index.yaml, values.yaml, Chart.yaml): + * No fields may be removed, added, or modified on the Chart.yaml file + * No fields may be modified or removed in: + * index.yaml + * repositories.yaml + * Any added fields must be accompanied by backward compatibility checks + * No existing optional field can be made required (but a required field can be downgraded to optional) + * If a field is added to a structured piece of data, it must be optional. No "new required" fields + * We do not accept 3rd-party-specific fields (though we do facilitate them with things like annotations) This is grounds for rejecting an additive change in places where additions are allowed (e.g. like repositories.yaml) + +* Charts: + * The handling of templates/ must not be changed + * Reserved directory names (e.g. crds) must not be removed + * No files or file types that are allowed may be changed to be disallowed + * If an object or file type is added to a chart, it must also be optional (see requirements.yaml in Helm 2) + * No files that were in the files object may be removed from the files object (in other words, a new file type may be added, but files cannot be removed from the files object just because they are instances of this new file type) + +* Templates (commands, functions, syntax, and variables): + * Template functions cannot be removed + * Return types of functions cannot change + * A template function signature is additive (can add more parameters) if and only if the change is backwards compatible. E.g. sum int64 int64 can be changed to foo int64 int64 [int64] (where the new third parameter is optional). Likewise, print string could be changed to print any as long as any accepts a string and still treats it as it did before. But sum int64 int64 int64 could not be changed to sum int64 int64. + * built-in directives, constants, and variables cannot be removed or changed in any way that would break an existing template + * constants and variables that contain structured information cannot change the format of that structured information. (Example: if a built-in variable called ".Version" returned "helm-v1.2.3" it could not be changed to return "v1.2.3") + * If a variable is changed to a function, it must not require any arguments or return a different return type than the original variable's value. (Example: If .Version was changed from a variable that returned v1.2.3, it can be changed to a function, but only if that function allows no parameters and when no parameters are specified, still returns in the format v1.2.3. + * the template syntax cannot change except when the change is directly from the Go programming language (who has made such changes during Helm's history -- viz. adding the - whitespace chomp character and changing variables to become mutable). + * occasionally, external template libraries or their dependencies have made breaking changes. We are now trying to avoid that. + +* Experimental Feature Flags: + * From time to time, at the discretion of the core maintainers, new "experimental" features may be hidden behind one or more feature flags. An example of this in Helm 3.0.0 was the inclusion of experimental repository support. + * Experimental features are not required to ensure backward compatibility for their feature set. (They cannot, however, break backward compatibility for other parts of Helm.) Thus, a new release of an existing experimental feature may break APIs, change its chart representations, or modify its command-line flags as long as it does not break the compatibility of non-experimental features. + * Two experimental features are not required to be compatible with each other, though any feature must be compatible with all stable features before it can exit the experimental feature track. + +## Security implications + +Compatibility rules may be broken or bent in the name of security. For example, if a flag once took an int64, but it was determined that doing so led to a buffer overflow, the datatype of that parameter could be changed. + +In some cases, entire functions, template commands, etc. could be altered or removed if deemed absolutely necessary. Files formats can change as well. Of course, it should go without saying that we as maintainers should do our best to not have this happen if at all possible. This caveat is mainly to inform the end users that in extreme cases, we will break compatibility. + +## How to teach this + +* The list of compatibility rules should be published on helm.sh with a global explanation of the motivation behind to need to follow them +* The list of compatibility rules should be used as a reference by maintainers when doing code reviews +* During PR reviews, when appropriate, the reviewing maintainer should refer the contributor to the list of compatibility rules + +## Reference implementation + +This HIP will serve as the document listing the backwards-compatibility rules. + +## Open issues + +* Should Go's experimental [apidiff][apidiff] tool be used? The following [issue][apidiff-install] gives a couple of ways to install it. +* There has never been a consensus on messages that are user-facing and informal or non-informational (e.g. "Happy Helming"). I most often vote against these changes, while others have voted for them. [Butcher] +* In the past, we have allowed formatting changes to structured formats (JSON, YAML) when such changes were not considered _structural_ by the relevant specification. E.g. adding/removing whitespace in JSON documents. These days, we have been more resistant to that... but we have never explicitly said it is not allowed. [Butcher] +* We do need to say something about "log" messages. We currently have no policy at all about log messages, and hence allow any changes to messages at the Debug and Warning levels. [Butcher] +* Does breaking compatibility due to security require a major release? +* Should the rules specifically mention the helm packages that must respect compatibility? (e.g., `pkg` for Go API, `cmd` for CLI) + +[semver]: https://semver.org/spec/v2.0.0.html +[go-module-comp]: https://blog.golang.org/module-compatibility +[apidiff]: https://pkg.go.dev/golang.org/x/exp/cmd/apidiff +[apidiff-install]: https://github.com/golang/go/issues/34849 diff --git a/community/hips/hip-0005.md b/community/hips/hip-0005.md new file mode 100644 index 0000000000..8e64e545a6 --- /dev/null +++ b/community/hips/hip-0005.md @@ -0,0 +1,98 @@ +--- +title: Helm Org Maintainers and Deprecated Projects +sidebar_label: "0005: Helm Org Maintainers and Deprecated Projects" +--- + + + +| **HIP** | **Title** | **Author(s)** | **Created** | **Type** | **Status** | +|---|---|---|---|---|---| +| 5 | Helm Org Maintainers and Deprecated Projects | Matt Butcher | 2020-09-24 | process | draft | + + +## Abstract + +This process proposal explains what happens to Helm organization maintainer slots when +a project is deprecated. + +## Motivation + +The current governance documents state that org maintainers may be selected from any of +the official Helm projects. However, as the Helm organization matures, some projects are +being deprecated. The governance docs are unclear what happens to org maintainers from +deprecated projects, and whether deprecated projects may hold org maintainer seats. + +## Rationale + +In the interest of keeping the Helm project thriving and alive, this HIP proposes that +only non-deprecated projects are entitled to org maintainer seats. + +## Specification +To implement this, a new PR must be opened with the changes to the governance document. +The changes must be adopted by 2/3 supermajority of the _current org maintainers_ +(including those maintainers who may be attached to deprecated projects). + +The governance documentation for the Helm org will be updated as follows: + +- All references to org maintainer seats for projects will clarify that they apply only + to non-deprecated projects +- Text will clarify that when a project is deprecated, its org maintainers will + be moved to Emeritus status _except_ where those maintainers may be able to keep their + role because of their status on another Helm project, including the `helm/helm` project. +- The definition of an active maintainer will also be revised to specify that the + maintained project must not be deprecated + +## Backwards compatibility + +N/A + +## Security implications + +N/A + +## How to teach this + +The [governance.md] document will be updated with precise language. + +## Reference implementation + +The [governance.md] document will contain all associated changes. + +## Rejected ideas + +### 1. Allowing maintainers of deprecated projects to stay + +One might argue that maintainers of deprecated projects should be allowed to stay on as +org maintainers. This option was considered. But the design of the org maintainers board +was intended to give projects governing input into Helm. Essentially, allowing +maintainers of deprecated projects to take these slots means essentially that +non-owners will be given a say in Helm's direction. It would even be possible that non-owners +could have a majority voting stake in the Helm project. This did not seem right. + +### 2. Requiring maintainers of deprecated projects to go even if they represented other projects as well + +One might argue that if a maintainer was elected because of their involvement in project +X, their org maintainership should be inextricably tied to X. However, as written, this +proposal allows such a maintainer to simply stay on as a maintainer due to their +affiliation with another project, Y. + +Our intention in forming the organizational maintainers was to give interested parties +a voice in steering Helm. Because such a party would still be formally affiliated with a +Helm project, we believe they fill the spirit of the original organizational motivations. + +Of course, this does not prevent a maintainer from voluntarily stepping down when their +project is deprecated. + +## Open issues + +N/A + +## References + +[governance.md](/community/governance/governance) \ No newline at end of file diff --git a/community/hips/hip-0006.md b/community/hips/hip-0006.md new file mode 100644 index 0000000000..057a28f32a --- /dev/null +++ b/community/hips/hip-0006.md @@ -0,0 +1,262 @@ +--- +title: OCI Support +sidebar_label: "0006: OCI Support" +--- + + + +| **HIP** | **Title** | **Author(s)** | **Created** | **Type** | **Status** | +|---|---|---|---|---|---| +| 0006 | OCI Support | Josh Dolitsky | 2020-07-21 | feature | accepted | + + +## Abstract + +This feature proposal outlines a concrete plan for finalizing Helm's [OCI](https://opencontainers.org/) integration, which has been available as an experimental feature since Helm 3.0.0. + +## Motivation + +Until now, all OCI integration has been kept separate from the existing Helm user experience, and nested under the `helm chart` and `helm registry` subcommands. These subcommands were designed to mimic the user experience of the Docker CLI. For example, `helm chart list` is the equivalent of `docker images`. + +While this experimental feature set has succeeded in providing a "Docker-like" user experience, it is too far removed from existing Helm features and should be partially redesigned. + +In addition, there has not yet been a clear response to the following questions concerning Helm's OCI support: + +- What is the relationship between a chart version and registry tag? +- Will this work with `helm install` / `helm upgrade` / `helm dependency`? +- How will provenance files (`.prov`) be supported? +- When will the experimental flag be removed? + +## Rationale + +The true value of leveraging OCI specs has very little to do with the command-line experience (i.e. Docker). OCI registries provide a common API for all types of packages, and address several security and scalability concerns. Additionally, many companies and organizations have invested in the infrastructure surrounding their container registry. Storing Helm charts in a registry reduces the number of moving parts. + +By making Helm's OCI support more closely aligned with the way that Helm currently works, users will have a more stable experience and still benefit from the advantages of OCI. + +## Specification + +The specification for this HIP is broken into six (6) major sections: + +1. Implement `Getter` and introduce `Pusher` +2. Support for provenance files +3. Chart versions == OCI reference tags +4. Chart names == OCI reference basenames +5. Cache is removed +6. `helm chart` is removed, integrated into rest of CLI +7. Experimental until clear messaging from OCI + +### 1. Implement `Getter` and introduce `Pusher` + +As of yet, the code related to registry support has been written standalone (see [internal/experimental/registry](https://github.com/helm/helm/tree/master/internal/experimental/registry)). + +The act of downloading a chart from an OCI registry should mimic what is already possible using downloader plugins. Using the protocol prefix `oci://` in any place where chart repos are referenced should work just by implementing a `Getter` for OCI. + +Currently there is no Helm-specific way to upload chart packages. Using the same model of `Getter`, a new interface called `Pusher` should be introduced, with a single built-in implementation (OCI). +This opens the door for plugins to implement their own upload mechanism, and for Helm to add a new top-level upload command `helm push`. For example, plugins may include a new `uploaders` section in `plugin.yaml`, similar to the existing `downloaders` section (see ["Downloader Plugins"](https://helm.sh/docs/topics/plugins/#downloader-plugins)). + +This will also include a new, top-level subcommand, `helm push`, which will leverage this new functionality. This command will take, as its first argument, the path to a chart archive (`.tgz`), and as the second argument a URL pointing to a remote OCI registry. + +Here is an example of what the `helm push` UX will look like: + +``` +$ helm create mychart +Creating mychart + +$ helm package mychart/ +Successfully packaged chart and saved it to: /home/user/mychart-0.1.0.tgz + +$ helm push mychart-0.1.0.tgz oci://example.com/some/root/namespace +The push refers to repository [oci://example.com/some/root/namespace/mychart] +ref: oci://example.com/some/root/namespace/mychart:0.1.0 +digest: 1b251d38cfe948dfc0a5745b7af5ca574ecb61e52aed10b19039db39af6e1617 +size: 2.4 KiB +name: mychart +version: 0.1.0 +0.1.0: pushed to remote (1 layer, 2.4 KiB total) +``` + +### 2. Support for provenance files + +Helm currently has the ability to verify package signatures, assuming the presence of a file suffixed with `.prov` sitting next to a chart `.tgz` in a repository. + +Support for this method of signature validation should be carried over into OCI storage. As the format of the OCI manifest is custom to Helm, Helm can also choose to modify the resulting manifest on upload when a chart is being signed (e.g. `helm push --sign`). + +As far as the low-level details, the `.prov` file will simply be stored as another layer on the manifest. If running `helm pull --verify oci://...`, the layer containing the provenance file will be retrieved from the registry. +The order and total number of layers on the manifest is not significant. The list of layers will be inspected, and the first one found matching the media type of the provenance file will be used. If multiple layers containing the provenance file media type are found, an error will occur. The same applies to the chart layer. + +Here is an example of what a manifest will look like with a provenance file attached: + +```json +{ + "schemaVersion": 2, + "config": { + "mediaType": "application/vnd.cncf.helm.config.v1+json", + "digest": "sha256:8ec7c0f2f6860037c19b54c3cfbab48d9b4b21b485a93d87b64690fdb68c2111", + "size": 117 + }, + "layers": [ + { + "mediaType": "application/vnd.cncf.helm.chart.content.v1.tar+gzip", + "digest": "sha256:1b251d38cfe948dfc0a5745b7af5ca574ecb61e52aed10b19039db39af6e1617", + "size": 2487 + }, + { + "mediaType": "application/vnd.cncf.helm.chart.provenance.v1.prov", + "digest": "sha256:3e207b409db364b595ba862cdc12be96dcdad8e36c59a03b7b3b61c946a5741a", + "size": 643 + } + ] +} + +``` + +### 3. Chart versions == OCI reference tags + +To keep things simple, the version of a chart will be 1-to-1 with the tag used on registry references. Arbitrary tags will not be supported. + +This also means that tags are no longer necessary to be provided on the command-line in the form `:`. Instead, users can provide `--version `. + +### 4. Chart names == OCI reference basenames + +Again, to keep things simple, the basename (the last segment of the URL path) on a registry reference should be equivalent to the chart name. + +For example, given a chart with the name `pepper` and the version `1.2.3`, users may run a command such as the following: + +``` +$ helm push pepper-1.2.3.tgz oci://r.myreg.io/mycharts +``` + +which would result in the following reference: + +``` +oci://r.myreg.io/mycharts/pepper:1.2.3 +``` + +By placing such restrictions on registry URLs and tags, Helm users are less likely to do "strange things" with charts in registries. + +### 5. Cache is removed + +Since chart packages are small in size (<1mb), the cache is hard to justify. The cache was introduced only to provide a "Docker-like" experience. While this is neat, it does not provide the user with much value. + +By removing the cache, much of the existing OCI features can be cut down dramatically in size. This will make OCI features much more seamless with the existing Helm user experience. + +### 6. `helm chart` is removed, integrated into rest of CLI + +Wherever possible, the subcommands provided by the new `helm chart` command should be integrated into existing Helm CLI commands. + +`helm chart pull` should be baked into `helm pull`, `helm chart push` should be `helm push` (new). + +Commands that work with the cache will be removed: `helm chart save`, `helm chart remove` and `helm chart export`. + +`helm registry` will be kept as is. This manages auth against OCI registries. + + +### 7. Experimental until clear messaging from OCI + +Considering that the rest of the items above are implemented and resolved, the OCI feature set will not be made generally available until there is clear messaging from the Open Container Initiative (OCI) regarding the way that Helm is using registries. + +The technical details of how Helm is using the OCI distribution spec must be further validated. It is currently unclear whether or not this is the correct way to publish an arbitrary artifact. Only after more clarity will these features be taken out of experimental mode and made generally available. + +## Backwards compatibility + +Since the existing feature set is currently experimental, there will be no promise of backwards compatibility with prior OCI support (sorry!) + +## Security implications + +Registry authentication introduces a new attack vector. Upon running `helm registry login`, these credentials can possibly be stored in an unencrypted JSON file. +However, if your system supports Docker's credential helpers (such as `osxkeychain`), then no crendetials are stored in this file. Credentials are stored elsewhere, such as in the system's secure keychain. + +Here is an example of a registry config file using a credential helper: + +``` +{ + "auths": { + "example.com": {} + }, + "credsStore": "osxkeychain" +} +``` + +Here is an example of a registry config file without a credential helper: + +``` +{ + "auths": { + "example.com": { + "auth": "", + "email": "" + } + } +} +``` + +So, while a new attack vector has been introduced, it should not be considered any less safe than using `docker login`. +In fact, he underlying code is leveraging docker/cli, and existing logins created with `docker login` are leveraged if not found in Helm's config. + +Note: this is already implemented in the current OCI feature set. + +## How to teach this + +Following the implementation of all facets of this HIP, extensive documentation should be added to the Helm website on how to leverage OCI. + +Additionally, sites containing community charts, such as [Artifact Hub](https://artifacthub.io/), should enable providers to distribute charts over OCI, and display friendly copy-paste instructions for how to download an OCI-based chart. + +Helm and charts maintainers should be educated on how to make a transition from classic chart repositories to registries. +In short the workflow for uploading a chart goes from `helm package` (+ custom upload) to `helm package && helm registry login && helm push`. + +## Reference implementation + +The features are currently under development. + +Here are the following outstanding tasks: + +- We need to implement helm push, which does not exist +- Helm needs to implement OCI Getter support so that helm dependency and helm pull can support OCI registries (see https://github.com/helm/helm/pull/8843) +- Support for provenance files must be added +- `helm chart save`, `helm chart export`, `helm chart list`, `helm chart remove`, `helm chart pull`, and `helm chart push` need to be removed +- The Helm documentation for OCI support needs to be updated (https://helm.sh/docs/topics/registries/)) + +## Rejected ideas + +### Will I be able to use custom tags such as "latest"? + +The implications of this are not yet fully understood. For now, it will be strictly enforced that the tag on the reference will match the version found in `Chart.yaml`. This functionality may be added at a later time. + +### Will I be able to pull a chart using the `:` syntax? + +It's unclear if users will be able to pull charts with a specific version using the `:` syntax (vs. `--version `). This seems relatively harmless to allow both, but this may have implications on dependencies and other areas. + +## Open issues + +The issues below are still unresolved. + +### What is the correct media type to use for the chart content layer? + +The media type for the chart content layer is currently `application/tar+gzip`, however it has been pointed out that [this is not an official type in the IANA database](https://www.iana.org/assignments/media-types/media-types.xhtml). + +Due to this, a unique media type will be used: `application/vnd.cncf.helm.chart.content.v1.tar+gzip`. + +The only real issue with this is that the chart package is not technically a unique type. As in, a registry vendor could treat it as a typical gzipped tarball. + +### What is the correct media type to use for the provenance file layer? + +Again, there doesn't appear to be an IANA media type for this type of file. Additionally, this file format appears unique to Helm. + +In this case, it seems the only option is to use a custom media type such as `application/vnd.cncf.helm.chart.provenance.v1.prov`. + +## References + +The following links are used as references in this HIP: + +- [Open Container Initiative](https://opencontainers.org/) +- [OCI Distribution Specification](https://github.com/opencontainers/distribution-spec) +- [List of IANA media types](https://www.iana.org/assignments/media-types/media-types.xhtml) +- [Helm Documentation - Registries](https://helm.sh/docs/topics/registries/) +- [Artifact Hub](https://artifacthub.io/) +- [Existing standalone code for OCI support](https://github.com/helm/helm/tree/master/internal/experimental/registry) \ No newline at end of file diff --git a/community/hips/hip-0007.md b/community/hips/hip-0007.md new file mode 100644 index 0000000000..e0d7bbdc52 --- /dev/null +++ b/community/hips/hip-0007.md @@ -0,0 +1,93 @@ +--- +title: Document and Track maintainer groups +sidebar_label: "0007: Document and Track maintainer groups" +--- + + + +| **HIP** | **Title** | **Author(s)** | **Created** | **Type** | **Status** | +|---|---|---|---|---|---| +| 0007 | Document and Track maintainer groups | Matt Farina , Scott Rigby | 2025-10-07 | process | draft | + + +## Abstract + +There are numerous Helm maintainer groups where each can have zero or more Git +repositories associated with them. This process provides a centralized method +to document and track the maintainer groups, maintainers, and associated repos. + +## Motivation + +The current design uses a collection of documented and access controls to track +this information while there are several gaps in the information. The Teams.md +file attempted to track the different teams (i.e. maintainer groups, the org +maintainers, etc). + +The repositories owned by a maintainer group, and the members of a group are +not documented but are instead tracked via GitHub teams. The owners are +scattered in various locations that are not consistent. In some cases they +cannot be consistent (e.g. community management which does not have a GitHub +repo). This has lead to confusion with the Org Maintainers and others. + +## Rationale + +There is currently no consistent manner to document the codebases associated with +a maintainer group or the members of a maintainer group. There are two examples we can look +at for this situation. + +First, there are maintainer groups responsible for multiple repositories. Charts and the +Org maintainers groups are two examples with multiple repositories. +There is no location to publicly document this situation. + +Second, not all maintainer groups own a repository. Community management is an example +of a maintainer group that does a significant amount of work without owning a source +repository. + +This HIP aims to provide a single source of document to discover maintainer group +repositories and owners. + +## Specification + +The source of truth will be a YAML file name [`maintainer-groups.yaml`](https://github.com/helm/community/blob/main/maintainer-groups.yaml) +stored at the root of the Helm community repository. It will have the following +structure: + +``` +maintainerGroups: +- name: Helm Core + ownersLink: https://raw.githubusercontent.com/helm/helm/master/OWNERS + repos: + - https://github.com/helm/helm + mailingList: cncf-helm-core-maintainers@lists.cncf.io +- name: Charts + owners: + - unguiculus + - ... + emeritus: + - foxish + - ... + repos: + - https://github.com/helm/chart-releaser-action + - https://github.com/helm/charts-repo-actions-demo + - ... +``` + +A maintainer group can only have either `ownersLink` (a URL to the location of the +owners list) or `owners` (a list of owners). It cannot have both. This enables +those who do not have a Git repo (e.g., community managers) and those with +multiple repos and no primary one (e.g., charts) to have a documented list. + +When `owners` is used it can have an accompanying `emeritus`. When `ownersLink` +is used the emeritus is expected to be listed in that file. + +## References + +* [Helm Governance](/community/governance/governance) + documents maintainer groups. +* The [Teams.md file can be referenced in the community history](https://github.com/helm/community/blob/ecedb3ddea57749580bc4800cb1492fce9c9b332/Teams.md). diff --git a/community/hips/hip-0008.md b/community/hips/hip-0008.md new file mode 100644 index 0000000000..1b077632d2 --- /dev/null +++ b/community/hips/hip-0008.md @@ -0,0 +1,178 @@ +--- +title: Add descriptions to custom completions +sidebar_label: "0008: Add descriptions to custom completions" +--- + + + +| **HIP** | **Title** | **Author(s)** | **Created** | **Type** | **Status** | +|---|---|---|---|---|---| +| 0008 | Add descriptions to custom completions | Marc Khouzam | 2020-11-14 | feature | accepted | + + +## Abstract + +Provide (optional) descriptions for helm's custom completions. + +The goal is to help users be more efficient by providing useful information +when doing auto-completion. + +## Motivation + +Helm currently supports auto-completion for the following shells: `bash`, `zsh`, +`fish`. Both the `zsh` and `fish` shells support descriptions for completions. + +For example, in the case of `zsh`: +``` +$ helm s +search -- search for a keyword in charts +show -- show information of a chart +status -- display the status of the named release +``` + +[The Cobra project][cobra project], which is used by Helm to define its +commands and flags, automatically provides completion descriptions when +completing those commands and flags. Those descriptions are based on the usage +information specified by Helm. However, custom completions that are provided +by helm itself currently don't include any descriptions. For example, when +completing `helm status` it is helm that provides the list of releases, but +this list does not include descriptions. +``` +$ helm status n +nginx nginx-ingress +``` + +Augmenting helm's custom completions with descriptions allows providing +additional information to help users make their selection from the list of +completions. + +## Rationale + +The completions for some helm arguments do not always provide sufficient +information for a user to know which value to choose. For instance, the +name of a release is not always informative enough for the user to know +which one to select. For example: +``` +$ helm upgrade ngin +nginx nginx2 +``` +Clearly, in this case, the user needs to know the details of each release +in advance as the difference between completion choices is not very helpful. + +## Specification + +Here are proposed descriptions for the different types of custom completions: +* chart names (for 'install', 'pull', 'show *', 'template', 'upgrade') + * \ +``` +$ helm install myrelease bitnami/c +bitnami/cassandra -- Apache Cassandra is a free and open-source distributed database managemen +bitnami/common -- A Library Helm Chart for grouping common logic between bitnami charts. Th +bitnami/consul -- Highly available and distributed service discovery and key-value store de +bitnami/contour -- Contour Ingress controller for Kubernetes +``` +As the chart description will often be too long to fit on a single line, the shell will truncate +the description to fit the shell's window. Note that each shell handles this case in its own way, +where `zsh` truncates, while `fish` uses an ellipsis. + +* chart version (for '--version') + * App: \, Created: \ +``` +$ helm pull bitnami/nginx --version 7.1. +7.1.0 -- App: 1.19.2, Created: September 24, 2020 +7.1.1 -- App: 1.19.3, Created: September 29, 2020 +7.1.2 -- App: 1.19.3, Created: October 2, 2020 +``` +* kubernetes context (for '--kube-context') + * \ +``` +$ helm --kube-context d +default -- k3d-k3s-default +dev -- development +``` +* helm environment variables (for 'env') + * \ (\) +``` +$ helm env HELM_RE +HELM_REGISTRY_CONFIG -- /me/Library/Preferences/helm/registry.json (Path to the registry configuration file) +HELM_REPOSITORY_CACHE -- /me/Library/Caches/helm/repository (Path to the file containing cached repository indexes) +HELM_REPOSITORY_CONFIG -- /me/Library/Preferences/helm/repositories.yaml (Path to the file containing repository names and URLs) +``` +* plugin names (for 'plugin uninstall', 'plugin update') + * \ +``` +$ helm plugin uninstall +2to3 -- migrate and cleanup Helm v2 configuration and releases in-place to Helm v3 +fullstatus -- provide status of resources part of the release +``` +* release names (for 'get *', 'history', 'rollback', 'status', 'test', 'upgrade') + * \-\ -> \ +``` +$ helm status +mynginx -- nginx-6.0.5 -> superseded +nginx-ingress -- nginx-ingress-controller-5.4.4 -> deployed +``` +* release revisions (for 'rollback', '--revision') + * App: \, Chart: \-\ +``` +$ helm rollback nginx-ingress +1 -- App: 0.34.1, Chart: nginx-ingress-controller-5.4.4 +2 -- App: 0.40.2, Chart: nginx-ingress-controller-5.6.10 +``` +* repo names (for 'repo remove' and completion of chart names) + * \ +``` +$ helm repo remove +bitnami -- https://charts.bitnami.com/bitnami +center -- https://repo.chartcenter.io +stable -- https://charts.helm.sh/stable +``` +* output formats (for '--output', '-o') + * \ +``` +$ helm status -o +json -- Output result in JSON format +table -- Output result in human-readable format +yaml -- Output result in YAML format +``` + +Note that descriptions can be turned off by the user when generating the shell +completion script using the `--no-descriptions` flag. + +## Backwards compatibility + +Not applicable to shell auto-completion. In fact, this allows us to implement +some descriptions and still be able to modify them later if different ones are +requested. + +## Security implications + +None + +## How to teach this + +The new descriptions will automatically appear when using auto-completion, so no +special effort needs to be made to teach this new feature. + +## Reference implementation + +A PR will be opened to implement the proposed specification for descriptions of +custom completions. + +## Open issues + +None. + +It is worth clarifying that the bash shell does not support descriptions for +auto-completion, so this feature will not apply to bash. That being said, there +is a [PR open on the Cobra project][cobra pr] that adds descriptions for bash +completions. + +[cobra project]: https://github.com/spf13/cobra +[cobra pr]: https://github.com/spf13/cobra/pull/1146 diff --git a/community/hips/hip-0009.md b/community/hips/hip-0009.md new file mode 100644 index 0000000000..b52320264f --- /dev/null +++ b/community/hips/hip-0009.md @@ -0,0 +1,82 @@ +--- +title: Transitioning Security Team Members on Project Deprecation +sidebar_label: "0009: Transitioning Security Team Members on Project Deprecation" +--- + + + +| **HIP** | **Title** | **Author(s)** | **Created** | **Type** | **Status** | +|---|---|---|---|---|---| +| 9 | Transitioning Security Team Members on Project Deprecation | Matt Butcher | 2020-09-24 | process | draft | + + +## Abstract + +Helm maintains a security team composed of interested maintainers from Helm projects. This +proposal clarifies that to be a member of the security team, one must be a maintainer of +an active (non-deprecated) project. + +## Motivation + +The existing security team documentation does not cover cases where a Helm project is +marked deprecated. However, because the security team discusses sensitive and potentially +damaging issues, the Helm project requires clarity on this point. + +## Rationale + +This HIP suggests that security team members must be maintainers on _active_ Helm projects. + +## Specification + +According to the current documentation in [SECURITY.md][SECURITY.md], the only requirements for +security team members are as follows: + +* Members MUST be active project maintainers as defined in [the governance][governance] +* Members SHOULD engage in each reported vulnerability, at a minimum to make sure it is being handled +* Members MUST keep the vulnerability details private and only share on a need to know basis + +This proposal suggests that the first requirement be amended to read: + +> Members MUST be active project maintainers for an active project as defined in [the governance] + +Further, the [SECURITY.md][SECURITY.md] document should be updated to indicate that a security team +member will be automatically removed if they are no longer affiliated with any +active (non-deprecated) projects. + +## Backwards compatibility + +N/A + +## Security implications + +The primary reason for this change is that we view it as a compromise of our security +posture to have vulnerability disclosures sent to non-maintainers. Making this change +improves our security posture. + +## How to teach this + +The change will be documented in [SECURITY.md][SECURITY.md] + +## Reference implementation + +The change will be made in [SECURITY.md][SECURITY.md] + +## Rejected ideas + +One might claim that security team members should be entitled to stay because of their +past experience. While we do not want to downplay the role of experience, we do want to +point out that it is unwise to allow unaffiliated individuals to have access to +vulnerability disclosures. + +## Open issues + +None currently. + +[SECURITY.md]: ../SECURITY.md +[governance]: ../governance/governance.md \ No newline at end of file diff --git a/community/hips/hip-0010.md b/community/hips/hip-0010.md new file mode 100644 index 0000000000..6fcb65e1a7 --- /dev/null +++ b/community/hips/hip-0010.md @@ -0,0 +1,97 @@ +--- +title: Distributed responsibility for picking +sidebar_label: "0010: Distributed responsibility for picking" +--- + + + +| **HIP** | **Title** | **Author(s)** | **Created** | **Type** | **Status** | +|---|---|---|---|---|---| +| 0010 | Distributed responsibility for picking | Marc Khouzam | 2021-01-28 | process | draft | + + +## Abstract + +The picking of PRs into a release branch is currently the responsibility of the maintainer +cutting the release. It is usually the largest part of cutting a release. Improving +the picking process would make cutting releases easier with a reduced risk of error. + +## Motivation + +In the current picking process the maintainer that merges a PR is only required to tag that PR with a `needs-pick` +label. The day of the patch release the maintainer cutting the release will go through each PR +with a `needs-pick` label and manually cherry-pick it into the release branch. Once the +cherry-pick is done, the `picked` label is added to the PR. + +There are multiple issues with this process: +1. Manual work for the maintainer doing the release to pick each relevant PR. +1. Possible merge conflicts during the cherry-picks as the code on master may +have substantially diverged from the code in the release branch. This is particularly concerning +as the maintainer cutting the release may not be the one who reviewed the PR in question +and may not be familiar with its details, thus making resolving the conflicts difficult +and error prone. +1. There is basically no soak time for the cherry-picks or merge conflict resolution code: +some quick manual testing and the unit tests are the only tests these changes go through. + +## Rationale + +By cherry-picking PRs as soon as they are merged into the master branch will allow to +address the issues mentioned above. It will reduce the manual work required +at release time, will reduce the risk of errors during merge conflicts, and will provide +more time to soak the release branch content. + +## Specification + +The pick process would be modified to the following: +1. Once a PR is merged into the master branch the `needs-pick` label will still be applied. +This is to reduce the risk of forgetting to cherry-pick a PR. +1. Once the PR is merged into the master branch, it becomes the responsibility of the merging maintainer to +cherry-pick it into the release branch; this should be done as soon as possible. The cherry-pick could +also be done by another maintainer if desired. +1. Once the cherry-pick into the release branch is done, the cherry-picking maintainer should add the +`picked` label in the original PR. +1. On a regular basis, or at least one week before a patch release date, the list of `needs-pick` +PRs without a `picked` label should be verified in case any was forgotten. + +With this process, the release branch should always be in a state that is ready for release; +the maintainer cutting the release does not need to perform any cherry-picking. + +For increased quality of patch releases, the release branch can be used by the community +at any time, so as to verify no issues are present by the time the release day comes around. + +The maintainer doing the cherry-pick could optionally choose to create a PR targeting the +release branch instead of directly pushing the cherry-pick. This option could be chosen to obtain +a review, for example if merge conflicts were substantial. Such PRs would not need to follow the +full PR process but could be merged at the discretion of the maintainers. + +### Security releases + +Security releases are currently cut from the release branch and must only contain the +security fix itself. However, with the proposed change to the pick-process, the release branch may +contain new commits that should not be part of the security release. To address this, the +security release process will require to create a new branch off the +last release **tag**, apply the security fix to that new branch and then build the release +from that branch. The security fix must also be applied to the release branch in preparation +for a future patch release. + +## Backwards compatibility + +N/A + +## Security implications + +N/A + +## How to teach this + +Each Helm core maintainer should be told about this new process and asked to read the HIP. + +## Reference implementation + +A PR will be posted to update the release checklist to match the new process. diff --git a/community/hips/hip-0011.md b/community/hips/hip-0011.md new file mode 100644 index 0000000000..2cbcb07e3d --- /dev/null +++ b/community/hips/hip-0011.md @@ -0,0 +1,356 @@ +--- +title: CRD Handling in Helm 3 +sidebar_label: "0011: CRD Handling in Helm 3" +--- + + + +| **HIP** | **Title** | **Author(s)** | **Created** | **Type** | **Status** | +|---|---|---|---|---|---| +| 0011 | CRD Handling in Helm 3 | Matt Butcher | 2021-03-26 | informational | final | + + +## Abstract + +This document talks about the problems the Helm team has had dealing with CRDs, and lays out criteria for how to move forward. While it discusses a few solution _paths_, it does not provide a single solution. It is also an instrument for ruling out solutions that do not match Helm's guiding principles. + +The most difficult problem in Helm's history has been how to handle Kubernetes CRDs. We've tried a variety of approaches, none of which has proven satisfactory to all users. Our current solution, while not comprehensive, is designed to privilege safety over flexibility. We are considering options for a Helm 4 time frame, and this document is a first step in that exercise. (Backward-compatible features for CRDs could still be merged into Helm 3.) + +## Rationale + +This section, which makes up the bulk of this informational HIP, describes why we made the decisions we have made thus far. It highlights the challenges that we think any suitable implementation must address. And it may serve as a guide for those who wish to tackle the problem. + +### The Core Problem + +The core problem is that CRDs (being a globally shared resource) are fragile. Once a CRD is installed, we typically have to assume (all other things being equal) that it is shared across namespaces and groups of users. + +For that reason, installing, modifying, and deleting CRDs is a process that has ramifications for all users and systems of that cluster. + +In spite of this, the Kubernetes API server is permissive about these CRDs. CRDs are mutable (even without a version change). When they are deleted, all instances of them are deleted without warning. They can be upgraded to be entirely incompatible with previous versions. And there is no way to programmatically inspect the CRDs in a cluster and determine whether they are used, how they are used, and by what. + +### Users First: A Core Principal + +Over the years, several proposals have surfaced and been rejected for one reason: They did not protect the user from badly written charts. This section explains the reasoning process behind our decision-making. + +Helm distinguishes between at least two roles: + +- A chart author: A person filling this role _creates_ and _maintains_ Helm charts +- A Helm user: This person installs and manages instances of charts + +#### The Chart Author Role + +We assume that a _chart author_ has three specific areas of domain knowledge: + +1. How to model applications in Kubernetes +2. How to create Helm charts, including author templates +3. How the application they are packaging works + +In this case, we assume the chart author role includes knowledge of Kubernetes kinds, Helm template commands, and so on. + +We do not assume that chart authors have knowledge about the clusters into which their charts are deployed, knowledge of the source code for the packages they install, or knowledge of the extended toolchains that their users have employed. Furthermore, we do not assume that chart authors will always follow best practices or accommodate use cases that may be important to some class of users. In fact, the Helm security model urges us to include bad actors in the class of chart authors. (That is, there is or may be a small subclass of chart authors that have intentions counter to the desires of their target Helm users.) + +#### The Helm User Role + +Our assumptions about the base level of _Helm users_ are more modest. While some users may be experts, we do not assume that a Helm user _must_ be at that level. We do not assume they know much about Kubernetes or Helm--perhaps only enough to follow the Quickstart guide for Helm. With the base Helm user, we do not assume that they know what a Pod is, let alone a CRD. While we do assume that they know a little about YAML, we make no assumptions that they know about the Kubernetes flavor of YAML. + +#### The Importance of This Distinction + +Over time, our assumptions have shown themselves true. Many (perhaps even most) Helm users are new to Kubernetes, and we hear repeatedly that people have learned Kubernetes via Helm. Our issue queue is replete with examples of people who have installed Helm charts in production, but who are not Kubernetes experts by any measure. Chart authoring, on the other hand, has remained the domain of experienced Kubernetes users, and the questions we receive from chart authors indicate a high degree of comfort with Kubernetes itself. + +Some have attempted to argue that "really," the chart developer and the Helm user are the same person -- that most of the time, people build their own charts. Our usage information shows otherwise. The usage pattern we see most often with Helm is that a chart author is a different person than a Helm user. That is, most of the time, one group of persons creates charts, and another group of (non-overlapping) persons use the charts. + +As a consequence of this, we can assume that the _person using the chart does not know or understand the internals of the packages they install_. This is not merely a statement that they have not read the templates, but that they would not understand them even if they did, because they have not had to (nor should they have to) become fluent in the chart system to use the charts. + +And as a further consequence, we can say that _it is irrational to implement a solution that requires that the Helm user know and understand the internals of a chart_. It is irrational precisely because the empirical data shows that it is not the case that the majority of users understand their charts to that degree. One may easily draw analogy to other package managers: Most apt users do not know how apt packages work, and the same is true for RPM, Homebrew, Chocolatey and so on. + +When we consider solutions to this problem, then, it is incorrect to assume that a user should be responsible for mitigating poor choices made by a chart maintainer. + +This same justification has been used to develop many of Helm's core features. It is one of the reasons we go to great extremes to preserve backward compatibility from release to release. It is the reason we have built chart scanning tools, invested in best practices documentation, and built strong security measures into the template system. + +We will not ignore it for CRDs. + +### CRDs and How They Are Used + +CRDs are shared global resources. A "shared global resource" is a resource that can be installed only once (globally, not within a namespace) and which may be used by multiple different things. CRDs have one canonical record, which covers all the different versions of that CRD. + +Originally, CRDs were designed for a very specific purpose: To make it possible to add new controllers to Kubernetes. For example, if `Deployment` does not do what you want, you can write an alternative resource definition backed by a custom controller. While this pattern has definitely been useful, some see CRDs as a generic data modeling tool. We have seen many cases where CRDs were used to store configuration, model non-Kubernetes objects, or even serve as a data storage layer consumed by applications. While we do not think this was the spirit in which CRDs were intended to be used, we acknowledge that they _are_ used in this way, and therefore it is Helm's responsibility to not foreclose such usage patterns. + +A CRD may have a schema attached, which dictates the structure of an instance of that CRD (called a Custom Resource, or CR). Each version on the CRD object may have a schema, as well as other metadata. Note that none of these fields are immutable on the CRD. So a schema may be changed without altering any other fields on the CRD, thus breaking existing resources. + +While the CRDs are installed and somewhat managed by Kubernetes, their functionality is dictated largely by the controllers that use those CRDs. Thus, we have to include in our discussion the _developers_ who write the CRDs and controllers. + +You are encouraged to read the [Kubernetes documentation on CRD versions](https://kubernetes.io/docs/tasks/extend-kubernetes/custom-resources/custom-resource-definition-versioning/) before continuing here. As you read, note how many versioning tasks are delegated to developers, and how the assumption is that the developers have a low degree of sharing and a high degree of visibility into the cluster. There is no discussion of how this works in multi-tenant clusters, and the assumption is always that there is only one controller per CRD per cluster. Even with these simplifying assumptions, the document points out how many discrete tasks must be undertaken to ensure compatibility. In our experience, very few implementations actually do the work this document requires. Also note that there is no discussion there of controllers that become out of date with CRDs, though that is a possible situation. (A conversion webhook may render a resource unusable to a controller when multiple controllers watch the same CRD.) + +From the outset, then, when _just_ considering a simple environment and the concerns of the CRD developer, we can see a number of difficult problems. Now we can add to this the usage patterns that are in practice today. + +In Kubernetes, the following CRD patterns have emerged: + +- Generic CRD: A single CRD "generalizes" a description of something, and any programs that need that generalized object can use that CRD. The CRD is thus a shared resource with no single controller. +- CRD and Singleton Controller: A specific application defines a specific CRD that only it uses. Only one controller uses that CRD. +- Common CRD: Two or more tightly coupled programs use a CRD to update information that is shared between the programs. Microservice architectures sometimes use this approach. (ConfigMaps and Secrets are also used this way, and the documentation for CRDs even suggests this as an alternative to ConfigMaps and Secrets in this capacity) +- CRD and per-namespace controllers: One CRD is used globally, but each namespace that uses this CRD has its own controller which watches only that namespace. This strategy is done to reduce the cluster-level permissions the controller must have. + +As a special case, some controllers install and manage their own CRDs. For the most part, we won't deal with these here, as these do not pose a problem for Helm. + +The following facts about CRDs should be kept in mind throughout this paper: + +- CRDs are mutable. An operator can update versions, schemas, names, etc. on a CRD _ad hoc_. The API server will not enforce restrictions like it does on Deployments or other objects. +- When a CR (CRD instance) is written to Kubernetes (on an update, for example), it will be _rewritten_ to the version that the CRD has marked as default. This means that backward compatibility can break merely by updating the default version on a CRD object. [See this section of the docs](https://kubernetes.io/docs/tasks/extend-kubernetes/custom-resources/custom-resource-definition-versioning/#writing-reading-and-updating-versioned-customresourcedefinition-objects), which reveals a few other edge cases. + - During a read operation, Kubernetes can rewrite an object version without rewriting the body of the CR. So you can get a resource that is marked with a version that it actually is not. + - On a write operation, a version field may be permanently rewritten to a version other than the version given in the object to be written, but the body is not updated + - A retrieved object may not match the schema of the version that is in its apiVersion field because of the above. +- A developer can install a Kubernetes webhook that will auto-convert CRD fields. The controller does not have visibility into this conversion: It happens before the event triggers inside of Kubernetes. + +A quick glance through this section should reveal one stark fact: Everything that uses a CRD should (and perhaps must) use the same _version_ of the CRD as the one marked as the default for that cluster. This is the single most fragile aspect of the entire CRD system. + +### How This Impacts Helm + +Helm has had a difficult time dealing with CRDs since the beginning. And over time, the decisions made on Kubernetes CRDs have made it more (not less) difficult for us to work with them. + +Originally, we believed that CRDs would be used as they were originally intended: As descriptors of controllers that added Kubernetes functionality. As such, we initially thought a CRD could simply be treated as regular resources _because it would always only ever be bundled with a single controller that ran cluster-wide_. But that has proven not to be the case. Furthermore, the (anti-)pattern of distributing a CRD with multiple pre-populated CR instances is now a regularly encountered phenomenon. As such, we have been forced to treat CRDs as a special class of resource because a CRD must be loaded into the Kubernetes API server before a CR can reference that CRD. As we have seen the usage of CRDs expand well beyond the original intent, the patterns listed in the previous section are not anomalies, but standard practices in the community. Thus, our original designs for CRD handling have been completely re-thought--first in Helm 2 with the addition of CRD hooks, and then again in Helm 3 with special `crds/` directories in Helm charts. + +Our current solution (Helm 3) supports installing CRDs, but does not support modifying or deleting CRDs. Those two operations currently must be done out of band. The sections below explain this decision. + +#### Installing CRDs + +There are a number of well-described issues with installing CRDs. Users must have broad permissions. A CRD must be fully installed before a manifest that references that CRD can be accepted by the Kubernetes API server. (However, a CR can be accepted before there is anything available to handle the CR event.) It is entirely possible for two different applications to require different versions of the same CRD, but no clear way to support or declare that need within Kubernetes. This is exacerbated by the fact that while a CRD is a global object, the controllers that listen for CRD events may be namespace-bound. This means that two instances of the same controller (in different namespaces) can use the same CRD definition. There is no way to query Kubernetes to discover this fact. + +All of these things present challenges for installing CRDs. Essentially, any installation process must have some kind of logic like "If the CRD exists, check to make sure that it is compatible with the version of the CRD that I need, and then proceed on my installation. Otherwise, attempt to install the CRD, and handle the case that I might not have permission to do so." + +After looking at several ways of making it easy for chart developers to do this, we alighted on a fairly easy (though inelegant) solution: Helm, as it stands today, provides a separate location in a chart to add CRDs. These will be uploaded _before the chart's templates are even rendered_ (thus avoiding verification issues with the discovery API). If the CRD exists or if the permissions do not allow it, the chart will fail before the application is deployed. + +Of course, users are unhappy with this for a host of reasons. They want CRDs templated (without understanding the race conditions). They want stronger version controls. They don't like having a separate directory for CRDs. We sympathize... but we currently have not devised a better solution for the aforementioned problems. + +> NOTE: There is no requirement that CRDs can only be placed in the `crds/` directory. They can be put along side other resources in the `templates/` directory. This was an intentional design choice to preserve backward compatibility. + +### Deleting CRDs + +We'll delay talking about upgrades for just a moment, and skip to the easiest one: Deleting CRDs. + +Helm currently does not delete CRDs. The reasoning behind this decision is the trivial confluence of two aspects of CRDs: global resources and cascading deletes. + +The next two subsections explain these. + +#### Shared Global Resources + +Earlier, we looked at how Kubernetes CRDs are _shared global resources_. That is, only one resource describes the CRD and all of its versions, and that one resource is shared among all namespaces on a cluster. + +If application A and application B both rely on the same CRD, allowing application A to delete the CRD would be bad news for application B. While it's fairly harmless to allow the creation of a CRD by the first thing that wants it, it is bad to allow any dependent application to delete that CRD when that application cannot confirm that in so doing it will not cripple other applications that use the same CRD. + +However, there is actually no way to tell whether or not anything uses a CRD. That is an internal implementation detail of the controllers, which is entirely opaque to cluster operators, let alone to Helm. The Kubernetes API server _could_ remedy this situation, but does not. (Example: controllers could be required to indicate to the Kubernetes API server which CRDs they rely upon.) + +Even if Helm could determine whether a CRD was consumed by multiple Kubernetes applications, it could not tell which usages were required (application _depends_ on the CRD), optional (application can use the CRD if present), or incidental (application merely collects data). Again, this is because Kubernetes itself does not provide facilities for this (though it could). + +Therefore, there is no way to determine when it is safe to remove a CRD short of determining that the cluster itself is being destroyed. + +"But the user should know, and be allowed to delete when they want!" The _should_ in that sentence does a lot of work. Consider a multi-tenant cluster. Team A may install their application, which installs a CRD. But once that is installed, it is incumbent on Team A to work with all other cluster users (Team B, Team C, ...) to ensure that the CRD is unused before deleting the CRD. Helm is used in clusters that have thousands of cluster users. We cannot realistically assume that Team A can perform this step. + +Even more simply, there is no guarantee that Team A even knows that their chart installed a CRD. There are several cases to consider here: + +- Team A simply does not know that a chart has a CRD. After all, a user cannot be required to understand the details of every chart they install. This is complicated by the fact that a CRD could have been created in a subsequent upgrade or other circumstance that escaped Team A's notice +- Team A has no realistic way to discover Team B, as RBACs or other measures hide Team B's accounts and resources from Team A +- Team A _accidentally_ deletes a CRD by forcing a recreation operation or performing a destructive rollback (e.g. rollback to a version before the CRD was present). + +The frequent response to this point is to say, "users deserve to experience the outage if they uninstall a CRD." We do not think this is fair or accurate. Many times (especially in multi-tenant clusters), the team that uninstalls the CRD is not the group of people harmed. It's the _other_ cluster users. It is patently unfair to say "If Team A makes a mistake, Team B should pay the consequences even if they did nothing wrong." See the "Users First" section above. + +#### Cascading Deletions + +Another frightening aspect of CRDs that has prompted us to not support CRD deletion is the cascading effect: When a CRD is deleted, all of the instances of that CRD (the CRs) are deleted as well. + +Now consider this innocuous "fix": A chart is misbehaving. Something about the newest version is broken. The Helm user chooses one of the following actions: + +* rollback +* force delete and recreation + +If the rollback goes to a version _prior to_ the CRD, it will initiate a destruction of the CRD. If the operator deletes and recreates, it will destroy the CRD. Either method will trigger the auto-deletion of all CRs for that CRD. + +Now imagine that deleting entails removing a CRD that has hundreds of in-production instances (think SSL certificates on a large cluster). Suddenly, not only is the CRD gone (if only for a moment), but all of the SSL certificates are gone as well! And those records won't automatically come back with the next (re-)install. Cluster operators will be forced to take extreme measures, like restoring from backups or recreating assets. + +Again, this is not a story friendly to our "users first" philosophy. + +### Upgrading and Modifying CRDs + +This is perhaps the most vexed part of CRD handling. While the ramifications of deletion are straightforward, modifying CRDs is nuanced and complicated. + +If there was a way to require a one-to-one relationship between a controller and a CRD, upgrading would not be problematic. If it were the case that a CRD _must_ have exactly one controller, and that the lifecycle of the two was tightly coupled, upgrade would be trivial. However, this is not a requirement. In fact, previously we have shown multiple patterns that indicate multiple consumers of the same CRD--some of which may not even be controllers. + +Likewise, if there was a way that different versions of the same CRD could co-exist without being translated, and if those versions were immutable, then upgrades would also be fairly easy. That, however, is not the case. Kubernetes does weak auto-conversion of CRs, and provides a webhook facility for doing additional conversion. This greatly increases the complexity of upgrades. + +Because CRDs are mutable, it is possible for CRD manifests to change the behavior of a CRD without changing the version field on a CRD. While this case is easy to decry as bad practice, it is possible, and it (of course) occurs in the real world. + +Finally, as stated previously, there is no way for Helm (or any other process) to see which things on a cluster consume a given CRD. And there is certainly no way to determine what particular version of a CRD they consume. At best, there are weak inductive methods that could be used to say "during a given period, container X made a request to the API server that makes it look like it understands version X of CRD Y." But those methods are definitely non-trivial and non-exhaustive. This is something we view as a serious design flaw in Kubernetes itself. + +#### Upgrading CRDs + +Given the issues called out above, the core problem with upgrading a CRD instance is that Helm cannot determine whether upgrading a CRD will break other things in the cluster. It is worth calling out this fact again: CRDs are cluster-wide. A user may have no idea that by updating a Helm chart, it breaks other parts of the cluster that the user does not even have access to. For example, a user might have permissions to create CRDs, and permissions to do anything on that user's namespace, but not have even read access to any other namespaces on the cluster. Yet by updating the CRD, the user may break other things on the cluster to which the user has no access. + +It's not just multi-tenant clusters that can be dangerous, though. Even in a single-tenant cluster, with no way of seeing which things rely on a CRD, even a human operator might not be able to tell whether upgrading a CRD is safe, or whether other things on the cluster depend on that CRD's current version. Again, there is no way for a consumer (controller or otherwise) to indicate that it is consuming CRs for a particular CRD. _It is unrealistically expected that human operators will have knowledge of what CRDs are being consumed by which containers in the cluster_. + +The Helm view on this is that upgrading a CRD is something that an operator should do conscientiously. A manual upgrade of a CRD is safer because it requires the operator to at least be intentional about applying the specific change. Contrast that with the case where the CRD is "hidden" in a chart. In that case, the operator might be wholly unaware that running an upgrade will even touch a CRD. (The caveat here is that we do not believe Kubernetes provides a truly safe way to upgrade a CRD even when done by hand. Manual upgrades are merely _safer_ than automatic upgrades.) + +One frequently requested feature of CRDs is templating. Our concern with adding templating is that this particular story will become even more complicated by making it difficult for chart users to understand the extent to which a CRD will be modified during an upgrade. Small dynamic elements in a CRD schema could, for example, compound the complexity of having one CRD with multiple controllers. For example, if the schema attached to a CRD can be dynamically rendered, than a small change in a chart from version to version could result in the rewriting of a CRD schema in a non-intuitive way--and in a way that _breaks other things in the cluster_. And again, supporting templating here would make it incumbent on chart authors to be able to detect during an upgrade when the version of the CRD needs to increment (e.g. from `foo/v1beta12` to `foo/v1beta13`). We believe it is unrealistic to foist this responsibility on the chart author. + +In addition, there are some rather complex issues with the templating system that can cause either a race condition or an unexpected context during rendering of CRDs. But those may be rightly considered implementation details of Helm. + +Finally, note that flags on `helm upgrade` such as `--force`, `--wait`, and `--atomic` introduce additional complexity. For example, `--atomic` could allow a CRD to become active for a period, and then roll it back, but without repairing any CRs that were altered during the window that the CRD was active. In the worst cases, some suggested changes to Helm might actually cause the CRD to be _deleted and recreated_ during an upgrade, which would have the side-effect of deleting all CRs for that CRD. This, of course, could have dire unintended consequences. + +#### Rollbacks + +Rollbacks in Helm are a special kind of upgrade in which an old release is replayed over a newer release. Along with all of the drawbacks of upgrades, rollbacks present a few special challenges. + +If a CRD is rolled back, then the old version will overwrite the new version. + +There are two important cases here: (a) the older chart _does not have the CRD_, or (b) the older chart has an _older version of the CRD_. + +##### Rollback target does not have the CRD + +Consider the case where we roll back from revision 2 to revision 1 of a release, and revision 2 introduced a CRD that was not present in revision 1. + +In this case, the _proper_ behavior for Helm is to _delete the CRD_ from revision 2 when rolling back to revision 1. As previously mentioned, that will cause a cascading delete of all CRs for that CRD. In some circumstances, this is as desired. But in other circumstances, this could destroy resources belonging to other consumers of that CRD, or even destroy data that was needed during a recovery (e.g. roll back to one version, then upgrade from there). Thus, there are multiple avenues in which undesirable destruction of data may occur. + +##### Rollback target has an older version of the CRD + +In this case, both revision 1 and revision 2 have the CRD, but the version of the CRD changes between revisions. During a rollback, the proper behavior would be to roll back the CRD to its older version. + +But this is where Kubernetes' behavior gets interesting: + +- Any instance that was created as a new version will _stay_ as a new version, even though its `apiVersion` field will be rewritten to the old version. +- Kubernetes' behavior in this situation is undefined when it comes to version sorting. If a CRD version existed, and then no longer exists, it is unclear how Kubernetes will behave. +- It is unclear how the schemata will be applied in this case +- It is also unclear what will happen if the version number of the CRD that was rolled back is then used again, but with a different CRD schema. In some cases, client users will see schema errors, but the stored version may persist with a non-compliant body until it is cleaned up by a user. + +Thus, rollbacks have a few special cases where the uncertainty of Kubernetes' behavior could cause issues that are exceedingly hard to debug. + +## Rejected Ideas + +Proposed Solutions for Helm CRD Management + +In this section, we turn from enumerating problems to evaluating potential solutions. We understand that Helm users want a way to hide the complexity of CRDs and be able to do "simple things" like upgrade a CRD from one version to another without accidentally destroying data or harming other parts of the cluster. This has been a difficult goal to achieve though. + +As we progress through potential solutions, keep in mind the roles and caveats elaborated before: + +- Chart authors create charts +- Helm users install and manage instances of those charts +- We cannot assume that those roles are filled by the same person +- We cannot assume, specifically, that a Helm user understands the inner workings of a chart or even of Kubernetes +- We cannot assume that a Helm user looks at the contents of a chart +- We cannot assume that a chart author knows the target cluster environment +- We cannot assume that a chart author knows what other things will be running concurrently in the same cluster as the chart +- We NEVER want to assert that it's "the users problem" to figure out when a chart operation (install, upgrade, delete, rollback) could cause a catastrophic cluster event reaching beyond the specific chart installation. + +The following kinds of solutions have been suggested: + +1. Do not manage CRDs any differently than other resources +2. Helm should let chart authors control how CRDs are managed +3. Helm should let Helm users control how CRDs are managed +4. Helm should have deep special-case logic for handling CRDs + +Each of these is discussed below. + +### No Special CRD Management + +In this solution, a CRD is treated no differently than any other Kubernetes kind. + +_Prima facie_, this solution sounds like a no-nonsense go-to. Just drop CRDs in like any other resource and let the world figure out how to do this. + +This was our initial approach, and it worked fine in cases where all a chart did was install the CRD and possibly the controller that consumed that CRD. In other words, it worked _only for_ the original CRD case for a global CRD and a single global controller for that CRD. + +But this strategy did not scale as CRD usage followed new patterns. Earlier in this document, we enumerated different CRD patterns that have emerged. Helm's original design does not work as soon as CRDs break out of the simple case. It failed for the following reasons: + +1. CRDs alter the behavior of the API server. Specifically, discovery and validation change when a CRD is added or modified. +2. It is impossible to pre-verify a chart that has both a CRD and CRs for that CRD +3. `helm delete` becomes a very, very dangerous command, as it can destabilize a cluster by deleting a CRD +4. `helm upgrade` and `helm rollback` can have surprising consequences that are difficult to find and debug + +We still haven't solved #2, but by adding some special treatment of CRDs in Helm 3, we eliminated #3-4 and fixed #1. + +> **IMPORTANT**: It is still possible to use Helm this way. For CRD/Operator-only charts, this is a perfectly legitimate way of packaging. + +### Chart Authors Have Control + +In this category, the assertion is that the _chart author_ should be able to declare the conditions under which a chart is created, upgrade, or deleted. For example, one chart author may stipulate that on an upgrade, their chart should avoid modifying the CRD. Another chart author, though, may choose that on upgrade, their chart will modify the existing CRD. + +The problems that this approach must address are: + +- How can a chart author know when it is safe to install, upgrade, or delete a CRD without harming the broader cluster? +- How can massive data loss be prevented when a CRD is deleted? +- How can two versions of the same chart (with different CRD versions) be safely installed on the same cluster? +- Can the user opt to override this behavior if they detect an issue? (And if so, how?) + +As a broad category, this solution has been proposed several times. In fact, Helm 3 has a very weak version of this: If a CRD is stored in the `crds/` folder, by default it will be installed (and a user can skip with `--skip-crds`). This install only occurs if the CRD is not already present. If the CRD is present _it is not modified_. Following this strategy, _at worst_ the only package that sustains damage if the CRD is not at the right version is the package just installed. No existing behavior is broken. + +We frequently hear the complain that the above is not enough; that we _must_ also support updates and deletions. But no _specific comprehensive_ solution has surfaced that solves the problems above. Adherents of this view typically claim that users should merely accept the fact that a chart operation may destabilize an entire cluster by altering or deleting CRDs. We do not view that as an acceptable risk. + +### Helm Users Have Control + +In this model, the creation, modification, and deletion of CRDs is under the explicit control of the Helm user. A chart may declare a CRD, but that CRD is not changed unless the user specifically requests it. + +One could imagine, in this model, the following commands and flags: + +```console +$ helm install --with-crds ... +$ helm upgrade --allow-crd-modification ... +$ helm delete --unsafe-delete-crds ... +``` + +But with this model, there are also problems: + +- How does the user even know when a chart has a CRD? (If the answer is "the user has to read the chart," this is a non-starter) +- How does the user know whether it is safe to update a CRD? Or even that the CRD version or schema or fields have changed? +- How does the user discover whether the CRD is in use in namespaces that the user does not have access to? +- How does the user avoid catastrophic data loss on deletion? + +We have not discovered satisfactory answers to these questions, which has led us away from implementing this approach. + +### Helm Itself Has Control + +This is probably the most ambitious of the proposed solutions, and unsurprisingly the most frequently recommended as well. In this case, Helm itself has highly specialized logic that allows it to make decisions about when to install, upgrade, and delete CRDs. Both users and chart developers are "off the hook" when it comes to decision-making. Helm just _knows_. + +As things currently stand, there is no way for us to implement this. + +Basically every problem raised in this document is unsolved for this particular proposal. Helm can reliably determine if a CRD already exists, and can install a CRD if it does not exist and if the Helm user has sufficient permissions. But we have been unable to devise any way to solve the myriad upgrade, rollback, and deletion problems as well as the upgrade-on-install case for a CRD that already exists. + +## How To Teach This + +A critical challenge for Helm 3 has been to educate the Helm community about why the maintainers have made the choices we have made. + +Thee first step in teaching this has been to make the rationale generally accessible. +We hope the present HIP accomplishes this. But beyond that, we may need to head off some +common misconceptions directly. The remainder of this section discusses those. + +### Nobody is "Blocked" on This + +It has been claimed that this issue is a "blocker" to using Helm. While we hear this claim on occasion, it stems from a misunderstanding. + +First, there are widely documented patterns and work-arounds for how to handle CRDs. The most common is the pattern of separating CRDs into a separate chart that then treats these CRDs as standard resources. + +Second, if that doesn't work for you, then there is a way to implement whatever system you want. Helm provides a plugin mechanism that can add new Helm commands. + +Third, Helm provides another mechanism that can send intermediate results to an external processor before issuing commands against the API server. This "post-render hook" system allows for custom processing in-flight. + +Finally, of course, Helm provides `helm template`, which allows users to render the chart into static YAML that they can then send to the cluster using their own tools. + +So there are _four separate avenues_ with which you can pursue implementing more advanced CRD handling. None of them require knowing Go or opening PRs or even getting feedback from the core maintainers. None of them require that you pass any of the quality gates enumerated above. + +You are free to handle CRDs however you want. To get you started, here are some useful links: + +- Read the [CRD Best Practices](https://helm.sh/docs/chart_best_practices/custom_resource_definitions/) guide +- Learn about [plugins](https://helm.sh/docs/topics/plugins/) +- Use a [post-render](https://helm.sh/docs/topics/advanced/#post-rendering) +- Export YAML with [helm template](https://helm.sh/docs/helm/helm_template/#helm-template) + +Helm maintainers are not trying to prevent usage of CRDs. As we've stated above, though, our quality bar is high because we have a lot of people depending on us. But we have provided ways for you to achieve your own goals without meeting our standards or objectives. And perhaps others would find use in the plugins or tools you provide. + +### Helm Is Still Working On Thus, But We Cannot Solve It Alone + +CRDs continue to present a huge challenge to Kubernetes users in general. Helm perhaps has it worse than other projects, as Helm is a generic solution to a generic problem (Kubernetes package management). Helm knows nothing of a cluster's stability, intent, architecture, or the social organization around it. Thus, to Helm, a development cluster with one user is no different than a thousand-node multi-tenant cluster with rigid RBACs. + +We earnestly want to find a solution to the CRD problem, but we are adamant about not sacrificing Helm's usability in the name of flexibility. If a simple CRD operation like an upgrade or a delete can destroy data across a cluster, or can silently break dozens of applications, we simply choose not to provide that operation via Helm. + +If we can solve the problems presented above, we can support CRDs robustly. That is our desired goal. But in our estimation, Kubernetes is not yet mature enough for us to be able to do this. When we begin work on Helm 4, we will of course revisit the subject, but the guidelines in this document will still serve as guidance on Helm 4. \ No newline at end of file diff --git a/community/hips/hip-0012.md b/community/hips/hip-0012.md new file mode 100644 index 0000000000..065b017179 --- /dev/null +++ b/community/hips/hip-0012.md @@ -0,0 +1,282 @@ +--- +title: Helm 4 Development Process +sidebar_label: "0012: Helm 4 Development Process" +--- + + + +| **HIP** | **Title** | **Author(s)** | **Created** | **Type** | **Status** | +|---|---|---|---|---|---| +| 0012 | Helm 4 Development Process | Matt Butcher , George Jenkins , Matt Farina | 2021-04-02 | process | accepted | + + +## Abstract + +Helm 4 is planned as the next major version release of Helm. +Continuing to evolve Helm in its role as the Kubernetes package manager. + +This HIP outlines the requirements and process for building Helm 4. +It describes the scope of Helm 4 changes, with a focus on maintaining continuity within the Helm ecosystem. + +This HIP also aims for an open and productive process that enables Helm 4 to build upon the success of Helm 3. +To continue advancing Helm and its ecosystem for the benefit of the Helm community. + +## Motivation + +Helm 3 has been greatly successful, and Helm has built a significant ecosystem around the Helm client (CLI), charts, chart repositories, SDK, plugins, etc. +As Kubernetes continues to grow and change, Helm needs to adapt while continuing to add new features and functionality to support its mission as Kubernetes' package manager. + +However, Helm has accumulated debt. +One significant issue with Helm 3 is that making many (good) changes is overly difficult due to Helm's [HIP-0004](./hip-0004.md) backwards compatibility guarantees –- behavioral or API incompatible changes are not allowed during regular minor/patch version releases. +Helm 4 as a major release allows the project to make breaking API and other changes, which will enable it to reduce technical debt and leverage newer capabilities of Kubernetes. + +However, Helm 4 must maintain continuity in the Helm ecosystem. +It is crucial that Helm 4 be largely functionally/feature compatible with Helm 3. +Significant functional breakage will prevent users from easily migrating to Helm 4 and, at best, delay Helm 4's uptake and incur costs for Helm's users. +And at worst, could splinter the Helm ecosystem. + +The project also aims to timebox the Helm 4 release process. +Given the limited community resources available to enact changes, it is considered more important to produce a Helm 4 release that can deliver significant benefits in a moderate timeframe than a prolonged process that takes too long to provide meaningful results. + +## Rationale + +During the Helm 3 development process, Helm core maintainers received criticism that the process was not transparent enough. +This proposal aims to outline a formal process for a successful Helm 4 release to address those criticisms. + +Further criticism included a lack of clarity regarding who was in charge and how decisions were being made, as well as uncertainty about the criteria used for determining when Helm 3 was complete. + +This document is intended to address these criticisms by presenting a clear plan for the timely delivery of a valuable Helm 4 release to the community. +It describes the process in detail, providing both a roadmap for us to follow and a point of reference for community members to use when contributing changes. + +The process is based on the following ideas: +- Requiring changes to be documented, either as reduced "Helm 4 proposals" (H4HIP) or standard HIPs. +Allowing both Helm community members and maintainers to review them. +This oversight ensures that changes are in line with this HIP, regarding their functional and architectural implementation. +Additionally, documented changes enable contributors to independently implement agreed-upon proposals in coordination with the release engineer. +- Requiring a timeboxed development effort intends to promote focus on the most valuable changes that the community and maintainers can deliver within a reasonable timeframe. +It also aims to prevent an "open-ended" development cycle that might drag on or fizzle out. +Ideally, the majority of changes will be proposed and agreed upon during the planning phase of the development cycle. +However, amendments to the initial scope are permitted as long as they can fit within the agreed-upon timeframe. +Explicitly allowing for scope amendments ensures that any changes are well thought out. +For changes that don't make it into Helm 4's initial development cycle, they can included in Helm 4.x feature releases (subject to minor release compatibility guarantees). +And for further changes, there will be a Helm 5 release of course! + +## Specification + +### The process / timelines + +Helm 4 development will consist of three main phases: +1. Planning +1. Feature development +1. Release preparation + +The timeline will be approximately: + +1. Marking this HIP as "accepted" +1. Naming of a Release Engineer: Nov. 2024 +1. Kick-off: KubeCon/CloudNativeCon North America 2024 (Nov. 2024, Salt Lake City) +1. Earliest that engineering can begin: Nov. 2024 +1. Feature freeze for release preparation: By Aug. 2025 +1. Expected release of Helm v4.0.0: By the week before KubeCon/CloudNativeCon North America 2025 (expected Nov. 2025) + +Helm v4.1.0 release will be 3 months later (expected Jan. 2026 for the above timeline). And from then on Helm 4 minor releases will follow the same release cadence as Helm v3, shadowing Kubernetes by approximately 1 month. + +Helm 3 will reach end of life 6-8 months after Helm 4 release (July 2026 estimated) + +### Change suitability + +The Helm ecosystem is large, including not just the Helm CLI but also the SDK, Charts, and Chart repositories, plugins. +Helm also has several [roles or personas](/community/user-profiles) for different user categories, from "Application Operators" to "Helm Developers." +The Helm project must be careful in how it delivers changes without causing significant adverse impact to Helm's users or the overall Helm ecosystem. + +Therefore, while Helm 4 does not need to be semantically backwards compatible with Helm 3, it must not cause significant breakage for users who adopt Helm 4. +Clear migration options and paths should be documented and presented for Helm 3 users to update to Helm 4. + +### Change proposals + +To ensure that Helm 4 changes align with this HIP, Helm core maintainers will review proposals. +These proposals can take the form of lighter-weight Helm 4-specific proposals "H4HIP"s, or standard HIPs suitable for Helm 4 implementation. +Standard Helm HIPs that are marked suitable for Helm 4 will also be accepted. + +#### Helm 4 proposals (H4HIPs) + +A H4HIP is simply a reduced version of a standard Helm HIP. +They follow the same format as a HIP, but the author can choose to skip sections they do not feel applicable. +Intended to minimize the friction required for implementing small, functional changes in Helm 4 that do not warrant a full HIP process. +And to allow categorization of changes specific to the Helm 4 process and changes. +As well as to avoid feature development from Github issues. + +### Compatibility + +Even though Helm 4 is a major version release not bound by [HIP-0004](./hip-0004.md) compatibility guarantees, it must remain largely feature/functionality compatible with Helm 3. +Due to Helm's maturity and the extensive ecosystem built around its CLI, charts, SDK, etc. + +Where non-compatible changes are introduced, they should have migration documentation for equivalent functionality. +Functionality removal should prefer deprecation over immediate removal. +Behavioral changes that negatively impact a significant number of users without reasonable migration options cannot be allowed. + +Specific requirements for compatibility include the following: + +#### Compatibility with existing charts and releases + +While the tooling can evolve, Helm must maintain compatibility with existing charts and releases. +A Helm 4 that cannot operate on Helm 3 charts (and vice versa) effectively becomes a different tool, which likely would diverge the Helm ecosystem. + +Specifically, charts deployable with Helm 3 should be deployable by Helm 4. +Similarly, any existing chart (release) managed by Helm 3 must be upgradable by Helm 4. +However, Helm 3 may not be able to manage releases created using later Helm 4.x series (which may introduce incompatible changes). + +Exceptions for already deprecated functionality, such as `requirements.yaml`, may be made. + +#### Compatibility with existing CLI workflows + +The Helm CLI is deeply integrated into thousands of release pipelines and automation systems, so while it can evolve, it must remain loosely compatible with existing users' workflows. + +A judgment call will be required by the release engineer and maintainers regarding how much a given change might impact user workflows. +Possible mitigation strategies for those changes should also be considered. + +As a baseline, most "Application Operator" users of Helm 3 CLI should experience no disruption or minimal adjustments to their workflows during the upgrade to Helm 4. +Changes should be clearly documented in a migration guide. + +More advanced users, such as "Application Developers," might be subject to more significant changes at the discretion of the release engineer and maintainers. + +### The Release Engineer + +A single individual will oversee the planning and development phases of Helm 4. +This person will be the _Release Engineer_. +For Helm v4 the _Release Engineer_ will be Matt Farina. +The person will have the following responsibilities: + +- Lead the kick-off meeting +- Define the process for including features +- Determine the timelines for development +- Make the determination of when the project has indeed reached a milestone +- Name and oversee releases +- After the release, the release engineer will determine what the "intent" of a Helm behavior was (which informs determining whether an incoming breaking change is a feature or a bug fix) + +#### Determining Who Will Be Release Engineer + +To become the release engineer for the Helm project, an individual must be a core maintainer on project. +The engineer must be an active core maintainer. +Self-nominations are encouraged, and potential nominees must agree to their nomination. +The Helm project maintainers will then decide which nominated maintainer should serve as the release engineer. + +If the release engineer is unable to fulfill their duties, the Helm project maintainers may select a replacement. + +#### Planning + +This phase begins when the release engineer is appointed. +The goal of the planning phase is to have a specific period to prioritize writing and reviewing proposals. +And enable time to focus on buidling, prioritizing and reviewing the major changes for Helm 4. + +The release engineer shall schedule a kick-off meeting, inviting all Helm maintainers from any Helm org project to attend. +The release engineer may also decide who else to include and whether the meeting will be public. +During the kick-off meeting, participants are encouraged to propose feature ideas and changes, with preference given to those already documented as HIPs. + +This process continues until the release engineer deems it sufficient, but for a minimum of two months, to allow ample community input. + +All proposed features and breaking changes must be described in a standard HIP or Helm 4 proposal (H4HIP). +This approach offers several advantages: +- All changes are documented +- Changes undergo scrutiny before PR creation +- A clear record of alternative considerations exists + +Minor non-functional changes for "bug fixes" or cleanup, as determined by core maintainers, do not require formal proposals. + +The outcome of the planning cycle is a well-documented list of approved HIPs detailing Helm 4's major changes. +This list will serve as the foundation for working on Helm 4. + +Items which are readily agreeable for Helm 4 (as determined by the release engineer and core maintainers) may begin implementation during the planning phase. +Cleanup and non-functional changes may proceed while in the planning phase. + +#### Feature Development + +During this phase, agreed-upon features and changes from the planning stage will be implemented. +Breaking changes are permitted, as well as experimental features that may be removed before final release. +The approval process for PRs remains as previously defined within the project, but any PR not aligned with the current plan must receive approval from the Release Engineer. + +Additional features can be propsed during the feature development phase, at the release engineers discretion. + +This phase concludes with Alpha releases, where new features can still be incorporated and breaking changes may be implemented at the release engineer's discretion. + +#### Release Preparation + +During this final phase, no new features will be added except for those deemed critical by the release engineer. +The focus shifts towards bug fixes, documentation improvement, security audits and addresses, and preparation of the ecosystem, such as chart modifications. +All Beta and Release Candidates (RC) are produced during this stage. + +Before the stable release, there will be a 4-6 week testing period for public feedback. +The duration is determined based on the testing progress and the trust in the code leading up to the release candidate window. + +This phase concludes when Helm `v4.0.0` is released, but it must not be shorter than a three-month duration to ensure adequate time for ecosystem testing and feedback. + +### Halting Helm 4 Development + +During the course of Helm 4 development, it may become clear that there is not enough justification for continuing development. +Reasons could include insufficient feature HIPs or lack of sponsorship and support from Helm project maintainers. + +If this occurs, the Helm maintainers can hold a "circuit breaker" vote to temporarily halt Helm 4 development until a more suitable time arises. + +The procedure for stopping Helm 4 development requires a simple majority vote among the Helm project maintainers. + +### Maintaining Helm 3 + +This section outlines how we will support Helm 3 throughout the Helm 4 development process. +The Release Engineer retains the freedom to modify this approach for the sake of providing the best experience to Helm users. + +During the "Feature Development" phase of Helm 4, Helm 3 will continue to receive security, bug, and minor feature patches. + +During the Alpha, Beta, and RC phases of Helm 4, no feature patches will be applied to Helm 3 to avoid introducing Helm 4 features prematurely while Helm 4's features are locked. + +Helm 3 will receive bug fixes for 6-8 months following the release of Helm 4 and security fixes for one year from the day Helm 4 is made available. + +## Backwards compatibility + +Nothing in this document contradicts our existing decision-making process. +Specifically, [HIP-0004](./hip-0004.md) pertains only to minor and patch releases, not major version releases. +This does not affect the PR review process or the HIP process, as both are expected to remain unchanged. + +## How to teach this + +The plans for Helm 4 will to be announced during KubeCon/CloudNativeCon North America 2024 at both the Helm Maintainers talk and Helm 'contribfest'. + +The content of this HIP will be discussed publicly in the regular Helm Dev meetings, which are recorded. + +Throughout all stages of Helm 4 development, the Release Engineer is committed to providing updates on progress during no fewer than two Helm public dev calls per +month. + +## Rejected ideas + +Helm 3 was primarily developed using an informal version of the proposed process, but we were criticized for lacking documentation and transparency. +This proposal presents an alternative to an "informal process," which might elicit similar criticism. + +Multiple release engineers were considered, but deemed inappropriate for two reasons: +1. The need for a singular authority in charge of architectural integrity and resolution +2. The lack of sufficient Helm core maintainers to justify a committee + +We entertained the idea of allowing a non-core maintainer to serve as release engineer, but rejected it due to these concerns: +1. A release engineer requires comprehensive knowledge of Helm's design, intents, and implementation, which is best ensured through maintainer status +2. A non-core maintainer is not bound by the core maintainer process, potentially introducing tension and exceptionalism + +We pondered enabling any Helm maintainer from any project to serve as the release engineer for Helm, but determined that the in-depth technical knowledge of the Helm core codebase is essential for this role's successful execution. +We regard the release engineer position as more akin to an architect than a project manager. + +We considered restricting the release engineer role to org maintainers, but decided against it since their focus is on organizational (not technical) aspects of the project. +Release engineering is beyond their charter. + +We debated abandoning the requirement for HIPs or written proposals for features and changes during the Helm 4 process, as we had done so in the past. +However, we also faced pushback from the community regarding major changes being implemented without proper discussion. +Furthermore, there is a lack of documentation detailing past decisions made in Helm 2, with only a few draft documents available in Helm 3. + +Therefore, HIPs and their lighter-weigtht couterparts "Helm 4 proposals" (H4HIPs) will serve as a platform for public discourse and provide a recorded decision-making process. +While some may argue this adds unnecessary overhead, we believe the advantages far outweigh the burden. + +We considered eliminating the mandatory minimum durations for planning and release preparation periods. +However, careful consideration is required during a major version transition on a project as impactful as Helm's. +It is in the community's best interest for developers to proceed at a deliberate pace with clearly defined timeframes. diff --git a/community/hips/hip-0014.md b/community/hips/hip-0014.md new file mode 100644 index 0000000000..5ae656baff --- /dev/null +++ b/community/hips/hip-0014.md @@ -0,0 +1,97 @@ +--- +title: Helm Triage Maintainers +sidebar_label: "0014: Helm Triage Maintainers" +--- + + + +| **HIP** | **Title** | **Author(s)** | **Created** | **Type** | **Status** | +|---|---|---|---|---|---| +| 0014 | Helm Triage Maintainers | Matthew Fisher | 2021-07-06 | process | accepted | + + +## Abstract + +The existing Helm Project Maintainers have identified the need for a new "triage" role. This document lists out the responsibilities of this new role. + +## Motivation + +Helm Project Maintainers are responsible for activities surrounding the development and release of code, the operation of any services they own (e.g. ), or the tasks needed to execute their project (e.g., community management, setting up an event booth). Introducing a new "Helm Triage Maintainer" role allows new project maintainers to join the project without the responsibilities of release management, service operation, or event management. + +This new role provides three benefits: + +1. New Triage Maintainers can help maintain the project's day-to-day, such as responding to new tickets and review pull requests +2. Helm project maintainers' burden is reduced, allowing them to carry out higher-level tasks like coordinating software releases, organizing events, and maintaining production services. +3. Provides an easier on-ramp from community members, to Triage Maintainers, to project maintainers, to org maintainers. + +## Rationale + +Project maintainers are looking for new members to join the project. However, community members have expressed in the past that they cannot commit more than a few hours per month to the project. Additionally, some project maintainers are concerned providing newer members the "keys to the castle" prior to a formal vetting process may introduce significant risk to the project's users. A new maintainer may be available to help maintain the project, but it may take several months before trust is established. + +## Specification + +The new Triage Maintainer role is allowed to perform certain day-to-day tasks as a maintainer of the project, including: + +- attach labels to issues +- assign issues to milestones +- review and approve pull requests +- nominate new Triage Maintainers +- nominate new Core Maintainers + +The following roles and responsibilities are NOT allowed to be performed under this role: + +- merge pull requests +- release new revisions of the Helm Client +- operate any public-facing services, such as + - + - Mailing lists + - Slack channels + - The helm/helm GitHub project +- organize official LF events (Helm Summit) +- vote on governance-related topics (including membership votes) +- become a member of the security team +- receive access to the helm_project Keybase team +- receive access to the cncf-helm-core-maintainers mailing list + +These restrictions can be waived if these responsibilities are performed under direct supervision of a Helm Project Maintainer. For example, if a Helm Triage Maintainer would like to learn the release process, they may "shadow" the Helm Project Maintainer that is assigned as the release engineer. Triage Maintainers may also join the Helm Summit Program Committee to help review CFPs, but cannot be assigned the role of Program Chair. + +The same rules about active maintainers applies to Triage Maintainers. Triage maintainers MUST remain active on the project. If they are unresponsive for > 3 months they will lose maintainer status unless a super-majority of the other project maintainers agrees to extend the period to be greater than 3 months. + +The same voting process as Core Maintainers apply to Triage Maintainers. Nominations are sent to the [public helm mailing list](https://lists.cncf.io/g/cncf-helm). Users must declare who they wish to nominate as Triage Maintainer. Self-nominations are accepted. + +Afterwards, the Core Maintainers call for a vote on the internal Core Maintainer mailing list. If a two-thirds majority agree to the vote, the nomination passes. + +## Backwards compatibility + +Community members may still request for a vote to join as a full project maintainer. This new role provides an additional option to join the project at a lower commitment level. + +## Security implications + +The role helps protect the Helm Client and its users from new maintainers with malicious intent to de-rail or otherwise "pwn" the project. As Helm is one of the CNCF's most popular projects, a certain level of care and caution should be taken when providing new members access to production services. This new role helps keep the list of maintainers with production system access to a minimum. + +## How to teach this + +The contents of this HIP will be discussed in the public Helm Dev meeting, which is recorded. + +## Rejected ideas + +The author considered whether a Triage Maintainer could perform the duties of a release engineer, but rejected as a release engineer needs detailed information about the project's design, intents, and implementation. These tenets are not necessarily required to be a Triage Maintainer. + +## Open Questions + +All of the Helm project's secret credentials are stored in the helm_project Keybase team, which we currently use for cross-communication between other project maintainer groups. This is a shared team - every project maintainer (helm, helm-www, chartmuseum, etc.) has access to the credentials in that account. + +Should those credentials be moved elsewhere so we can invite Triage Maintainers to the channel, or should Triage Maintainers be restricted to the mailing list/slack channels? + +A: It's probably best to use the mailing list/slack channels for this role; the Triage Maintainer is (hopefully) a stepping stone to project maintainer, which requires access to Keybase. + +## References + +- The Helm organization's [governance structure](/community/governance/governance) +- The Helm organization's [team structure](https://github.com/helm/community/blob/main/maintainer-groups.yaml) diff --git a/community/hips/hip-0015.md b/community/hips/hip-0015.md new file mode 100644 index 0000000000..45d5739a6d --- /dev/null +++ b/community/hips/hip-0015.md @@ -0,0 +1,130 @@ +--- +title: Annotation for Images used by Helm Charts +sidebar_label: "0015: Annotation for Images used by Helm Charts" +--- + + + +| **HIP** | **Title** | **Author(s)** | **Created** | **Type** | **Status** | +|---|---|---|---|---|---| +| 0015 | Annotation for Images used by Helm Charts | Tom Runyon , Scott Rigby , Andrew Block | 2021-10-07 | feature | draft | + + +## Abstract + +The images used by a Helm chart is not easily discoverable in the chart definition. When deploying Operators and CRDs, the images needed to instantate all the pods for a Helm release may not be present by templating the default values for a Helm chart, whic provides blockers when automatically discovering dependencies for Bill of Materials. + +## Motivation + +Without a standard methodology for defining the images used by a chart, third party applications that require metadata for Helm Charts are using custom keys unique to their application, e.g. [Artifact Hub](https://artifacthub.io/docs/topics/annotations/helm/#supported-annotations) or [Openshift](https://docs.openshift.com/container-platform/4.8/operators/operator_sdk/osdk-generating-csvs.html#olm-enabling-operator-for-restricted-network_osdk-generating-csvs). By Standardizing metadata, charts can be built to be consumable by a varity of tools for metadata, bill of materials, airgap deployments, etc. Current solutions of dynamically discovering the images needed by templating the chart do not account for all possible templating paths for the chart, nor capture images that are deployed as part of an Operator paradigm and not defined explicitly as pods in the helm chart. + +## Rationale + +The `helm.sh` prefix identifies the standard belonging to the Helm community, and the `/images` path clearly identifies the type of objects being identified. The annotation will define a string that can be parsed into a list that the chart maintainer will manage as they knowingly adjust the images needed for the chart's deployment. Each element of this image list will contain at least a `name` for the image as well as a location for the image in the `image` field. and an optional `dependency` field described in the specification. The elements _may_ have additional properties to meet additional use cases, such as the `whitelisted` field used by ArtifactHub, or providing a public key for signed images. The additional fields are not part of this standard, but how they get attached to each image _is_. + +## Specification + +A helm chart would be define the images in the `annotations` field: + +```yaml +apiVersion: v1 +version: 6.0.0 +appVersion: 6.0.0 +name: podinfo +engine: gotpl +description: Podinfo Helm chart for Kubernetes +home: https://github.com/stefanprodan/podinfo +maintainers: + - email: stefanprodan@users.noreply.github.com + name: stefanprodan +sources: + - https://github.com/stefanprodan/podinfo +kubeVersion: ">=1.19.0-0" +annotations: + helm.sh/images: | + - name: podinfo + image: ghcr.io/stefanprodan/podinfo:6.0.0 + - name: redis + image: dockerhub.io/_/redis:6.0.8 + whitelisted: true +``` + +When a chart contains a dependency or subchart, the expection is that the metadata of the dependency/sub chart will contain the `helm.sh/images` annotation to identify the images required by the dependency chart. If that isn't true, the top level chart can provide the images entry for that chart and use the optional `dependency` field to identify the sub chart that the image is used in. For example, the Bitnami Kafka chart would identify the images used in `common` and `zookeeper` as part of the `kafka` chart metadat: + +```yaml +annotations: + category: Infrastructure + images: | + - name: kafka + image: docker.io/bitnami/kafka:2.8.1-debian-10-r0 + - name: kubectl + image: docker.io/bitnami/kubectl:1.19.5-debian-10-r3 + - name: shell + image: docker.io/bitnami/bitnami-shell:10-debian-10-r199 + - name: kafka-exporter + image: docker.io/bitnami/kafka-exporter:1.4.2-debian-10-r5 + - name: jmx-exporter + image: docker.io/bitnami/bitnami/jmx-exporter:0.16.1-debian-10-r66 + - name: zookeeper + image: docker.io/bitnami/zookeeper:3.7.0-debian-10-r157 + dependency: zookeeper + - name: shell + image: docker.io/bitnami/bitnami-shell:10-debian-10-r202 + dependency: zookeeper +apiVersion: v2 +appVersion: 2.8.1 +dependencies: + - name: common + repository: https://charts.bitnami.com/bitnami + tags: + - bitnami-common + version: 1.x.x + - condition: zookeeper.enabled + name: zookeeper + repository: https://charts.bitnami.com/bitnami + version: 7.x.x +description: Apache Kafka is a distributed streaming platform. +engine: gotpl +home: https://github.com/bitnami/charts/tree/master/bitnami/kafka +icon: https://bitnami.com/assets/stacks/kafka/img/kafka-stack-220x234.png +keywords: + - kafka + - zookeeper + - streaming + - producer + - consumer +maintainers: + - email: containers@bitnami.com + name: Bitnami +name: kafka +sources: + - https://github.com/bitnami/bitnami-docker-kafka + - https://kafka.apache.org/ +version: 14.2.1 +``` + +It's worth noting that the `bitnami-shell` image is used in both zookeeper and kafka, but with different tags. + +## Backwards compatibility + +Since there is no existing specification, the annotation will be optional to support backwards compatibility. + +## Security implications + +Have to think about it, but don't see any. + +## How to teach this + +The specification can be added to documentation around building helm charts, and exmaples of tools using this feature (e.g. ArtifactHub) would facilitate adoption/clarity on how its used. + +## Rejected Ideas + +### Helm Templating Discovery + +The methodology of dynamically discovering images used by a chart _can_ work in certain situations but also has limitations with images that are only used for certain use cases, as well as operator charts that don't expose the images needed as part of the rendered manifests. diff --git a/community/hips/hip-0016.md b/community/hips/hip-0016.md new file mode 100644 index 0000000000..57167cc164 --- /dev/null +++ b/community/hips/hip-0016.md @@ -0,0 +1,128 @@ +--- +title: Add export-values directive (similar to import-values) +sidebar_label: "0016: Add export-values directive (similar to import-values)" +--- + + + +| **HIP** | **Title** | **Author(s)** | **Created** | **Type** | **Status** | +|---|---|---|---|---|---| +| 0016 | Add export-values directive (similar to import-values) | Jan von Loewenstein , Johannes Dillmann , Pavel Busko , Philipp Stehle , Ralf Pannemans , Sumit Kulhadia | 2022-02-01 | feature | draft | + + +## Abstract + +Composing Helm charts using dependencies is currently limited because it is not possible to create a chart with a defined set of values and distribute them to subcharts. + +With the `import-values` directive, there is a mechanism in Helm to use the default values of a subchart as a value in the parent chart and define the name under which the subchart value is available in the parent chart. +This HIP proposes an `export-values` directive which is similar to the [`import-values`][import-values] directive, and allows exporting values from the parent chart to the subchart and defining the name under which it should be available. +With that the values of the parent chart and the values of the subcharts can be defined independently. Subcharts can use their local values exclusively and don't have to be aware of the usage as a subchart. Parent charts on the other hand, can provide a consistent configuration api to their users and orchestrate the exchange of values between the subcharts using `export-values`, `import-values` or a combination thereof. + +This change was discussed in [helm/#3242]. There were several attempts to implement this: [helm/#7477], [helm/#10059]. + +## Specification + +With the proposed `export-values` directive, users are able to specify in the **parent** chart (snippet below) which and where values should be exported to the **subchart**. + +```yaml +# Chart.yaml: +dependencies: + - name: client + version: 1.0.0 + export-values: + - parent: "port" + child: "serverPort" + - name: server + version: 1.0.0 + export-values: + - parent: "port" + child: "exposePort" + - "server-config" +``` + +```yaml +# values.yaml +port: 8080 +exports: + server-config: + debug: true +``` + +```yaml +# charts/client/values.yaml +serverPort: 9090 +``` + +```yaml +# charts/server/values.yaml +exposePort: 80 +debug: false +``` + +### Value Precedence + +Because later changing the order of precedence between value-sources would be a breaking change (same input, but potentially different output), we should agree on an intuitive and user-friendly order of precedence before implementing this HIP. + +Suggested precedence: + +1. Explicitly set for subchart value (`client.port`) +1. Explicitly set for parent chart's value (`port`) +1. default for parent chart's value (`values.yaml` in parent chart) +1. default for subchart value (`values.yaml` in subchart) + +For the example above, this would mean that `.Values.port`, `.Values.client.serverPort` and `.Values.server.exposePort` will default to `8080` unless e.g. `--set port=1234` is provided via flags, which would overwrite all these values. +In contrast using e.g. `--set client.serverPort=42` would only overwrite the `.Values.client.serverPort` value. + +### Combination with `import-values` + +It should be able to use both, `export-values` and `import-values` independently and in combination. It should also be possible to export a value which was imported from a third chart. + +## Motivation + +Currently, it is not possible to compose charts using dependencies without leaking the structure of the values of the subcharts used. +Users of a parent chart instead have to provide values to the subcharts directly. Alternatively, users can provide `global` values, but in that case the subcharts need to be aware of the fact that they are used as a dependency. In addition, `global` values are available globally as the name suggests and hence multiple subcharts have to have aligned value keys. As a result, the parent chart and its dependencies are rather tightly coupled. + +This HIP would allow to freely structure the values the user interacts with. + +The problem described above is less severe, if the subchart author, parent chart author and consumer are the same person or team. +It becomes much more relevant for parent chart authors, that want to consume existing charts and provide it to a number of users without leaking the internal structure (i.e. the fact that it is using subcharts and how many) to the users. + +## Rationale + +Using the same parent chart as in the [specification](#specification) without `export-value`, the `port` value must match and must be specified twice by the user. + +```yaml +# values.yaml +client: + serverPort: 8080 + +server: + exposePort: 8080 +``` + +The proposed structure is not only cleaner for the user, but also less error prone since the port value is only maintained once. + +## Backwards Compatibility + +On one hand this change won't break any existing Helm chart since it only adds new mechanisms. +On the other hand installing a chart which requires this feature with older versions of Helm make it fail silently, as values won't be passed to the child. +There is currently no way to specify a minimum Helm version. +The current workaround is to add this to a parent chart template, which will fix the otherwise silent failure: +`{{- if semverCompare ">3.10.0" .Capabilities.HelmVersion.Version }} {{- fail "This chart requires helm version 3.10.0 or higher" }} {{- end }}`. +A built-in mechanism to specify a minimum Helm version for a chart could be introduced in a separate HIP. +Until such time, the introduction of this `export-values` functionality would require documenting this workaround for chart authors who wish to make their parent charts depend on the Helm version that introduced this functionality. + +## Reference Implementation + +TBD + +[helm/#3242]: https://github.com/helm/helm/issues/3242 +[helm/#7477]: https://github.com/helm/helm/pull/7477 +[helm/#10059]: https://github.com/helm/helm/pull/10059 +[import-values]: https://helm.sh/docs/topics/charts/#importing-child-values-via-dependencies diff --git a/community/hips/hip-0017.md b/community/hips/hip-0017.md new file mode 100644 index 0000000000..acf4e3228d --- /dev/null +++ b/community/hips/hip-0017.md @@ -0,0 +1,130 @@ +--- +title: Helm OCI MediaType Registration +sidebar_label: "0017: Helm OCI MediaType Registration" +--- + + + +| **HIP** | **Title** | **Author(s)** | **Created** | **Type** | **Status** | +|---|---|---|---|---|---| +| 0017 | Helm OCI MediaType Registration | Andrew Block | 2022-06-09 | informational | accepted | + + +## Abstract + +The use of OCI artifacts is one of the packaging methods available in Helm. A Helm OCI artifact is comprised of multiple component, each defined by a specific Media Type. Media Types are managed by the [Internet Assigned Numbers Authority (IANA)](https://www.iana.org) and each type should be registered with IANA so that it can not only be known by the organization, but also discoverable by end users. The canonical location for Helm Media Types information below is intended to be the IANA [application registry](https://www.iana.org/assignments/media-types/media-types.xhtml#application). This document describes the necessary fields that are associated within the [registration of a Media Type to IANA](https://www.iana.org/form/media-types) form. + +## Motivation + +Support for the storage of Helm charts as OCI artifacts was released in released in General Availability (GA) in version 3.8.0 and with the continued adoption of this storage format, the specifications should be readily available for producers and consumers. Registration of Media Types with the Internet Assigned Numbers Authority has become a standard process within other technologies whom also make use of OCI artifacts so that not only the packaging types can be understood, but also documented. + +## Rationale + +A Generally Available (GA) feature that implements a particular specification should account for its usage. Not only does the registration of Media Types to IANA follow a practice that has been implemented previously, but also provides a better understanding of the Helm project. + +## Specification + +Each Media Type that Helm implements requires their own separate registration to IANA. The sections below detail the properties associated within the registration form for each of the Media Type's that will be submitted to IANA. + +### Helm Config + +The [OCI config](https://github.com/opencontainers/image-spec/blob/main/config.md) containing a JSON formatted representation of the Helm `Chart.yaml` file. + +  |   +------ | ----- +| Type Name | application | +| Tree | Vendor Tree (vnd prefix) | +| Subtype Name | `cncf.helm.config.v1+json` | +| Required Parameters | Fields as required per the Chart.yaml definition | +| Optional Parameters | Remaining fields which as defined within the Chart.yaml definition which are not noted as required | +| Encoding Considerations | Encoding considerations are identical to those specified for the "application/json" media type. See [RFC8259](https://datatracker.ietf.org/doc/html/rfc8259). | +| Security Considerations | Similar security concerns common to all JSON content types. See [RFC 7159 Section #12](https://tools.ietf.org/html/rfc7159#section-12) for additional information. The included content as defined by the Helm chart definition may include sensitive assets including personal contact information, source code repositories or other referenceable locations. | +| Interoperability Consideration | N/A | +| Published specification | [https://helm.sh/docs/topics/charts/#the-chartyaml-file](https://helm.sh/docs/topics/charts/#the-chartyaml-file) | +| Application Usage | Internally within the Helm package manager as well as various interfacing applications | +| Fragment Identifier Considerations | N/A | +| Restrictions on Usage | N/A | +| Provisional Registrations | N/A | +| Additional Information |

  1. Deprecated alias names for this type: None
  2. Magic number(s): None
  3. File extension(s): .json
  4. Macintosh file type code: TEXT
  5. Object Identifiers: None
| +| Intended Usage | Common | +| Other Information and Comments | N/A | + +### Helm Content + +Represents the packaged Helm chart. + +  |   +------ | ----- +| Type Name | application | +| Tree | Vendor Tree (vnd prefix) | +| Subtype Name | `cncf.helm.chart.content.v1.tar+gzip` | +| Required Parameters | N/A | +| Optional Parameters | N/A | +| Encoding Considerations | Binary | +| Security Considerations | No security controls are enforced by Helm. The content of a Helm package is not intended to – but may potentially – contain resources that are sensitive in nature. | +| Interoperability Consideration | N/A |` +| Published specification | None | +| Application Usage | Internally within the Helm package manager as well as various interfacing applications | +| Fragment Identifier Considerations | N/A | +| Restrictions on Usage | N/A | +| Provisional Registrations | N/A | +| Additional Information |
  1. Deprecated alias names for this type: None
  2. Magic number(s): None
  3. File extension(s): None
  4. Macintosh file type code: None
  5. Object Identifiers: None
+| Intended Usage | Common | +| Other Information and Comments | N/A | + +### Helm Provenance + +Represents the Helm Provenance file associated with a signed chart. + +  |   +------ | ----- +| Type Name | application | +| Tree |Vendor Tree (vnd prefix) | +| Subtype Name | `cncf.helm.chart.provenance.v1.prov` | +| Required Parameters | Fields as specified within Helm provenance file definition | +| Optional Parameters N/A | +| Encoding Considerations | The utf-8 charset is always used for this type | +| Security Considerations | The contents of a Helm provenance file contains a GnuPG detached ASCII-armored signature of the Helm chart definition file as well as the definition itself. The Helm chart definition may include sensitive assets including personal contact information, source code repositories or other referenceable locations. +| Interoperability Consideration | N/A | +| Published specification | | +| Application Usage | Internally within the Helm package manager as well as various interfacing applications | +| Fragment Identifier Considerations | N/A | +| Restrictions on Usage | N/A | +| Provisional Registrations | N/A | +| Additional Information |
  1. Deprecated alias names for this type: None
  2. Magic number(s): None
  3. File extension(s): None
  4. Macintosh file type code: Text
  5. Object Identifiers: None
| +| Intended Usage | Common | +| Other Information and Comments | N/A | + +## Backwards Compatibility + +N/A + +## Security implications + +N/A + +## Reference implementation + +The responses associated with each Media Type registration has been inspired by the previously registered [IANA Media Types](https://www.iana.org/assignments/media-types/media-types.xhtml). + +## Rejected ideas + +None + +## Open issues + +None + +## References + +Existing Media Types of similar category and purpose can be found within the list of registered [IANA Media Types](https://www.iana.org/assignments/media-types/media-types.xhtml). The following are examples of media types that have been registered with IANA: + +* [json](https://www.iana.org/assignments/media-types/application/json) +* [gzip](https://www.iana.org/assignments/media-types/application/gzip) +* [wasm](https://www.iana.org/assignments/media-types/application/wasm) diff --git a/community/hips/hip-0018.md b/community/hips/hip-0018.md new file mode 100644 index 0000000000..792a425fb4 --- /dev/null +++ b/community/hips/hip-0018.md @@ -0,0 +1,90 @@ +--- +title: Add Repository URL and tarball digest to a chart's release metadata +sidebar_label: "0018: Add Repository URL and tarball digest to a chart's release metadata" +--- + + + +| **HIP** | **Title** | **Author(s)** | **Created** | **Type** | **Status** | +|---|---|---|---|---|---| +| 18 | Add Repository URL and tarball digest to a chart's release metadata | Luke Reed , Andy Suderman | 2021-11-24 | feature | draft | + + +## Abstract + +Currently there is no way of knowing the exact repository that a chart originated from for a given release. There are ways to guess by looking at the sources list in the chart metadata, but since this is provided via the `Chart.yaml` file, any forks of that repository will look identical. The only way to concretely know what the repository URL that was used at install/upgrade time is to populate a repository URL metadata field in the release during the install or upgrade. It should work for both traditional repositories behind an http web server, as well as an OCI compliant repository. + +The second part of this proposal would include the tarball digest of a chart in the metadata. This aspect is less fleshed out in code yet, but would be a nice alternative for installing a local chart from a tarball when the repository URL would not be known. The reason this is useful is because it can be used when interacting with other third-party databases, such as artifact-hub. + +## Motivation + +The primary motivation is to have a helm-native way to track where a chart came from. Many of the motivations for this feature can be found in this issue: https://github.com/helm/helm/issues/4256. To note a couple: +- An admin would like to know where a chart came from only by querying the cluster itself. Currently the only way to know where a chart came from is to keep track of it externally. +- Third-party tooling that provides recommendations on helm upgrades can query the cluster to get the repository URL to aid in this recommendation. See [nova](https://github.com/FairwindsOps/nova) as an example. +- This metadata field could also populate output for the `helm ls` command in the future. That may be outside the scope of this particular feature. + +## Rationale + +In order to query for this in the cluster, the repository URL will need to be somewhere in the release object. The chart metadata portion of the release object already contains similar data and makes the most sense for this purpose. + +## Specification + +Nothing would change from the user's perspective. With some modifications in the current code it's possible to add this metadata into the release object transparently. + +The current idea for this implementation is to add a field in both the `ChartDownloader` and `Metadata` (in the `pkg/chart/metadata.go` file) structs to hold the repository URL. The Downloader is the logical place to derive the proper URL and then populate the Metadata field. + +More specifically, the URL is included in the local repository index file for a locally named repository. For instance, running `helm repo add [NAME] [URL]` would add the repository to the index file with the `[URL]` passed as the real location to download charts. In the helm code, the downloader reads this file to find the URL which is what gets bubbled up to the release object. + +When installing from either a locally packaged chart, or a locally unpackaged chart (or folder), the repoURL will be set to the value `path` to indicate a local source. + +The chart metadata object would have new fields that looked like so: + +``` +"repoURL": "https://charts.fairwinds.com/stable" +"tarballDigest": "sha256:f9a9f9a9f9a9f9a9f9a9f9a9f9a9f9a9f9a9f9a9f9a9f9a9f9a9f9a9f9a9f9a9" +``` + +And an OCI compliant repository would look like this (example is using ECR): + +``` +"repoURL": "oci://${ACCOUNT_NUMBER}.dkr.ecr.us-east-1.amazonaws.com/goldilocks" +"tarballDigest": "sha256:f9a9f9a9f9a9f9a9f9a9f9a9f9a9f9a9f9a9f9a9f9a9f9a9f9a9f9a9f9a9f9a9" +``` + +## Backwards compatibility + +There should be no impact to backwards compatibility. + +## Security implications + +A potential security issue would be private repository URLs becoming present in a cluster via this implementation. A potential fix for this would be to add a command line argument that would keep this field in the release object empty, but that would introduce something a user has to change in their workflow which may not be desirable. Another way would be to attempt a DNS match against a publicly available DNS server and if it's not found, then we do not populate the repository URL field. + +Another option is to ignore this potential downside. Unclear if this would truly be an issue or not. Would love to have feedback on why it would be bad for an internal repository URL to be stored in the cluster. If it is decided not to store a private URL by default, we should add a flag to allow it. + +A potential positive is that including the tarballDigest would mean that utilities could independently verify that a chart has not been altered. However, a caveat should be noted here: There is no guarantee that helm will rebuild exactly the same tarball if presented exactly the same input data because some input metadata (timestamps, ordering) may change. So we wouldn't necessarily want to assume that just because a tarball has a different SHA, it's data has changed and thus it is untrustworthy. The exact handling of this is left to implementation. + +## How to teach this + +The feature can be documented by describing how we get the URL (taken from the description in the [Specification](#Specification) section). The usage of this URL is up to a user or third-party tool developer, but the URL would be included in the release object as one more informational piece with no prescribed usage. + +## Reference implementation +A PR has been created to show a possible implementation: https://github.com/helm/helm/pull/10369 + +## Rejected ideas + +N/A. I don't know of any other ideas proposed for this feature. + +## Open issues + +N/A for now. As for github issues, this is still open and would be solved by this feature: https://github.com/helm/helm/issues/4256 + +## References + +- Github issue that would be fixed by this feature: https://github.com/helm/helm/issues/4256 +- Github PR that proposes a solution for this: https://github.com/helm/helm/pull/10369 diff --git a/community/hips/hip-0019.md b/community/hips/hip-0019.md new file mode 100644 index 0000000000..fdca47cf4e --- /dev/null +++ b/community/hips/hip-0019.md @@ -0,0 +1,263 @@ +--- +title: New annotations for displaying hook output +sidebar_label: "0019: New annotations for displaying hook output" +--- + + + +| **HIP** | **Title** | **Author(s)** | **Created** | **Type** | **Status** | +|---|---|---|---|---|---| +| 19 | New annotations for displaying hook output | Ian Zink | 2023-01-26 | feature | draft | + + +## Abstract + +This proposes a new annotation to indicate that the output from the hook should be displayed to the user. + +## Motivation + +The one motivation for this HIP is the ability to display preflight checks before the main chart installs. This provides vital feedback to the user as to why a Helm chart can not be successfully installed. + +Often it is important to verify that the Kubernetes cluster you are deploying a Helm chart into has certain properties. You might need to know that it has an Ingress controller, a certain amount of ephemeral storage, memory, or CPUs available. You might want to validate the service key they provided was correct or that that database they entered is reachable. Letting a Helm install and/or upgrade fail, and then make the user debug this to see why it failed is a poor user experience. These things can all be done with checks enabled by the hook proposed in this HIP. + +Another common motivation for this HIP is to indicate that database migration output running as a hook should be visible to the user in the case of failure. + +In general, allowing chart developers to run jobs and present that feedback directly to the users could also open up additional use cases beyond just the preflight use case that motivated this HIP. I could imagine scenarios where maybe CVE warnings are presented or specific upgrade feedback is presented instead of just a Helm install failure. + +## Rationale + +There are other ways that this could be implemented. For example, we could have a separate preflight hook type. However, this new hook type wouldn't be handled at all by previous versions of Helm. With this design, it requires minimal changes to Helm and allows for backwards compatibility. + +Another strategy could be for Helm to include Troubleshoot.sh as a dependent library, but this could result in too tight of a coupling between the projects and lower overall flexibility and adaptability. + +## Specification + +Templates may include the following annotations on Jobs or Pods: + +```yaml + "helm.sh/hook": pre-install, pre-upgrade + "helm.sh/hook-output-log-policy": hook-failed # or hook-succeeded or hook-failed,hook-succeeded +``` + + +`helm.sh/hook-output-log-policy` would indicate that Helm should display the output of the Job to the user. + +Additionally, a new user flag should be created `--no-log-output` that would skip the output of logs. + +Additionally, there will be a new item added to the action SDK configuration to allow SDK consumers to get the output. +By default this output will be discarded by writing to `io.Discard`, but an SDK consumer can overwrite the HookOutputFunc to provide a custom writer. + + +```go +type Configuration struct { + ... + // Called with container name and returns and expects writer that will receive the log output + HookOutputFunc func(namespace, pod, container string) io.Writer +} +``` + +## Backwards compatibility + +The only backwards compatibility concern would be that scripts parsing `helm install` output would see some additional text in the case of logs being output. The fact that notes already make the output unstructured should mitigate any concern here. Since we already are trusting chart developers to provide output in the form of notes, this is a logical extension of that that allows the developer to provide more dynamic output. The logs would be written to `stderr`, further mitigating any breaking changes to scripts using `helm` CLI. + +## Security implications + +Potentially the preflight checks could check for security misconfigurations that could enhance the security of the chart deployment. + +## How to teach this + +In the first instance, documentation plus the help text for `helm install` would explain the feature. + +An example template could be provided in documentation showing how to use this feature with a generic command used in a hook. + +A more advanced example showing how to use the new feature with Troubleshoot.sh to provide preflight checks could be linked in the documentation, provided directly in the documentation, or provided on the Troubleshoot.sh documentation site independently. + +## Reference implementation + +[Pull Request for Documentation ](https://github.com/helm/helm-www/pull/1242) + +[Pull Request for Helm](https://github.com/helm/helm/pull/10309) - most upvoted open PR + + +## Rejected ideas +N/A + +## Open issues +N/A + +## References + +[Troubleshoot.sh](https://troubleshoot.sh/) - the tool that is the motivation for this HIP. + +[safe-install plugin](https://github.com/z4ce/helm-safe-install) - Plugin that provides a similiar experience to what I hope this HIP will provide natively. + +## Reference - Examples Usage + +### Example using `false` + +Template: +```yaml +apiVersion: batch/v1 +kind: Job +metadata: + name: "{{ .Release.Name }}-false-job" + labels: + app.kubernetes.io/managed-by: {{ .Release.Service | quote }} + app.kubernetes.io/instance: {{ .Release.Name | quote }} + app.kubernetes.io/version: {{ .Chart.AppVersion }} + helm.sh/chart: "{{ .Chart.Name }}-{{ .Chart.Version }}" + annotations: + "helm.sh/hook": pre-install, pre-upgrade + "helm.sh/hook-output-log-policy": hook-failed, hook-suceeded + "helm.sh/hook-weight": "-5" + "helm.sh/hook-delete-policy": hook-succeeded, hook-failed + +spec: + backoffLimit: 0 + template: + metadata: + name: "{{ .Release.Name }}" + labels: + app.kubernetes.io/managed-by: {{ .Release.Service | quote }} + app.kubernetes.io/instance: {{ .Release.Name | quote }} + helm.sh/chart: "{{ .Chart.Name }}-{{ .Chart.Version }}" + spec: + restartPolicy: Never + containers: + - name: post-install-job + image: "alpine:3.18" + command: ["sh", "-c", "echo foo ; false"] +``` + +What it should loook when running: + +```text +$ helm install ./ my-release +Logs for pod: my-release-false-job-bgbz6, container: pre-install-job +foo +Error: INSTALLATION FAILED: failed pre-install: job failed: BackoffLimitExceeded +``` + +### Example using Troubleshoot Preflight Checks + +```yaml +apiVersion: batch/v1 +kind: Job +metadata: + name: "{{ .Release.Name }}-preflight-job" + labels: + app.kubernetes.io/managed-by: {{ .Release.Service | quote }} + app.kubernetes.io/instance: {{ .Release.Name | quote }} + app.kubernetes.io/version: {{ .Chart.AppVersion }} + helm.sh/chart: "{{ .Chart.Name }}-{{ .Chart.Version }}" + annotations: + "helm.sh/hook": pre-install, pre-upgrade + "helm.sh/hook-output-log-policy": hook-failed + "helm.sh/hook-weight": "-5" + "helm.sh/hook-delete-policy": hook-succeeded, hook-failed + +spec: + backoffLimit: 0 + template: + metadata: + name: "{{ .Release.Name }}" + labels: + app.kubernetes.io/managed-by: {{ .Release.Service | quote }} + app.kubernetes.io/instance: {{ .Release.Name | quote }} + helm.sh/chart: "{{ .Chart.Name }}-{{ .Chart.Version }}" + spec: + restartPolicy: Never + volumes: + - name: preflights + configMap: + name: "{{ .Release.Name }}-preflight-config" + containers: + - name: post-install-job + image: "replicated/preflight:latest" + command: ["preflight", "--interactive=false", "/preflights/preflights.yaml"] + volumeMounts: + - name: preflights + mountPath: /preflights + +--- +apiVersion: v1 +kind: ConfigMap +metadata: + annotations: + "helm.sh/hook": pre-install, pre-upgrade + "helm.sh/hook-weight": "-6" + "helm.sh/hook-delete-policy": hook-succeeded, hook-failed + labels: + app.kubernetes.io/managed-by: {{ .Release.Service | quote }} + app.kubernetes.io/instance: {{ .Release.Name | quote }} + app.kubernetes.io/version: {{ .Chart.AppVersion }} + helm.sh/chart: "{{ .Chart.Name }}-{{ .Chart.Version }}" + name: "{{ .Release.Name }}-preflight-config" +data: + preflights.yaml: | + apiVersion: troubleshoot.sh/v1beta2 + kind: Preflight + metadata: + name: preflight-tutorial + spec: + collectors: + {{ if eq .Values.mariadb.enabled false }} + - mysql: + collectorName: mysql + uri: '{{ .Values.externalDatabase.user }}:{{ .Values.externalDatabase.password }}@tcp({{ .Values.externalDatabase.host }}:{{ .Values.externalDatabase.port }})/{{ .Values.externalDatabase.database }}?tls=false' + {{ end }} + analyzers: + - clusterVersion: + outcomes: + - fail: + when: "< 1.16.0" + message: The application requires at least Kubernetes 1.16.0, and recommends 1.18.0. + uri: https://kubernetes.io + - warn: + when: "< 1.18.0" + message: Your cluster meets the minimum version of Kubernetes, but we recommend you update to 1.18.0 or later. + uri: https://kubernetes.io + - pass: + message: Your cluster meets the recommended and required versions of Kubernetes. + {{ if eq .Values.mariadb.enabled false }} + - mysql: + checkName: Must be MySQL 8.x or later + collectorName: mysql + outcomes: + - fail: + when: connected == false + message: Cannot connect to MySQL server + - fail: + when: version < 8.x + message: The MySQL server must be at least version 8 + - pass: + message: The MySQL server is ready + {{ end }} +``` + +Which should yield the following output to stdout: + +```text +$ helm install ./ my-release +Logs for pod: my-release-preflight-job-bgbz6, container: pre-install-job + --- FAIL: Required Kubernetes Version + --- The application requires at least Kubernetes 1.16.0, and recommends 1.18.0. + --- FAIL: Must be MySQL 8.x or later + --- Cannot connect to MySQL server +--- FAIL preflight-tutorial +FAILED +name: cluster-resources status: completed completed: 1 total: 3 +name: mysql/mysql status: running completed: 1 total: 3 +name: mysql/mysql status: completed completed: 2 total: 3 +name: cluster-info status: running completed: 2 total: 3 +name: cluster-info status: completed completed: 3 total: 3 + +Error: INSTALLATION FAILED: failed pre-install: job failed: BackoffLimitExceeded + +``` diff --git a/community/hips/hip-0020.md b/community/hips/hip-0020.md new file mode 100644 index 0000000000..1dd01b6134 --- /dev/null +++ b/community/hips/hip-0020.md @@ -0,0 +1,140 @@ +--- +title: "H4HIP: Charts v3 Enablement" +sidebar_label: "0020: H4HIP: Charts v3 Enablement" +--- + + + +| **HIP** | **Title** | **Author(s)** | **Created** | **Type** | **Status** | +|---|---|---|---|---|---| +| 0020 | H4HIP: Charts v3 Enablement | Matt Farina | 2025-01-09 | feature | accepted | + + +## Abstract + +This HIP proposes the creation of charts v3, updating Helm to handle charts v2 and v3, and a +timeline for the general availability of charts v3 that can happen after the release of Helm v4.0.0. + +## Motivation + +Many of the proposed changes for Helm v4 affect charts. Layering these onto existing charts will +sometimes cause chart installation and upgrade to happen differently in Helm v3 and Helm v4, as +both will need to live side by side for a time. It also means that testing of charts for v3 can produce +a different result when installed with Helm v4. + +In addition to the affects of the changes, Helm v4 development has a fixed timeline and making +changes to Helm in addition to reworking charts is not likely to fit within that fixed window. Enabling +the development of charts v3 to happen as an experiment that becomes generally available after +the release of Helm v4 provides more time to continue the work and get feedback. + +The goal is to provide adequate time to work on chart changes while doing it in a way that enables +trust in existing charts to run as they were tested. + +## Rationale + +Charts v2 were created for Helm v3 and introduced minor changes. The code that handles the chart +versions is the same with some checking to handle the differences. This handling ended up having +numerous bugs that had to be worked out in patch releases. + +The chart changes being proposed for Helm v4 are more significant. Mixing those in alongside the +current chart version handling will have trouble limiting bugs will enabling the changes and keeping +existing charts functioning properly. + +The design specified here is meant to enable the current charts to work as expected while providing +space for more radical changes. + +## Specification + +Helm has numerous packages that do various things, from working with charts to storing release +information. These packages all expect there to be one version of a particular thing. To support +multiple versions of charts, the `chart`, `chartutil`, `engine`, and `release` packages will be made +multi-version. (e.g., engine will have a v1 and v2 versions). In addition to enabling a new version of +charts, this will enable the gotpl engine to evolve as needed to support the new version of charts. +The `chartutil` may be combined with the `chart` package and the `releaseutil` package may be +combined with the `release` package for simplification of the package structure. + +The versioning of the packages will follow the same structure that Kubernetes does with its APIs. +This means a thing will have a directory and within it will be sub-directories for the versions. The +version specific implementation will be in the version specific sub-directory. For example, + +``` +chart +├── v2 +└── v3 +``` + +The version will not use a separate Git repository or Go modules. The reason for this is the added +complexity of managing the repositories and modules is added work to manage changes which will +slow down velocity, will make releases more complex, and make the Helm SDK more complicated +to work with. + +The existing versions of these packages will be externally facing while the new versions will be +developed in `internal` as experiments until they are complete enough for release. When ready for +release, these packages will be moved to the public locations. + +To illustrate this, while in development the `chart` package will have the following structure: + +``` +internal/chart +└── v3 +pkg/chart +└── v2 +``` + +Once the new chart packages have (a) a stable API and (b) are feature complete the structure will +be merged to look like: + +``` +pkg/chart +├── v2 +└── v3 +``` + +While in development, as an experiment, the `pkg/gates` package will be used to create an opt-in +environment variable to enable a new chart version. This is how the OCI experimental feature was +handled. + +## Backwards compatibility + +This development and process is designed with backwards compatibility in mind. The package +locations will change, which is ok in a major version of Helm. The existing charts will be preserved +so that their installation process continues to work as expected from Helm v3. New features and +changes to charts can be added in without impacting existing charts. + +While the new chart version is being developed and is going through breaking changes, the chart +will be an opt-in feature which will enable us to warn users about the state of it. + +## Security implications + +N/A + +## How to teach this + +There are a few ways to teach this: + +1. **Documentation**: The chart documentation will be updated to teach both versions of charts. +2. **Helm Create**: Helm create will be updated to use the new chart version and provide an example. +3. **Blog and Webinars**: The marketing options open to Helm will be used to share details and teach about the new chart version. + +## Reference implementation + +N/A + +## Rejected ideas + +An option to detect the chart version within existing code was seen as an option. This is how +charts `apiVersion` is handled for `v1` and `v2`. This is problematic as large changes in charts +will be difficult to work on and test to ensure nothing breaks across version. + +## Open issues + +N/A +## References + +N/A \ No newline at end of file diff --git a/community/hips/hip-0021.md b/community/hips/hip-0021.md new file mode 100644 index 0000000000..e0a4ba5f19 --- /dev/null +++ b/community/hips/hip-0021.md @@ -0,0 +1,110 @@ +--- +title: Enhanced logging library for Helm +sidebar_label: "0021: Enhanced logging library for Helm" +--- + + + +| **HIP** | **Title** | **Author(s)** | **Created** | **Type** | **Status** | +|---|---|---|---|---|---| +| 21 | Enhanced logging library for Helm | Evans Mungai | 2024-11-22 | feature | draft | + + +## Abstract + +This proposal introduces an improved logging library for Helm CLI and SDK to enhance logging capabilities for troubleshooting, development, and debugging. By using newer logging features such as log formatting and different log levels, developers and CLI users gain flexibility when deciding how much logging information they want to consume, and in what format. + +The HIP also introduces the ability for SDK users to use their own logging library with the SDK. Users will be able to provide a logger implementing `slog.Handler` interface, allowing them to consume instrumented logs in the SDK. + +## Motivation + +The current logging mechanism in Helm CLI and SDK lacks granularity and structure. Users and developers face difficulties when: + +- Troubleshooting Helm CLI commands due to inability to increase the details that can get logged. More logs come in handy when submitting bug reports for example. +- Instrumenting Helm code with clear and consistent logging conventions for contributors, as well as consumers of CLI and SDK logs. +- Inflexibility using a different logging library to what the SDK uses. There is no way, in code, to have client loggers consume logs produced by the SDK + +The proposed solution addresses these gaps by integrating a logging library that supports log levels and structured output, as well as a widely supported logger implementation interface for SDK users to consume. + +## Rationale + +The following libraries were evaluated: + +1. **`slog`:** + - Provides log levels (`info`, `debug`, `error`, `warning`). More levels can be added + - Offers structured logging. + - Lightweight and straightforward to integrate. + - Is part of Go standard library + - Has `slog.Handler` interface that other logger implementations can implement to be `slog` compatible + +While these libraries meet all the requirements we want, `slog` is the preferred choice here. It provides all functionality that the other choices have but stands out since it has a wider adoption given that its part of Go standard library. This will be benefitial to SDK users who have their existing logger implementations present. They would either implement `slog.Handler` interface or add a dependency of an existing adapter logger implementation. + +## Specification + +- Helm will instrument `debug`, `info`, `warning` and `error` log levels. These log levels will enable filtering of logs. +- Logs will be written to `stderr` by the Helm CLI client. `stdout` will be left for output from operations. SDK users would choose where to write logs to through configuring the logger they pass to the SDK. +- Ability to allow users to configure log levels and formatting through CLI flags or environment variables. +- Helm SDK should not be instrumented with error logs. Instead, errors ought to be returned. Any logging of such errors should be left to clients to choose whether to log or not. +- When invoking plugins and post-renderers, `HELM_LOG_LEVEL` and `HELM_LOG_FORMAT` environment variables would be set, allowing them to output the appropriate amount of logs and format to stderr. +- There will be structured logging with two options. Raw text for humans to view, and JSON formatting that machines can consume. +- Ability for SDK users to override the default logger implementation. The SDK will expect at logger that implements `slog.Handler` interface. + +### Example: + +For code where there is no context the implementation of `slog` will be static and we will directly call `slog`. + +For example: + +``` go +import ( + "log/slog" +) + +func MyFunc() { + ... + slog.Debug("test debug", "test key", "test value") + ... +} +``` + +## Backwards Compatibility + +The current logging system, Golang's `log` package will be replaced by `slog`. + +## Security Implications + +TBD + +## How to Teach This + +1. **Documentation Updates:** + - Provide examples of using the new logging features in the Helm documentation. + - Include a section on how to configure log levels and formats. + - Document conventions of how to instrument logs. Specifically, what information should be in what log level. Also document that the SDK does not log errors. + - Example for SDK users of how to override the default logger with their own implementation. For loggers that do not implement `slog.Handler`, document an example of how this can be done. + - Document how plugins and post-renderers can inherit log levels and formatting from helm CLI client. + +2. **CLI help text:** + - Use Helm CLI help messages (`helm --help`) to inform users about the new logging options. + +## Reference Implementation + + +## Rejected Ideas + +1. **Sticking with the current logging system:** + - Rejected due to lack of flexibility and limited usefulness for debugging. +2. klog and logr libraries were considered. They provide log levels and verbosity levels. They are used in kubernertes ecosystem. logr offers `logr.Handler` interface which logging libraries can implement. They however both fell short because they are external dependencies whilst slog is part of the standard library. + +## Open Issues + + +## References + +- [Go’s slog Documentation](https://pkg.go.dev/log/slog) diff --git a/community/hips/hip-0022.md b/community/hips/hip-0022.md new file mode 100644 index 0000000000..324f2ff36d --- /dev/null +++ b/community/hips/hip-0022.md @@ -0,0 +1,122 @@ +--- +title: Wait With kstatus +sidebar_label: "0022: Wait With kstatus" +--- + + + +| **HIP** | **Title** | **Author(s)** | **Created** | **Type** | **Status** | **Helm Version** | +|---|---|---|---|---|---|---| +| 22 | Wait With kstatus | @austinabro321 | 2024-12-06 | feature | accepted | 4 | + + +## Abstract + +Currently the `--wait` flag on `helm install` and `helm upgrade` does not wait for all resources to be fully reconciled, and does not wait for custom resources (CRs) at all. By replacing the wait logic with [kstatus](https://github.com/kubernetes-sigs/cli-utils/blob/master/pkg/kstatus/README.md), Helm will achieve more intuitive waits, while simplifying its code and documentation. + +## Motivation + +By introducing kstatus we will lower user friction with the `--wait` flag. + +Certain workflows require custom resources to be ready. There is no way to tell Helm to wait for custom resources to be ready, so anyone with this requirement must write their own logic to wait for their custom resources. Kstatus solves this by waiting for custom resources to have [the ready condition](https://github.com/kubernetes-sigs/cli-utils/blob/master/pkg/kstatus/README.md#the-ready-condition) set to true. + +Certain workflows requires resources to be fully reconciled, which does happen in the current `--wait` logic. For example, Helm waits for all new pods in an upgraded deployment to be ready. However, Helm does not wait for the previous pods in that deployment to be removed. Therefore, Helm will finish waiting even while old pods are still active. Since kstatus instead waits for all resources to be reconciled, the wait will not finish for a deployment until all of its new pods are ready and all of its old pods have been deleted. + +## Rationale + +Leveraging a existing status management library maintained by the Kubernetes team will simplify the code and documentation that Helm needs to maintain and improve the functionality of `--wait`. + +## Specification + +The Helm CLI will continue to use the existing `--wait` flag. The wait flag will be extended to accept `true|false|none|watcher|legacy`. When using `--wait` as flag with no argument, `--wait=true`, or `--wait=watcher` Helm will use the kstatus watcher described in this document. When using `--wait=legacy` Helm will use the current Helm 3 waiter. When using `--wait=false` or not using the `--wait` flag Helm not wait after deployments. + +Kstatus can be used with either a poller or a watcher. The poller runs on a specified interval and only requires "list" RBAC permissions for polled resources. The watcher reacts to [watch events](https://github.com/kubernetes/kubernetes/blob/90a45563ae1bab5868ee888432fec9aac2f7f8b1/staging/src/k8s.io/apimachinery/pkg/watch/watch.go#L55-L61) and requires "list" and "watch" RBAC permissions. This proposal uses the watcher as it responds slightly faster when all resources are ready, and it is very likely that users applying or deleting resources will have "watch" permissions on their resources. + +Any functions involving waits will be separated from the `kube.Interface` interface into the `kube.Waiter` interface. `kube.Waiter` will be embedded into `kube.Interface`. The client struct will embed the `Waiter` interface to allow calls to look like `client.Wait()` instead of `client.Waiter.Wait()`. `kube.New()` will accept a wait strategy to decide the wait implementation. There will be two implementation in the repo, `HelmWaiter` and `statusWaiter`. `HelmWaiter` is the legacy implementation. The `statusWaiter` will not be public so that if kstatus is ever deprecated or replaced a new implementation can be used without changing the public SDK. + +The new client will look like: +```go +type Client struct { + Factory Factory + Log func(string, ...interface{}) + Namespace string + kubeClient *kubernetes.Clientset + Waiter +} +type WaitStrategy int +const ( + StatusWaiter WaitStrategy = iota + LegacyWaiter +) +func New(getter genericclioptions.RESTClientGetter, ws WaitStrategy) (*Client, error) +``` + +The waiter interface will look like: +```go +type Waiter interface { + Wait(resources ResourceList, timeout time.Duration) error + WaitWithJobs(resources ResourceList, timeout time.Duration) error + WaitForDelete(resources ResourceList, timeout time.Duration) error + WatchUntilReady(resources ResourceList, timeout time.Duration) error +} +``` + +`Wait` will wait for all resources to be ready. This will include jobs, but this function not wait for jobs to be complete. + +`WaitWithJobs` will wait for all resources to be ready and all jobs to be complete. + +`WatchUntilReady` only waits for Pods and Jobs to complete. It is used for Helm hooks. This logic will stay the same. + +Calls to `Wait` and `WaitWithJobs` will not wait for paused deployments. This is consistent with the current logic. This is done because otherwise `helm upgrade --wait` on a paused deployment will never be ready, see [#5789](https://github.com/helm/helm/pull/5789). + +Kstatus does not natively output any logs. After each event, Helm will output a log message of one resources that's not ready. Only one resource is logged at a time so Helm doesn't overwhelm users with output. Note that the logs are only sent when called as a library, the CLI uses a noop logger for Kube operations. + +## Backwards compatibility + +Waiting for custom resources and other previously not waited for resources could lead to charts timing out when using the new logic. + +The kstatus status watcher requires the "list" and "watch" RBAC permissions to watch a resource. The current Helm implementation only require "list" permissions for the resources they're watching. Kstatus and Helm require "list" permissions for some child resources. For instance, checking if a deployment is ready requires "list" permissions for the replicaset. There may be cases where the RBAC requirements for child resources differ between Kstatus and Helm, as an evaluation has not been conducted. + +Kstatus also watches more resources than Helm does. A user will need "list" and "watch" permissions to every resource that they are deploying. Currently, Helm only checks readiness of certain resources. See the [IsReady function](https://github.com/helm/helm/blob/0d66425d9a745d8a289b1a5ebb6ccc744436da95/pkg/kube/ready.go#L92) for details + +Below is the minimal set needed to watch a deployment with the status watcher. This can be verified by following instructions in this repo: https://github.com/AustinAbro321/kstatus-rbac-test. +```yaml +rules: + - apiGroups: ["apps"] + resources: ["deployments"] + verbs: ["list", "watch"] + - apiGroups: ["apps"] + resources: ["replicasets"] + verbs: ["list"] +``` + + +## Security implications + +Users will now need "watch" permissions on resources in their chart if the `--wait` flag is used. They will also need "list" and "watch" permissions for all resources they are deploying rather than just the resources that Helm currently waits for. + +## How to teach this + +Replace the [existing wait documentation](https://helm.sh/docs/intro/using_helm/) by explaining that we use kstatus and pointing to the [kstatus documentation](https://github.com/kubernetes-sigs/cli-utils/blob/master/pkg/kstatus/README.md). This comes with the added benefit of not needing to maintain Helm specific wait documentation. + +## Reference implementation + +seen here - https://github.com/helm/helm/pull/13604 + +## Rejected ideas + +## Open issues + +[8661](https://github.com/helm/helm/issues/8661) + +## References + +existing wait documentation - https://helm.sh/docs/intro/using_helm/ +kstatus documentation - https://github.com/kubernetes-sigs/cli-utils/blob/master/pkg/kstatus/README.md +Zarf kstatus implementation - https://github.com/zarf-dev/zarf/blob/main/src/internal/healthchecks/healthchecks.go \ No newline at end of file diff --git a/community/hips/hip-0023.md b/community/hips/hip-0023.md new file mode 100644 index 0000000000..9e24be548b --- /dev/null +++ b/community/hips/hip-0023.md @@ -0,0 +1,208 @@ +--- +title: Utilize Server Side Apply for installs/upgrades +sidebar_label: "0023: Utilize Server Side Apply for installs/upgrades" +--- + + + +| **HIP** | **Title** | **Author(s)** | **Created** | **Type** | **Status** | **Helm Version** | +|---|---|---|---|---|---|---| +| 23 | Utilize Server Side Apply for installs/upgrades | George Jenkins | 2023-07-07 | feature | accepted | 4 | + + +## Abstract + +This HIP proposes Helm support Kubernetes' [Server-Side Apply][server-side-apply] (SSA) for [object](https://kubernetes.io/docs/reference/glossary/?fundamental=true#term-object) updates/management. + + +## Motivation + +Helm 3 introduced the [three-way strategic merge and patch](https://helm.sh/docs/faq/changes_since_helm2/#improved-upgrade-strategy-3-way-strategic-merge-patches) process, enabling Helm to update objects which have been modified by other processes. +Kubernetes now offers a similar server-side merge process, that yields several advantages over the client-side apply (CSA) methods that Helm and `kubectl` (for example) have traditionally utilized. + +Kubernetes has evolved this client-side merge process to be managed server-side, yielding several advantages over the client-side apply (CSA) methods that Helm and `kubectl` (for example) have traditionally utilized. + +The following describes the advantages of SSA from Kubernetes perspective, where SSA generally is considered to be superior: + + + +(See [KEP 555][kep555] and the Kubernetes [documentation][server-side-apply] for server-side apply's full motivation and detailed description) + +Helm supporting to SSA allows Helm users (chart operators) to realize the benefits of Kubernetes server-side field management for object updates. +And enabling SSA by default ([similar to kubectl](https://github.com/kubernetes/enhancements/tree/master/keps/sig-cli/3805-ssa-default)) will avoid users having to specifically enable SSA to realize its benefits. + +Finally, from a code maintenance benefit, SSA support may eventually allow Helm to eventually drop support for the strategic-merge patch CSA implementation/code. + +## Rationale + +Kubernetes' has sigificant movement towards SSA as preferred method for object updates/management. Helm should adopt SSA in continuance with this trend, as it is unlikely client-side methods will continue to be improved upon. Nor will client side methods likely ever be able to provide the functional benefits of SSA. + +With Helm 4, it was decided to opt into utilizing SSA by default. +Allowing chart operators to gain the benefit of SSA without needing to know about the server-side vs. client-side mechanisms. +If during Helm 4 release candidate field usage, SSA as default is deemed to be unresolvably problematic, Helm 4 will revert to utilizing CSA by default. + +A CLI flag will allow users to override SSA opt-in and revert to utilizing CSA. Should a chart operator need for a particular circumstance. + +A chart release mechanism will allow Helm to track and follow SSA enablement for a given release. +Tracking SSA enablement will allow Helm to automatically follow SSA enablement for a given release, and in particular revert to CSA (or SSA) during rollbacks if that prior release utilized CSA (or SSA). + +Additionally it was desirable to mimic `kubectl`'s CLI interface/flags. +As a way for Helm to be consistent with an existing `kubectl` functionality that Kubernetes users may be familar with. + +## Specification + +### General + +Helm will add a new flag `--server-side=false|true|auto` to the install, upgrade and rollback commands (modeled after the like `kubectl apply` flag). +And add a corresponding field to the respective install/upgrade/rollback SDK API objects. + +Helm will default to `true` for installs, enabling SSA. +And `auto` for upgrade and rollbacks, where Helm will enable SSA based on the whether SSA was utilized for the prior release (see below). +When enabled, Helm will submit object to the Kubernetes API server via SSA patches. + +If SSA or CSA is utilized for a release, this will be stored as a field in the release's metadata. +If the field is unset when reading a prior release, this implies that the release was created with an old version of Helm utilizing CSA. + +``` +type Release struct { + ApplyMethod *string `json:"apply_method,omitempty"` // "ssa" | "csa" +} +``` + +If a user deploys a chart with a new version of Helm with SSA enabled, then upgrades the chart with an older version of Helm. It is expected that the older Helm will be able to upgrade the chart with CSA. And the new release's metadata will omit the indication of SSA usage (and so further upgrades/rollbacks will continue to use CSA by default). + +In a future version of Helm 4 CLI, it might be desirable to omit a warning if a user is not using SSA (in order to prompt the user to enabling SSA for further releases). + +#### Custom resource objects + +Helm will utilize SSA for custom resource objects, which it previously [didn't merge](https://github.com/helm/helm/blob/1b260d0a796882a1e90f0fa3c832659dbe2e675c/pkg/kube/converter.go#L54-L69). +The API server will [merge custom resources][ssa-crds based on CRD metadata. + +#### Conflicts and forcing + +It is possible that when Helm upgrades (or rollbacks) a chart, there will be a field conflict with another field manager. +In this case, Helm will report the error for the conflict field(s) to the user. + +Helm will also add a new flag `--force-conflicts=false|true` (default `false`) to the install, upgrade and rollback commands (modeled after the life `kubectl apply` flag) +And corresponding API objects field. +When `true`, Helm will enabling overriding the field conflicts, setting field(s) to the charts values. +And also make Helm the field manager for the conflicting field(s). +The `--force-conflicts` flag documentation should explicity mention the downsides of conflict forcing ie. the chart update is overriding object values that another process is expecting to own/manage. + +For more details, see SSA documentation [Overwrite value, become sole manager][ssa-conflicts] + +(To note, `helm upgrade|rollback` commands already includes a `--force` flag, which tells Helm to replace objects during upgrade. +However, given this different semantics of `--force`, a new flag is required) + +An additional special case includes rollbacks on failed upgrade (the `--atomic` flag). It is possible for Helm to attempt to rollback to a version which now has a conflict. +For which the rollback will fail. +Since rollbacks are "best effort" and can fail for other reasons as well, it seems best to treat this new rollback failure-case similarly (report to the user via logging and error). +If the user specified `--force-conflicts` to the upgrade, the corresponding rollback should similarly force conflicts (this is the behavior of `--force`). +If the rollback is to a release version which previously didn't have SSA enabled, the rollback install should also disable SSA. + +#### Special + +- `--dry-run=client` won't accurately simulate an install with SSA enabled. This is already often true even with the current merge strategy, but especially true of Server Side Apply. To accurately simulate an install with SSA enabled, instead use `--dry-run=server`. +- If the user attempts to use SSA with a cluster which does not support it (unlikely: SSA [went GA](https://kubernetes.io/blog/2021/08/06/server-side-apply-ga/) in Kubernetes v1.22), Helm should error +- Client-side API object validation isn't applicable when SSA is enabled (`helm install|upgrade --disable-openapi-validation`) +- Hooks could be deployed with SSA. But as hook objects are not updated (create/delete only), they are not really affected +- Stored release manifests should not change (they store the object as Helm intends) + +### Implementation + +Helm will send object's manifests to the Kubernetes API server via SSA patches. Similar to `kubectl apply`. +Utilizing the field manager name `"helm"`: + +https://github.com/kubernetes/kubectl/blob/197123726db24c61aa0f78d1f0ba6e91a2ec2f35/pkg/cmd/apply/apply.go#L248 +https://github.com/kubernetes/kubectl/blob/197123726db24c61aa0f78d1f0ba6e91a2ec2f35/pkg/cmd/apply/apply.go#L564-L602 + +## Backwards compatibility + +SSA should be generally compatible functionality-wise with CSA. +The expectation is that SSA should generally produce equivalent Kubernetes objects as CSA. + +There four main behavioural differences for Helm switching to SSA: + +1. The differences between object's manifests managed with SSA vs the existing three-way strategic merge process. SSA will enable: + - Arrays will be merged + - Removal of unset fields + - Default values +2. Issues with a user enabling/disabling SSA over the lifetime of a release e.g. environment differences or older Helm clients which don't understand SSA +3. SSA will apply to custom resources +4. Field management ownership conflicts + +For 1., chart-operators may opt-out out of SSA. +For 2., the user can control by ensuring SSA is consistently used within their environment. +For 3., it is generally considered a limitation of Helm not updating custom resource objects, for which SSA is expected to be an improvement. +For 4., the `--force-conflicts` flag exists. + +Additionally as noted, SSA isn't compatible with very old Kubernetes versions (1.22 GA / 1.17 Beta) + +## Security implications + +There should not be any additional security concerns. +Server-side apply and client-side apply should be equivalent security-wise. + +## How to teach this + +Documentation for how Helm does object upgrades, and the advantages of SSA. +Also documentation for the `--server-side=false|true|auto` and `--force-conflicts=false|true` flags, and the defaults for install/upgrades/rollbacks. +And the corresponding documentation for the field(s) SDK API objects. + +## Reference implementation + +Kubectl: +- +- + +Prototype (hack) for Helm: +- + + +## Rejected ideas + +### Chart field manager support + +This HIP defers including field manager support in charts. +ie. Helm could enable applying multiple manifests for the same object with distinct field manager names. +Either from the same chart, or different charts/releases. + +It is unclear how Helm users would interact with such a feature e.g. the chart developer might want/need to specify field manager names per output manifests in a chart. +And `helm template` might somehow need to allow describing the object's field manager name in its output. +And whether it would be needed to control per-manifest conflict forcing. + +Once more information is gathered on how chart developers might utilze explicit field manager support, a proposal introducing field manage support for charts could be written. + +### Field ownership transfer + +Helm won't support ownership transfer of fields. +Similar to the `kubectl` example: . + +Dissimilar to `kubectl`, Helm distinguishes between chart developers and chart operators. +Chart developers may not consider, or may not even know, which fields may be overwritten (managed by) by another process in a user's Kubernetes cluster. + +Ownership transfer would likley first require charts have field manager support. +As well as additional support for per-object conflicts resolution. + +## Open issues + +## References + +- Kubernetes SSA documentation: [https://kubernetes.io/docs/reference/using-api/server-side-apply/][server-side-apply] +- KEP-555: Server-side apply: [https://github.com/kubernetes/enhancements/blob/master/keps/sig-api-machinery/555-server-side-apply/README.md][kep555] +- Strategic Merge Patch: [https://github.com/kubernetes/community/blob/master/contributors/devel/sig-api-machinery/strategic-merge-patch.md][strategic-merge-patch] +- Kubectl SSA default: +- Structured Merge and Diff (`kubectl` client-side apply): +- + +[server-side-apply]: https://kubernetes.io/docs/reference/using-api/server-side-apply/ +[strategic-merge-patch]: https://github.com/kubernetes/community/blob/master/contributors/devel/sig-api-machinery/strategic-merge-patch.md +[kep555]: +[ssa-conflicts]: +[ssa-crds]: diff --git a/community/hips/hip-0024.md b/community/hips/hip-0024.md new file mode 100644 index 0000000000..e5b3f7aa4c --- /dev/null +++ b/community/hips/hip-0024.md @@ -0,0 +1,100 @@ +--- +title: Improve the Helm Documentation +sidebar_label: "0024: Improve the Helm Documentation" +--- + + + +| **HIP** | **Title** | **Author(s)** | **Created** | **Type** | **Status** | +|---|---|---|---|---|---| +| 0024 | Improve the Helm Documentation | Paige Calvert | 2025-05-07 | feature | draft | + + +## Abstract + +This HIP proposes making a set of improvements to the Helm documentation site (https://helm.sh/docs). The goal of these improvements is to make it easier to use and contribute to the Helm docs, which would ultimately make it easier for users to learn about, use, and contribute to Helm. + +This proposal focuses on improvements that can be made to the static site generator, the site's information architecture, and the Helm overview content available in the site. + +## Motivation + +This proposal identifies the following key areas for improvement in the Helm documentation: + +- The functionality of the site is limited and in some cases is broken. For example, top-level pages like https://helm.sh/docs/howto/ are not accessible by clicking on the given heading in the sidebar. As another example, it is difficult for contributors to reorder sidebar content due to the use of weighted page ordering, rather than having a sidebar file where pages can be more easily reordered. + +- There is no comprehensive introductory page explaining Helm’s purpose, personas, common use cases, and so on. + +- The Helm docs are currently organized around top-level categories like Introduction, How-To, Topics, Best Practices, and so on. These categories do not reflect the ways that different user personas use Helm (like releasing with Helm, packaging an application with Helm, or installing with Helm). Content also appears to be inconsistently organized under each category. For example, there are only three pages under the How-To section. And, [Chart Development Tips and Tricks](https://helm.sh/docs/howto/charts_tips_and_tricks/) is under How-To, rather than under Best Practices. There are also discrepancies in the description of [How the documentation is organized](https://helm.sh/docs/#how-the-documentation-is-organized) and the top-level categories that actually appear in the live docs site. + +## Rationale + +The following describes the rationale behind improving each of the key areas listed under Motivation above: + +- Modern open-source static site generators (like [Docusaurus](https://docusaurus.io/) or [MkDocs](https://www.mkdocs.org/)) offer easier maintenance, clearer sidebar management, and better support for documentation contributors. + +- A lack of clear, complete, and up-to-date Helm overview content leads to confusion for first-time users that want to understand Helm’s goals, features, and common use cases. + +- The current information architecture makes it more difficult for users to find the information they are looking for. It also makes it more difficult for contributors to understand how to organize new topics in the sidebar. Redesigning the information architecture would improve discoverability and usability, helping users find relevant content faster. + +## Specification + +This HIP proposes the following: + +1. **Evaluate static site generators and migrate the docs**: Evaluate, select, and migrate the Helm docs to a modern, open-source static site generator (like [Docusaurus](https://docusaurus.io/) or [MkDocs](https://www.mkdocs.org/)) that would improve ease-of-contribution and site functionality. +1. **Create a Helm overview page**: Add a new page to the introductory section of the docs that describes the Helm project, its goals, core concepts, user personas, and key use cases, clearly addressing the who/what/when/why for Helm. +1. **Redesign the docs information architecture**: Perform a content audit and design a new information architecture that is more intuitive, reflects common workflows for the different Helm user personas, improves content find-ability, and aligns with tech comm standards. + +Each of these items would be presented for review by the Helm community. + +These docs improvements could be published alongside the release of Helm 4. Implementations would include: +- Migrate all the existing docs to the new site. + - Create the new sidebar to reorganize the docs. +- Write the updated Helm overview content. +- Docs for Helm 4: + 1. Drafted in a branch initially + 2. Helm 4 released, merge the Helm 4 docs, and publish the new docs site. + +## Backwards compatibility + +This change affects only the documentation site and does not impact the Helm CLI, Helm libraries, or chart formats. Legacy URLs will be redirected where necessary to preserve external links and bookmarks. + +## Security implications + +There are no known security implications from this change, as it would affect only the public documentation and the docs toolchain. + +## How to teach this + +- Add clear contribution guides and README instructions in the docs repo, including templates and guidelines for docs contributors +- Promote the new docs structure and toolchain through Helm community channels and other documentation update announcements. + +## Reference implementation + +No implementation has been made. This proposal recommends evaluating and choosing a new static site generator as part of the implementation process. Additionally, the specific information architecture and overview content improvements will be determined through a content audit and refined with Helm community feedback. + +## Rejected ideas + +To limit scope, this proposal does not include making any significant changes to the docs content itself (including adding/removing content or making substantial content style improvements). The only exception is adding more complete overview content. + +## Open issues + +The open issues for this HIP include the specific implementation strategy and timeline for each area for improvement, such as: + +- Creation of a roadmap/project plan to track progress +- Selection of the static site generator +- Static site generator migration strategy and timeline +- The specific information and/or visuals to add to a new overview page +- Completion of content audit +- The specific information architecture improvements that should be made, such as the different categories where content should be grouped +- The strategy and timeline for making information architecture improvements + +## References + +- [Helm Documentation](https://helm.sh/docs) +- [Docusaurus](https://docusaurus.io/) +- [MkDocs](https://www.mkdocs.org/) diff --git a/community/hips/hip-0025.md b/community/hips/hip-0025.md new file mode 100644 index 0000000000..7eb8e8a5e1 --- /dev/null +++ b/community/hips/hip-0025.md @@ -0,0 +1,284 @@ +--- +title: Better Support for Resource Creation Sequencing +sidebar_label: "0025: Better Support for Resource Creation Sequencing" +--- + + + +| **HIP** | **Title** | **Author(s)** | **Created** | **Type** | **Status** | +|---|---|---|---|---|---| +| 0025 | Better Support for Resource Creation Sequencing | Joe Beck , Evans Mungai | 2025-05-21 | feature | draft | + + +## Abstract + +This HIP proposes a new feature set in Chart v3 to provide [Application Distributors](/community/user-profiles#2-application-distributor)—a key Helm user profile—with a first-class mechanism for defining the deployment order of chart resources and subcharts. By default, Helm applies all rendered manifests simultaneously. This HIP introduces the ability for Helm to deploy resources in ordered batches and evaluate their readiness before proceeding. + +At a high level, this HIP proposes the following +- Ability for chart authors to specify how to sequence deployment of **resources within a single chart** +- Ability for chart authors to specify how to sequence **subcharts within a parent chart** +- Ability for Helm operators and tool developers to enable sequencing behaviour using `--wait=ordered` CLI flag and `WaitStrategy=ordered` SDK parameter respectively + +The HIP only targets resources deployed in the Helm install phase. Resources deployed as hooks are not sequenced using changes proposed here. Any sequencing of hooks will still rely on using `"helm.sh/hook-weight"` annotations. Annotations added to resources in hooks will be ignored. + +## Motivation + +The driving motivator here is to allow application distributors to control what order resources are bundled and sent to the K8s API server, referred to as resource sequencing for the rest of this HIP. + +Today, to accomplish resource sequencing, there are currently two main options: using Helm hooks, or building the sequencing logic into the application itself (e.g., using startup code or init containers). The existing hooks and weights can be tedious to build and maintain for application distributors, and built-in app sequencing can unnecessarily increase complexity of a Helm application that needs to be maintained by application distributors. Helm, as a package manager, should provide built-in mechanisms for sequencing resource deployment, reducing reliance on complex hooks or in-application logic. This will significantly improve the application distributor's experience. + +Additionally, Helm currently doesn't provide a way to sequence when chart dependencies are deployed and this featureset would ideally address this. + +## Rationale + +The proposed design prioritizes simplicity and ease of use for both Helm developers and chart authors. It leverages familiar YAML patterns and Helm conventions, avoiding heavyweight solutions while offering powerful orchestration capabilities. + +## Specification + +At a high level, allow Chart Developers to assign named dependencies to both their Helm templated resources and Helm chart dependencies that Helm then uses to generate a deployment sequence at installation time. + +For Helm CLI, the `--wait=ordered` flag will enable sequencing where resources are applied in groups. SDK users will also be able to enable sequencing by setting a `WaitStrategy` field. By default, resources are all applied at once which is the same behaviour in Chart v2. + +Each release will store information of whether sequencing was used or not. This information is used when performing uninstalls and rollbacks. + +### Sequencing Execution Flow + +When sequencing is enabled, Helm installs resources in a structured order across both subcharts and resource-groups: + +**1. Subchart Ordering** + +Helm builds a dependency graph from definitions in `Chart.yaml`: + +* `helm.sh/depends-on/subcharts` key in `annotations` field +* `depends-on` key on `dependencies` list entries + +Subcharts are installed in dependency order. Each subchart must be fully deployed and ready before its dependents begin. + +**2. Resource-Group Sequencing (Per Chart)** + +Within each chart (parent and subcharts), Helm builds a resource-group graph using: + +* `helm.sh/resource-group` +* `helm.sh/depends-on/resource-groups` + +Resources in each group are deployed together, and Helm waits for all to be ready before continuing to the next group. + +**3. Unsequenced Resources** + +Resources that: + +* lack annotations, +* depend on non-existent groups, or +* belong to isolated groups + +will be deployed after all properly sequenced groups have been processed. + +If a resource includes sequencing annotations but falls into this unsequenced category due to misconfiguration (e.g., referencing missing groups), Helm will emit a warning to alert the user of the potential issue. + +*Additions to templates* + +The following annotations would be added to enable this. +- `helm.sh/resource-group`: Annotation to declare a resource-group that a given resource belongs to. Any number of resources can belong to a group. A resource can only belong to one group. +- `helm.sh/depends-on/resource-groups`: Annotation to declare resource-groups that must exist and in a ready state before this resource can be deployed. The order in which they are listed does not affect deployment sequencing. + +These annotations are only used for sequencing resources within the same chart. They do not influence or interact with resources across charts or subcharts. + +*Additions to Chart.yaml* +* `helm.sh/depends-on/subcharts`: An annotation added to `Chart.yaml` to specify chart dependencies—identified by their `name` or `alias`—that must be fully deployed and in a ready state before the current chart resources can be installed. A dependent chart is considered ready only when all of its resources, including any defined sequencing, have been successfully deployed and marked ready. The order in which dependencies are listed has no effect on execution. +- `depends-on`: A new field added to `Chart.yaml` `dependencies` fields that is meant to declare a list of subcharts, by `name` or `alias`, that need to be ready before the subchart in question get installed. This will be used to create a dependency graph for subcharts. + +The installation process would group resources in the same group and send them to the K8s API Server in one bundle, and once all resources are "ready", the next group would be installed. A resource-group would not be considered "ready" and the next group installed until all resources in that group are considered "ready". Readiness is described in a later section. A similar process would apply for upgrades. Uninstalls would function on the same resource-group order, but in reverse, where a resource-group is not uninstalled until all resource-groups that depend on it are first uninstalled. Upgrades would follow the same order as installation. + +#### Template examples: +```yaml +# resource 1 +metadata: + name: db-service + annotations: + helm.sh/resource-group: database +--- +# resource 2 +metadata: + name: my-app + annotations: + helm.sh/resource-group: app + helm.sh/depends-on/resource-groups: ["database", "queue"] +--- +# resource 3 +metadata: + name: queue-processor + annotations: + helm.sh/resource-group: queue + helm.sh/depends-on/resource-groups: ["another-group"] + +``` +In this example, Helm would be responsible for resolving the annotations on these three resources and deploy all resources in the following order. Resources in `database` and `queue` resource-groups would be deployed at the same time. They would need to be ready before attempting to deploy `app` resource-group: + +``` +"database" group: [db-service] + || +"queue" group: || [queue-processor] + || || + || || + \/ \/ + \\ // + \\ // + \/ \/ +"app" group: [my-app] +``` + +#### Chart dependencies example + +To control the order in which subcharts are installed, upgraded, or uninstalled, chart authors must use the `helm.sh/depends-on/subcharts` annotation or the `depends-on` field in the `Chart.yaml`. These declarations enable Helm to determine the correct sequencing of subchart operations, as illustrated below. + +```yaml +name: foo +annotations: + helm.sh/depends-on/subcharts: ["bar", "rabbitmq"] +dependencies: + - name: nginx + version: "18.3.1" + repository: "oci://registry-1.docker.io/bitnamicharts" + - name: rabbitmq + version: "9.3.1" + repository: "oci://registry-1.docker.io/bitnamicharts" + - name: bar # This is a subchart packaged with "foo" in charts dir. It's not pulled from a remote location + version: "0.1.0" + depends-on: ["nginx", "rabbitmq"] + condition: bar.enabled +``` + +``` + [nginx] [rabbitmq] + || || + || || + \/ \/ + \\ // + \/ \/ + [bar] + || + || + \/ + [foo] +``` + +In this example, Helm will first install and wait for all resources of `nginx` and `rabbitmq` dependencies to be "ready" before attempting to install `bar` resources. Once all resources of `bar` are "ready" then and only then will `foo` chart resources be installed. `foo` would require `rabbitmq` to be ready but since the subchart resources would have been installed before `bar`, this requirement would have been fulfilled. + +This approach of building a directed acyclic graph (DAG) is prone to circular dependencies. During the templating phase, Helm will have logic to detect, and report any circular dependencies found in the chart templates. Helm will also provide a command to print the DAG for development and troubleshooting purposes. + +### Readiness + +To enforce sequencing, Helm determines whether resources are “ready” before deploying dependent resources. By default, Helm uses [`kstatus`](https://github.com/kubernetes-sigs/cli-utils/blob/master/pkg/kstatus/README.md#the-ready-condition) library to assess readiness based on the resource’s type and `.status` field. + +Chart authors can optionally override this behavior using the following annotations: + +* `helm.sh/readiness-success`: A list of custom success conditions. If any are true, the resource is marked **ready**. +* `helm.sh/readiness-failure`: A list of custom failure conditions. If any are true, the resource is marked **failed**, which takes precedence over any success check. + +Both `helm.sh/readiness-success` and `helm.sh/readiness-failure` must both be provided to override the default readiness logic. If only one is present, Helm will fall back to `kstatus` and emit a warning. Helm will also fail linting when only one of the two is defined, to prevent ambiguous readiness evaluation. + +#### JsonPath syntax + +The `readiness-success` and `readiness-failure` annotations accept lists of expressions with the format: + +``` +{} +``` + +Where: + +* `` is a [Kubernetes JSONPath](https://kubernetes.io/docs/reference/kubectl/jsonpath/) query scoped to `.status`. +* `` supports: `==`, `!=`, `<`, `<=`, `>`, `>=`. +* `` is the expected literal for comparison. The value should be a scalor (string, number, boolean). Object comparisons will not be supported. + +##### Example + +```yaml +kind: Job +metadata: + name: db-init + annotations: + helm.sh/readiness-success: ["{.succeeded} == 1", "{.succeeded} == 2"] + helm.sh/readiness-failure: ["{.failed} >= 1"] +status: + succeeded: 1 +``` + +In this case, Helm will consider the resource ready because `.status.succeeded == 1`. If `.status.failed >= 1` had been true, the Job would instead be marked as failed. + +A resources readiness is checked if there is a resource that depends on it as per the sequencing DAG, otherwise the checks are ignored. + +Helm will wait up to a default of **1 minute** for a resource to either succeed or fail. If the resource does not reach a success or failure state within this period, the operation will time out, causing the chart install or upgrade to fail. This timeout can be customized using the `--readiness-timeout` CLI flag or the `ReadinessTimeout` field in the SDK. However, the specified readiness timeout must not exceed the overall `--timeout` value, which defines the maximum duration allowed for the entire chart installation or upgrade process. + +### Sequencing order + +Resources with sequencing annotations in a chart would be deployed first followed by resources without. If the chart has a `helm.sh/depends-on/subcharts` annotation in the `Chart.yaml`, all resources of the defined subcharts would be deployed before deploying the main chart. If any sequencing annotations are defined in the subchart resources, Helm will enforce ordering of resources within. Sequencing of resources in a chart are sandboxed within the chart. Sequencing annotations will not affect resources in other charts. + +- Installs: Helm will install resources in the order defined by the DAG. If any of the readiness checks fail or timeout, the entire install would fail and the release marked as failed. If `--atomic`, or its SDK equivalent is used, a rollback to the last successful install would take place. +- Uninstalls: Helm would uninstall resources in the reverse order they were installed, as per the sequencing order. The logic to delete each resource will not change. +- Rollbacks: Helm will check from the release object whether the revision being rolled back to, was installed in a sequenced manner. If it was, Helm will respect and enforce this order when installing resources from that revision. When deleting unneeded resources of the revision being rolled back from, the reverse order is followed just like uninstalls. +- `helm template` would print all resources in the order they would be deployed. Groups of resources in a resource-group would be delimited using a `## START resource-group: / ` comment indicating the beginning of each resource-group and `END resource-group: / `. + +```yaml +## START resource-group: foo group1 +# resource 1 +metadata: + name: foo + annotations: + helm.sh/resource-group: group1 +--- +# resource 2 +metadata: + name: bar + annotations: + helm.sh/resource-group: group1 +## END resource-group: foo group1 +--- +## START resource-group: foo/bar group2 +# resource 3 +metadata: + name: fizz + annotations: + helm.sh/resource-group: group2 + helm.sh/depends-on/resource-groups: ["group1"] +## END resource-group: foo/bar group2 +``` + +## Backwards compatibility + +Helm will continue to install/upgrade/uninstall/rollback all resources and dependencies at one go for all charts using `Charts v2` and below. + +## Security implications + +None. + +## How to teach this + +- Document how sequencing works in the official helm documentation website. Include ordering of Kubernetes resources that Helm enforces when applying resources to the cluster. Examples will be added to best demonstrate how this feature works. +- Document how this feature works for SDK users. + +## Reference implementation + +N/A + +## Rejected ideas + +1. A weight based system, similar to Helm hooks + - Static numbering of the order is more challenging to develop and maintain + - Modifying the order can lead to cascading changes. + - Dynamically named system solves these problems for the application distributors. + +## Open issues + +## Prior raised issues + +- https://github.com/helm/helm/pull/12541 +- https://github.com/helm/helm/pull/9534 +- https://github.com/helm/helm/issues/8439 +- https://github.com/helm/community/pull/230 diff --git a/community/hips/hip-0026.md b/community/hips/hip-0026.md new file mode 100644 index 0000000000..83c57412a2 --- /dev/null +++ b/community/hips/hip-0026.md @@ -0,0 +1,350 @@ +--- +title: "H4HIP: Wasm plugin system" +sidebar_label: "0026: H4HIP: Wasm plugin system" +--- + + + +| **HIP** | **Title** | **Author(s)** | **Created** | **Type** | **Status** | **Helm Version** | +|---|---|---|---|---|---|---| +| 0026 | H4HIP: Wasm plugin system | Scott Rigby , George Jenkins | 2025-02-17 | feature | draft | 4 | + + +## Abstract + +Helm is currently a monolithic application that is difficult to customize without changing the core codebase. This requires maintainers to review and accept every contribution, which is time-consuming and not scalable. + +This architectural proposal outlines a concrete plan to define a wider range of plugin types in Helm 4, so that users will be able to customize more default functionality in their own environment through alternative plugins. This will be accomplished through a new Wasm based plugin system. + +This will result in making Helm not only more extensible, but also more maintainable, allowing contributors to extend more of Helm's functionality via plugins rather than core changes to meet their needs more quickly. + +## Scope + +This HIP will cover the overall vision for the new plugin system, and an [implementation plan](#Implementation-Plan) for initial plugin types introduced into this system. This will will allow more categories of Helm functionality to become extended through additional plugin types in the future. + +This HIP focuses primarily on CLI users. +SDK users will not be required to use Wasm plugin functionality—it is expected that they may instead prefer to directly include Go libraries exposed by authors of those plugins. +Additionally, this HIP does not address an idea raised to allow chart authors to define required plugins for a chart—that will be proposed in a follow-up HIP. + +## Motivation + +Helm CLI users want to extend and modify Helm's default behaviors. This is evidenced by the [massive number of new feature pull requests](https://github.com/helm/helm/pulls) to Helm core. + +Helm 3 made some distance in addressing this issue through basic CLI plugins and other extensibility mechanisms, but these did not adequately address the end user need for customizing Helm's default behavior. + +### Helm 3 plugins did not adequately address the problem this HIP solves + +Helm 3 plugins were limited to primarily CLI subcommand plugins, and apart from downloader plugins, the plugin system was not designed to extend other categories of Helm functionality. + +The [high-level goal](https://helm.sh/docs/topics/plugins/#an-overview) of the Helm 3 plugin system shows that plugins were intended to solve this problem: +> Helm plugins are add-on tools that integrate seamlessly with Helm. They provide a way to extend the core feature set of Helm, but without requiring every new feature to be written in Go and added to the core tool (and maintained by core Helm maintainers) + +However, Helm 3 plugins had the following limitations: + +- Because plugins are primarily intended to add new Helm CLI subcommands, the Helm 3 plugin architecure is not helpful for SDK users, nor Chart Authors, or for customizing the existing Helm core functionality. +- Helm 3 plugins call a user-specified arbitrary binary through a subprocess, which does not allow Helm to limit the scope of these commands (see Wasm sandboxing under [Security implications](#Security-implications) for how this will be resolved). Plugin maintainers must also be concerned about OS and architecture compatbility of pre-built binaries and scripts. +- There is only one specialized type of Helm 3 plugin—**downloader plugins**—which comes closest to what Helm 4 is modeling its new plugin types after. Downloader plugins are called by Helm for a specific purpose and have a well-defined scope. The main limitation here is that it does not allow users to modify other default behaviors of Helm. + +### Other Helm 3 customization options did not adequately address the problem this HIP solves either + +Apart from plugins, Helm 3 attempts to allow user customization globally and per command: + +- Globally: By overriding Helm environment variables that allow certain configurations, such as setting the backend storage driver (`HELM_DRIVER`) or the Bearer KubeToken used for authentication (`HELM_KUBETOKEN`). These can be found by running `helm --help` or in the [`helm` command documentation](https://helm.sh/docs/helm/helm/#synopsis). +- Per command: By setting CLI flags and the equivalent SDK function options. This is the primary way Helm 3 allows user-defined configuration. It's important to note that command flags have proliferated over time in order to support backwards-compatibility within each previous MAJOR version of Helm. In addition to the high volume of open issues and PRs, these flags are clear evidence of the massive need for user-defined customization of Helm. + +While useful, all of these configuration approaches are limited and do not provide the level of extensibility users have requested without requiring their use cases to be built into Helm core. + +## Specification + +This section outlines the Wasm based plugin system, and the plan to define a wider range of plugin types. + +### Terminology + +- #### Plugin System + The *entire* Helm 4 plugin architecture. +- #### ApiVersion + The version of the Plugin System. `legacy` is the Helm 3 legacy system.`v1` is the new Wasm Plugin System. This lets us make large updates within the same MAJOR version of Helm. +- #### Plugin Type + Which Helm functionality the plugin can extend. Examples: `subcommand`, `downloader`, `postrender` +- #### Plugins + The individual, optionally intallable, plugins themselves + +### Directory Structure and Go Packages + +```text +pkg +└── plugin + ├── internal + │   ├── legacy + │   └── v1 + └── *.go +``` + +### Plugin System specification + +The [Plugin System](#plugin-system) is versioned becasue in order to not break Helm 3 plugins in Helm 4, while allowing the project to deprecate old versions and make future changes in a sane way. + +* `v1`: The new Wasm Plugin System +* `legacy`: Legacy support for Helm 3 subprocess plugins; no new fields expected (deprecated in Helm 4, to be removed in Helm 5) +* `pkg/plugin/*.go`: Public functions containing logic for plugin installation, pulling plugin metadata, plugin listing, the routing layer that decides which plugin system (legacy, Wasm) to use, and the [Plugin Type](#plugin-type) definitions. + +### Plugin Types specification + +These are optional plugins that can be used to alter the default behavior of Helm. Some plugin types will support multiple plugins of the same type to extend behavior (for example, multiple download plugins to support different protocols used across multiple dependencies of the same chart), while others may support using a single plugin to replace certain default behavior outright. + +Initial plugins will be launched with the release of the new Plugin System, with the architecture making it now easier to achieve the longer-term goal of developing a wider range of plugin types. The initial plugin types will be: + +- **Download** + + For downloading a chart or subchart from a remote source using some other protocol than HTTP/S or OCI, such as [s3](https://artifacthub.io/packages/helm-plugin/s3/s3) or [git](https://artifacthub.io/packages/helm-plugin/git/helm-git). +- **Postrender** + + The [Helm 3 post-renderer](https://helm.sh/docs/topics/advanced/#post-rendering) functionality moved to the new Wasm plugin system. See [Security implications](#Security-implications) section. +- **CLI** + + The new plugin system will continue to allow users to build and install CLI plugins, which specify subcommands for the Helm CLI. However, these will also be run in Wasm sandbox rather than directly calling arbitrary executables as a subprocess as was done in Helm 3. This will require Helm 4 plugin developers to follow our tutorials for migrating their legacy CLI plugin to the new Wasm CLI plugin framework. + +### Plugin specification + +`plugin.yaml` will be updated to include additional fields. These will be global across all plugins, with the exception of `config` which will vary depending on the plugin type. + +```yaml +apiVersion: v1 +name: my-custom-postrender-plugin +version: 0.1.0 +type: postrender.plugins.helm.sh/v1 +sourceURL: https://github.com/example/my-plugin +config: {} +``` + +New fields: +- `apiVersion`: This field is added to specify compatibility with the overall [Plugins System](#plugin-system) API. This will allow us to move to a new major version of Extism or other Wasm tooling independent of Helm major version. +- `type`: added to specify the Plugin Type message schema version the plugin expects to handle. Versioning this allows it to be updated within the same MAJOR version of Helm. The proposed format is `PLUGIN_TYPE.plugins.helm.sh/PLUGIN_TYPE_VERSION`. +- `sourceURL`: added to encourage best security practices. See [Security implications](#Security-implications). +- `config`: Per-plugin configuration allowable by it's [Plugin Type](#plugin-type) definition. + +### Helm plugin commands specification + +- `helm plugin list` command will be updated to also show the type of plugin, whether or not it is core or custom, the plugin source, and signing key if any. Example output: + + ```console + NAME VERSION TYPE SIGNED SOURCE_URL + s3 1.2.3 download 862HB19B https://gitlab.com/someone/s3-helm-plugin + kustomize 4.0.0 post-render 208DD36E https://github.com/helm/helm + my-nodejs 0.1.0 post-render N/A N/A + ``` +- `helm plugin install` installs a plugin from a URL (see Distribution specification below) +- `helm plugin update` will check for updates, then follow the same behavior of `plugin install` +- `helm plugin sign` will use Helm 4's built-in provenance signing mechanisms as a convenience to sign a plugin +- `helm plugin verify` will use Helm 4's built-in provenance mechanisms as a conveniencce to verify a signed plugin + +### Distribution specification + +Helm will need to install/download plugins Wasm binaries. When users run `helm plugin install`, and other future methods. + +Helm will initially support installing plugins from http URLs, from version control systems, and the local filesystem, just as in Helm 3. + +The distribution format may either be discrete files (ie. filesystem or version control system), or packed tar archives (e.g. filesystem and URLs). Format described below. + +Eventually, it is recommended that Helm supports plugin distribution via OCI artifacts. And further distribtion schemes e.g. S3 could be supported via plugins themselves. + +#### Plugin distribution format + +A plugin comprises of the following filesystem structure (or a tar archive of): + +``` +. +├── [LICENSE] # Optional: plugin licence +├── NAME.wasm # Wasm binary +└── plugin.yaml # Plugin manifest +``` + +### Provenance specification + +Helm will require plugins to be signed, producing an error if an unsigned plugin is attempted to be installed. With an exception for the following situation: + +- Installing from the local filesystem (for local development) +- When the user provides an `--allow-insecure-plugins` flag (see [Security implications](#Security-implications)) + +Helm 4 will support the same provenance functionality for Plugins as Helm 3 supports for charts. See . When Helm supports additional signing mechanisms such as [sigstore](https://www.sigstore.dev/) based signing for charts, this will also be supported for plugins. To follow this initiative, see [Support additional signing mechanisms than PGP](https://github.com/helm/community/issues/325). + +## Rationale + +The following apply to the Plugin API v1 (see `apiVersion` under [Plugin specification](#plugin-specification)): + +### Technical reasoning for Wasm plugins + +For a plugin system to work, Helm must be able to "invoke" the plugin with a suitable message so that the plugin can perform its operation and return a result. The traditional "[foreign function interface](https://en.wikipedia.org/wiki/Foreign_function_interface)" problem + +```mermaid +sequenceDiagram + participant h as Helm (Go) + Wasm runtime + participant P as Plugin (Go, Rust, etc as .wasm) + h->>P: Call exported function + P->> h: Call imported function +``` + +For this, Helm 4 will be using 2 of the 3 main technologies that exist for interfacing with Wasm modules/components today (the 3rd option—WASI P2—is under [Rejected ideas](#Rejected-ideas)). The two that will be used here are: + +1. Native WASI P1 (POSIX/C-life FFI) +[WASI P1](https://wasi.dev) defines a way for a module to export basic types in a C/POSIX style FFI. While simple, the caller has to manage much of the details, like converting internal structures into simple types (integers, pointers) and (manually) managing memory. +2. Message serialization/RPC (GRPC/protobuf, JSON, etc) +Rather than trying to implement a rich FFI, either directly via WASI P1, or indirectly via WIT. Implement/utilize a simple FFI that uses a higher level serialization ie. serialization of internal types into e.g. protobufs or JSON and utilizing e.g. a simple FFI or GRPC or HTTP for the majority of message content. + +### Technical reasoning using Extism for Wasm plugins + +For Wasm Plugin Interfacing, Helm 4 will be leveraging the Extism project. See and specifically the Extism [Go SDK](https://github.com/extism/go-sdk) and [Go PDK](https://github.com/extism/go-pdk). + +Extism is the most mature and well-supported Wasm plugin system today, has a large and growing ecosystem of supported languages and libraries, is actively maintained by a team of core contributors with a solid backwards compatibility policy, has a strong security focus, and makes Wasm plugin interfacing easier to implement than other systems. + +By chosing Extism, the new [XTP Bindgen](https://github.com/dylibso/xtp-bindgen) convenience tool will also be available for polyglot plugin developers to create bindings and codegen for their Extism Wasm host functions. See [additional information here](https://github.com/extism/go-pdk?tab=readme-ov-file#generating-bindings). + +## Backwards compatibility + +Requirements for the new plugin system and the initial default plugins: + +- Helm 4 MUST continue to be as easy to install as Helm 3 +- The default installation for Helm 4 MUST be "batteries-included". I.e., users will not need to take any additional installation steps for the new plugin system in order to use Helm's default functionality out of the box +- Plugins used by Helm MUST be explicitly chosen by the end-user, and be clearly discoverable by the end user that they will be in use. This is to follow the [principle of least astonishment](https://en.wikipedia.org/wiki/Principle_of_least_astonishment) and make it easier for maintiners to support end users who may not be aware they or someone else has chosen to not use a certain portion of Helm's default behavior in their environment. +- The new plugin system MUST NOT prevent SDK users from using the default functionality +- A security plan approved by Helm's security team MUST be adopted for developing and releasing this new architecture model + +## Security implications + +### Summary + +The new plugins sytem will be based on Wasm for improved security over the previous subprocess plugin model in Helm 3, and for improved call and response options that allow extending more of Helm's functionality with plugins than was previously feasible. + +Additional steps are also taken to improve security: +- Tools are added for signing and verifying plugins +- Plugin authors are encouraged to follow best security practices (Helm will surface when these are not followed), and users are encouraged to take advantage of these +- Helm will automaitcally attempt to verify the provenance signature of a plugin by default when it is first installed +- [Helm 3 post-renderers](https://helm.sh/docs/topics/advanced/#post-rendering) will now also become a plugin type in the new Wasm plugin system + +### Details + +In Helm 3, plugins required users to opt-in before using by manually installing. This put the responsibility on the user to ensure they trust the plugin authors, and verify by inspecting the source code. These plugins did not have a built-in provenance mechanism for signing or verifying as charts do. Since these plugins could call any executable, users could be spoofed by inspecting the source code in VCS, while the plugin called a compiled binary built from a different source. Security-minded users could address this if they wish by downloading the source and compiling themselves rather than using the upstream compiled Wasm file. This was also the case with Helm 3 post-renderers, which required passing the binary path. + +In Helm 4, users may still manually install plugins. + +Helm 4 will address this in the following ways: + +- Adds provenance signing and verifying options for plugins: + + Additionally, Helm 4 has built-in plugin provenance signing and verifying capability both through the CLI and SDK. This will make use of the same functionality for provenance that is supported for charts in Helm 4 (adding any additional methods like sigstore/cosign will be a separate HIP). + +- Security best practices encouraged and surfaced to end users: + + Plugin authors are expected to sign the plugins, clearly list their signing key(s) in the source code README, and give clear Wasm build instructions for their source code. + + For plugins that follow the above recommendations, end users are strongly encouraged to verify the provenance signature. Users may also inspect the source code before using plugins, and if they wish may build the Wasm plugin themselves. + + When a plugin is first installed using `plugin install` the CLI will exit with an informative error if a plugin is unsigned, and the user has not explicitly passed a flag (eg, `--allow-insecure-plugins`) to bypass this. Plugins installed from the local filesystem (from source as opposed to a tarball) are excepted from signing requirements, to enable local plugin devlopment. + + Assuming the plugin is signed (and not bypassed with the `--allow-insecure-plugins` flag), Helm will also attempt to verify the provenance signature BY DEFAULT when the plugin is first installed. If the signature is not found, or the signature is invalid, the user will be notified and the plugin will not be loaded. A user may pass a flag to bypass this verification check with an insecure flag too, but must explicitly do this to acknowledge they are bypassing the verification check. + +## Implementation Plan + +Work for the plugin system will follow the [H4HIP: Helm 4 Development Process](/community/hips/hip-0012) timelines. + +1. Marking this HIP as accepted (including security plan in this HIP approved by Helm's security team) +1. May. 2025: Engineering on this feature begins +1. Aug. 2025: Have inital work on all features included in the initial implementation, adhering to Feature freeze for Helm 4 release preparation +1. Nov. 2025: Initial offering feature complete by Helm v4.0.0 release +1. Post-release: Follow up HIPs for additional plugin types and features will match future Helm 4 Minor version release schedule + +### Initial release of the new plugin system + +- [ ] Create initial version of new plugin package to load Wasm Extism plugins +- [ ] Create message schemas for new plugins types: + - [ ] `download.plugins.helm.sh/v1` + - [ ] `postrender.plugins.helm.sh/v1` + - [ ] `cli.plugins.helm.sh/v1` +- [ ] Write host functions to invoke these initial defined Wasm plugin types + +### Roadmap items that may be added in further HIPs + +- Additional plugin types for moving other Helm functionality to the plugin system +- Allow plugins to be stored as OCI artifacts (in addition to HTTP, VCS, and local filesystem) + - add Helm CLI command for plugins similar to `helm push` +- Add new Helm plugin types to ArtifactHub.io + - Move current Helm plugin kind to legacy and add a new Helm plugin artifact kind. + To not pollute too much the list of top level kinds supported on ArtifactHub, plugins subtype (downloader, render, etc) could be a property of the plugin entry. This would also have the benefit of allowing publishers mixing plugins of multiple subtypes in the same Artifact Hub plugins catalog/repository. Regarding the plugins catalog structure, ideally ArtifactHub maintainers would like them to follow the same format they're using for most artifacts kinds supported these days. Here is an example: https://artifacthub.io/docs/topics/repositories/kubewarden-policies/. Reusing the same catalog format across artifacts kinds creates a unified experience for publishers when listing their content on Artifact Hub. It also simplifies maintenance on their side (they support +25 artifact kinds), making the project more sustainable. + +## How to teach this + +- Create examples of each Plugin Type for the new plugin system that contributors can use as a model for their own plugins + - `download`: OCI, HTTP/S + - `postrender`: No default. We should write a very simple example to prove that the host function works + - `cli`: No default. Similarly we should write a simple example proving the host function works +- Write concise and easy to follow documentation for the new plugin system +- Write a blog post outlining how the community will benefit from the new plugin system, which can link to the documentation and these examples +- Create a presentation to propose for conference talks as another communition channel to make the community aware of the new plugin system +- Reach out to authors of community plugin to encourage them to update to the new plugin types (examples could be moving the [s3 downloader plugin](https://artifacthub.io/packages/helm-plugin/s3/s3) to the new `download` type, and the [Helm Diff plugin](https://artifacthub.io/packages/helm-plugin/diff/helm-diff) to the new `cli` type) + +## Reference implementation + +Two example Wasm plugins leveraging Extism have been prototyped. The first is an example downloader plugin, and the second is an example renderer plugin: +- https://github.com/gjenkins8/helm-plugin-ocigetter +- https://github.com/gjenkins8/helm-plugin-gotemplate-renderer/ + +The host functions are prototyped using Go testing, in `/testdriver/main_test.go` in each Git repo. These are fairly basic to start, but proves out that this capability works. Creating the proper interfaces will be part of the work implementing this HIP (see [Implementation Plan](#Implementation-Plan)). + +## Rejected ideas + +1. Using a subprocess plugin model. (The legacy Helm 3 subprocess system will be deprecated in Helm 4, and removed in Helm 5). + + This would have allowed us to avoid the need to write a migration path for existing CLI plugins, but is not as secure as the new Wasm plugin model that has since become feasible. + + For these reasons, we've also ruled out other available subprocess-based plugin systems such as [Hashcorp's go-plugin package](https://github.com/hashicorp/go-plugin). + +1. Helm 4 will not create a central repository for plugins. + + This is a non-starter for the Helm project. Helm maintainers have learned from the experience of the formerly centralized charts repo that it does not scale well or enable eccosystem growth as much as a distributed community-managed model. See [/community/hips/archives/helm/distributed-search](/community/hips/archives/helm/distributed-search). + +1. Helm 4 have ruled out the following technologies for plugin interfacing in Helm 4: + - [WASI Preview 2](https://github.com/WebAssembly/WASI/tree/main/wasip2#readme) / [WIT IDL](https://github.com/WebAssembly/component-model/blob/main/design/mvp/WIT.md) / [Wasm Component Model](https://github.com/webassembly/component-model) + + Problem: While it is production ready and in use by other projects, it is not yet supported by Extism's underlying Go tooling, Wazero. Without tooling like Extism, implementing the plugin model we're after would be a lot of additional work. It is likely that Wazero and therefore also Extism will support the Component model in time for Helm 5. + + The only other viable Component model alternative to Extism for our use case that we're aware of would be to use CGo to link in [Wasmtime](https://github.com/BytecodeAlliance/wasmtime), but that would likely require a high level of expertise to implement and maintain. + + - [Wazero](https://github.com/tetratelabs/wazero) directly + + Problem: With Wazero, all params are uint32, so any strings must be interpreted from that, which would be a significant amount of work to manage directly. This is one of the problems Extism solves, and is able to leverage Wazero in a viable way for our plugins use case. + + - [Wadge](https://wasmcloud.com/docs/developer/languages/go/components#wadge) in wasmCloud + + Problem: This is another CGo-based solution. Helm maintainers would like to avoid CGo due to complexity it would add for cross-compiling, debugging, and other issues. + + - [Web Assembly for Proxies (Go SDK)](https://github.com/proxy-wasm/proxy-wasm-go-sdk) + + Problem: This is largely Envoy-specific, used for their [Wasm HTTP filter plugin](https://www.envoyproxy.io/docs/envoy/latest/configuration/http/http_filters/wasm_filter), and does suit our use case well. + + - [Go native plugin system](https://pkg.go.dev/plugin) + + Problem: Go native plugins do not support Windows. For this reason alone, Helm can't use this solution. Additionally, go native plugins run as native code without any sandboxing restrictions. + + - [Embedded go interpreter (yaegi)](https://github.com/traefik/yaegi) + + Problem: Yaegi does not have full sandboxing like Wasm. See + + Note: Traefik uses this, so it seemed notable enough to mention. + +## Open issues + +1. What extra permissions would Helm 4 Wasm plugins need to provide to give CLI plugin authors parity with the subprocess model that allowed plugins to do anything to the user's environment? + +## References + +Precedents: + +Helm [2.1.0](https://v2.helm.sh/docs/plugins/#downloader-plugins) introduced the Helm plugin concept, mainly as a way to add additinal helm CLI subcommands that are not part of the built-in Helm codebase. This is helpful for adding new one-off functions, but does not allow users to extend the default behavior of Helm. + +Later Helm [2.4.0](https://v2.helm.sh/docs/plugins/#downloader-plugins) introduced the downloader plugin, which did make Helm core functionality extensible—in this case allowing users to download a chart from other sources than HTTP/S repos by specifying any other protocols such as [s3](https://artifacthub.io/packages/helm-plugin/s3/s3) or [git](https://artifacthub.io/packages/helm-plugin/git/helm-git). diff --git a/community/incubator.md b/community/incubator.md new file mode 100644 index 0000000000..5efcd20f8f --- /dev/null +++ b/community/incubator.md @@ -0,0 +1,121 @@ +--- +title: Kubernetes Helm Incubator Process +--- + + + +**Authors:** Brandon Philips , Sarah Novotny , Brian Grant + +## Kubernetes Helm Incubator + +The [Kubernetes Helm](https://github.com/kubernetes-helm) project is where all new Helm-related projects should start. Once going through the incubation process explained in this doc they can become full Kubernetes Helm Community Projects. The process is designed to ensure that new projects have correct licensing, up-to-date boilerplate documents, a healthy community process, and are developed using accepted Kubernetes Community practices. + +### Context + +New Kubernetes projects are getting added in an ad-hoc manner leading to confusion; see [this thread as an example](https://groups.google.com/forum/#!topic/kubernetes-dev/o6E1u-orDK8). + +### Status + +This process is light on legalese, completely untested, and only works if people act as good neighbors and community members. It will evolve over time and the authors will try keeping the process light, fast, and objective. + +## Does my project need to Incubate? + +### Applications on top of Kubernetes Helm + +If you are building an Open Source application on top of Helm that is unrelated to the development, operation, monitoring, APIs, lifecycle, integration, or other primary concerns of the Kubernetes Helm project there is no reason to become a Kubernetes project. If you are unsure if your project is a good fit try running it by a few Kubernetes Special Interest Groups or kubernetes-dev@googlegroups.com. + +## Entering Incubation + +To create a new project for incubation you must follow these steps: write a proposal, find a champion, gain acceptance into SIG-Apps, and finally get approval of a Sponsor. The Sponsor and Champion cannot be the same person. + +Your proposal should include two items. First, a README which outlines the problem to be solved, an example use case as-if the project existed, and a rough roadmap with timelines. Second, an OWNERS file that outlines the makeup of the initial team developing the project. Initially this can be one person but ideally has a 3 or more initial developers representing a few different companies or groups. You can use whatever tool you want to host and revise the proposal until the project is accepted to the Incubator: copy/paste from your text editor, Google Docs, GitHub gist, etc. + +Once the proposal is written you should identify a champion; this person must be listed as either a reviewer or approver in an OWNER file in the [Kubernetes Helm project](https://github.com/kubernetes/helm). Next, reach out to your potential champion via email to ask if they are interested in helping you through the Incubation process. Ideally some significant follow-up discussion happens via email, calls, or chat to improve the proposal before announcing it to the wider community. + +The next discussion should be on the Special Interest Group Apps mailing list. You should post the proposal to the SIG-Apps mailing list and wait for discussion for a few days. Iterate on the proposal as needed and if there is rough consensus that the project belongs in SIG-Apps then list SIG-Apps in the proposal README. If consensus isn't reached then identify another SIG and try again; repeat until a SIG is identified. + +The final process is to email kubernetes-dev@googlegroups.com to announce your intention to form a new Incubator project. Include your entire proposal in the body of the email and prefix the Subject with [Incubator]. Include links to your discussion on the accepted SIG mailing list to guide the discussion. + +Acceptance of the project into the Kubernetes Incubator happens once a Sponsor approves. Anyone listed as an approver in the top-level pkg OWNERS file https://github.com/kubernetes/kubernetes/blob/master/pkg/OWNERS can sponsor a project by replying to the kubernetes-dev discussion with LGTM. + +## Creation of the Incubator Project + +Once your project is accepted someone will create a new GitHub repo for your project to use in the github.com/kubernetes-incubator organization. The first order of business is to add the following files to the repo: + +- a README from the accepted proposal +- an OWNERS from the accepted proposal +- a CONTRIBUTING file based on kubernetes/kubernetes +- a code-of-conduct.md based on kubernetes/code-of-conduct.md +- a LICENSE file with the Apache 2.0 license +- a RELEASE.md file that talks about the process for releases + +A template project to start your project with these files can be found here: https://github.com/kubernetes/kubernetes-template-project + +## Exiting Incubation + +An Incubator Project must exit 12 months from the date of acceptance in one of these three ways: + +- Graduate as a new Kubernetes Project +- Merge with another Kubernetes Project +- Retirement + +### Graduation + +Both time and traction are required to graduate to becoming a new Kubernetes Community Project. It is expected that from the time that your project is accepted to a request for graduation the following criteria are met: + +- **Documented users:** the project tracks evidence from downloads, mailing lists, Twitter, blogs, GitHub issues, etc that the project has gained a user base +- **Regular releases:** the project is making releases at least once every 3 months; although release should happen more often +- **Incubation time:** a minimum of 6 months has passed since +- **Healthy community:** a healthy number of users, contributors, and/or OWNERS outside of your own company have participated in the project. The Sponsor and Champion can make this call. +- **Roadmap:** A roadmap for the next release is maintained; this can be in the form of a doc, GitHub milestones, or any other tool but it must be documented in the README + +When the OWNERS of the Incubator project determine they have met the criteria to graduate they should contact their Champion and Sponsor to discuss. If both the Sponsor and Champion agree that the above criteria have been met the project can graduate to become a Kubernetes Community Project and exit the Kubernetes Incubator. + +An announcement of graduation must be sent to the kubernetes-dev@googlegroups.com mailing list by the Champion. + +### Merge + +At any point during Incubation a project can exit by merging the project with another Incubator Project or Kubernetes Community Project. The process to merge includes: + +1. Incubator Project OWNERS notifying the project Champion and Sponsor +2. Once the Champion and Sponsor have been informed then email kubernetes-dev@googlegroups.com about the intention to exit through a merge + +### Retirement + +If a project doesn't merge or graduate within 12 months it is retired. If a project fails to make a release for 6 months it is retired. Retired repos are moved to the github.com/kubernetes-incubator-retired organization. A warning email will be sent 3 weeks before the move to all people listed in the root OWNERS file, the Champion, and the Sponsor. A project can be re-incubated after retirement but must go through the process of Incubation Entry from the beginning, the same as any new project. + +## FAQ + +**Q: What is the role of a Champion?** + +**A:** Potential Champions come from the set of all Kubernetes approvers and reviewers with the hope that they will be able to teach the Incubator Project about Kubernetes community norms and processes. The Champion is the primary point of contact for the Incubator Project team; and will help guide the team through the process. The majority of the mentorship, review, and advice will come from the Champion. Being a Champion is a significant amount of work and active participation in the sponsored project is encouraged. + +**Q: What is the role of the Sponsor?** + +**A:** Potential Sponsors come from the very small set of Kubernetes contributors that can approve any PR because they are listed as approvers in the `kubernetes/pkg` OWNERS file or the top-level OWNERS file. The idea is that by relying on this small set of Kubernetes Community members to make a determination on Incubator projects we will ensure that there is consistency around new projects joining the Incubator. Being a Sponsor is a minor advisory role. + +## Existing Repos + +Based on the above process there are a number of repos under github.com/kubernetes we should handle through either grandfathering, a move to incubation, or retirement. This list is a rough draft, if you feel strongly about something being miscategorized please comment. + +**Projects to Move to Incubator** + +- github.com/helm/monocular +- github.com/helm/rudder-appcontroller + +## Thank You + +Large portions of this process and prose are inspired by the Apache Incubator process. + +## Original Discussion +https://groups.google.com/d/msg/kubernetes-dev/o6E1u-orDK8/SAqal_CeCgAJ + +## Future Work + +- Expanding potential sources of champions outside of Kubernetes main repo \ No newline at end of file diff --git a/community/index.mdx b/community/index.mdx deleted file mode 100644 index ea3db4f3db..0000000000 --- a/community/index.mdx +++ /dev/null @@ -1,14 +0,0 @@ ---- -title: Community -sidebar_position: 1 ---- - -# Community Guides - -Learn here about the development process for the Helm project itself and how you -can contribute. - - -import DocCardList from '@theme/DocCardList'; - - diff --git a/community/meeting-notes/2017.md b/community/meeting-notes/2017.md new file mode 100644 index 0000000000..2789f94b18 --- /dev/null +++ b/community/meeting-notes/2017.md @@ -0,0 +1,747 @@ +--- +title: Helm Minutes for 2017 +--- + + + +```txt +December 14, 2017 +Announcements +Helm Summit CFP is open (are we extending deadline?) +Helm 2.8 soon after Kubernetes 1.9 is released +Standup: +Justin: +Issue triaging +Michelle: KubeCon SIG-Apps meeting +Deployments with injected values about the environment +Helm summit planning and mailing list setup +Steve: +Lot of discussions a KubeCon +Internal discussions about Helm and security, maybe some afterward discussions +Looking over issue list +Matt Farina +Helm Status YAML/JSON output done +How to pass in custom user agents? (For CI) +OWNERS files for k/charts; instituting this as policy this week +All k8s org projects will now have stale issue closer +CircleCI fixed +Matt Butcher +KubeCon updates about SK, Alibaba, etc. +Suggest skipping meetings for rest of year +Matt Fisher +Alibaba: Using a forked Kubernetes with Helm +SIG-Apps Update and Deep Dive meetings: Good discussions on Helm dev summit, esp. On whether we should use CRDs +Looking at Adam’s PR for 1.9 support +Taylor +Focusing on Helm summit +Lots of sponsorship asks +Triaging CFPs with Fisher, Adam, Michelle on Dec. 15 +Some PR triaging +Some ideas about CRDs that might prototype +Adam +PR for k8s 1.9 +Heads up on remodeling of Kubernetes types +[Fisher volunteered to pair] +Discussion items +Helm Summit [Michelle] +Please submit CFPs https://helmsummitpdx-feb2018.splashthat.com/ +Contact Taylor for CFP review +When do we want the CFP deadline? +Follow-up in the CFP discussion tomorrow +Helm security mailing list and email [Michelle] +Current: helm-security@deis.com +What do we want the new address to be? Security mailing list? +Google groups or mailman +Fisher: Mailman usage is common in open source communities +KubeCon update +Kubernetes upgrades for 1.9, and how this breaks/changes Helm + +November 30, 2017 +Announcements +Helm Summit venue is locked in: The Evergreen in Portland, OR. +21-22 February 2017 +There’s space enough for 200 people or less. It’s “super cute.” +Nike is co-sponsoring with Microsoft. There or may not be Nike swag available. +Standup: +Taylor +Working through backlog of PRs. +Coordinating Nike side of sponsoring the summit. +Reviewing Michelle’s Tiller plugin. +Adam +KubeCon preparation. +Starting in on working on Kubernetes 1.9-related changes. +Brian + + +Steven +Discussing Tiller security with internal teams considering using Helm. +Michelle +Working on a plugin called “secure-tiller” to lock down Tiller for a particular Kubernetes namespace. It deploys Role and RoleBinding objects to restrict Tiller’s permissions. She’s soliciting feedback on whether this pattern and convention is helpful and desired. +Working on securing the venue for the Helm summit. +Matt Fisher +Triaging issues, including a few related to security. +gRPC upgrade +Should we wait until after KubeCon to release? +Helm version 2.8 would bring parity with Kubernetes version 1.9. +Matt Farina +Working on slides for presentation at KubeCon. +Sprig library interface oddities needed accommodation, for a pending release. +Matt Butcher +Cleared out PRs in the queue on Thanksgiving. +Published the secure Tiller/TLS configuration blog post. +There are coming changes to the Helm documentation site. +KubeCon and the Helm Team +Michelle is planning meetings, and wants to know who wants to participate. +Lots of people new to Helm will be there. Keep that in mind when pitching Helm. +Michelle is working on a “cheat sheet” to help explain what’s changing in Helm to keep pace with Kubernetes evolution. +We’d like to find people who are not maintainers to speak on their use of Helm. +Be on the lookout for experience reports, and encourage people to attend the Helm summit a couple of months later. +Discussion +Stepping down from core maintainership role gracefully: Introduce a new category for “emeritus” where one rescinds a previously-held voting role. Open an issue in which to discuss this procedure. The Kubernetes Steering Committee has guidelines that we could borrow. +There are parties that may show up at KubeCon that will paint the Helm community in a bad light. We’ve been improving the documentation in preparation. +Be professional, level-headed, and set a good example. Confrontation isn’t helpful. Matt Farina is willing to intervene and mediate. + +Action Items: +Share documentation that addresses these concerns. + +November 16, 2017 +Announcements +Helm v2.7.2 +Standup: +Taylor +Issue sherpa’ing +Bug reported with tiller memory leaks +Working with michelle on the helm dev summit +Adam +Released v2.7.1 +Brian +Triage the TLS issue that was released in v2.7.2 +Steven +Asked to place a discussion around pluggable tiller authentication backends +Michelle +Working on the helm dev summit side as usual +Been going through the UX for setting up RBAC +Matt Fisher +Triaged issues for v2.7.1 +Peer reviewed the patch for v2.7.2 +Matt Farina +Starting on work for helm status output as JSON +Discussion +Pluggable auth backends for tiller +IBM wants to integrate their authentication/authorization backend to front tiller +Some arch discussion around blocking direct access to tiller only to the authentication gateway +IBM would like to open a ticket to discuss this proposal +v2.7.3? +The patch looks good, but there are concerns around the grpc-go PR being backwards-incomaptible between Helm patch releases +November 9, 2017 +Announcements +None for today +Standup: +Taylor +Looking at what items need to make it to the next Helm release +Reviewed the "symlink-walk" piece that we needed to remove because it was part of the facebook-go dependencies. Looking pretty good. +Matt Farina: +Moving charts to a model where owners will be able to make PRs themselves. +Still a little ways out to finalize this, since we need to move to Prow before this can happen +Justin: +Was Sherpa Tsar +Merged an example for overrides +Nikhil: +Working on new chart for Portus Registry +Will run it by folks once it's complete to get some feedback +Discussion Topics +Turning on RBAC by default (kensey - Issue 3098 in GitHub) +Chart PR that was reviewed - reformat chart using RBAC (enable/disable + service account) +Most of the other kubernetes teams have moved to use RBAC by default +Ideally make a decision on this by next dev-meeting +Helm Summit (Taylor) +Current dates were oo close to KubeCon, so makes sense to reschedule +Moved out to Feb 6th and 7th +CFP deadline to moved out to a week after KubeCon +The venue is still being finalized, should be safe to book travel once venue is finalized +Assignments for next week +Issue Sherrif - Taylor +Notes - Justin +Meeting Lead - +November 2, 2017 +Announcements +Microsoft folks will be away all next week +If you are a core maintainer and not already on the kubernetes-helm-core google group, please request access here +Helm Summit CFP is open. Submit a CFP to speak at the summit here +If you’re interested in helping with the schedule and sort CFP submissions, please contact Taylor Thomas +Plans to release a v2.7.1 sometime in the near future +Standups +Matt Farina +Got a few PRs merged on bringing out the app version and maintainer URL to Chart.yaml +Raised a question about charts should be mutable or not; kubernetes/charts are currently mutable +Matt Butcher +Got ChartMuseum into helm’s incubator with Matt Farina +Chatted with Farina about helm templating ideas +Plans this week are to continue with helm comunity stuff +Michelle +Reached out to Sarah (Kubernetes) and Dan (CNCF) to advise on where we should post community meeting recordings +Fisher +Issue queue triaging +Working on documentation +Need alias for security leaks +Taylor +Issue sherpa this week +Issue got dropped about deployments. One user is considering dropping helm due to this bug so we should strive to take a closer look into it +Finalizing some venue stuff for the dev summit, looks like it’s going to be in downtown portland +Adam +Worked on trying to tamper down the PR queue along with Fisher +Focusing on helping out Michelle on the helm dev summit +Michelle +Talking to lots of users last week on Helm +Posted the presentation on helm from last week so others can learn +Helm summit is on her list of TODOs: CFPs, venues, schedule etc. +Reached out to Sarah and Dan(?) on how we want to upload the helm dev summit videos +Justin +Jumped into the context deadline exceeded issue +Fisher has commented on that issue to *hopefully* move the conversation/troubleshooting forward +Steven +Helping people over the istio helm chart, how to get it installed into the cluster and how to add it to your own service using istio sidecar injection +Found a bug when submitting a chart with no objects caused an error; there’s an argument forming around a chart should be installable even if no resources are deployed +Discussion topics +What other mailing lists do we need other than Kubernetes-helm-core for core team communications? +Need alias for security leaks +Justin: should we pre-seed discussion about what is on the table for breaking changes in Helm 3? +We should rope in everyone on a 45 minute dev call to discuss what’s the scope of the project for helm 3, whether charts compatibility should break between Helm 2 and Helm 3, etc. +Should we discuss about the helm summit at KubeCon? +Yes +Assignments for next week +Issue Majaraja: Justin +Meeeting notes: Steven +Meeting lead: Taylor + +October 26th, 2017 +Announcements +Helm v2.7.0 was released this Monday +Helm v2.8.0 is planned to go out after Kubernetes 1.9 in December as agreed upon last meeting +Standups +Adam Reese +Released Helm v2.7 +Brigade launch has been taking up most of his time this week +Matt Fisher +Also assisted with Helm v2.7 release +Steven Harris +Concerns around confusion with values.yaml -- there are a lot of different ways to configure values. --reuse-values, --set, changing values.yaml, `helm inspect values` +Taylor Thomas +Jumping back this week +Working on the helm summit, hopefully more progress next week +Needs some more help on reviewing CFPs for the summit: Fisher and Reese raised hands +Matt Farina +Has 2 PRs in helm related to charts +Adam said that he will get to reviewing them this week +Discussion topics +Fisher wants to propose a talk about how to propose and document new features in helm at the dev summit in Jan +One concern around Helm 3: chart compatibility. We should strive to be compatible with Helm 2 charts now that there are a lot of them +Steven brought up the discussion from this week’s SIG-Apps meeting from Brian Grant +Fisher and others will be attending the working group to discuss ideas proposed by Brian and see if these can be distilled into features for Helm 3 (or Kubernetes in general) +Assignments for next week +Issue sherpa: taylor +Meeting notes: fisher +Meeting lead: steven +October 19th, 2017 +Announcements +Helm Summit Interest Survey is out: https://goo.gl/forms/UBTTS7JaoZpSzoar1 +Cut the release for 2.7.0-rc1 - Thanks Fisher, Adam and Taylor +Standups +Matt Fisher +Helped out with the release +Tag was not being built on CircleCI, had to use API directly to cut the tag +Same issue happening on Draft so it might be something related +Currently looking through this issue to get tags to work again so we don’t have to do a manual API Post to build the tag +Planning on doing the release notes and documenting how to do that +Looking for any issues on the rc1 release but haven’t found any +If all looks well, we could release by next week +Michelle Noorali +Issue Maharani this week +Created a google group for the Helm core team +Sent out Helm Summit Survey to gauge people’s interest in attending +Link: https://goo.gl/forms/UBTTS7JaoZpSzoar1 +44 responses so far +Sending out CFP form today for the Helm Dev Summit +Will create a google group for the Helm community at large +Venue is looking to have a max capacity of 200 at this time, looking at other options +Reach out to michelle if interested in setting schedule stuff for the summit +Date might be changing to Jan 16th/17th +Adam Reese +Issue grooming, PR reviews +Helped released 2.7-rc1 +Justin Scott +This week want to participate more in helm +Interested in telepresence. Pretty cool, didn’t work +Taylor +More helm dev summit organizing +Matt Farina +Working with the charts team for loosening CI linter rules +Matt Butcher +Taylor had some impromptu helm things going +All the Helmettes went to the KubeCon after party together, from core maintainers to new users +Met with SK Telecom using Helm to deploy all their Openstack mega clusters +Lots of discussions around what people like and don’t like about Helm +Out on vacation next week +Bitnami announced their new Kubeapps product +Discussion topics +Kubernetes 1.9 planning +Wednesday December 13th +The rc1 is set for 12/6 +Look at releasing helm 2.8 at the end of the year +Keep in mind KubeCon is Dec. 6-8 +Helm 2.7.0 release date +Looking at Monday or Tuesday of next week if no issues arise before then +Venue options and preferences +Fisher said that he’s interested in seeing the Nike campus :3 +Assignments for next week +Issue sherpa: Taylor +Meeting Notes: Matt Fisher +Meeting Leader: + +October 12th, 2017 +Announcements +Standups +Adam +K8s 1.8 support +Working with Matt Farina on some PRs, will be following up this week +Matt Fisher +Steven +Using helm around different environment-based values +Looking into/reading about the CronJob issue +Matt Butcher +Had a meeting with App Registry and ChartMuseum +Following up with ChartMuseum dev wants to put it into helm incubator +Outcome of the meetings was there was strong ChartMuseum as the backend and Monocular as the front-end for a chart repository experience +Launching new OSS so being busy for the next 2 weeks or so +Justin Scott +Playing around with telepresence (sorry Fisher) :P +Taylor +Issue sherpa this week +Trying to lasso issues into the 2.7 release, continuing to assist in the RC +Nick +Got helm/tiller merged into SUSE’s CaaS platform +Matt Farina +Submitted a preemptive bug fix +Updates on the charts repo: They are linting and running various static tests with Circle to automate all the things +Discussion +Secrets backend +Docs +Conversion from ConfigMaps to Secrets +Decision is to go ahead and merge and add documentation outside of PR +2.7 Release +Adam in charge of cutting release +K8s support again….We need to support 1.7 and 1.8, which means supporting 2 API versions for this release +This PR should probably be pulled off of 2.7 and fixed upstream +RC release date: Monday, Oct. 16th +Helm Summit +Figuring out final details about the venue, should have news in the next few weeks +FakeClient PR +Some input and help needed. We need to make sure we help quickly on this +Dashboard Authentication example +Steve saw some code with using user roles to allow better access. Not the best option, but other apps are progressing with authentication +See https://github.com/kubernetes/helm/pull/3025 + +Assignments for next week: +Issue Sherpa: Michelle +Meeting Lead: Fisher +Note taker: Steve +October 5th, 2017 +Announcements +Helm v2.6.2 +Standups +Matt Fisher +Cut v2.6.2 with help from Adam +Issue sherpa’ing +Adam Reese +Assisting Fisher on the Helm v2.6.2 release +Working on porting k8s 1.8 support on top of Helm. There’s some nil errors occurring during testing +Also an issue to do with docker/distribution in glide +Fisher mentions that there is an open PR to switch over to dep which may fix that +Taylor +Working on PR support for 2.7 +Need to figure out the 2.7 release timeline +Want to get back on Helm commandeer stuff +Matt Butcher +Getting back onto the swing of things, been at conferences all last week +Working/chatting with the creator of ChartMuseum +Working with the service catalog team on sprig PRs which should get incorporated into Helm +Mike Goodness +Finished wrap-up on calico network policies at TicketMaster, so far so good +Should be able to spend some time reviewing community PRs on charts +Steven +Jail chart tiller? +Looking at checking tiller’s capabilities to check kubernetes api versions for conditional logic in charts +Brian +Just listening in this week +Justin +Working on different operators like prometheus +Matt Farina +Added CI to every chart PR, which runs `helm lint` on CircleCI +Get meetings for ChartMuseum, AppRegistry etc. to sort through all of this +Michelle (Matt Butcher speaking on behalf of her) +Working with karen on helm dev summit +Taylor is working with michelle on finding venues in portland +Working with Fisher on creating a Helm-dev google group for notes, voting etc. +Discussion +Helm 2.7 timeline +Butcher asks if there’s anything other than k8s 1.8 that should get in before we cut 2.7 +Taylor mentions there’s the secrets backend that would be good to get in, but we’re still working on getting some documentation for that PR +Matt Farina relays community unrest around the release delay between a kubernetes release and a helm release supporting that kubernetes release +We should cut a release candidate once k8s 1.8 support is in Helm so users can test Helm on k8s 1.8 and try that out +Assignments for next week: +Issue Sherpa: Taylor (next week: michelle) +Meeting Lead: Adam +Note taker: Taylor +September 28th, 2017 +Announcements + + +Standups +Taylor +Merged PRs that should be part of the patch release +Fisher +Issue sherping +Facebook Go deps not compatible with Apache v2 or MIT license - need to pull these out +Maciej +Getting back to Helm-y stuff +Resuming work on proposal of existing releases as chart deps +Ramp up review counts +Adam +Just getting back up to speed after being ill :( +Steven +Using Helm quite a bit, new clusters coming online +Scripts for installing and upgrading Helm +Justin +A couple issues +Working on galera cluster operator +Mike +Working with Calico network policies using a chart +Need to give the prometheus operator & alb ingress chart some love +Adnan +Something about CI? +Discussion +Facebook Go dependencies +Include in patch release 2.6.2? +Matt Farina: remove sooner than later +Cutting patch release +Some bug fixes still not merged +Taylor to create 2.6.2 milestone +Not sure we're in a position to release 2.7 next week +2.6.2 scheduled for tuesday or wednesday next week +Authentication webhook +Taylor to have chart to show for this +Moving to offline discussion +Declarative app management doc +Discussed WG formation SIG-CLI meeting +SIG-Apps and SIG-CLI effort, Helm should be involved +Assignments for next week: +Issue sherpa: Matt Fisher +Meeting lead: Steven +Note taker: Maciej +September 14, 2017 +Announcements +Standups +Steven +Talked about application deployments using Helm and `kubectl rollout status` +Lypht +Asked about how to deploy charts sharing common values.yaml +Taylor mentions https://github.com/skuid/helm-value-store +Improved documentation on common charts? +Adnan talked about possibility of `helm create` pulling in the common chart +Mike +Working on maintaining Helm chart PRs +Working out the storageClass pattern for official charts +Working on high quality, solidly reproducible charts +Adnan +Did a webinar yesterday with Helm, went rather well +Matt Farina +Talked about chart repositories at the last SIG-Apps meeting +Different implementations: kubeless, app registry, traditional helm way +Private chart repositories: app registry vs. dockerhub style +Adnan: Perhaps incubate app registry as a Helm 3 “official” registry +Adnan: perhaps just remove the concept of `helm repo update` and a local index.yaml? +Spun out a larger discussion on Helm 3 chart hosting, migration paths for kubernetes/charts etc. +Justin +Issue triaging over the week +Matt Fisher +Issue triaging, assisting first-time contributors with their PRs +Discussion +Helm 3 chart hosting, as seen above +Should we come up with a proposal template for proposals? +Just want to push back-channel discussion over to the helm dev meetings, more lax proposals +Assignments for next week: +Issue sherpa: Justin +Meeting lead: Taylor +Note taker: Adnan +September 7, 2017 [Recording] +Announcements +If you need edit access to this doc, let Michelle know +2.6.1 was released! +Standups +Maciej +Worked on Rudder Federation +Proposal for having existing releases be dependencies +Adam +Issue sherpa for the week +Going to be looking at deployments not rolling +Starting work on k8s 1.8 for Helm +Butcher +Working on releasing new sprig version +Working with Openstack people on running Tiller as a DaemonSet +Did something else small :) +Michael +Lots of chart PRs +Michelle +Reviewing PRs (specifically Amanda’s PR for indexing nested charts) +Fisher +Reviewing PRs, merged Helm template into core +Should we add a kube version variable to template +Steven +Catching up on issues +Trying out ksonnet +Justin +Working on writing tests for recursive builds (taking over another PR) +Chart sorting +Taylor +PR reviews +Needs another review on https://github.com/kubernetes/helm/pull/2721 +Demos +Helmet (Butcher) +An intellisense completion tool for Helm on the command line +https://github.com/technosophos/helmet +Discussion +Helm Summit +Possible location +Portland +Georgia +Happening in early January +Kube version in Helm template +Related PR: https://github.com/kubernetes/helm/pull/2898 +We can mock things out like we do in tests. We would mock against the current kubernetes version we build against +Template is no longer just for debugging, but also for rendering templates. It isn’t a preferred use case, but we are ok with adding in flags to enable this functionality +Output formatting for Helm +This is a complex issue that Adam already tried +It might be cool to have, but there will be some work +The main benefit would be viewing what the release looks like from a machine readable standpoint +Helm dev meeting length +Meeting will now start at 9:15 and go for 45 minutes +Taylor to announce in channel +Assignments for next week: +Issue batman/butler: Butcher +Meeting moderator: Adam +Note taker: Fisher +August 31, 2017 [Recording] +Announcements +One PR merged for 2.6.1, need to discuss when we want to release +Standups +Fisher +Issue triaging, reviewing PRs. No significant feature work +Butcher +Asked about the `helm template` PR +Justin mentioned it’s ready for review but not merged yet +Working on chart stuff but not core Helm +Michelle +No issue updates for this week +Updated the Deis youtube channel playlist +Seeing if the channel playlist should live in CNCF or in the Kubernetes channel +Maciej +Working on federation rudder +Adam +Reviewed Maciej’s e2e PR, might want to hold off on merging until 2.6 is out to test tag release automation +Possibly merge after 2.6, then do a couple test tags to make sure it goes through the whole release pipeline without blocking the impending release +Brian +Not present +Taylor +Was the issue maharaj this week, kudos to fisher and justin for triaging issues this week +Doing PR reviews this week +Chatting about secrets backend for Tiller, due to the size needs he asked for another review from the core team +Robots are taking over Helm’s issue labels +Butcher’s saying that we’ve been pushing back on moving over to the kubernetes-helm org for a while +Any bots that are CNCF-related (like the CLA bot) could be pulled in once we move orgs +Going to move forward with seeing how we can configure the PR sizing bot and see how we deal with them moving forward +Lachie +Not present +Steven +Working on Helm adoption internally +Looking at integrating with artifactory +Over the weekend had some time to look at some of the issues and PRs +Adnan +In the community repo, there’s a PR for meeting notes to reference the single google doc (this one) +Discussion in the charts repo about moving away from annotations over to fields in the spec +Lots of people are adding network policy stuff which is nice to see +Justin +General issue triaging +Taking on the work for recursive build feature +Demos +Discussions +Helm 2.5.1 issues to cherry pick? +The subcharts being deleted when not present in requirements.yaml +Possibly adding in the regex case-sensitive issue on helm search? https://github.com/kubernetes/helm/pull/2876 +Fixup with relative index.yaml https://github.com/kubernetes/helm/pull/2862 +Planning for next week +Issues: Adam Reese +Meeting moderator: Maciej +Note taker: Taylor Thomas +August 24, 2017 [Recording] +No announcements +1 ticket for a 2.6.1 release, moving forward with 2.7.0 +Standups +Fisher +Issue queue +Taylor +Working on scaffolding for helm commandeer +Identified bug on helm delete, community member took this on after +PR is out +Would warrant 2.6.1 release +Butcher +Planning related stuff +Beginning helm 3.0 phase the beginning of January +Kubernetes Core has asked us if we would start releasing when kubernetes releases within a week or so of a Kubernetes release +Lachie +Is there anything we do could do as chart maintainers to start testing against kubernetes 1.8 +Michelle +Still waiting on initial cost projects for helm summit and helm core maintainer sessions. Will probably happen in January. Looking for sites. +Looked into this PR: https://github.com/kubernetes/helm/pull/2824 +Think it’d be best to nest helm readme command under helm inspect +Helm Q&A time during next SIG Apps meeting. Here is the form. +Adnan +There is a discussion going on in charts around functions to be namespaced +https://github.com/kubernetes/charts/issues/1785#issuecomment-323642628 +Maciej +Working on e2e tests https://github.com/kubernetes/helm/pull/2846 +Created a framework, not about creating scenarios +Using gingko +For each test case, create new namespace +Waiting on review and feedback +Started writing proposal on using existing helm releases for dependencies +Looking for feedback +Demos +Discussion Topics +Look at Maciej’s proposal for re-using existing helm releases as dependencies +Planning +Issue Maharaja: Taylor Thomas +Meeting moderator: Michelle Noorali +Note taker: Matt Fisher / Matt Butcher + +Aug 17, 2017 + +Topics: + +Note taking +Recording +Helm Commandeer +CircleCI/testing +Automation of Homebrew, etc +Volunteer for triage, note taking + + + +Taylor: +• Helm comandeer + +Majiec: +• e2e testing: basic framework for running and checking +• Want to talk about CircleCI capacity for running these + +Fisher: +• Issue triager for last week + • Caught up on old untriaged issues + +Justin: +• Closed a bunch of ancient issues +• Little stuff like the manifest ordering patch + +Steve: +• “Helm on Helm” to install Tiller via a chart +• Issue queue managing + +Adnan: +• 0.4.0 of Monocular released +• New chart maintainer joined last week + +Lachie: +• Azure installing Tiller by default, working on some similar RBAC stuff to Steve + +Michelle: +• Community meeting with Karen Chu (MS) on organizing Helm Summit +• Onboarding with Majiec + +Adam: +• Release of 2.6 + +Butcher: +• 2.6 stuff +• Getting ready for 2.7 + +Ronan: +• Documentation update run soon + + + +Note Taking and Recording: + +Where do we store notes? What do SIGs do? + +Google Doc for collaboration +Rotating meeting leads and note taking every week is fine? +Minutes will go in https://github.com/kubernetes-helm/community + + +Next week’s… + +Meeting leader: Fisher +Note taker: Michelle +Issue Sherpa: Justin + + + +Recording: +One of the SIG-Apps leads will record via Zoom +Set up YouTube channel (Michelle) +Each week, add link to the repo + + + +Helm Commandeer + +Adopt existing resources into a chart/release +Use Case: Bootstrap cluster, install Tiller, then turn around and capture the bootstrapped resources as charts/resources +Butcher/Scott: Capturing existing resources for already-deployed Kubernetes clusters +Steve: Trimming out state information is painful. Might be nice to have a “spec” that an object can be imported into +Majiec: Two arguments for doing this as a plugin instead: +It can make use of Helm as libraries +It forces improvements of the API +Lachie: Concern is with starting to confuse what the “source of truth” is for features. +Taylor: Okay, I do it as a plugin, with the goal of making it a “gold standard” plugin + + + +CircleCI/automation/etc + +Majiec: The discussion so far is that we are up to limits of CircleCI. But my own experience is that we have been able to run tests for about :30 in CircleCI. Maybe we still can run a Docker-in-Docker Kubernetes cluster +Adam: I actually reserved you a dedicated e2e resource +Scott: It would be great to be able to kick off building OS packages and have that trigger on releases, as an extension of release management. +Fisher: Maybe you (Scott) and I can chat about that +Lachie: Chart maintainers are also talking about that today + +Template +Announcements + + +Standup + + +Discussion + + +Assignments +Issue Sherpa: +Notes: +Moderator: +``` diff --git a/community/meeting-notes/2018.md b/community/meeting-notes/2018.md new file mode 100644 index 0000000000..a5a140b585 --- /dev/null +++ b/community/meeting-notes/2018.md @@ -0,0 +1,2251 @@ +--- +title: Helm Minutes for 2018 +--- + + + +```txt +December 20, 2018 +Announcements +No meeting next week! +Helm 3 repos working group, Wednesdays 8:30-9:00 am PST [link] +Helm Hub is live! https://hub.helm.sh +Helm 2.12.1 is out (decaf edition) +Standup (kubecon was last week) +Adam +Giving update on Kubecon/Helm v3 +The v3 talk was highly attended and engaged + + +Matt Fisher +Josh +Matt Farina +Michelle +Scott +Adnan +Helm v3 Status +https://github.com/helm/helm/projects/1 +Tasks open for people to take on are tagged with “help wanted” +In the past week we organized to update the details on the tasks +Discussion +Proposal for CRD Support +We would like less intrusive changes to support CRDs +Will CRDs become GA or overcome as TPRs were? +Will look into patterns in current system that we could potentially use +Helm 2 to 3 upgrade story +A tool that can migrate from v2 config, as managed by tiller (configmaps/secrets), to the new v3 format +Document what we need to do (proposal in community repo) +Helm 3 repos update (Josh) +TLDR; Helm charts will be able to be stored in an image registry +https://groups.google.com/a/opencontainers.org/forum/#!topic/dev/qYM84b0vays +Assignments +Issue Sherpa: Michelle +Notes: Josh +Moderator: Matt Farina +December 6, 2018 +Announcements +Helm Deep Dive now 80 minutes (2 back to back time slots) at CloudNativeCon +First half is the Helm 3 deep dive, second half is free-form discussion +Helm 2.12.0-rc.2 has been released +Standup +Matt Fisher +Working on the helm 2.12 release. Went through the PR queue to see if there are any fixes. RC2 has been release. Plan is to cut release over the next couple of days before KubeCon. +Attending to the helm repository discussion +Matt Farina +Working on the hub to get launched +Taking the charts in image repos to the OCI +https://groups.google.com/a/opencontainers.org/forum/#!topic/dev/U49AZRFo3tk +Nikhil +Back from paternity leave - just getting back into the swing of things. +Josh +Working on chartmuseum 0.8 with bearer auth support +Continuing to moderate the helm repository discussion +Now discussing with people at docker on the distribution API +Brian +Working on utilities on mapping Go values to Lua, deserializing back to YAML +Adnan +Working on the hub +Post-kubecon, looking to add some CI to deploy to the helm hub repo +Continuing development on monocular +Justin +Busy, hoping to help out with the issue queue/PR queue +Taylor +Helping fisher on the 2.12 release +Want to have a discussion on adding contributors to help out on Helm 3 (onboarding) +Michelle +Putting together some slides on Helm 3, hub.helm.sh and Helm 2 for the KubeCon keynote update from Liz +Helm v3 Status +Adam has no voice/internet today, therefore no update this week +Discussion: +Taylor: on adding contributors to help out on Helm 3 (onboarding) +Taylor: action item to talk to adam about discuss onboarding +Some bugs that may need some love: 949, 990, 1098, 1168, 1193, 1237, 1354 +Discussion: how do we want to handle long-standing issues that have gone stale? +Farina: we should probably come up with a process for closing out issues to close an issue when it hasn’t been implemented in a given period of time from the community or the maintainers +Action item: michelle will open a ticket for discussing the issue of closing long-standing feature requests +How do we get proposals in? +This process should be documented +Action item: henry will open the issue to write up the docs +Should we have another standup next week? +Yes, one standup next week then cancel until the new year +Assignments (for week after Kubecon - 20th ) +Issue sherpa: matt, matt and michelle all working part-time +Notes: (Nikhil can’t make this) Farina +Moderator: taylor + +November 29, 2018 +Announcements +Recurring Helm 3 Repos discussion, Wednesdays 8am PST +Standup +Josh +Setup weekly Helm 3 Repos discussion, Wednesdays 8am PST +Had call #1, made some progress. +Removing --version flag +Keeping “helm repo add” +Matt Farina +Worked on Helm Intro slides for seattle +Signed up for the project maintainers booth in seattle +Matt Fisher +Adam + + +Helm v3 Status +Helm repo stuff, not ready for Kubecon +Requirements handling, cleanup. Merging arbitrary data. Pre-req for adding Lua to execution engine + + +Discussion +Fisher: Helm 2.12 release status +1 PR - feature flag to helm upgrade “--cleanup-on-fail” +https://github.com/helm/helm/pull/4871 +Needs few more reviews (Taylor + Fisher + ?) +Can this make it in? https://github.com/helm/helm/pull/4709 (Jacob Legrone) +Butcher: looks great +Is there a plan for a helm contributors/maintainers social get-together, drinks (I volunteer to buy the first round!) at kubecon? [henrynash] +CNCF booth? Microsoft Booth? +Look for peoples hair +MS Reactor event: https://open.microsoft.com/2018/11/21/microsoft-pre-kubecon-community-workshops/ + + +Fixing bugs in v2 & v3 [mattfarina] +For features - if they do not affect Helm 3, we consider merging +If it solves for Helm 2 and 3, asking contributors if they are willing to add these things for Helm 3 +Bugs - will be merged +System wide plugins [mattfarina] +SUSE wants to add this for envs that are unable to install plugins +Can be handled by https://standards.freedesktop.org/basedir-spec/basedir-spec-latest.html +Adam: this is on Helm 3 project board , XDG configuration +Given the increasing agenda length, if we are going to stick to a 30min call, maybe we should skip the Standup section? Alternatively do we need an hour call? [henrynash] +Fisher: there was discussion on the cncf-helm-cartographers mailing list about everyone writing out their standup and dedicating the 30 minutes to discussion. If the standup topic requires input, it can be added to discussion items. +Standup is good to give people chance to speak up, get people engaged +Stef: comes to meeting to keep up with what were up to, also to be involved +Technical-level discussions, fostering this type of community at SUSE +Henry: +Martin: just make standup shorter, main points in discussion +Assignments +Moderator: Josh +Notes: Matt Fisher +Issue Triage: Martin +^ may not have access to add labels etc + +November 22, 2018 +Cancelled due to holidays + +November 15, 2018 +```yaml +Announcements +Brian is the bee’s knees: github.com/Azure/golua +Because of Thanksgiving, this meeting will be skipped on Nov 22. +Standup +Josh +Meeting on tuesday about the helm repo discussion, most people on the call are in favour as long as we can ensure that we have the resources to commit to that work +Will send out an email to the CNCF mailing list +Matt Fisher +Been working on getting the helm 2.12 release out +Michelle +Trying to figure out two issues at the moment: the helm linter not linting subcharts as well as openshift SecurityContextConstraints (would love assistance on the latter) +Brian +Been working on golua as well as some debug facilities into the VM execution for the lua engine +Spending the next few weeks focusing on the debugging library as well as panic traces in the lua VM +Matt Butcher +On the Helm 3 side, opening PRs on re-naming some of the commands +Working on the Helm 3 conference stuff for KubeCon Seattle +Attempting to make progress on a Helm 3 alpha release for KubeCon Seattle (tentative) +2 sessions for the core maintainers: intro and advanced sessions +Working on a Helm Summit EU for spring 2019 +Adnan +Focusing on Monocular and kubeApps +(butcher) are we planning on a KubeCon announcement for that one? +(adnan) yeah, it’d be great to announce that in the intro +(butcher) it might be getting a main stage annoucement +Matt Farina +We might be getting the main stage for KubeCon +Working on a session for the Hub +Issues triaging etc. +Adam Reese +Looking into integrating golua into Helm +Mostly focusing on helm 3 +Helm v3 Status +Discussion +Fixing bugs in v2 & v3 [mattfarina] +What is the success criteria for going back to one issue triager? [bacongobbler] +Will follow up in cncf-core-maintainers mailing list +At what point can we reasonable close an issue for being stale/having no activity? From last week’s convo, we decided not to have a bot automatically close issues, but can we decide on a time limit that a triager can use. 6 months? 8 months? 1 year? [mnoorali] +System wide plugins [mattfarina] +https://github.com/helm/helm/pull/4871 [mattfarina] +CRD lifecycle - Helm and deleting CRDs (doesn’t today) and CRD lifecycle [mattfarina] +The crd-install hook only deals with the install lifecycle but there are open issues IRT CRDs with Helm. How should we approach this? +Adam: we don’t do lifecycle management around CRDs because CRDs can be shared across multiple charts, so if we delete a CRD on a `helm delete`, then we could delete a CRD that could be dependent on other charts +James: I agree, but with the introduction of the annotation, we’ve seen weird behaviour where if someone has created a CRD prior to a `helm install`, the CRD will get removed before being installed. We’re trying to figure out what we can do to make the situation better for istio/cert-controller +Adam: I haven’t dug too deep into the CRD APIs, but perhaps an action item we can do is observe the behaviour how the Kubernetes API handles CRDs outside of Helm, and determine the expected behaviour? Perhaps even a few concrete use cases +Mortent: would it be valuable to add a proposal for the solution in Helm 3? +James and Adam: yeah, this might affect Helm 3 as well so if there are fixes that need to happen there we should get that in +At IBM we have several hundred charts, and I hear this issue of CRD quite a lot - I’ll do a review and see if I can bring requirements to the table [henrynash] +Given the increasing agenda length, if we are going to stick to a 30min call, maybe we should skip the Standup section? [henrynash] +Adam: should we talk about this in 2 weeks at next standup? +Henry - happy with that +Given we are entering a period of large new features for helm, would it be beneficial to formally articulate/document how new features should be agreed for inclusion? Many open source projects have a spec repo (e.g.: https://github.com/openstack/keystone-specs), where the PR for a spec getting merged means that the feature and its architectural implementation is agreed. I guess our equivalent is the helm/community/proposals|helm-v3 ? However, it is not clear how such things really get accepted, what’s the threshold for sign off by maintainers etc. [henrynash] (let’s defer this to 2 weeks time) +PR #4871? [farina & fisher] +Adam: Let’s follow up offline +Assignments +Moderator: Fisher +Notes: Josh +Issue: Michelle & Fisher + + +November 8, 2018 +Announcements +Because of Thanksgiving, this meeting will be skipped on Nov 22. +Standup +Matt Farina +Specs repo, document how everything works +Issue sherpa-ing this week, trying to bring down queue +Changes to monocular to work w MongoDB over SSL, to support Helm Hub +Matt Butcher +SSL issue, CRLs not supported by GRPC/Go crypto libs (link?) +Going away in Helm 3, so if somebody else wants to take it, go for it +Formal specification for Helm 3 charts - to track what is and isnt supported +Some parts of charts in Helm 2 are unclear/not documented +Starting on Helm 3 CLI stuff soon +Taylor +Slide decks for Kubecon shanghai +Ask taylor for help looking at PRs +Michelle +Reviewed old issues +Parallel flag on Helm test, did testing (link?) +More issue triage this week +Josh +Looking into a proposal that Steve put together involving repositories for v3 -> #55 +Submitted another related proposal. Will talk about that in discussion. -> #57 +Matt Fisher +Issue triaging this week +Primarily focused on PR queue +Slating things for 2.12 RC release +Adam +Helm 3 CRDs +Some PR reviews +Adnan +Working on Monocular w Farina +Submitted PR to monocular to support +Monocular chart still needs to allow Mongo params as secret vs. values +Brian +Stabilizing Lua VM +Prototyping events code +Helm v3 Status +Project board: https://github.com/helm/helm/projects/1 +Cards are being added linked to topics from the proposal in helm/community +Will be converted to issues when people are ready +Lua, charts format in progress +Kubernetes-core removed as a dependency +Discussion +Helm v3 repository topics [jdolitsky] +Community proposal #55 - merging helm repos and docker registries +The basis of this proposal is for helm repositories to mimic the docker registry API more closely +Looking on what is the right way to build it out further +Jimmy: the problem I see is the backwards compatibility for the pre-existing repository system (referring to Helm 2 repositories) +Fisher: the other issue comes in the form of OCI mediaType incompatibility (you can’t helm push quay.io/bacongobbler/helloworld and docker push quay.io/bacongobbler/helloworld) +The quay implementation restricts repositories to a single mimetype to avoid this problem, but that has UX tradeoffs +Follow-up: let’s set up a call to discuss this meeting (assigned to Josh Dolitsky) +Community proposal #57 - Helm 3: push, login, capabilities api +Assignments +Moderator: Adam +Notes: ? +Issue: +Michelle +November 1, 2018 +Announcements +Josh and Scott are now Helm Org Maintainers [mattfarina] +Standup +Josh +Working on chartmuseum 0.8 with token bearer auth support +Worked on proposal with Azure folks on merging docker and helm repos +Adam +Last week in a company team offsite +Matt Fisher +In team offsite last week +Doing triaging for v2.11.1 looking to see if we should patch release +Michelle +Responded to comments on helm test proposal (for v3) +https://github.com/helm/community/pull/40 +In team offsite last week +Matt Butcher +Team meetings last week +Working on helm v3 command line argument changes +Removed moniker naming +Brian +At team offsite +Focused on Helm v3 lua integration +Matt Farina +Doing issue triaging last week +Working on nested repositories for the Helm 3 proposals +Taylor +Writing slides for China and Helm deep dive +Helm v3 Status +Talked through the board +When something in the proposal goes to being built we can: +Convert existing cards to issues in the project +When implementation happens we should add a link to an implementation issue where further details can be found in the proposal +Discussion +How can we handle the 500+ open issues? [mattfarina] +Not going to add a stale issue closer yet but discussed +Going to have multiple issue sherpas to bring the number down +Issue #3943 - allow a fix for this in helm 2? [jdolitsky] +This fix can go in as long as it’s opt-in and no APIs are changed in backward incompatible ways (including tiller api) +Assignments +Moderator: Matt Butcher +Notes: Josh Dolitsky +Issue: +Matt Farina +Matt Fisher +October 25, 2018 +Announcements +Distributed charts repo search update via mailing list email +Standup +Josh +Investigating helm login commands for different repository providers +ChartMuseum has a PR for oracle storage backend +Matt Farina +Worked on some charts tooling +Showcased helm repo audit +Taylor +Not much coding this week +Prepping to talk in China about v3 +Discussion +Add weekly review of helm 3 github project to this meeting [Adam Reese] +Issues needing some extra love: +Potentially can try and close out: 4789, 4773 +Need a response to: 4833, 4831, 4827, 4826, 4824, 4784, 4767, 4754, 4744, 4699, 4695, 4679, 4698, 4697, 4695, 4679 +Assignments +Moderator: Josh +Notes: Matt Fisher +Issue: Matt Farina + +October 18, 2018 +Announcements +No announcements for this week +Standup +Matt Farina +Working on bringing back the PR sizing stuff +Looking back on the hub stuff with adnan in the future +Matt Fisher +Not much to report this week +Taylor +Working on a talk for KubeCon Shanghai on an intro to Helm +Also looking at doing a talk on a Helm 3 deep dive, also at KubeCon Shanghai +Adam +Started putting together a github project for Helm 3 work +https://github.com/helm/helm/projects/1 +Non-core maintainer standup +Martin Hickey +Dropped a few issues down in chat +Issues potentially can try and close out: 4782, 4775, 4768, 4751, 4745, 4713, 4705, 4689 +Issues need a response to (potential quick response): 4796, 4793, 4790, 4767, 4744, 4737, 4729, 4712, 4699, 4698, 4697, 4695, 4679 +Discussion +edX course… anyone interested in doing it? CNCF has $$ [Matt Farina] +University-like material for education on Helm +Taylor: I might be interested in it but not sure about the timeframe is on that +Farina: let’s talk about this offline, but this opportunity just came up +Should helm login support basic auth in addition to oauth? [Matt Farina] +Adam: I’m not sure how difficult it’d be to add that in +Farina: so we should probably support an oauth mechanism out of the box for now +Helm container image? What base image (scratch, alpine, etc?) [Matt Farina] +Tiller uses alpine, so we should probably re-use that +Follow-up question: should we also push tiller images to quay/dockerhub? +I think we’re at an acceptable time to push to both gcr and quay using CircleCI +Linkerd2 has a different way to inject sidecars. How can we do this with Helm today? [Matt Farina] +Adam: yeah, I don’t think we could accommodate this today, essentially linkerd2 needs to stream-edit the chart as it’s being applied +Farina: could the event changes in Helm 3 help accommodate this? +Adam: theoretically, yes +Farina: perhaps it would be good to sit down with the linkerd folks +Assignments +Moderator: Taylor +Notes: Farina +Issue: Fisher +October 11, 2018 +Announcements +Matt Butcher is the new chair of the org maintainers +Standup +Josh +Looking into v2 repo index +Challenges are that it is partitioned into multiple files +Design work around things like nested chart directories needed +Farina +Working on getting the Hub site rolling +Dco-labeler moved to charts AKS cluster +Issues with AKS cluster +Adnan +Helm hub site +Monocular 1.0 +Cosmos DB +Fisher +Issue queue stuff +Adam +Have some PRs to go through, small changes, docs changes +Out for a bit +Focusing on helm 3 stuff tomorrow +Kubernetes 1.12 merged +Michelle +Went through some PRs this morning +3805 and 1193 +Brian +Working on lua for Helm 3, continuing through the tests +Notes and talking points for the use of Lua in Helm +Justin +A little issue triage +Hoping to jump on some PRs soon +Butcher +Helm trademark move from Deis/MS to CNCF +KubeCon Helm stuff +Planning work on Helm Summit in the EU (spring next year) +Discussion +How can we better communicate around Helm v3 and let people help with it? [Matt Farina] +[Henry Nash] Maybe at least add weekly item for an update on v3 development, calls for help, focus areas etc. ? +Implementing index v2 + +Assignments +Moderator: Adam +Notes: Fisher +Issue: Michelle +October 4, 2018 +Announcements +Helm Org Maintainers vote link [Matt Butcher and Matt Farina] +Standup +Adnan +Working on Monocular 1.0, migrating onto CircleCI because that’s what most teams are using it seems +Josh +In talks with the Azure Container Registry team in regards to API design +Matt Farina +Working on the hub site (hub.helm.sh) +All the infra is there and ready (cert-manager, letsencrypt, ingress etc.) +How do we store secret information? Want to chat about it today +Matt Butcher +Transferring the Helm trademark to the CNCF, working with the Microsoft lawyers for transferring the paperwork in time for KubeCon +Working on the Helm 3 stuff with Adam and Brian +Brian: working his way through implementing the Lua stdlib +Vic +I have been getting back into reviews on the charts repo. +Matt Fisher +Last week has been maintaining the issue queue, ensuring whether or not we need to do a v2.11.1 release +Adam +Last week has been focused on Helm 2 and Kubernetes 1.12 support +Nothing ready to show yet, waiting on upstream to fix some things which should be coming out later today +Non-core maintainers +Martin Hickey +Is it true that the Helm 3 codebase has been locked down to core maintainers? +(adam) yeah, there’s a ton of refactoring going on in the core codebase, but there are a couple areas where help would be appreciated (documentation, testing infra possibly?) +In terms of docs, what areas can we help? +(adam) I’m currently looking at sharing some documentation around what’s changed, possible opening a github project to show what’s being worked on/what’s done/what’s in the backlog +Markdown docs are stale in dev-v3, so updating the README or jumping into existing project work (docs site, CI infra, repository API working group) +Discussion +Encrypting secrets for sites and services [Matt Farina] +Org maintainers - congrats! You are now responsible for the following [Josh]: +Maintaining the mission, vision, values, and scope of the project +What is it that Helm trying to solve? (mission) +Where does Helm start and end? (scope) +How will we get there? (vision) +What do we need to embrace in order to succeed? (values) +Refining the governance and charter as needed +What can we do to make this process ultra-efficient? +How do move fast and not break things? +Making project level decisions +How can we make sure people have necessary info in order to confidently vote? +Which type of decisions are made at the subproject level? (eg. choice of CI, language, etc.) +Resolving escalated project decisions when the subteam responsible is blocked +What are the respective subteams? +Who will be primary points of contact for each? +Managing the Helm brand +Websites, logos +Documentation +Tutorials and evangelism +Twitter, social media, etc. +? +Controlling access to Helm assets such as source repositories, hosting, project calendars +Which tools will we use managing and sharing credentials? +Handling code of conduct violations +Violators will be publicly executed with a 2/3 vote +Deciding what sub-groups are part of the Helm project +Should this divide into more than just subprojects? (eg. testing committee) +Overseeing the resolution and disclosure of security issues +Majority of issues would related to Kubernetes in Helm 3 +Does CNCF have a process in place for this? +Managing financial decisions related to the project +What types of things might cost money? +How does being a CNCF project relate to this? +Can companies or individuals contribute? +How can we ensure that the direction of the project cannot be “bought”? +Assignments +Moderator: Josh +Notes: Adnan +Issue: Adam +September 27, 2018 +Announcements +Helm 2.11 with Kubernetes 1.11 support was released +Tomorrow is the last day for nominating Helm project maintainers +Standup +Adam +On vacation last week +Continued work on Helm 3 +Started on Kubernetes 1.12 support +Farina +Working on getting the Hub cluster up and going +Published a blog post on how to use chart-testing yourself! +Moving bots under the helm org +Butcher +Provenance and crypto stuff +Blog post for the Helm blog +Staying on top of Helm 3 things +Brian +Get the lua implementation passing against the spec conformance test suite +Issues around snapshotting values, ironed them out +Continuing to wrap up lua implementation over the next few weeks +Justin +Issue triage, helped people close a few issues +Adnan +Monocular 1.0 close to cutting +Working on moving the chart-repo and chartsvc to the Helm org, moving images to quay +Fisher +Going through Helm 2.11 release +Ensuring RCs have been going through smoothly +Stef +SUSE working on a Helm mirror utility +Discussion +KubeCon Seattle Helm Talk Coordination [Matt Butcher] +3 talks: intro to Helm, draft, deep dive on Helm +Reddit is going to talk about their story for getting into k8s, includes Helm +Find out what Helm related talks will happen and put together a list in hackmd or somewhere +Chart caching, using it, and content addressability https://github.com/helm/helm/issues/4618 [Matt Farina] +Cache as-is doesn't work because could have same chart and version +Use digest instead as cache key for Helm 2 +Homebrew Helm problem +Fixed and merged! +Justin: Docs site search experience improvement +Farina: Outstanding issue to move Helm docs out of tree to another repo +Assignments +Moderator: Adam +Notes: Fisher +Issue Sherpa: Justin +September 20, 2018 +Announcements +Helm 2.11 RC4 released yesterday +1.11 Kubernetes support +https://github.com/helm/helm/tree/v2.11.0-rc.4 +Standup +Justin + + +Matt Butcher +Putting together helm demos for ignite +Brian +Working on lua implementation +Adam +Values files stuff +CRD, replacing secrets +Tiller race conditions +Michelle +2.11 release +Matt Fisher +2.11 release +Adnan +Monocular 1.0 +Cron jobs to sync chart repositories, more responsive +Matt F +Waiting for cluster, still being worked on +Policy, workflow and tooling stuff for the Hub +Docs for how to stand up a helm repo +Chart-testing images now up on quay +Josh +Helm push and authentication + +Discussion +Helm -push multiple provider support +Something in index.yaml? +Governance +1 week left for nominations, 9 people nominated and accepted +7 initial selection, but can have up to 9 +https://gist.github.com/mattfarina/51056f5655dea3f0d60e20b37ccc79c2 +Using Quay for chart testing +https://quay.io/repository/helmpack/chart-testing +Provides usage logs +2.11 official release date +Bugs should be squashed +Tuesday Sep 25th (unless explosions, Wed) +Why Lua? +Need to explain to users the reason for this +Why not JS etc +Write a post/doc that dives into depth +Assignments +Moderator: Matt Fisher +Notes: Adnan +Issue Sherpa: Justin + +September 13, 2018 +Announcements +Helm 2.11.0-rc.2 was released yesterday +Helm Governance votes were complete last week +Standup +Michelle +Issue triage +Working on proposal for auto rollback feature +Fisher +Working on the Helm 2.11 release making sure that’s going through +Adam +Working on some of the Helm 3 design stuff with CRDs +Out of town next week so will miss next week’s standup +Matt Farina +Working on the charts repository stuff, DCO labeling +Throwing the charts-testing image on quay.io +Working on putting a blog post on working with the charts-testing project +Will be weighing in on the distributed search proposals +Brian +Working on the Lua VM implementation for Helm 3 +Josh +Closed a few ChartMuseum chart PRs +Looking into authentication/authorization flow for Helm 3 +Discussion +Chart packaging system improvements (@gintas) Please see https://hackmd.io/Q8dyCyztRmW4_Xz9UFwuMQ +Farina: what about the forking model? If you fork the chart and not change the ID (an implied change of this proposal), which cached version wins? You’ve got a non-reproducible cache pollution issue. +The question becomes “how do we do caching/forking with this model?” +We could run a hash on the chart and map it to that, perhaps +Josh: hashing may be a problem with relative file path links in requirements.yaml (charts can change on disk) +Farina: I’m not seeing what particular problems this proposal is trying to solve. Is there a human-readable write-up on the problem at-hand? +Action item: reach out and follow up with @gintas on the core problem without trying to come up with a solution +https://quay.io/helmpack/chart-testing/ is now public and we are archiving logs for long term via https://github.com/mattfarina/query-store-quay-logs (to be moved to the helm org after elections). But, only archiving aggregated stats (e.g., total pulls per day) rather than details because detailed as usernames mapped to IPs and other data. Thoughts? +Fisher: does the CNCF have any policies/thoughts on statistics for CNCF projects (e.g. any policies that came out of devstats.cncf.io)? +Farina: good question. I’ll follow up with them +Adam and Matt: probably good to just track general trendlines rather than deep personal data on users. +Josh: can we move the ChartMuseum image over to the quay repository? +Farina: yeah! +Travis Foster: hey, I’ve been looking into JSON parsers for Helm 3 +https://github.com/helm/community/issues/49 +Farina: thank you for taking a look into this! We’re looking for ways to looking into performance gains we can do with parsers so this is helpful. +Assignments +Moderator: Matt Farina +Notes: Michelle +Issue Sherpa: Matt Fisher +September 6, 2018 +Announcements +Governance has enough votes to pass! Acceptance window closes today at 5 pm Pacific +Standup +Taylor +At Open Source Summit last week +2.11 PRs this week +Josh +Exploring Helm login and authorization flows. Been talking to Matt Farina and some of the people on the Microsoft Containers team +Adnan +Merged the Monocular 1.0 proposal +Matt Fisher +At Open Source Summit last week +Working on 2.11 PRs this week. +Matt Farina +Working on Governance this week +Charts testing image work. Not going to put it on Docker Hub and going to put it on Quay instead. Going to write a tool to pull the logs from Quay and upload to storage +Michelle +Working on proposal for auto-rollback when releases fail +Adam (vicariously through Michelle) +Working on Helm 3 +Discussion +Helm 2.11 release +3 PRs left in the queue before we can cut a release, all ready to go: https://github.com/helm/helm/milestone/55 +Should we pull https://github.com/helm/helm/pull/4468 off the milestone? (fisher) +We are ok with pushing this off to 2.12 so we can hammer out some design issues. +RE: PR #4590, was there a technical reason we use cmd.PersistentFlags() in certain commands vs cmd.Flags()? (fisher) +PersistentFlags used so all subcommands can inherit the flag. Fisher is going to go back and change this for some of the new code +“maven-like dependency system” for charts (josh via gintas) +org.apache:kafka:1.0.0 -> ~/.helm/repository/org/kafka/1.0.0/kafka--1.0.0.tar.gz +Possibly adding dependency caching +Josh is going to work with a few others to create an issue on this +(Henry Nash): As a newbie, have some questions about how the overall community works etc. +IBM is starting to use Helm a lot and wanted to get involved +Assignments +Moderator: Josh +Notes: Fisher +Issue Sherpa: Michelle +August 30, 2018 +Announcements +Switched to the DCO from the CLA +Blog post here +Standup +Adnan +PR’ed Monocular 1.0 proposal +Matt Fisher +At Open Source Summit NA +Paired with Taylor around 2.11 release, triaging issues +Brian Hardock +Lua work for Helm 3.0 +Michelle +Working solution for Issues #3805 and #1193 +Vic +Worked with folks at Replicated Ship +Their business is to ship software to vendors +Did presentation at SIG Apps +Worked on how to do customization around helm charts for different environments. “Last-mile customizations” +Matt Farina +DCO change + prep work for DCO change +Follow up issues on charts automation +Made changes to governance doc +Matt Butcher +Worked on governance docs with Farina +Josh +Giving a short talk on helm 3 in SF +Adam +Working on refactoring for Helm 3. Got a bunch of stuff merged. +New API for dealing with charts and releases +Setting up for Lua stuff +Working on upgrade issue with Fisher and Michelle +Discussion +Estimating the Airspeed Velocity of an Unladen Swallow +Bumped to next week +Should we use something like https://github.com/ericchiang/k8s instead of client-go for helm v3? (Farina) +Client-go has some well known pain points +Butcher: is it still being maintained? +Not sure +Would it be practical to use an alternative client to client-go in helm 3? +Butcher tried it. His findings: +Pervasive change +Eric made some really insightful changes but that create a somewhat cumbersome experience +For example, pointer to all the fields +This is the approach that apache thrift took +To use this library, some things are more cumbersome for the user +Some parts of the library didn’t feel 100% done +Pros: dep ensure took like 5 seconds +Adam: what is driving this? +Farina: Making upgrades easier. This is the time to make breaking changes, so let’s entertain the idea. +Adam: will take a look at it this week +Docker Hub vs alternatives for public image distribution (Farina) +On the charts side, we are going to distribute the chart testing library. Been thinking about where is the right place to store it and point people to. +Went out on the email list +Butcher: DOCKERHUB +Quay will tell us if there are vulnerabilities +Michelle: security is nice. Cool. +Fisher: DockerHub seems to be ubiquitous +Deis Workflow had a tough time trying to figure out metrics like image download count. Didn’t know if it was actually accurate. +Metrics not a blocker if the discoverability is the primary driver for this. +What is the best place to store images to get metrics? +Metadata points in ACR but it’s not public so it’s not an option +A wild Taylor appears in the meeting +Is DCO required for a PR with a CLA that was submitted before the DCO took place? +Should not be required. PRs are covered before +Assignments +Moderator: Michelle +Notes: Taylor +Sherpa: Fisher + +August 23, 2018 +Announcements +Standup +Fisher +Monitoring 2.10 release and making sure everything is going as planned +Matt Butcher +Issue sherpa for this week, nothing significant to report +Working with Matt Farina on the governance proposal +Talking with Brian and Adam on some of the Helm 3/Lua stuff +Adam +Continuing work on refactoring Helm 3, looking into breaking things into smaller chunks to move things upstream +Merged Kubernetes 1.11 support into master and the dev-v3 branch +Michelle +Reviewing Helm PRs +Re-named the helm-secure plugin to helm-rbac +Taylor +Doing some PR review work +There is an open PR for recursive build option, code looks good but there may some eyes on it +Asked Matt Farina if he can help take a look at it +Adnan +Working on a proposal for changes to Monocular +Fisher +Released helm v2.10.0 +Scouring the issue queue to make sure there’s any issues where we may need to cut a v2.10.1, so far doesn’t look like there’s any +Josh +Traveling etc last week +Working with helm repository authentication stuff +Planning to add “helm push” API spec to specs repo soon +Meeting w/ Zach (on Matt Farinas team) today about Chartmuseum bearer-auth PR and next steps. People have been asking for this more and more often. This will also tie into “helm login” proposal +Giving a talk on Helm 3 next week.. What do I need to know? Going off of Matt Butcher’s post (https://sweetcode.io/a-first-look-at-the-helm-3-plan/) +Chartmuseum website to launch possibly next week. Preview: https://codefresh-io.github.io/chartmuseum-www/ +Matt Farina +Working on the governance model as well as the switch to the DCO +Justin +Won’t be available for 3 days +Someone at istio was being blocked with https://github.com/helm/helm/issues/3805 +Adam: this would be a major breaking change to how Tiller works for Helm 2, but it could be a possibility for Helm 3 +There are a ton of edge cases around the different merge strategies +Farina: what about server-side apply? +Adam: same problem, it would be a very large technical challenge to manage different upgrade strategies for Helm 2 +Discussion +Question: how does helm plan to address auto-generated configuration on `helm install`? E.g. autogenerated passwords in the postgres chart +Farina: we should come up with a convention. +Butcher: I would guess doing a pre-install hook to install a Configmap to autogenerate a password and place it in there +DCO? +Butcher: DCOs require all commits need to be signed? +Adam and Farina: yes +https://github.com/mattfarina/brigade-test-project/pull/1 +https://github.com/probot/dco +Farina: asking michelle if they can pair on this on Monday? +Michelle: yes +Helm v3 or hub: enforce or notify if immutability changed? +Farina: if the digest changes, should we notify if someone broke +This is referring to changing an existing chart in-place, not bumping the version +Michelle in chat: then yes, we should put a warning in +Adam: the one thing we may want to think about is when charts are in development. +Farina: we could do a digest diff on a `helm repo update`? +Farina: we should probably think this one through +“helm login” - How do we envision this to work? Anybody interested in a call to address this in detail? +Josh will put out an email to discuss this topic +Butcher: can we start on the next Helm release since k8s 1.11 support is done and we have a few minor features committed already? +Fisher: sure +Butcher: there’s a lot of people asking for it, so we should cut an RC +Taylor: we should go through the PR queue before we cut an RC as there’s been a few requests +Assignments +Moderator: adam +Notes: michelle +Sherpa: justin + +August 16, 2018 +Announcements +Slack is down, meeting link needs update. +Standup +Taylor +PR work, with follow-ups today and tomorrow +Matt Farina +Chart PR queue reduced. Now below 400 +DCO chart automation is a blocker to widespread DCO adoption. +Distributed chart site is underway. Looking at hosting +Link for this meeting is wrong in Helm repo README. Will fix. +Butcher +Main focus right now is on Helm governance, CNCF deadline is September +Working with one of Microsoft’s engineers on a bug with `helm ls` +Next week: continue to focus on governance and focus on next release for Helm +Helm 3 related work (reporting for Adam): onto the Helm 3 loading and rendering logic +In-memory tree structure is structured rather than flat +Lua side (Brian): the core engine is about halfway there, working on Lua 5.3 support +Matt Fisher +Mostly issue queue and release management +Should the issue go in RC4 or are we good to go with 2.10.0? +Adnan +Changes to Monocular with the hub stuff +Nikhil +Out last week. Getting back into things. +Michelle +Mainly responding to GitHub issues +Will respond to comments on test proposal in the helm/community repo this week +Josh +PR out for ChartMuseum bearer auth +Exploring approaches for values management +Should we add ChartMuseum API for fetching/saving value sets? +Allow for diff key-value backends (Consul, Vault) +“helm config” plugin that works with API described above to fetch value sets and save the to .yaml file prior to helm install +Going to get involved in specs repo as it relates to helm push, helm login +ChartMuseum website coming soon - can we open source it under helm org? +Demo +Charthub (Paul Czarkowski) +Easy way to host chart-repos using GitHub releases. +[Adnan] may be interesting to use this as the base for the “github bot” +Discussion +Longer meeting? Should we start 30 min earlier? +Are we letting meetings run long because we don’t do well time-boxing items, or do we just have a lot of agenda items. +There seems to be more material to discuss. With Helm 3 and the hub, there is more “stuff” to discuss. +Should https://github.com/helm/helm/pull/4473 be thrown into the release branch and cut rc.4, or cut v2.10.0 without it? +[Taylor] would prefer to see a 2.10.1 with this fix in it +[Fisher] would like to cut a 2.10.0 today +Assignments +Moderator: Farina +Notes: Fisher +Sherpa: Butcher + +August 9, 2018 +Announcements +Helm v2.10.0-rc.3 was released yesterday +Standup +Butcher +Staying on top of issues +Research for Helm v3 command line UX, PR in helm/community repo +Suggested a few edits +See doc for analysis +Turning attention back to governance. There is a draft out there. +Looking at Lua things +Brian Hardock +Building a Lua implementation for Helm v3 +Focused on the virtual machine / interpreter for Lua and writing the backend +Had conversations on design with Butcher +Fisher +Majority of work has been related to the release candidate +Helm issue #1968 - meta issue on the build system and the infrastructure around it +Moderate discussion on building helm for different architectures +Continuing work on release candidate and watching for regression and going forward with that process +Taylor +Clearing out the PR queue as much as possible +Continuing clearing out the PRs +We are not currently accepting PRs against the helm3-dev branch +There is a massive internal core refactor which is why we’re holding off on merging any PRs (Farina) +Farina +Kubernetes came out with recommended labels similar to our own and did a PR to update our docs with that +Following up on governance related items +Following up on charts + +Adnan +Getting next release of KubeApps.com out +Adam +Heads down on refactor work for v3. Close to having the public API part down for helm v3. +Watching for feedback on the PR for supporting kubernetes 1.11 work +(Taylor) Doing more testing against AKS right now +Vic +Plugging back in +Will work on Kubernetes 1.11 verification +Working on figuring out how to ease use cases observed and pain points from helm 3 +Michelle +Reviewed a bunch of PRs, especially patches for release candidate +PR’ed helm test plan/proposal for helm v3 +Reviewing long term governance plan +Josh +Added Helm 3 proposal for helm push +Trying to tackle repo authentication design w/ Farina and friends +Helm-push plugin updates (Harbor project etc) +CNCF Webinar w Stef! https://www.youtube.com/watch?v=u3VqswB-TJo&feature=youtu.be +Discussion +How are the changes/testing coming along for kubernetes 1.11 support? Where do we need more help? (michelle) +Coming along well. Adam already updated. +Please help if you can. +Specs repo, helm push/login +Clear specification for authentication and uploads by default +ChartMuseum will be responsible for implementing this spec, but others can BYO-API +How do we does the auths +Will pull in JFrog and some other people for their experience +(Matt Farina): Would like to get the specs repo moving. Being voted on now. Especially important for distributed search. +Hub update? Is there any movement on putting forth a monocular instance to start the hub +(Farina): yes there is movement +Need to find location where it will be hosted +CNCF has a bare metal as a service option +Few other ways we can go between sponsored hosting from a company or through the CNCF +Farina is chasing down funding +Guidelines for inclusion +What guidelines should be there to be included +Reinhard (chart maintainer) is working on this +CNCF will look at this as well +Adnan will also help because Bitnami has experience in managing chart repositories +There was an email sent out to the maintainers to figure out a name +Adnan has been looking into resource requirements for hosting monocular +Very little resources required +Guides about creating your own repositories +Started with how to host your repo on GitHub +Key focus on documentation +This is distributed search not proxying for repos +First version will be a monocular instance and we will improve from there +Assignments +Issue Sherpa: Matt Fisher +Notes: Josh Dolitsky +Moderator: Taylor + +August 2, 2018 +Announcements +Helm RC2 was released earlier this week. RC +Standup +Nikhil +Getting back from an internal all-hands +Will be testing out the release candidates +Adam +Opened a PR for k8s 1.11 support, could use heavy testing. Testing different k8s versions with it. Wait testing. Anyone with cycles who could help will be appreciated +Other Helm3 stuff +Brian +LUA stuff for Helm3 +Fisher +Making sure helm2 RCs are going through, move along the 2.10 cycle +Paired with Adam for the k8s 1.11 support. +Keep moving through the RC2 => RC3, but has already been approved, just needs merge. +Justin +Some issue triage this week +Butcher +On vacation last week +Getting close on the Helm Governance Proposal -- should have something on the next couple of weeks. (deadline in Sept) +Working with Ronan to get various helm accounts shifted over to CNCF +Item on to-do list to figure out where to move our docker image to. Also an open issue on where to host our helm binaries. The crucial thing here is metrics -- we’d like to host it where we’d be able to get rich metrics around downloads. Need to co-operate with k8s here +Adnan +Working with Scott Rigby to figure out how to make standing up distributed chart repos as easy as possible. +More on this soon +Discussion +Update strategy in helm v3. See issue #3805 (michelle) +Adam’s been working a bit on a prototype to evaluate this. Pretty close to spiking it out, when he should have a better idea about this. +`--strict` flag on `helm repo update` to return non-zero exit code on failure PR #4348 + +Release Helm 2.10.0 today after merging PR #4364? (fisher) +Already discussed cutting an RC3 before doing a 2.10.0 +Release without Adam’s patch for k8s 1.11. Doing so would break semver, so we shouldn’t do this. +Proposal to port GoFish as a Helm 3 plugin manager (fisher) +https://github.com/helm/community/blob/master/helm-v3/005-plugins.md +Is the community repo the right place for this? +Yes! +When we have something in an issue queue that’s possibly a bug, currently we mark it as question/support. Can we have a new tag “Unconfirmed” where we can mark it as an unconfirmed bug, and then remove the tag? +Yes +https://github.com/kubernetes/kubernetes/labels/priority%2Fawaiting-more-evidence +Helm v3 update: +Ongoing work on the LUA engine +Proposals in helm/community are flowing, will spend some time next couple of weeks going through them. +No definitive ETA yet, but it would be nice to be able to show some of the newer features during KubeCon +(Adnan) Vic is holding a discussion around last-mile customisations to charts in next Monday's SIG Apps call. Also Stefan Prodan from WeaveWorks will be demoing Helm git-ops. + + +July 26, 2018 +Announcements +Finally finished move of all the helm repos to the Helm org +Distributed search proposal passed with a majority of votes +Voted Rimus (sp?) as an emeritus member +Standup +Butcher +Issue sherpa trying to stay on top of issue queue +Merged PRs -- were a couple of features +Helm 3 design LUA stuff with Brian +Adam +Been working on getting the 1.11 kubernetes support ready +Josh +Been trying to keep up with email list +Been a lot of activity around repo discussions: +Taylor +Vacation +Working on PR stuff tomorrow +Justin +Was at vacation +Getting back into the flow of things +Farina: +Need to figure out logistics of moving from CLA to DCO +When we left k8s we lost auto-sizing, have been figuring out how to bring the sizing back. Chris is going to try and chase down how to use ProBot so that we can get some of this back. +Working on update notifications -- how to tell folks that they have a helm update for them. +Discussion +Can folks (non core-maintainers) add/remove labels on the helm/helm repo right now? (michelle) +Non-core shouldn’t have access to do this. +There used to be a bot that we could use. The automation in place used to be able to allow folks to do this, but it was k8s specific. +Helm proposals +Installing custom plugin sets: +(Taylor) Two thumbs up +How do we do version handling? How do we discover the version. +(Butcher) It might be good to not even handle versions for a first pass +Helm v2 repositories +https://github.com/helm/community/pull/27 +Two file approach -- idea is to do this to improve performance so that we’re able to do a lazy fetch +If you use a relative URL, don’t you lose context of the base URL? +If you have it in more than one URL the relative URL works across http / https. +Are we going to host keywords / maintainers from the current charts repo into the top-level file? How do we consider what is latest? (eg. 5.1.3 vs 5.1.4-alpha1). +We might want to change it from “latest” to “stable” to address this +Improved signing +https://github.com/helm/community/pull/20 +Generate GPG keys for you so that you can sign charts (default is on). Move closer to making verification a part of the helm repo experience. +Main thing here is whether storing the public key is okay to store in the charts or not. +We don’t need to take an external dependency on GPG -- go already has libs that we use (already in the code). +Update notifications + +Stale issue automation + +Assignments +Issue Sherpa: Justin +Notes: Nikhil +Moderator: Butcher + +July 19, 2018 +Announcements +Need helm doing some research into possible bugs from the issue queue. If you have time today, please reach out to Michelle +Accelerated move to Helm org (github.com/helm/helm) +Still having some CLA/CicleCI issues +Seems like it might be an issue with CLA-Bot +Standup: + +Discussion +Governance +Matt Farina's proposal for a new governance structure +https://hackmd.io/s/B1BksVYW7# +Bootstrapping process for project maintainer elections +Still need to figure out how to do this fairly and equally +Project maintainers need to be codebase maintainers +A codebase maintainer may not want to/be suitable to be a project maintainer +Codebase maintainers have skin in the game and care about the project direction +Codebase maintainers don't need to be software engineers, Helm has a history of maintainers that didn't contribute software but have contributed in other ways +Experience matters here, want ideas and psychology to bubble up to project maintainership +Don't want to end up with top-down maintainership +Sub-projects have a lot of freedom in adding maintainers - simple majority vote +Action: Make it more explicit that codebase maintainers don't need to be software engineers +Okay to have an even number of project maintainers for a short amount of time, if someone steps down before replacement found +Maintainers only removed if they become unresponsive +Bootstrapping project maintainers +Different weights for different projects? +Ghost period for code maintainers should be shorter? +Set an upper limit, but let codebases choose lower limits if desired +CNCF CoC - email contact in the CoC doc +Better nomenclature for project & codebase maintainers - repo & org maintainers? +Chartmuseum +UI +Orgs and Authz +Assignments +Issue Sherpa: Butcher +Notes: Nikhil +Moderator: Fisher + +July 12, 2018 +Announcements + +Standup +Taylor: +Getting back into doing Helm stuff. +Digging into PRs and notifications +Then looking into Helm 3 stuff +Adnan: +Discussions around charts - especially distributed repository proposal. +There were some ideas in the charts call this week which is recorded. +More conversations with Scott Rigby +Work with Kube CRD and Tiller Proxy +Nikhil: +Not much going on with Helm this last week +Just touching base with issue comments and PRs +Michelle: +Knowledge transfer with Adam on the changes for k8s 1.11 +Working on the proposal for what Helm tests should look like for Helm v3. Looking at issue queue for what people were requesting. Looking to get the proposal +Brian: +Fix the 1.10 RC for helm list, +Looking into the TLS security support question. Turned out to be a documentation issue +Farina: +Notifications: Working on how we can notify people when new versions of Helm are out. Using mini-kube as a model for this. +Verification work with the proxy (using kubeapps model). This is interesting especially with the multi-tiller approach that most people use. +Lots of emails around governance +Discussion +Moving docs [Matt Farina] +Docs repo? +Currently docs live in the helm repo itself. +Would be nice to add translation, etc. +Keeping this in mind does it make sense to move docs to their own repo? +Markdown vs Asciidoc: +Conversation with a few other folks about this: +Markdown is more popular, asciidoc is more technical? +There are tools that can switch between the two. +Example of kube-builder http://book.kubebuilder.io +Nice to be able to do side-by-side code and docs. +Built in i18n with gitbook +[Taylor]: In support of moving the docs to own repo +[Michelle] Helm v2 vs v3 docs -- will they live in the same repo in different directories? +Docker compose does a good job of splitting out the docs for different versions. +Gitbook vs other tool? https://github.com/kubernetes/helm/issues/4100 +Multi-lingual +K8s recommended labels. Do we switch? When? https://github.com/kubernetes/website/pull/8703 [Matt Farina] +Helm has standard labels, almost one:one with the ones listed here, but having different names. +What is the best way to proceed here? +Adding annotations makes sense, but labels changes people’s deployments so the change is more intensive. +Governance esp w.r.t related projects: +Separation of concerns project maintainers vs. codebase maintainers +CNCF projects are expected to follow standard set of CI / Automation practices. (https://bestpractices.coreinfrastructure.org/en) We will probably need to get to a certain state on this in the future. +Assignments +Issue sherpa: Michelle +Notes: Adnan +Meeting Moderator: Nikhil +July 5, 2018 +Announcements +Devoting time to discussion, skipping standups +Discussion +Discussion on k8s 1.11 support for Helm +Update on current state of k8s 1.11 backwards incompatibilities +Generated Go code in k8s/k8s has been removed, making it unusable as a package: https://github.com/kubernetes/kubernetes/pull/62432 +Removed the client-side reaper in favour of the server-side reaper. Because Helm prior releases, we need that for 1.10 support +The entire factory/builder packages in kubernetes/kubernetes were rewritten and are totally different between 1.10 and 1.11 +The printer was rewritten and requires significant refactoring +Proposal (adam): due to backwards incompatibility and significant engineering effort, I propose Helm 2 only supports Kubernetes 1.10, punting k8s 1.11 to Helm 3 +Another option: remove k8s/k8s as a dependency, and vendor the k8s 1.10 code directly into Helm 2 as a crutch +Apparently service catalog has already gone with this approach +Butcher: (giving some context on kube-lego and cert-manager) I don’t think we should go with solution 1. It puts our community in a bad position: Helm 3 isn’t ready, and Helm 2 would be in limbo +Adam: ok, I can go take a look at forking kubernetes/kubernetes so we have the packages for handling backwards compatibility +Farina: I’m going to take these issues up to SIG Architecture and SIG Release +Michelle (in chat): you think we should bring this up in SIG apps and see what other tools might be struggling with changes from this kubernetes release? +Farina: on the agenda for next SIG Apps +Fisher: Do we want to have a strategy for communication with the community for this? Farina: Better to over-communicate than under. +Adam: Go/no-go by end of the week. Farina: based on this we can craft some messaging to the community next week. +Assignments +Issue sherpa: Justin +Notes: Nikhil +Meeting Moderator: Michelle +June 28, 2018 +Announcements +v2.10.0-rc.1 released +Standup +Justin: +Issue Sherpaing +Working on CRD issue +Adam: +Released v2.10.0-rc1 +Still been working on some of the Helm 3 stuff +Pairing with Brian on some things to help through some of the design choices +Working on k8s 1.11 support into Helm, but it’s so vastly different than 1.10 so it was unable to make it into the release +Brian: +Paired with Adam, and I loved it! +Josh: +Nothing to report +Adnan: +Nothing to report +Matt Fisher: +On vacation last week +Testing RC.1 +Discussion +Kubernetes v1.11 support +Assignments: +Issue sherpa: Justin +Notes: Matt Fisher +Meeting Moderator: Adam + +June 21, 2018 +Announcements + +Standup +Nikhil: +Issue sherpa last week - support related things +Talk about cutting a new release? +Matt Farina: +Migration to Helm org +Michelle opened up an issue moving from CLA to DCO that needs follow up. +Some work on index files and performance - splitting up files and moving to JSON could yield a lot of benefits so exploring those options. Upcoming v2 proposal spec around this. +Adam: +Out sick last week. +Being pulled into other things since Butcher’s out. +Helping with Helm 3 refactoring +Fisher: +Issue queue + triage +Had a good session with Nik helping with Issue Sherpa handoff, and process regarding labels while sherpa’ing +Josh Dolitsky +Keeping up with all the stuff Matt Farina’s been posting with distributed search +Wants a heads up on any CNCF stuff going on +Farina mentioned about copyright headers +Question: is there any hold-up on moving to the github org +Farina: one hold-up is the Linux CLA bot hasn’t; once it’s fixed we can start moving over +Adnan +Been looking over the distributed search proposal and the application CRD +Justin Scott +Been heads down on internal projects, LGTM’d a few PRs +Discussion +Next helm release? +Talk about cutting a helm 2.10 with the changes present in master +K8s 1.11 client APIs broke a lot of things from initial testing +Come up with an announcement on the helm-users mailing list on if we’re adding 1.11 support +Helm 3 tickets +There’s been a few tickets raised on Helm 3 topics; are we ready for these? +Answer: no, redirect users to #helm-dev or the helm/community proposals at this point +Things are expected to break (and break often); we’re not ready feedback until the first alpha release +Zoom issues - people on hold? +The meeting moderator now needed to allow folks explicitly into the meeting, and folks are on hold until the moderator allows them in +Farina: Default k8s settings for zoom are changing to make things much more restrictive, and moderators need to explicitly let people in. This is around the push to stop bad actors, but meeting chairs need to keep an eye out for folks trying to join. +It might be effective to have co-hosts so that we can have multiple people keeping an eye out to let people on hold to join in. +Assignments: +Issue sherpa: Justin +Notes: Adam +Meeting Moderator: Fisher + +June 14, 2018 +Announcements + +Standup +Fisher: +Was at offsite last week +Working mostly on Issue queue / PRs +Fix for: https://github.com/kubernetes/helm/pull/4146 +Adnan: +Need to check out Helm v3, and got feedback on Helm CNCF move +At DockerCon this week +Nikhil +Taking a look at the helm 3 branch, looking at particular the lua stuff +Adam +Out for last couple of weeks +Looking into some pieces of helm that weren’t touched before (requirements) +Need to look at treatment of Helm subcharts internally (needed for LUA) +Butcher +Pairing with Adam on the tech side for Helm v3 -- taking a deep pass through the lower code base before building the upper layers +Will be out next couple of weeks (including at ContainerCon China) +CNCF Helm transition is going well, but slowly -- turning over various properties (web, DNS, Twitter handle, etc). Put in place a provisional Helm governance model. Provisional governance structure is for 90 days until we can come up with something more formal and structured. Things that have moved over officially: +Helm +Charts +Chart testing tools +ChartMusuem +Everyday conversation will stay in Kubernetes Slack. +Will be running an article in https://sweetcode.io/ on Helm 3 +Taylor +Not much on Helm, mostly working on AKS GA +Hope to jump back in after next couple of weeks +Discussion +How can we better manage issue triaging with the issue queue getting so large? +Something that came up last week. Currently ~400 issues, ~90 open PRs. What’s our level of priority for issues / PRs coming in. +4 categories: Bugs, Support Tickets, Features, Whatever else? +59 open bugs (most are fairly low pri), but there are a couple of high pri ones +Thought is: make handling bugs as P1 for issue sherpas since it’s hard to focus on everything. +(Adam) Another idea: talk about high-pri bugs during meeting. +Charts distributed repo proposal - please leave feedback https://github.com/kubernetes-helm/community/pull/24 + +Assignments +Issue sherpa: Nikhil +Notes: Fisher +Meeting moderator: Adnan +June 7, 2018 +Announcements + +Standup +Taylor: +Not much this week +Discovered issue with --wait +Nikhil +Issue sherpa, spent some time on some issues and looked into a few PRs +Adnan +Plan to take a look at the Helm v3 branch, and the canary +Not much else apart from that +Discussion +Stef: Issue with “Connection Reset” caused by difference of versions between Helm and Tiller +Assignments +Notes: Taylor +Meeting Moderator: Nikhil +Issue Sherpa: Fisher + +May 31, 2018 +Announcements + +Standup +Matt Fisher +Issue triage + PR +Some windows related stuff +Brian +Nothing to report +Taylor +Trying to make time to fix the helm wait stuff +Justin +Nothing to report +Nikhil +Started pulling down on the dev-v3 branch and making his way through the branch to see what’s changed +Adnan +Interested to see what’s going on in the dev-v3 branch, otherwise working on other work +Matt Farina +Worked on the helm proposal to the CNCF, fair amount of discussion going on in that PR. Discussion is still ongoing +The community charts sync broke due to a breaking change in the system +Fixed by using CircleCI rather than Jenkins thanks with help by Adnan +Discussion: +Folks are in summer mode! Not much tabled to discuss this week. +Assignments +Moderator: Taylor Thomas +Issue Sherpa: Nikhil +Note taking: Matt Fisher +May 24, 2018 +Announcements +Helm and CNCF [Matt Farina] +After last week’s incident, we are going to be stricter with how we can handle this in the k8s community. Sorry to all about last week’s incident, but we should now be in a better place to handle something like this if it happens on a CNCF community call again. +Standup +Taylor: +Not much, mostly working on the wait-flag stuff +Might be busy over the next couple of weeks +Adam +Working on Helm 3 stuff +Trying to split up the tight coupling of templating and resources +Next week on vacation +Nikhil +Mostly out last week, getting back into the swing of things this week +Butcher +PR on the LUA stuff for Helm 3 (Core event handler) +Talked with Adam about things like helm install which has grown organically -- so we need to do a little ‘topiary’. +Jdolitsky +Managed Helm Repos +We also now have auth for ChartMuseum using a bearer-token in the header +Worked on helm-push/helm-login/performance of index.yaml +Farina +Happy to take on the proposal of the index.yaml +Starting to poke at i18n, filed a few issues against doc, i18n, etc. Looking into finding a framework to do the translation. +Fisher +Mostly on vacation last week - got back this week +Hoping to take a look at Helm3 discussions and get involved with that this week +Discussion +(Taylor) Wait-flag returning true if the app can’t start. Not sure if it’s worth it to keep the --wait flag around. Want to get input from community, and maintainers on whether it is a good idea to remove this. (Farina) On the community charts side, they had to write their own solution, but something like the wait flag is a better solution. Do understand the brittle nature of it, but it is useful. (Adam) There is a effort upstream that we might be able to piggy-back on (https://github.com/kubernetes/kubernetes/pull/64034) -- so we might be able to leverage some of that. Maybe we should review what’s going on there, and get caught up on discussions. (Fisher) What’s the status of wait flag on v1? (Farina) There’s a storage bug that’s preventing old API versions from being removed. Hopefully that will be solved so that we don’t need to support older versions of the API / deployments? Probably a good idea to see in what direction the upstream effort is going before making an informed call here. +Josh Demo https://github.com/chartmuseum/helm-push +Assignments +Issue Maharaj +Butcher +Notes +Fisher +Meeting Moderator +Nikhil +May 17, 2018 +Announcements +Helm and CNCF [Matt Farina] +Standup +Taylor +Debug --wait flag +Opened PR for release process +Nikhil +Issue sherpa duty +Fisher +Vacation +Defining first issues with Farina +Adam +Helm3 refactoring +Review PR’s +Michelle +Review PR’s +Butcher: +Vacation +PR reviews with Adam +PR for CRD support in helm2 +Farina +Looking into making chart repo more distributed +Language support for helm +Demo +Josh with Chartmuseum +Discussion +Kubernetes Apps Survey Results for Helm [Matt Farina] +Issues with the wait flag [Taylor] +Assignments +Issue/PR sherpa: +Michelle +Notes +Nikhil +Meeting Moderator +Fisher + +May 10, 2018 +Announcements +3.0 dev branch is sorta open but in code cleanup phase +Codefresh just announced managed Helm repos -- awesome! +Standup +Nikhil +Has not done much in the last week +Volunteered to do issue/pr sherpa +Reviewed oauth work with Josh +Adam +Holding fort when folks were at KubeCon +Focusing on Helm3 stuff with refactoring +Farina +Digging into the charts craziness +Almost 300 open PRs +Added a discussion topic to figure out how we can manage some of this craziness +Hope to chat with Josh and present a PR to help with this +Butcher +Picked up some of the Issue Sherpa this week +At KubeCon -- spoke to a few Chart maintainers to talk about some of the alternatives to what we have currently. +Propose people interested in this problem, meet up during Chart Office Hours (next week on Tuesday?) +Open PRs for CRDs that needs reviews -- might need to pair with someone +Has a POC for LUA scripting for Helm v3 +Taylor +Proposal idea for how we want to do releases +Looking into PR templates / Issue Templates +Discussion +Proposal idea for how we want to do releases [JTT] +The dev call after the release is the next (bootstrap) call for the next release. +Each dev call have a 5/10 minute discussion for features where we discuss whether we pull merged PRs into the next release of a later release. +Is this adding unnecessary process which will be overhead for us? +Taylor will write up the process and make a PR to Helm to kick off more discussion for next week. +Distributed charts vs central hosting vs a combo [Matt Farina] +Charts Office Hours are at 9am PST 10 am Mountain on Tuesdays +Whole lot of work to curate charts and get people to curate charts and maintain. People tend to get burnt out. So the central repo model doesn’t really scale that well. +PHP packages have distributed hosting -- can we have some sort of distributed mechanism to do a similar thing for charts that is distributed, but has a central discovery -- so central metadata, with the actual charts living off in a different location. +More discussion next week +That _is_ a different project, so technically they would make a decision on this, but we should weigh-in during Charts office hours +Assignments +Issue/PR sherpa: +Nikhil +Notes: +Adam +Meeting Moderator: +Taylor + +May 4, 2018 +Canceled due to KubeCon + +April 26, 2018 [recording] +Announcements +Helm 2.9.0-rc5 was released last afternoon +Helm dev call canceled for next week +Standup +Adam +Been doing work on Helm 3 refactoring, pulling out gRPC and old commands we had +Paired with Fisher on some bugs for the Helm 2 release and issues upon request +Taylor +Haven’t done much, switched over to Microsoft so have been onboarding onto his team over there +Matt Farina +Been looking onto the community charts scalability problem +Looking into chart repository scalability issues, like switching to JSON for index files +Might have stronger opinions after KubeCon +Matt Butcher +Been issue sherpa this week, triaging issues for Helm 2 +Pairing with Adam on Helm 3 stuff +Automated helm.sh and docs.helm.sh this week +Have a couple items to work on for the Helm 3 spec doc while in Copenhagen +Justin Scott +Issue triaging +Identified an issue around import-values, will look further into the ticket +Michelle +Been travelling this week +Matt Fisher +Been cutting release candidates as needed this week +Want to cut a 2.9.0 by the end of this week, but we should probably discuss this +Demo +Josh with push to chartmuseum +Discussion +Helm material from Kubernetes Apps Survey +More Helm Maintainers for the issue queue? +Should we cut Helm 2.9.0 prior to KubeCon? +Testing coverage (Adam) +Assignments +Issue Sherpa +Adam Reese, party of 1 +PR Sherpas +Adam Reese, party of 1 +Notes +Matt Farina (for the week after KubeCon) +Moderator +Matt Fisher (for the week after KubeCon) +April 19, 2018 [recording] +Announcements +Application survey date extended until Monday - https://docs.google.com/forms/d/e/1FAIpQLSeetP_EnzMjAayR73sbpHDtfxnAzT6Y0wzCCvrP4C1uLa1u0Q/viewform + +Standup +Michelle +Issue sherpaing and fixing bugs +Matt Fisher +Worked on fixing bugs +There’s a PR to add flags to pkg that was merged and then reverted because it broke compatibility +Working on getting RC4 out and fixing bugs to do that +Nikhil +Didn’t do much Helm related this week +Farina +Not much directly related with Helm +If anyone wants to work on Dashboard (SIG-UI), they’re looking for folks (Currently Angular 1 with PR to update it). Low barrier to entry. +Butcher +Reviewing PRs for Helm 2 +One PR open on spec for Helm 3 around on security +Going to proposes changes to where releases are stored +Adam +A few patches in for the RCs +Working on Helm 3 looking to factor out gRPC and remove tiller binary +Looking for feature parity with a single binary +Brian +Paired with Adam on helm 3 refactor +Josh Dolitsky +Built a plugin for chartmuseum push +Discussion +Issue Sherpa’ing with a second person was really good -- maybe we should institute a buddy system +When do we open up ‘the branch’ (referring to v3 branch)? +Few things to consider - How to handle feature requests coming in. +Bugfixes, do we need to cherry-pick bugfixes into both? How do we deal with this since it looks pretty different (eg. no longer protobufs, no longer generated code, etc) +How / when do we define a freeze for Helm v2 features? +Lots of folks still using Helm 2 +(Fisher) Maybe have a window (of a couple weeks or so) where we allow features for Helm 2, after which we only allow features in Helm 3. (Farina) Maybe have a cutoff date which we tell contributors about? +(Michelle) Some folks might want to continue with Helm v2 and not Helm v3. +Adam is pointing out concern for the end user vs concern for contributors. +Michelle is in favor of a helm 2 feature freeze date. Will use labels to track incoming features to make sure they get mapped to helm 3 +“1. Window for getting in feature requests before the v3 requirement +2. Labeling features in Helm 2 that we need to forward-port, so we can track those” +Issue sherpas can respond to Helm 3 branch PR requests appropriately. +Let’s schedule Josh’s demo for next week, for lack of time. +Assignments +Issue Sherpa: +Matt Butcher +PR Sherpas: + + +Notes: +Fisher +Moderator: +Michelle Noorali + +April 12, 2018 [recording] +Announcements +Application Survey https://docs.google.com/forms/d/e/1FAIpQLSeetP_EnzMjAayR73sbpHDtfxnAzT6Y0wzCCvrP4C1uLa1u0Q/viewform +All results will be publicly available +Standup +Taylor +Reviewing PRs +Still need some help reviewing PRs +Justin +Put some labels on issues +Matt Fisher +Working on release +Influx of stuff coming in which is great because we’re getting feedback on release candidates +Issue sherpa - aggressively closing issues +Common issues with bare metal clusters. Maybe there is something address in upstream Kubernetes documentation +Still triaging issues for bugs related to RC +Matt Butcher +Operating Kubernetes clusters with aid from hat +Some light reviewing on PRs +Added to Helm 3 proposal some things about strengthening signature verifications. Make sane security defaults for signatures. Will make repositories do some leg work to set up signing/security. +Adam Reese +Sick. +Working on PoC work around Helm 3 proposal. +Looking at how to refactor out some gRPC stuff to make easier transition to client only architecture +Michelle +Following up on issues +Sent request in for +Brian Hardock +Not too much +Matt Farina +Comparing memory allocation of YAML/JSON parsers +TLDR; we’re using the worst. +Will post result +Might be worthwhile looking at a better YAML parser +TLDR from chat; Matt Farina is a nerd and everyone loves it +Josh Dolitsky +JWT validation in chart museum working +Helm push plugin working on oauth flow +Discussion +RC 4 from master? (Fisher) +Lots of activity has happened since the release of the first 2.9.0 RC +There’s a lot of features released in there +Should we cut from master with changes included and features or should we continue to cherry-pick? +Adam: let’s follow semver +Matt Farina: we have lots of silent users so let’s now throw them off +Michelle: Agree with Adam and cool with doing a quick 2.10 release with new features +Taylor: If people want the latest, they can use canary +In agreement on how to go forward. Cherry-pick and no new features. +Action Item: Let’s make that clearer in documentation either in FAQ or CONTRIBUTING.md +Assignments +Issue Sherpa: +Michelle Noorali +PR Sherpas: +Matt Fisher +part-time sherpas +Matt Butcher +Taylor Thomas +Adam Reese +Notes: +Matt Farina +Moderator: +Adam Reese + +April 5, 2018 +Announcements +The AppDef WG has put out a survey at https://docs.google.com/forms/d/e/1FAIpQLSeetP_EnzMjAayR73sbpHDtfxnAzT6Y0wzCCvrP4C1uLa1u0Q/viewform +Helm 2.9.0 rc1 and rc2 were released this week (thanks Farina and Fisher!). The notification +Standup +Taylor +PRs this week -- trying to get stuff merged +We now have a release branch, so we don’t need to wait for the RC cycle to be done +Michelle +Was issue sherpa this week, mostly just triaging issues and fixing bugs +Have several items for discussion at the end of this call +Nikhil +Couple good convos with Josh on ChartMuseum auth stuff +Adnan +Pass +Fisher +Triaging issues, helping out with release +Couple of bugs with the release checklist. Opened an issue yesterday to look into. +If there is an issue that needs to be picked into a release, please use the ‘needs-pick’ tag where x is the release. +Josh +New chartmuseum release this week. 0.5.1 which lets you serve multiple chartmuseum repos +Putting together notes on helm push as next steps +Discussion +How do we respond to semver issues like this (Michelle) +If you use the kubeversion field and you have a constraint like >=1.8.0 this becomes incompatible with GKE’s versioning. +How do we respond / have we responded to these kinds of issues in the past. +One of the solutions was to add something like -r0 and making it pre-release (Farina might know more about this option -- this might be something that CoreOS/Rancher do) +There are over 300 open issues and over 80 open PRs. Should we do a week or two of having two sherpas to help clean out the backlog after 2.9.0 goes out? (Michelle) +(Taylor) Issues might not be much of a problem -- but we should definitely look into getting people to jump on and close PRs. The issue queue tends to self manage especially with fetja-bot and us noticing when things go stale. +(Fisher) It would be nice to make the community a bit more self-sustainable. Fully agree with prioritizing PRs over issue queue. +(Michelle) Do we want to have a dedicated person looking at PRs? +Taylor volunteered, but was decided not to make it a formal role just yet. +Vote on combined maintainers mailing list here (Michelle) +Two options right now (suggestions welcome!): +charts-and-helm-maintainers@lists.cncf.io +helm-cartographers@lists.cncf.io +(Adnan) Discussion on charts collecting analytics - https://github.com/kubernetes/charts/issues/4697 +Heads up that this discussion is happening - folks interested please join in at the next charts call where this will probably come up. +(Fisher) One considerations is that Helm install doesn’t have a really good way of notifying the users that some analytics are being enabled -- this is especially true especially in the case of dependent charts. (Adnan) The dependency chart might be a problem since the parent chart could set the on/off flag and users might not necessarily know about it. +(Fisher) It would be nice to make it blatantly obvious that we were turning on analytics (eg. homebrew, etc.). +(Kensey) CoreOS has one flag for all projects to turn off analytics -- would be good to standardize +Assignments +Issue Sherpa: +Matt Fisher +PR Sherpas: +Taylor +Nikhil +Notes: +Michelle +Moderator: +Taylor + +March 29, 2018 +Announcements +Bacongobbler: Adam, Michelle, Fisher tested Kubernetes 1.10, so it is merged. When should we cut the Helm 2.9 release? +Standup +Adam: +I am going to miss standup, my 2 updates: merged kube 1.10 support and worked on a POC of the helm3 ext model. +As always, dont trust anything @mattfarina says about me +Michelle: +Testing of 1.10 +Investigating another issue #3655 +Nik: +Looking at Docker Registry token format for registry planning for Chart Museum +Investigating how PIP/pypy do things (and launchpad) +Justin: +Helm issue queue triaging +Butcher +Helm v3 work + prototyping with Adam +Embedding LUA, eliminating grpc -- get clear on some of the areas for the Helm v3 proposal +Taylor +Working on a few PRs this week +Matt Farina +Helm Survey for end users +Adnan +Charts work on owners/maintainers +Check if any chart maintainers want to go emeritus +Brian Hardock +Fix on Helm List due to gRPC threshold, working on tests now +Matt Fisher +Testing 1.10 and issue triaging + Also a little Lua experimentation just to get comfortable with embedding Lua in Go +Discussion +What do we want to name the mailing list for both charts maintainers and helm maintainers? Is it public or private? [Michelle] +Think about this one, we can decide further next week. +CNCF landscape [Matt Farina] +Uploaders for Plugins [Josh D] +How to implement ‘helm push’ +Farina: I was thinking of doing it over http/https downloaders, so that plugins can implement custom push uploaders. +Josh: See #18 on the community repo, which could also provide indexers to tackle search scale issues, maybe others. +Farina: Some survey questions are relevant to this. I’d like to keep push and index separate so that we might be able to do push in Helm 2. Index is more complex/debatable. +Josh: Maybe make chart museum method the default, and allow plugins to override +Fisher: jFrog is also interested, maybe in basic auth because that’s the only available kind +Farina: Maybe we should ship with oauth support and token auth too +Josh: What if we don’t have a default implementation? +Call for next Monday after sig apps: https://calendar.google.com/event?action=TEMPLATE&tmeid=NDA3a2NsbzlxaWdpcnNuMm41NzNsdnFqaDggY29kZWZyZXNoLmlvX3BmbmlqajVrbjFmYzhqMnJtMXYwbWJoaTIwQGc&tmsrc=codefresh.io_pfnijj5kn1fc8j2rm1v0mbhi20%40group.calendar.google.com +TODO: Schedule call -- Josh Dolitsky +Branch naming for Helm 3 [Butcher] +Tentative plan is to have a place for Helm v3 code to land prior to KubeCon EU (beginning of May). +We had some ideas on how we want to branch for v3. Farina and Butcher looked at data and found a substantial amount of folks cloning helm master. +Normal weekday 150 - 180 unique cloners. +Points to not breaking master and leaving as is. => v3 code should live in a different branch. +‘v3’ is as good a name as any for the branch name. +Farina: We should think about how the branch name plays with dependency management tools like glide, dep, etc. +Butcher: Maybe we should do something like dev-v3. +Lots of suggestions for branch names in the chat -- seems that there was some consensus on dev-v3. Butcher will send a message out to the https://lists.cncf.io/g/cncf-kubernetes-helm list. +Assignments +Issue Sherpa: Michelle Noorali +Notes: Nikhil +Moderator: Taylor + +March 22, 2018 +Announcements +Helm v3 discussions are making progress. +Standup +Adam: +Been working on 1.10 support for Helm. This is now tested. +Worked on vetting LUA models with Butcher. +Fisher: +Pushing through the JFrog remote authentication support for Helm -- that’s done. +Mostly issue triage in addition to that +Taylor: +Was a bit busy this week. +Will take on some more PRs from the PR queue this week -- keep an eye out for reviews especially on mediums and larges. +Going to start trying to look at +Justin +Been pretty busy, so mostly been some issue triaging. +Maybe talk about some regressions that have been creeping up with Helm. +Butcher +Mostly focused on Helm 3 +Broke the document out into smaller proposals +Backed out format for chart.yaml -- going to just use the application CRD format so there is less of a learning curve for Helm 3 users +Also been vetting ideas around the LUA extension model -- vetted the loading process, runtime startup, and being able to embed into k8s objects. Cleared the way to say LUA would be the scripting language. +Also simplified the event model this week. +Will keep working at that this week. +Farina +Some more of the Helm 3 stuff +Working on charts -- merged a couple of features upstream wrt better validation of files, linting, etc. +Nikhil +Moved ChartMuseum to dep +Looked at a few PRs and the issue queue. +Plan to work on some of the repo auth pieces this next week. +Discussion +(Josh) Helm repo proposal: +https://github.com/kubernetes-helm/community/pull/18 +https://github.com/jdolitsky/community/blob/ebf12b58dec108f85c582369d937100d591f7cdc/helm-v3/006-repositories.md +Methods for authentication -- suggestion to add a helm config for authentication +(Fisher) Have we looked at different authentication models eg. pypi authentication for pip packages? +Another thing to think about is being able to auth against different repos. +This has ramifications on helm search -- you would not be able to search against multiple repos. +Do you do search locally, or do you do search against service providers? This changes the UX in subtle ways since you need to be able to search against certain repos. It would be good to know how people are actually using helm search. +This has similarities with search with pypi -- might be useful to take a look at them too. +During the transition between Helm v2 and v3, it’s really important to be able to search through existing charts and retain backwards compatibility with them. + (Farina) Do we have concrete requirements from users? Should we go out to users and poll for requirements -- what are the differences in requirements between startups / enterprises. +(Michael Hrivnak -- Welcome!): There is a tremendous amount of value to be had to not requiring a separate service for repositories. Also for enterprise users, they will require content on site. So anything we can do to help with that will be useful. +(Josh) Demo for ChartMuseum multi-tenancy +Assignments +Issue Sherpa: Justin +Notes: Butcher +Moderator: Fisher + +March 15, 2018 +Announcements +We had a v2.8.2 release go out last week + + +Standup +Matt Fisher +Helm issue queue stuff +Got a repro for a Helm rollback issue that he’s helping to track down +Nikhil +Spent time looking through the Helm 3 proposal +Helm issue queue stuff +Matt Farina +Working on the Helm 3 User Stories and User Profile docs +Adnan +Reviewing the Helm 3 proposal, user stories +Taylor +Issue sherpa for this week +Question about --reuse-values and its intended behaviour +https://github.com/kubernetes/helm/issues/3685 +Justin +Out for a week travelling +Taking a look at the Helm 3 proposal +Matt Butcher +Merged stuff on emeritus core maintainers +Addressing comments on the Helm 3 proposal, moving progress along +Plan for the next week is to help move the Helm 3 stuff along +Kensey +asked https://github.com/kubernetes/charts/issues/4067 for best practices on networking best practices +Discussion +Matt Farina brought up the Helm 3 user stories, saying this is an initial set of user stories to give us direction for whom and for what reasons to help drive Helm 3 +Helm 3 Proposal +https://hackmd.io/YvQCGazPRNanSugJV-rbSg +Proposing a client-only model, tiller is gone +Internally, Helm will be restructured around events +Adam mentions notes about Lua +Lua is the easiest to embed +Brian Grant asks if they’ve looked at alternatives like Skylark +Have not looked at Skylark, but they’ve looked at Javascript and found some limitations with regards to constantly catching up with ECMA 6 spec, whereas Lua was designed for embedding +One appendix is to propose using the Lua engine for Helm plugins +Include a `helm push` verb to push helm charts to a repository +Talking to Josh Dolitsky and the ChartMuseum team on defining the spec for `helm push` +Farina notes there’s a lot of proposals also in the Helm issue queue. They’re not noted in the proposal, but they are not being discarded +Next steps: how to break this up into sizeable chunks/proposals +Throw in a milestone? +Move it to issues? +Dump into enhancement proposals/documentation? +Brian asks whether development would happen in the main helm repo +Lazy consensus says yes, we should have a 2.x mainline branch and run Helm 3 development on master +Matt Butcher will publish the Helm 3 proposal in the community repository +Josh added multi-tenancy to ChartMuseum! +Not ready for primetime, but available for preview +Assignments +Issue Sherpa: Matt Fisher +Notes: Nikhil +Moderator: Matt Butcher + +March 8, 2018 +Announcements +Adam and Butcher have been working on a proposal for Helm 3. Should be ready by next week, when we can discuss it. Taylor has seen a sneak preview. +Taylor gave a brief des +Standup +Taylor: +Going over the Helm 3 proposal stuff +Blog post about the Helm Summit +Will have more time this week for PRs + issues. +Nikhil +Doing some investigation on how OAuth works so he can propose ideas to chartmuseum and other chart repository work +Spent some time responding to Issues +Michelle +Was at the OSLS for the last few days +Working on fetja bot +Need to revisit who should join which mailing list -- maybe create a different ML for the chart maintainers. Added Matt admins to the ML. +Fisher +Last week worked hard on reviewing PRs +Moving forward on discussions on the upgrade bug, and helm init --wait. After discussions with Bryan, Adam, etc came up with solutions that were a lot cleaner that made use of grpc solutions (cool!) +This week, want to pair with Adam on some of the PRs already in the pipeline. +Ronan and Fisher are working on the docs.sh documentation site which is on an old Deis site, trying to move it over to Azure resources. Laptop under someone’s desk => Cloud. +Farina: +Working on getting documentation from the summit together +The user profiles have now been documented at https://github.com/kubernetes-helm/community/blob/master/user-profiles.md +Working on proposing other documentation from the summit. +Poking at the Helm v3 proposal as well. +Adam +Was issue sherpa this week. Thanks to others who jumped in on that. +Also worked on the v3 proposal. Tried to collect all the requirements from the Helm summit and work off of that. Polished that up and put it into documentation based on which we can have a meaningful discussion about. “Too much change could be a bad thing” -- Helm is kicking off, and we might not want to disrupt much. (Something to keep in mind). +Will be pairing to review a couple of hot PRs with Fisher. +Brian +Pairing with Fisher on the Helm wait stuff with the ping using proto health check specification + + +Discussion +Templating in values.yaml file (see #1978, #2133, #2492, #3252, and https://image.ibb.co/k9Xo07/tpl.png) +Folks would like to go down the road of being able to templatize values.yaml files. Is there a way of going about doing something like that? +Is there a primary use-case for this? The use-cases are documented in the multiple open issues. +Adam: Maybe comes across as an anti-pattern with +One solid use case: Ability to pass the name of a parent chart to a child chart. Does it make sense to solve this use case without templatizing values.yaml? +Other use case: Want to be able to set a value in values.yaml and use that over and over again, later on. +Taylor: Maybe implement this as an alpha feature (as a plugin): if a lot of people use it and find value, maybe move forward then since that may be something that the community wants. +Fisher: Two problems: There are no standard go libs for this. Also in this case people want to render values files before sending to helm. Can we use a plugin to solve some of this (at least initially?) +Adam: It might be possible to get the info in there (eg. parent chart) in a more structured way, rather than by having to templatize values files -- the latter would likely end up with debugging FSM nightmares. +Next steps: read through the issues, to understand the use cases before we can have a deeper discussion next week. Farina will reach out to rheinhardt to get a better idea for use-cases. +Reconnect to tiller on transport error (TODO: issue number -- Farina will follow up) +There are cases where the connection to tiller gets broken. Experiencing this on chart CI and is an outstanding issue. +Suggestion: helm and tiller support a connection via a service that’s created. With CI, it’s good to set up a service and point helm to that service -- you can also use a global portforward. This might be worth looking into for CI. Default helm init might already do this -- something to check. +Another option could be to keep the tunnel open. +Does grpc have an auto-reconnect that we can use? +We see the error in less than a minute on the CI tests so it’s not very long. +E2e tests (see #2846) +Adam will take it over -- has already rebased it. A few more things to clean up. Initial rebase (#3636) +Index.yaml v2 proposal (#3557) +Farina: Can we get more eyeballs on this? +This goes hand-in-hand with the scaling discussion for chart repositories. Has implications on the growing size of the community charts repositories. +We will try and cover this a bit more during the next meeting. +ChartMuseum OAuth discussion: https://github.com/kubernetes-helm/chartmuseum/issues/59 +Assignments +Issue Sherpa: Taylor with Michelle as assistant to the regional sherpa! :) +Notes: Fisher +Moderator: Adam + +March 1, 2018 +Announcements +Helm Summit was awesome last week; nice job everyone! +Thanks to Fisher for closing a massive amount of PRs +Standup +Fisher: +Post summit stuff +Reviewing blog post with Taylor +Follow up with Karen (Microsoft) on post-summit feedback email +Looked at an merged a whole bunch of PRs (Thanks Fisher!) +This week: More PRs + Follow up on Helm 3 discussions, and next steps from notes from the Summit +Taylor: +Distilling requirements for Helm 3 from unconference discussions +Should discuss these requirements in a follow-up meeting +Nikhil: +Issue sherpa’ing this week +Post Helm 3 discussions with josh Dolitsky on ChartMuseum multi-tenancy stuff, feedback +Will have a follow-up discussion with Josh on auth in ChartMuseum +Adam: +Did a few PR reviews +Fixed a few bugs with Helm plugins +Updated all his plugins +Bucher and Adam got together, writing and sketching a proposal for Helm 3 with a few decision trees, which should be good for discussions +Butcher’s away in Texas this week, so it might not be finished until next week +Justin: +Popped in late, talking about triaging issues this week +Proposed an issue template on kubernetes-helm-core for Helm +Largely positive feedback on the proposal, so Taylor asks about proposing a PR to it +Asked about Brian Grant’s proposal, which +Discussion +Fisher: talk about https://github.com/kubernetes/helm/pull/3437 +Adam explained how upgrading as if it was a fresh install won’t work due to the install being in an unknown state +Fisher agreed +Taylor proposed perhaps this would be a good feature flag instead? That way users can opt into destructive behaviour +Adam and Fisher both agreed that would be a good proposal +Adam will bring some context back into the PR so we can hopefully steer the conversation in that direction +Nikhil: When sherpa’ing, how can we determine which features should be frozen from fejta-bot? +Adam and Taylor provided context and info on asking questions about older issues on helm-dev +Pairing sessions are great for this! +Nikhil agreed +Assignments +Issue Sherpa: Adam +Notes: Nikhil +Moderator: Taylor? +February 15, 2018 +Announcements +Helm summit next week! http://helmsummitpdx-feb2018.splashthat.com Get your tickets if you don’t already have them! + + +Standup +Justin +Mostly issues and PRs +Is excited(?) to be the AV guy at the summit at 7:30. :) We appreciate the contributions. There will be coffee! +Matt Butcher +Helm summit things +Collecting some feedback on what are currently the most requested features for Helm -- to try and steer the Helm 3 discussion that way. +What is the long term structure / governance model for Helm? Is this something we want to discuss at the summit? +Open question: Is it better to lay down (discuss) suggested requirements, rather than dictate solutions for Helm 3? +Matt Fisher +Majority of the work was helping out with the Dev summit +Working with Ronan? To figure out logistics regarding the summit. +Michelle +Worked on reviewing PR (https://github.com/kubernetes/helm/pull/3206) -- is now up for review +Updated the readme with the latest mailing lists from CNCF. Focused on making sure they’re set up correctly this week as well. There are multiple lists -- users, reviewers, power users, etc. Please join any relevant mailing lists. +https://lists.cncf.io/g/cncf-kubernetes-helm +https://lists.cncf.io/g/cncf-kubernetes-helm-power-users +https://lists.cncf.io/g/cncf-kubernetes-helm-security +https://lists.cncf.io/g/cncf-kubernetes-helm-maintainers + + +Also working on speaker stuff for Helm summit + + +Taylor +Working on Helm summit things -- big shout out to all the folks working on Helm summit items (Michelle, Adam, Fisher, everyone else) +Nikhil +Working on updating SUSE’s version of helm along with ChartMuseum +Working on his talk for the summit +(Nikhil: Thanks Fisher for noting this down while I was speaking!) +Adam +More summit stuff +Focused on summit talks and speaker work items +Brian Hardock +Just listening in this week +Discussion +There are some bugs in 2.8 +Helm list maximum client size exceeded (Justin’s case -- actually exceeding the 20 MB limit) 2.7 -> 2.8 bumped grpc, which made the client and server use the same size. Balboa has a new PR which updated the server client-receive size as well (apparently there are 3 settings that need to be updated). If this does fix it, does this warrant a 2.8.2, and if so -- do we wait until the summit to cut a 2.8.2? +Taylor / Butcher / Nikhil: Doesn’t seem like too many folks are affected by this - so probably prudent to wait until after summit. +Don’t need a dev call next week since we’ll be at the summit. +Michelle will send out an announcement on the ML and _all the places_, that we are at the summit next week, so things might be a bit slow. +Taylor: Maybe we should also put a message in the dev channel that we are at the summit, in case some high-pri issues do come up. (“Emergency mode”) +Assignments (NOTE - assignments are for March 1st -- the week _after_ the summit) +Issue sherpa: Nikhil +Notes: Michelle +Moderator: Adam + +February 8, 2018 +Announcements +Helm summit it comes soon. Tell your friends. http://helmsummitpdx-feb2018.splashthat.com +Standup +Justin +Issue triaging +Tried to generate the docs site working on issues and it failed. We have an issue +Matt Farina +Prepping for Helm summit talks +Fixed charts CI woes (ran out of resources due to memory leak) +PR to fix GRPC bug from update +Reviewing 2.8.1 issues/PRs +Being involved with KEP and CRD discussions for application type. +Matt Butcher +Looking into images to docker hub and other places for put binaries for better metrics that are public +Looking to clear some schedule time for helm development +Matt Fisher +Triaged things for 2.8.1 +Dove into bug of multiple releases being marked as deployed +Going to pair with Butcher on keynote which isn’t done yet +Going to work to get 2.8.1 out +Michelle +Reviewed on auth PR (by jfrog) +Will be around to review more things +CNCF requested mailing lists are setup +Taylor +Helm summit- all the things! +Nikhil +Issue triage +Worked on issue with chartmuseum on helm and updates +Worked on his helm summit talk +Adam +Behind on everything so not too much to report. Took time off +Discussion +Discussed https://github.com/kubernetes/helm/issues/3242 +2.8.1 burn down +There are two PRs left that need reviewing +Mailing lists +Didn’t get many people biting on power users list but will announce at the summit +Helm site +CI is still deis and needs to move elsewhere as that is going away in March +Assignments +Issue sherpa: Matt Butcher +Notes: Nikhil +Moderator: Matt Fisher + +February 1, 2018 +Announcements + +Standup +Justin +Mostly looking at issues +Looking at reuse values bug +Trying to help people having one-off issues. +Matt Farina +Upgrade bug for 2.8.0 which might hit people. Might need to issue a fix and cut a 2.8.1 release for issue 3382 +Odd testing scenarios and poking at CI things. +Taylor +Was mostly doing Helm Summit stuff +Might not have too much time for issue sherpa given the Summit tasks +Nikhil +Looking at issues and PRs +Progress towards Helm Summit talk +Discussion +Kubernetes is going to shift away from the term “Master” (eg. drupal went with primary and replica, etc.) Propose to use something like API Server / Control Plane. There are places in docs where we use the term “Master” -- this needs to be updated. +Need a few more eyes on issue 3382 to figure out why upgrades are failing. Seems to be an issue with patch metadata. +We fixed a bug where we forgot to bump the version of the helm cli internally. And a couple of other bugs. Do we fix 3382 and cut a 2.8.1, or do we cut 2.8.1 without a fix for this since there are other fixes that we want to get out? +Was specifically asked to be noted that we finished 10 minutes early without MS folks around ;) +Assignments +Issue sherpa: Justin +Notes: Matt Farina +Moderator: Taylor +January 25, 2018 +Announcements +Helm Summit registration is open +Standup +Matt Fisher +Paired with Farina on release cutting for 2.8.0 off RC1 +Issues are coming in related to Kubernetes 1.9.0 libraries +Issue triaging this week, not around next week as much +Aggressively reviewing PRs +Adnan +Interesting things going on in the chart repo +Working on Kube Apps related things +New dashboard rewrite +Taylor +Helm Summit +Working on CRD talk for Helm Summit. Will ping asking for feedback +Matt Farina +Followed along on the release process which is nicely documented +Issue open about signing Helm releases. Looking at that more closely and how other projects to do this to respond. +Poking at bug on helm 2.8.0 that has to do with Helm upgrades. +On the charts side, usual stuff +Also documenting more processes on the charts repo +Also documenting public chart best practices +Helps give people clearer idea on expectations +Matt Butcher + + +Brian Hardock +Listening today +Nikhil +Issue triaging this week +In Germany this week talking about Helm at SUSE +Preparing for the Helm Summit +Michelle Noorali +Helm summit schedule is live, schedule is up +44% of the available tickets have been sold +Discussion +Onboarding documents +Put in Kubernetes-Helm org in the community repo +Transparent governance +Helm Summit +Core maintainers who will be there +Matt Butcher, Matt Fisher, Matt Farina, Brian Hardock, Nikhil +There will be a Q&A with a core maintainer +Matt Fisher volunteered for unconference organization +Miguel and Scott Rigby +(Taylor) How we publicize RCs that may have prevent bugs +Let’s collect a group of Helm power users to test RCs +Problem with testing charts in RCs +CNCF is switching over to groups.io and may be able to set up some mailing lists for us +Michelle to follow up +CNCF has already switched (https://lists.cncf.io/g/main) - thnx for the link Farina +Assignments +Issue sherpa: Matt Fisher +Notes: Nikhil +Moderator: +January 18, 2018 +Announcements +Helm Dev Summit CFP acceptance letters have been sent out, just finalizing the details and schedule +Tickets are set at $75, anyone who RSVP’d will get an email with the link +Standup +Taylor +Working primarily on Helm Summit stuff +Finalizing some of those details this coming week +Has a lightning talk; would like to bug others for feedback +Matt Farina +Found out that .Capabilities.GitVersion is missing for testing purposes +Currentl workflow is string comparison so x.9 > x.10 +Nikhil +Shadowed the issue queue w/ Matt Fisher +Reminded that he will be out next week, putting information together for SUSE folks +Wanted to follow up with Butcher on the onboarding documentation +Matt Butcher +Wanted to announce that Matt Farina and Nikhil are both core maintainers +Been on the customer front talking about helm +Nailed down a bug with `helm list` in related to rolling back and recovering lost errors +Looking to hire Helm developers @ Microsoft +Adam +Mostly on vacation last week and the following week +Pairing with Matt Butcher on the `helm list` bug +Helm 2.8 release stuff +Matt Fisher +CFP submission scheduling +Discussion +Come to a final decision on how we are going to use test-infra and any concerns we have with it +Farina gave a demo on https://prow.k8s.io/plugin-help.html +Butcher: can we version pin plugins/opt out of new features e.g. new labels introduced in the label plugin? +Farina: policy on how we roll this out is discussing right now in SIG test infra +Feedback: adding too much heavy-handed test automation is not required for smaller projects like Helm; it does not need a whole lot of tooling because the process is intentionally simple +Farina is hoping more people to come to SIG contribex to provide this feedback +Best option is to look at the plugin repo to see what we can opt in (and out) of +Building for other architectures +Opinions on releasing a separate docker image for Helm vs Tiller? +Going forward with splitting into separate docker images +Looking forward to supporting alternate architectures +Publish these images to Dockerhub? Conversations leaned towards “yes” +Helm v2.8 release +Planning to cut the release next week, Fisher will take the lead. Farina and Taylor are interested in pairing to understand the release process +Assignments +Issue Sherpa: Nikhil +Meeting Lead: Matt Butcher +Meeting Notes: Michelle (voluntold) + +January 11, 2018 [Recording] +Announcements +Helm 2.8.0-rc1 is released +Helm 2.8.0 is being targeted for release next week +Standup +Matt Fisher +Helm Summit CFP reviewing +Justin +Reviewed some PRs +Taylor +Reviewing CFPs, helm summit stuff +Nik +PR reviews +Worked with Matt Butcher to put together some material to talk about Helm at SUSE +This week wants to work on learning how to issue czar +Michelle +Helm Summit CFP review and planning +Same thing for this week +Reminder: there is a core maintainer meeting the night before the Helm Summit +Matt Farina +Helped merge the feature for the supported Kubernetes versions for a chart +Adam +Helm Summit CFP reviewing +This week is more Helm Summit stuff +Getting ready for 2.8 release +Discussion +RBAC best practices changes +Do we create a service account for each service by default (in Tiller)? +A service account per service is a pretty good idea +There is a debate about whether or not we should have Tiller do this. +The resolution is that we go forward with adding service account creation in the charts themselves and not tiller +Feedback requested: Common labels (mattfarina) +Common labels allow for some really good possibilities for visualization +K8s tooling (/lgtm, /approve and owners file changes) (mattfarina) +Kubernetes is wanting everyone to use the test-infra tools. Do we want to use them? +There are some useful testing functions that the tools enable, like tests right before a merge +If we have issues with having these enforced, we need to let people know at https://github.com/kubernetes/test-infra +CRD stuff (Justin) +Moved to next week. This is about changing the validation piece so CRDs function properly +We are ok if someone wants to refactor the validation +Assignments +Issue Czar: Matt Fisher with Nik +Meeting Notes: Michelle +Meeting Lead: Taylor +January 4, 2018 +Announcements +Helm Summit CFP is officially closed +Standup +Taylor +Mostly working on clearing out notifications on github +Reviewed adam’s PR for kube 1.9 +Reviewing CFPs for the Helm Summit +Matt Butcher +2.8 release planning is priority +Matt Fisher +See Taylor’s standup +Slicknik +Wants to sync up with butcher to ramp up SUSE on Helm +Adam +See Taylor’s standup +Discussion +Paul (withnale) talked about https://github.com/kubernetes/helm/pull/3243 +Butcher and Taylor mention it would be good to get Justin Scott to take a look at this +Helm 2.8 +Nothing else blocking except for 1.9 support +We should continue to cut an RC like the last few releases +Assignments +Issue sherpa: Matt Butcher +Note Taker: Taylor +Meeting Lead: Adam Reese +``` diff --git a/community/meeting-notes/2019.md b/community/meeting-notes/2019.md new file mode 100644 index 0000000000..78cf4a7f4e --- /dev/null +++ b/community/meeting-notes/2019.md @@ -0,0 +1,2188 @@ +--- +title: Helm Minutes for 2019 +--- + + + +```txt +December 26, 2019 +Cancelled for the holidays +December 19, 2019 +Announcements +Helm 3.0.2 has been released: https://github.com/helm/helm/releases/tag/v3.0.2 +Helm dev calls resume 2nd week of January, the 9th +ChartMuseum v0.11.0 released, works w/ Helm 3 +Standup +Matt Butcher +Cut the 3.0.2 bug fix release +3.1.0 release set for end of January (tentatively) +Matt Fisher +Consultation on the issue queue +Josh Dolitsky +New release of chartmuseum based on Helm 2.16.1 which broke backwards compatibility, so working with community members on that +helm-push now has Helm 3 support +Taylor Thomas +Issue triaging +Proposal for post-render hooks: https://github.com/helm/helm/issues/7260 +Support for Kustomize +PR: https://github.com/helm/helm/pull/7259 +Discussion +Taylor’s post-render proposal +Specify a binary with --post-renderer= on install +The binary must take stdin and return kubernetes yaml on stdout +If you opt-into a post-render, you’re stuck with it for the release’s lifetime +Will remove checks on if a release used post-renderer for now, will add in later as feature if needed +Need review from other maintainers +What’s for dinner for _______? +? +Assignments: [Determined Jan 9 - Fisher Moderator, Josh D notes] + +December 12, 2019 +Announcements +Helm 3.0.1 has been released +Standup +Marc: Improvements to completion -- in Cobra itself. It will be a surprise! +Josh: Introducing Peter, who will be working with Josh. Chart Museum 0.10 is incompatible with Helm 3, so working on upgrading it. +Fisher: ONE BAZILLION ISSUES TRIAGED. Pass through old support questions that were stale +Taylor: Backlog on issues and PRs. Next week: Proposal for post-render hooks with Replicated. Example with Kustomize coming soon. +Farina: 3.0.1 released, then at Kubernetes Forum in Seoul doing a Helm presentation. +Butcher: Discovery client bug, PR triaging +Martin: Working through the PR queue, and triaging issues +Community: +Anukul: Issue #3276 (external files to chart deployments). Can we discuss here? https://github.com/helm/helm/issues/3276 +Sandip: Second time on the call, and interested in contributing as well. +Scott (chat): PS sorry I was late for standup everyone, one thing I think I should at least mention is that Reinhard & I have been working on Chart Repo automation actions: +Demo: https://github.com/helm/charts-repo-actions-demo (intended to not only demo and test the actions, but help chart maintainers how to easily become chart repo maintainers in a few easy steps) +@helm/kind-action +@helm/chart-testing-action +@helm/chart-releaser-action +Discussion +#3276: Proposed possible implementation. Pass in files from a commandline flag, then a template can access those particular files if they were passed in. +Fisher: Can we have the user opt-in to including files at install time so that the user is totally aware of what files are added +Anukul: Yeah, we can talk about this offline +“Lookup” function: https://github.com/helm/helm/pull/6752 [Taylor] +Ability to look up data from inside the cluster during template rendering +Need to vet security of this +Josh: How does this handle the (offline) ‘helm template’ case? +Taylor: We should follow up on that in the issue +“helm env and XDG_* vars” https://github.com/helm/helm/pull/6892 [Marc] +Marc: Was hoping Adam would be here. Will continue on the issue queue. +Next Cobra release will print the help text on stderr. Any foreseen issue? [Marc] +Change that causes all help text to go to stderr +Marc: Could bring it up in Cobra as a breaking change? +Fisher (chat): Should look into whether this is configurable in Cobra itself +Assignments +Notes: +Moderator: + +December 5, 2019 +Announcements +New Helm Client Maintainer +Chartmuseum 0.10 is out +Standup +Martin +Getting back into things after a long return from KubeCon +Triaging and reviewing the things +Josh +Released chartmuseum +Scrubbing issue queue for registry things +Farina +Triaging PRs for a 3.0.1 release +Marc +Working on autocompletion for plugins +Butcher +Giving team update. Many people are using their use it or lose it vacation time. Slow down in velocity +Finished last conference of the year +Not much done since KubeCon/CloudNativeCon +Karuppiah +Working on pull plugin for chartmuseum +Discussion +Chartutil unmarshiling to json.Number issue - https://github.com/helm/helm/pull/6888 [mattfarina] +Releasing 3.0.1 [mattfarina] +Matt Farina will get a release out +S390x releases? [mattfarina] +Martin is going to chase this down +We are tentative to own and support releases we cannot test or debug +https://github.com/helm/helm/pull/6988 +https://github.com/helm/helm/pull/7096 +Discovery client errors [technosophos] +Go modules/Oras lib update [jdolitsky] +People having issues using Helm 3 as a lib due to docker/distribution replace +Maybe this will fix: https://github.com/helm/helm/pull/6862 +Assignments +Notes: Butcher +Moderator: Martin + +November 14, 2019 +Announcements +No meeting for the next 2 weeks +Helm 3.0.0 has been released +https://helm.sh/blog/helm-3-released/ +Helm 2.16.1 has been released +https://github.com/helm/helm/releases/tag/v2.16.1 +KubeCon sessions for next week +Scott is doing a maintainer’s booth +Farina and Josh: Helm intro session +Taylor and Martin: Helm deep dive +CERN is giving a Helm talk +Michelle will be talking to analysts during the event +Michelle will be hosting a few panels: TOC and end user +Signup sheet: https://docs.google.com/document/d/1d-6xJEx0C78csIYSPKJzRPeWaHG_8W1Hjl72OJggwdc/edit#heading=h.y5ll0uc2osyi +Standup +Josh +Started using helm 3 and helmfile this week +Taylor +Polishing up kubecon talks, continuing to do so next week +Martin +Been dealing with a bunch of miscellaneous issues at work. Broken laptop, server issues, etc. +Updated migration plugin for Helm ga +Prepping for KubeCon +Matt Fisher +Managing the helm 3 release +Adam Reese +Taking a look at managed hook proposal +Matt Butcher +Working through a whole bunch of the documentation for Helm 3 +Attending kubecon next week +Matt Farina +Got the blog post and governance changes out for the community management role +Triaging hub.helm.sh requests +Scott +Working on a stable and incubator charts repo deprecation policy, aligning with the helm 2 deprecation policy +Michelle +Prepping for Kubecon +Discussion +Interest in a “helm import” tool for existing resources? (to help migrate from helm template | kubectl apply -f type workflows) (jacob) +Jacob to follow up with taylor on the `helm commandeer` plugin +Question about hooks for community charts v2 compatibility +Scott to follow up with adam +Ok time to update go modules? / Does anybody know how to update Go modules? +Farina: yes +Assignments (3 weeks from now) +Notes: Farina +Moderator: Fisher + +November 7, 2019 +Announcements +3.0.0-rc.3 has been released +_should_ be the last one +2.16.0 has been released +Due to breaking changes, it needed to be a major version +Standup +Fisher +working with Martin & Rimas - mini-consulting - found issues with some releases not being created/propagated over +Adam +PR reviews, and anything that comes up before the release +Butcher +gave talks at Open Source Summit on Helm & community with Karen +Helping Farina get ready for kubecon +Running through the docs with a new user’s eyes +Farina +Slides! Preparing for the conference +Helm hub - reviews for v3 +Reviews and other helping in prep for v3 release +Bridget +Out earlier this week at VelocityConf Berlin +ING is doing interesting stuff with Helm +Helping Lachie get ready for his QCon SF Helm talk +Martin +Focused on Helm 3 & bugs +Working on deep dive with Taylor for KubeCon +Commenting on Fisher’s blog post for Helm 3 +Michelle +She’s back! +Volunteering with a non-profit _using_ Helm - good perspective +Available to help with PRs +Jacob +Planning to look over current docs on Helm test/hooks +Planning to open a PR to fix referencing images by digest in the default starter chart +Scott Rigby +Worked on chart testing repo this week with Reinhard +Aligned branches with helm/helm’s current branching scheme +We are in the process of upgrading chart testing to Helm v3 +Taylor +Working with Martin on talk for KubeCon San Diego +Working on an advanced k8s talk for cloud native rejects +bugs/PRs! +Discussion +2.16.1 release [Taylor] - 2.16.1 milestone +Schema issue in the issue queue - fix merged in, undergoing testing - breaking some of the major charts like Prometheus. +Let’s cut release today [Taylor and Fisher will pair on issues and cut release] +Is a `helm status` bug a regression? Or did something else break in the k8s client libraries? +KubeCon/CloudNativeCon booth [Farina] +Sign up! We need people to pick time(s) to be there. +Helm 3 Presser update [Farina] +The CNCF is waiting on what we plan to announce +Butcher: Microsoft will have an Open at Microsoft blog post about it. [Bridget is writing it] +Question about Helm v3 compatibility with community helm/charts that I may have missed: are we still planning something like this: + > A “legacy” plugin will be released by the Helm project to support v1 charts with the crd-install hook +Farina: we will need to help the community repo and document the dual pattern. Let’s automate/simplify so we don’t make it too hard on the community. Scott is working on this. +Helm template not rendering notes in 3: https://github.com/helm/helm/issues/6901 +Martin: this has been answered +Assignments +Notes: Fisher +Moderator: Scott + +October 31, 2019 +Announcements +3.0.0-rc.1 has been released! rc.2 to follow +2.15.2 released. See https://helm.sh/blog/2019-10-30-helm-symlink-security-notice/ +2.16.0-rc.2 has been released +Standup +Taylor +Working on PRs, working on issues, etc. Keeping an eye on the queue +Josh (in costume) +Been spending time on the OCI mailing list to make sure our strategy is good for charts in OCI repos +Martin +Doing bits of this and that (spending time in issues and PR reviews) +Bridget +In Belgium with lots of delicious chocolate +Doing a helm talk at a k8s meetup +Matt Farina +Cutting releases and doing odds and ends to help get releases and prereleases out +Adam +Tying up loose ends on v3 including dependency updates +Scott +Been out sick. PR reviews and online help since back +Matt Fisher +Working on ins and outs of getting releases out and fixing things up +Working with 2-to-3 migration process +Triaging bugs +Discussion +Do we think we have a good handle on the queue to warrant pushing out a 3.0.0-rc.2 by EOD tomorrow, or should we push out to Monday? [fisher] +Adam suggest we use a time box when cutting RCs. +Not doing this for the 3.0.0 +Assignments +Notes +Bridget +Moderator +Taylor + +October 24, 2019 +Announcements: +Helm 3 beta.5 released 🎺 +Helm 2.15.0 released 🎺 +Helm 2.15.1 released 🎺 +GitHub branches changes: 🎺 +2.x: `master` → `dev-v2` +3.x: `dev-v3` → `master` +Helm 2.x now in maintenance mode - bug fixes only accepted +Helm Security Audit current status [fisher] +We should see the full report within the next week +Standup: +Matt Farina +Working on PR reviews, triage +Upgraded the kubernetes cluster for Helm Hub +Fixed a few issues related to CronJobs in the cluster +Taylor +Reviewing PRs and shepherding things through to cut Helm releases +Working on documentation for Helm 3 +Matt Fisher +Working on triaging issues for the Helm release milestones (2.15, beta.5) +Matt Butcher +Away at OSS Lyon, France this week +Martin +Bug triage +PR reviews +Looking to follow up with the other core maintainers to help out with the RC +Jacob +Working with a coworker on a particular PR in regards to `helm template` in Helm 3 +Discussion: +Helm 3 GA: [martin] +Notification to CNCF +RC1 release date +GA release date +Farina: when we go out with 3.0, this is a BIG thing so we want to maximize press coverage. We need to notify the CNCF to give them lead time for blog posts, press time, etc. +We have to coordinate with partners +Fisher: On the site design, Ronan is free right now but may be pulled in other directions as KubeCon NA comes closer +????? +Change related to OCI mediatypes: [josh] +https://github.com/helm/helm/pull/6779 +Assignments: +Notes: Farina +Moderator: Fisher + + +October 17, 2019 +Announcements +Standup +Taylor +PR Reviews +Working on some PRs like around a “funky” situation with time: feat(*): Adds custom time package for better marshalling. Working on a lint PR +Martin +Worked on a few PRs and PR reviews +Did some triaging +Matt Farina +Worked with folks on the Helm security audit which is ongoing +Triagied issues with the Helm Hub +Matt Fisher +Worked on v3 including the 3 way merge +Going to continue on with v3 beta 5 work +Discussion: +Will Helm v2 CRDs work in Helm v3? [martin] +No. The CRD install is different in each. This needs to be documented +We were/are planning to have a legacy plugin that will bring about compatibility but work has not happened on that, yet +How should `repo update` resolve v3 repository file: [martin] +https://github.com/helm/helm/issues/6644 +Release updates +Release.Time and Release.Revision discussion +Jacob asked to have it back because he uses it with backups and to pull the right backup +Assignments +Notes: Matt Fisher +Moderator: Martin + +October 10, 2019 +Announcements +If you are a project maintainer, you now have triage access everywhere in the Helm org +Helm 3 security audit starts today +This is needed for graduation +V3 beta.4 contains an important security fix +Standup +Taylor +Working on porting features over from Helm 2 to Helm 3 +This next week spending more on ports and outstanding work for beta.5 +Adam +Merged PRs on open API validations +Making sure there aren’t any other loose ends for v3 +Matt Fisher +Working on paring down the PR queue, closing old PRs and triaging ones needed in 2.15. One more outstanding PR for 2.15 +Working on finishing up 2.15 and beta.5 this next week +Matt Farina +Worked on getting the security audit work rolling +Working through go modules issues and cleanup +Working on Helm Hub stuff as well +There are some scaling and storage issues +Jacob +Saving time for discussion +Martin +Working on v3 ports +PR reviews! +Updating the migration plugin against beta.4, including updating go modules +Discussion +What versions of Kubernetes is Helm supporting? [mattfarina] +Note, Google Cloud, Azure, and AWS ship n-2 as their latest stable +Example: https://github.com/helm/helm/pull/6590 +If we stick with n-1 we’d be excluding all public cloud providers +All maintainers present in the call are ok with n-2. Farina is going to send out an email to Helm Maintainers for a vote +How should Helm v3 cache work? [martin] +In v3, repository file (repositories.yaml) seems to be empty for cache property for repo entries +The repositories.yaml file is missing the cache property. +This is different per system due to the XDG spec, which allows you to change which directory to look in. Caching should still work +Adam is going to look it up to validate +When migrate from v2 to v3, repository cache is not updated in repo file following `helm repo update` https://github.com/helm/helm/pull/6488#issuecomment-539468075 +Helm test and hooks roadmap for v3 release [jacob] +See presentation for full proposal +There is an open PR to remove the cleanup command +Hooks will be recreated (idempotent) by default and other resources will be updated as needed +Helm 2.x and 3.x [martin] +When going to release Beta 5? +Beta.5 is following the same roadmap as beta.4 (which was released due to a needed security patch) +We are waiting for beta.5 until 2.15 is released +Do we lock down merges until we have new branches available? +Branch names post 2.15 release? For example, master → 2.x, dev-v3 → master & dev-v3 → 3.0 (3.0 GA) +Dates: +2.15 RC today or tomorrow +2.15 by next wednesday +Switch branches right after 2.15 (shoot for thursday) +Beta.5 will be released before branch cut over (shoot for thursday) +We’ll cut the v3 RC as soon as we are ready after that so we have a longer RC time for people to try it in prod +Assignments +Notes: Matt Fisher +Moderator: Adam +October 3, 2019 +Announcements +A vote went through in the org maintainers list: anyone who is a project maintainer in the Helm organization will now be granted the Triage role across all Helm projects. This is to help with triaging efforts across projects +Standup +Adam Reese +Working on a few Helm 3 PRs around flag parsing and environment variable processing +Matt Fisher +Pairing with Bridget on Helm 2 PR queue - figuring out what is in there, what could go into 2.15, resolving old issues. +Not too much to report on Helm 3 this week +Martin Hickey +PR review/triaging +Starting to pour over som older PRs and see where they are in terms of merging status. One of them is the release checklist +Helping out with the Helm 2 -> Helm 3 PR port process +Taylor Thomas +Working on a major refactor in Helm 3 that standardizes how Helm displays information. We had 2 printers; now we have 1 +Reviewing PRs as they come in +Matt Butcher +Working on migrating some internal charts from Helm 2 -> Helm 3 for testing purposes +Working on updating the Helm 3 documentation around XDG +Bridget Kromhout +Pairing with Fisher on a bunch of Helm 2 PRs +~20% of the old PRs were cleared up in the past few days +Added a few PRs to the discussion list for further questions +Matt Farina +Working on migrating helm/helm over to Go Modules, which has been fun +Should have a workable PR with an up-to-date modules in the next few days +Discussion +Issue Triage/Discussion +helm template refactor and remove dependency on install. Ideas on how to go about it. +Action item: open up a WIP PR so we can give some actionable feedback +Moving initActionConfig to pkg: https://github.com/helm/helm/pull/6341 from aaronmell (Note: We set up the expectation this would get in, and the submitter is asking.) +Adam: I can give an update on this one +Fix chartutil.Save returning empty path when passing a non-existent directory (Resolves #6344): https://github.com/helm/helm/pull/6360 from wxdao (Note: We told the submitter this bugfix would get considered; actively working on it today.) +Overall, I think we need to step in and respond, telling them that we need to +feat(cmd/helm): use alternative ports on `helm init`: https://github.com/helm/helm/pull/5847 from mnkyl (Note: This is Tiller-related but seems ready for review. So we either merge or reject now, it seems.) +Fisher will look at this. +fix repo url being decoded: https://github.com/helm/helm/pull/6060 from karuppiah7890 (Note: Looks like the submitter is hoping for a review and actively working on it.) +Matt Farina: I’ve already commented and they’re asking for me. I’ll look at it. +add AppVersion column to the history command: https://github.com/helm/helm/pull/5069 from adshmh (Note: Is there a reason this is not merged, other than the docs conflict that crept in over time? Looks like it needs a second maintainer to look at it?) +Matt Farina: I’ll take a look at this one +Taylor: I can port to v3 when done +Release Metadata https://github.com/helm/helm/issues/6464 [Taylor] +Action item: Fisher will follow up in the issue with the discussion that occurred in the meeting (link to youtube) +Possible 2.15 Release Date [Fisher/Taylor/Bridget] +Suggestion: +mid-october cut 2.15 branch (Oct 16?), +switch the dev-v3 over to master +cut beta 4 first +consider a Helm 3 release candidate for Halloween (or right before KubeCon mid-Nov) +Can we also discuss 3.x release date [Martin] +We need to cut beta 4 first +Create a 3.1 milestone +Assignments +Notes: Taylor +Moderator: Martin + +September 26, 2019 +Announcements +Beta 4 date? - coming out fairly soon (discuss at standup) +Standup +Taylor Thomas: +porting features from v2 to v3 - small refactors - adding back in missing validations +Tying up 2.15 milestone & releasing that - which should be the last feature release of Helm2 +Josh Dolitsky +Diving down OCI harbo(u?)r rabbit hole +Bridget Kromhout +Working on communications around Helm 3 ticket items +Matt Farina +Helm hub install/search issues (redirect needed; in progress) +Hoping to start go modules on Helm +Matt Fisher +Triaging, porting features +Working towards next beta milestone +Adam Reese +OpenAPI validation - adding back, finding small bugs +Matt Butcher +InfoQ will publish an article about Helm Summit tomorrow (after interviewing Butcher) +Martin Hickey +Working on migration feature and docs (yay) +Reviews for ports +Looking at k8s 1.16 breaking changes +Jacob +Has a PR open for moving test run subcommands: https://github.com/helm/helm/pull/6363 +Triage -[moving to discussion this time] +Discussion +v2.15 [Taylor] +Current plan is this will be the last feature release (we could then close all v2 _feature_ PRs - bugs will still get worked, just not “exciting new thing”. +Helm channels: Slack, mailing list, etc - letting people know +We will probably have to stay on current client go libraries until k8s 1.17 comes out. +v3 label, project board, etc (Bridget) +What does “ bacongobbler added the v3 label 3 days ago” imply? The Helm 3 project board has a small subset of what’s tagged v3. The v3 label on PRs does not seem to imply it will be merged _before_ v3. +Farina: “V3” as a label doesn’t imply any commitment +Fisher: Github has a feature that allows one to add description for labels - let’s add more info to the v3 label. And let’s update the contributing docs. +Farina + Adam: let’s flag everything v2 or v3 + timeboxed segment where we look at outstanding issues/PRs +https://github.com/helm/helm/pull/6504 - technically a breaking change - but we said beta could have those! So it should be okay? +Farina will add some labels for v2/v3 + +Marckhouzam: auto-completion for the v2/v3 migration https://github.com/helm/helm/issues/6474 +What is the priority? Adam appreciates and will review. +But should v2 patches get added so autocomplete works properly on both sides? +Josh D: if autocomplete is not working it’s a bug +Matt Farina: Happy to review these. +Marc & Martin discussing autocomplete speed (10ms vs 60ms) +Assignments +Notes: Fisher +Moderator: Farina + + +September 19, 2019 +Announcements +Helm summit +Helm 2to3 plugin moved to Helm Org: https://github.com/helm/helm-2to3 +Standup +Adnan +Not much to report +Matt Butcher +Was at Helm Summit last week +Starting light planning for next Helm summit +Matt Farina +Semver v3 out and sprig v3 in works. Both using go modules +Working on monocular redirects to work with helm install for helm hub and removing chartsvc from search url +Taylor +Looking into bugs and features for Helm v3 +Was at the summit last week +Jacob +Using helm v3 for past 3 weeks! +Working on test subcommand +Martin +Helm summit last week +Cleanup capability in 2to3 plugin +Going to get back to migration docs +Triaging in the queue +Discussion +What about adding kubectl as dependency for zsh completions. See https://github.com/helm/helm/pull/6408 [mattfarina] +Will check with Adam who has worked on this +Validate that the absence of kubectl does not cause any issues so this is only additive +Edge case issue https://github.com/helm/helm/issues/6435 [martin]: +If Helm 2 and Helm 3 manage the same cluster concurrently +And Helm 2 release data is stored as secrets in the cluster +And Helm 2 has release(s) stored in namespace of the release +Helm 3 stores release as secret in the namespace of release +Helm 3 will not list any such v2 releases as different labels used +With Helm 3 you can try to install with name already used in v2 and it errors out +Issues also occurs for migrating data meaning that release cannot be migrated +Should Helm 3 to use a different naming convention for release versions? +Are we still integrating new functionality into v2 like https://github.com/helm/helm/pull/5704? [martin] +Looking to 2.15 as last feature release for v2 +Taylor to email maintainers on this and moving dev-v3 to master and documenting the stance on v2 features and v3 dev [Bridget can help write this up] +Deprecating the --recreate-pods flag https://github.com/helm/helm/issues/1702 [Taylor] +Taylor would document the replacement +No push back +Triage role and the Helm org… https://help.github.com/en/articles/repository-permission-levels-for-an-organization#repository-access-for-each-permission-level [mattfarina] +Assignments +Notes: Bridget +Moderator: Taylor + +September 12, 2019 +No meeting due to the Helm summit in Amsterdam + +September 5, 2019 +Announcements +Make sure to register for Helm Summit! - https://events.linuxfoundation.org/events/helm-summit-2019/ +Butcher: there is a 20% discount code “HELM19G20” +Next week in Amsterdam, The Netherlands +Community and core maintainers +Standup +Taylor: +Preparing for Helm summit +PR reviews +Paired with Butcher on some CRD stuff +Matt Fisher: +Back from honeymoon! Congrats! +Preparing for Helm summit +PR reviews +Adam: +PR reviews +Doing fixes +Martin: +Migration work +PR reviews +Starting to pull up some v2 work around scaffold charts +Matt Farina: +Bug triage +PR reviews +Helm hub work +Jacob: +Helm test proposal +Looking to refactor Helm test +Josh: +Preparing for Helm summit +Matt Butcher: +Working on CRDs with Taylor +Preparing for Helm summit +Discussion +Will we have a meeting during the summit? +Next week dev meeting is cancelled due to Helm summit +Beta 3 release [Taylor]: +Cut a release before going to summit to pickup work +Beta 4 and RC release timelines [Taylor]: +Pull up any v2 work and get it stable for Beta 4 before rc1 +Work to make it stable for GA +Should “helm-2to3” plugin be added to Helm org [Martin]: https://github.com/hickeyma/helm-2to3/issues/14: +Yes, pull it +Martin to send mail to Helm Org Maintainers to vote to get it added +If/When added to Helm org, Helm core maintainer become owners +Test subcommand beta status? [Jacob] +Remove `run` from `helm test run` (Jacob before beta.4) +Remove the cleanup flag (Jacob before beta.4) +Make it useable by Helm 3 +Any breaking changes are feature gated +https://github.com/helm/helm/issues/5654 +`helm template` Breaking change? +Need `validate` flag now to use +Matt Butcher/Jacob to look at it +Jacob to file a new issue +One-minute summary of the CNCF review [butcher]: +Matt Butcher and Farina delivered to CNCF +Very successful meeting and CNCF very happy with progress +Security audit in October +Looking to move from incubator project to Fully fledged project by EOY +Assignments [for September 19th] +Notes: Matt Farina +Moderator: Josh + +August 29, 2019 +- Moderator: Adam +- Notes: Vibhav + +Announcements + - Helm v3.0.0-beta.{1,2} released: Thanks Taylor & Adam. +- Standup + - Butcher + - Open Source Summit talk with Karen Chu about lessons from open source (focused on the Helm project) + - Josh: + - Working on ORAS + - Martin + - PR reviews + - Bug triaging +- Getting ready for helm summit + - Matt Farina + - Getting ready for helm summit, +- if you hit 501 jobs in the cluster in helm hub cron jobs stop working. Fix: reduce the number of jobs + - Bridget + - Talks in Open source summit + - Getting ready for helm summit +- Discussion +- [Josh] https://github.com/helm/acceptance-testing +- Define goals +- [Martin] Discuss goals for Helm 2 to Helm 3 Migration: + - Feature: https://github.com/helm/helm/issues/5892 + - Doc: https://github.com/helm/helm/pull/5582 + - Helm v2 releases in-place to Helm v3: + - Proposal: https://github.com/helm/helm/issues/6154 +- Plugin: https://github.com/hickeyma/helm-2to3 + +- Assignments: +- [Bridget] - figure out what’s more common - “dry run” or “template” - in the wider ecosystem (https://github.com/helm/helm/issues/6290) + +- Notes: +- Moderator: + + +August 22, 2019 +moderator: matt farina +notes: scott +Announcements +Make sure to register for Helm Summit! - https://events.linuxfoundation.org/events/helm-summit-2019/ +There is a 20% discount code “HELM19G20” +Standup +Josh +Registry should be good for beta +Adam +Working on removing helm init. Changing how config is passed around +Trying to get all unit tests to pass +Scott +Chart PRs & slack help +Helped with Azure image updating for Helm Hub +Issue on Helmfile and Helm org: https://github.com/roboll/helmfile/issues/758 +Matt Farina +updated helm hub +cert-manager (older version made excessive api calls, will be deprecated soon) +upgraded helm version to v2.14.3, and docker image for that +Helm issue triaging +Jacob +helm test for v3 +can create configmaps and secrets at the same time +documenting +follow-up work to document cleanup policy. Working on proposal for that + + +Discussion +Captain CRD+Controller for Helm 3 [Some folks from Alauda] +https://github.com/alauda/captain + + +https://github.com/helm/acceptance-testing +Move to next week +Wants to define project goals +Assignments +Notes: Vibhav +Moderator: Adam +August 15, 2019 +Announcements +Make sure to register for Helm Summit! - https://events.linuxfoundation.org/events/helm-summit-2019/ +Butcher: there is a 20% discount code “HELM19G20” +Josh now a Helm Core maintainer - congrats! +Standup +Butcher: Fisher did a major issue-queue pruning +Triage, clearnining, getting ready for Helm 3 beta 1 milestone +Farina and Butcher worked on security audit +uncovered problem with CRDs + + +Taylor: Bugs and beta 1 release notes +Go 1.12.8 was breaking… everything (so, rebase your open PRs against v3 - and check all your go projects) +Finishing open PRs and cutting beta very soon +Farina: getting search stuff completed - `helm search` in v3 shows what you can search (registries, hub, monocular instances if you pass the URL) +Bridget: getting ready for Open Source Summit talk about Helm 3 +Adam: code reviews, pairing, helm init feature (lazy-creating config files and system directories as needed) +Vibhav Bobde: question re: storage classes - is it a good idea to wait on provisioners in storage classes? (sent a PR recently) +Nick Huanca - asking about adding a flag to show all values or supplied values in template debug +Wrote “reckoner” - would like compatibility +Adam: let’s make sure we have machine-parsable output +Discussion +CRDs in Helm 3 [Taylor and Adam] +Taylor: “Everybody’s favorite topic in k8s-land - CRDs!” +As we factor out how manifests are rendered, there isn’t a clear path/common use/install/manage pattern for CRDs +Farina: CRDs allow you to extend the k8s API, so they’re good for cluster extensions, but they need more access than you usually want to give to app developers. Lack of definition in the space about how this should work - but we’re using CRDs far beyond their original intents, and in many enterprise environments, installing an operator is a cross-team administrative task. Also, across namespaces may not work as expected (is the CRD available?) +Farina: Helm v3 likely can’t “solve” things that are still beta in k8s itself. +Adam: Helm can’t validate API objects in the cluster, due to order-of-operations - before we can parse a CRD object we have to render the manifests, and then you can create API resources that weren’t available when you did the rendering - we can’t render before we install. Possible solution: break out CRDs into a defined space in the chart? And then CRD management happens first, so the rest of the rendering then works correctly? +Butcher: “There’s also that peculiar pattern where the controller installs its CRD. Then we can’t load CRD instances until the controller is running” +Taylor: Making assumptions in Helm 2 that turned out to be invalid means we’re looking to the community to ensure we go the direction they want (instead of trying to impose a standard). +Adam: projects wanting clean install steps are interested in answers on CRDs, but application operations is where the problems show up. +Farina: a human way to make the experience of interacting with this better - better error messages, better docs +Bridget: good point - if people have to choose between “hello world is easy” and “production is safe” the answer is clear, but it would be nice to have both. +Farina: let’s help people understand how to use Helm in production +Vibhav: we don’t want people to use CRDs by mistake or without understanding them. +Assignments +Notes: ?? [a number of people are at Open Source Summit] +Moderator: Matt Farina + + +August 8, 2019 +Announcements +Make sure to register for Helm Summit! - https://events.linuxfoundation.org/events/helm-summit-2019/ +Standup +Butcher +Working with Farina on the security audit for the Helm 3 codebase +Security audit is slated for the beginning of October +Helm administrivia +Fisher +Looking at what is needed for the beta.1 milestone +Taylor +Working on the same things as Fisher +Fixing bugs in Helm 3/Helm 2 +Working on items to get the beta out the door +Adam +Focused on code reviews this week +Next week working on removing “helm init” +Josh +Working with Farina and Fisher on OCI work and how it is going to land in beta +Farina +Updating our security list +PR reviews! +Discussion +Bringing v2 features merged after v3 branch to v3. https://github.com/helm/helm/issues?utf8=%E2%9C%93&q=label%3A%22Needs+v3+fix%22 +Doc changes +Most code ones are taken care of +Do we remove or add the label when complete? +Adam: We should have a second label to indicate it is done +Taylor will be adding “v3 port complete” label and going through the list of tagged changes +Helm security audit update [Matt Farina / Matt Butcher] +Which code areas should we be checking? +Tlsutil +Chart provenance +New registry code +Templating (no break-outs) +Security issues will be reported in real time to the security mailing list +For clarity: This audit is part of the requirements for CNCF graduation +Intro to Helm talk at KubeCon SD [Taylor] +Farina is going to join Josh for giving the Intro talk +Taylor will start a thread with Nanci at the CNCF to get the talk transferred to them +Registry updates +Experimental flag for inclusion +We are all ok with including the OCI work with a feature flag, which means we need to add in feature flag functionality to Helm +Status of remaining tasks +Export errors bug: DONE +Issue: https://github.com/helm/helm/issues/5757 +Layers finalization: almost done +Issue: https://github.com/helm/helm/issues/6141 +oci-layout: almost done +Issue: https://github.com/helm/helm/issues/6068 +Helm Hub search [mattfarina] +The goal would be to have the default search tie into the helm hub search +Fisher: This would be a good UX for users +Assignments +Notes: Bridget +Moderator: Adam +August 1, 2019 +Announcements +Helm 2.14.3 is out [Matt Fisher] +Standup +Matt Fisher +Working with Taylor on some helm v3 issues. The design for 3-way merge patch (PR available). Still needs docs. + + +Adnan +Not much to report +Discussion on stable and helm v3 https://lists.cncf.io/g/cncf-helm/topic/psa_helm_v3_and_the_stable/32656951?p=,,,20,0,0,0::recentpostdate%2Fsticky,,,20,2,0,32656951 +Josh +Working on chartmuseum +Getting OCI related tasks for beta +Martin +Working on charts v2 api. First PR is up +Enabled checking for the test styling +Working on migrations +Scott +A github app for chart releases +Taylor +Working on 2.14.3 (a CRD change). The helm v3 version of the change still needs to land +Kubeclient change +Working on 3 way merge changes +Matt Farina +Removing the stable repository from Helm 3 has been merged +Background context: +the stable repository has been hosted by Google’s account, making it difficult to migrate +The chart repository has become unsustainable for the charts maintainers (ERR_FIREHOSE) +Working on a process for making the gpg keys public in a KEYS file +Jacob LeGrone +Working on proposed changes to testing for helm v3 +Discussion +Helm v2 support window once v3 is out [mattfarina] +Bridget noted the shopping and tax season issues +Suggestion is 6 months of bug fixes, following 6 months of security releases +After one year, following v3, no longer supported. Download location in Google may (will?) go away. We should have a backup for people but it may require changes in their use +TODO(mattfarina): Create a support proposal and put out for review +TODO(mattfarina): Email helm mailing list on this +Final pre-3.0-beta OCI tasks! +OCI layout: helm/helm#6068 +Layers/meta decision: helm/helm#6141 +This impacts signing charts which still needs to be worked out for OCI storage +ArgoCD demo/consultation [Alex Collins] +Helm v3 3 way merge [Taylor] +Assignments +Notes: Taylor Thomas +Moderator: Matt Farina + +July 25, 2019 +Announcements +Helm 3.0.0-alpha.2 was released earlier this week (Matt Fisher) +Standup +Scott +charts PRs +Martin +Looking at release information between Helm 2 and Helm 3 +Putting together a proposal for migration +Taylor +Refactoring the internal kube client libraries in Helm 3 +Adding back --cleanup-on-fail +Also following up on the issue where resources sometimes don’t update. More information has been shared by the community +Matt Farina +Helm Hub work for the last week +Michelle +Working through the helm test proposal Jacob worked on last week +Josh +Opened a new acceptance test suite repository: https://github.com/helm/acceptance-testing +Working with Fisher on a list of work items to complete for the beta +Matt Fisher +Released alpha.2 +Working on doing some release planning for beta.1 +Discussion +Ian https://github.com/helm/helm/pull/6066 +Action item: Matt Fisher will take a closer look at this one this week (or early next week) +A KEYS file for signed releases… https://github.com/helm/helm/issues/6015 [farina] +Yes, this sounds like a good thing to do +In the future we may move to notary, but we still need to implement this for Helm 2 +Work remaining for Helm 3 and how best to share the load? [martin] +Linking “Helm Hub China”, request to review [harry]: https://github.com/helm/charts/pull/15004, https://github.com/helm/monocular/pull/640 (Q: where will be the best place so ppl in China could see the mirror hub?) +A: maybe both, we could follow up on the PR to see how to link +We are also translating (localized) Helm v3 Doc in Chinese +The helm official docs want to move to have translations +https://github.com/helm/helm/issues/5994 (helm controller and CRD) [Hang Yan] +Scott to follow up with Hang to set up a meeting, or as a demo for next week’s dev call +Assignments +Notes: +Moderator: Matt Fisher +July 18, 2019 +Announcements +Helm Summit Update (fisher) +Schedule is available https://helmsummit2019.sched.com/ +Speakers have been notified +Next steps: review diversity scholarships, sponsorships +2.14.2 released +Standup +Matt Fisher: +Helm Summit planning +Release planning for 3.0-beta +Scott: +Reviewing chart tooling, also PR reviews/merges for helm/charts +Matt Butcher: +Meetings for CNCF Graduation +Bridget joined team to work on docs +Helmfile looking to join the Helm Org +Working on getting our KubeCon SD sessions setup +Matt Farina: +PR reviews +Adam: +This week: reviewing a few PRs +Talking to taylor about some apply design stuff +Pulling out some features from his XDG PR (like the --namespace fix) +Michelle: +Helm Test: reviewing proposal from Jacob +Taylor: +Atomic flag feature +Working with Adam and it was amazing +Martin: +v2 to v3 migration proposal +Cut 2.14.2 release +General PR, issue work +Discussion +Making Helm easier to use as a Go library and the work required (Taylor) +Helm testing proposal https://github.com/helm/helm/issues/6020 (Jacob) +Merging PRs procedure: PR has one LGTM (small, medium), two LGTMs (large+) OR 2 LGTMs? (Martin) +Assignments +Notes: Matt Fisher +Moderator: Scott + +July 11, 2019 +Announcements +2.14.2 is coming (today? lol) +Helm Summit CFP notifications will go out Monday +Helm Summit schedule final touches happening, coming out soon +We will be bumping the chart API version to v2, because new charts made for helm v3 won't work with the v1 charts API +Standup +Taylor: +almost done moving atomic flag to help 3 +will work on 3 way diff merge +helped a bit on 2.14.2 +Scott: +Nothing to report for this week +Martin: +issue triage/pr review/ workspace answers +migration stuff on backburner, will try to get back to it +need some issue triage help +Matt farina: +not much this week except merging stuff into helm hub and some triage help +Josh (via Taylor): +working on kind acceptance test suite +Adam: +working on helm init (can remove command) +catching up on code reviews +Bridget: +Offer to help w kubecon NA CFPs, due Friday +Matt Fisher (via Martin): +working on helm summit schedule planning +Via slack "RE: bumping apiVersion to v2, yes, I agree that's something we should do for Helm 3, especially if the default output of `helm create` won't work for Helm 2." +Discussion +Helm v3 charts, is it time to increment the chart apiVersion to v2? +https://github.com/helm/helm/issues/5907 +Example changes: +requirements.lock now Chart.lock +Requirements now in Chart.yaml +Michelle has proposed a chart test breaking change +Release object in templates has changed (Time dropped but sprig function coming to templates to return exact same feature in use) +Someone is working on a Helm v3 controller - https://github.com/helm/helm/issues/5994 +https://github.com/fluxcd, too +Are the changes to the test architecture documented somewhere (proposal? v3*.md?). +Any updates on planning for Lua engine stuff? (curious about chart template post-render options. No rush 😅) +Answer: other Helm v3 features are prioritized to get out for initial helm release, breaking changes etc, and most importantly Tillerless. Lua can be an upcoming MINOR version, and work can start at some point after the initial v3 release. +Assignments +Notes: Adam +Moderator: Martin + +June 27, 2019 +Announcements +None for today +Standup +Nikhil: +Not much last week +Follow up on PR reviews / Issues this week +Josh: +Helm.sh follow up +Not too much else +Taylor +Ready to jump to Helm 3 things +Plan to cut 2.14.2 on Monday with Martin’s help +If there are some bug fixes that need to make it to this release please let Taylor / Martin know! +Scott +Coalesce values fix added to 2.14.2 +Martin +Digging in to a lot of PR reviews and issue triage +Fixed an issue with templating on the v3 branch. This was causing unit tests to fail +Also made some progress on the migration work +Jacob +Michelle has an updated helm testing proposal. Would be good to get feedback from a wider audience around this. +Michelle +Working on helm test -- this week was helm test cleanup +Going to get on a zoom with Jacob to go into detail on helm test. Will drop a link in the #helm-dev channel +Would love some more feedback on the helm test PR +Discussion +Need a label or a way to assign community members to issues (michelle) +Was talking to someone in the community about an issue, and she wanted to take over the issue, but there was no way to assign it to them. +Need to look into what administrative controls GitHub has for this? +Will look into what k8s does here and should have an update soon +Community member asking when alpha.2 is scheduled for (martin) +(Find alpha.2 issue to add here) +We’re working on this as hard as possible. We’ve deferred features to post 3.0 (e.g. LUA) so that we can get the critical pieces out. E.g. atomic flag, 3-way diff, etc. Might be a couple of months. We are trying to get a release out the door for this. +Helm Testing Proposal: +[Martin] Brought up backwards compatibility; what happens in cases of test success/failure (ideally failure keeps resources around, success cleans up -- or this can be based on a flag). +[Michelle] Conditionals become hairy and hard to understand -- so maybe having a seperate cleanup command is good here? Maybe this needs more discussion -- let’s open an issue up on this. How much of this is based on the cleanup flag? What if we have a seperate cleanup action (e.g. && cleanup) that we can do explicitly. +[Jacob] Re test cleanup: https://github.com/helm/community/pull/90#discussion_r297374923 +The second test proposal is based on a lot of feedback and conversations. The first one should be closed shortly. +Lots of people are using this very often, and is very popular -- so thanks for driving this Michelle! +[Michelle] Current implementation just has to have the right annotation, doesn’t need to have the tests in the templates test directory -- this has an implication on backwards compatibility. +Assignments +Moderator: Taylor +Notes: Josh + +June 20, 2019 +Announcements +Helm Summit update +Standup +Taylor +Have been working on troubleshooting an issue where certain objects aren’t being updated on an upgrade (for Helm 2) +Some of the folks over at Mattermost have a reproducible case, so working with them +Josh +This week, been giving talks/evangelising Helm in the midwest +Hoping to connect with Matt Fisher on the registry work going on in Helm 3 +Martin +Concentrating on the migration work from Helm 2 to Helm 3 +Looking on the release metadata differences between Helm 2 and Helm 3 +PR reviews +Matt Fisher +Diving into the downloader package for Helm 3 +Lots of cruft in there, so cleaning up the code +Working on Helm summit +Matt Farina +Releasing a new version of sprig +Working on the capabilities object for Helm 3 +Reviewing PRs +Discussion +Helm 3 OCI: enforcement of tags (joshua) +OCI does not have a ruleset on the tag pushed +The current context in Helm is to not push non-semver tags +Do we want to allow semver-incompatible tags? +(fisher and farina) if we do support those, then it makes the dependency resolution problem much harder +If there’s enough demand, perhaps we should come up with a proposal to the UX so we can capture that use case +New docs: https://v3.helm.sh/docs/developing_charts/#registries +PR reviews (matt and adam) +Current status: Helm 2 requires 2 LGTMs on PRs size/L or higher. Helm 3 requires 2 LGTMs on *all* PRs +How do we get more people to jump in on PR reviews? +What can we do to incentivize folks to review PRs? +Taylor: perhaps it’s not the PR review itself, but the lack of coverage on tests that are causing blocks on PR reviews? Could we implement some form of acceptance test suite? +Action item: farina to bring it back to the mailing list? +Should we cut 2.14.2 when this PR lands? https://github.com/helm/helm/pull/5532 (Taylor) +Kubernetes 1.15 was just released yesterday. Should we wait on merging support for that before cutting a new release? +There may not be enough release maintainers around to cut a 2.15 any time soon +Action item: taylor to follow up with Martin on a 2.14.2 release +Josh: I’m planning on cutting a new release of ChartMuseum soon. It’d be great to put that onto https://get.helm.sh. How can we accomplish that? +Fisher: actually I’ve been wanting to write some documentation on the architecture, how to upload assets there, etc. Getting ChartMuseum onboard would be a great “pilot program” so we can start getting that documentation for onboarding other projects +Action item: Josh to follow up with Fisher +Assignments +Moderator: Martin +Notes: Matt Fisher + +June 13, 2019 +Announcements +Helm Summit +Co-chair committee met up this week. Program Committee is currently reviewing proposals. After that, chairs will assemble the schedule. +Standup +Matt Fisher +Taking a look at one of the helm 3 refactors: the OCI registry integration +Taking a closer look at the getter package for fetching helm charts and refactoring +Going through helm 3 PRs +Matt Butcher +Keeping tabs on a few things in the helm issue queue +Adam +Working on the XDG base directory specification + removal of `helm init` +Michelle Noorali +Working on `helm test`, currently refactoring +Martin Hickey +Updated the release checklist from 2.14.0 +Testing around the v2 to v3 migration, working on a migration doc +Some issues around release metadata +Taylor +Reviewing CFPs on the Helm Summit +Looking at the coalescing tables refactor in Helm 2 +Ramping up on Helm 3 +Josh +Giving Helm talks next week with Bridget +Scott +Same as taylor this week +Matt Farina +Working on detecting objects in the capabilities object +Working on Helm Hub for Helm 3 +Discussion +Proposal to drop the title “issue sherpa” (fisher) +Is this a shared responsibility? +Michelle: we should still have someone on-call to ensure someone is taking a look at security-related issues +Farina: we do have a process in place about who is responsible for security issues (in helm/community, SECURITY.md) +Action item: fisher to bring it to the core maintainers mailing list +v2 release object from state not loading in v3 (martin) +This is in relation to the release object stored in the namespace, not the rendering engine itself +Part of it is because we were encoding the gRPC protobuf. Once that was removed, we are now only encoding the JSON object. For example, enums +If we’re planning on migrating Helm release objects from Helm 2 to Helm 3, we should work on a migration plugin that reads old release objects and spits out Helm 3 release objects. +Action item: it’s suggested to write a proposal on how the complexities between the differences between Helm 2 and Helm 3’s object metadata and a planned proposal for moving forward (martin) +CRDs - https://github.com/helm/helm/issues/5871 (farina) +Idea from adnan. Farina threw something up to the mailing list for a call-to-action from community feedback +If you have comments/feedback, please chime in on that PR +Unsetting values keys for Helm 3: https://github.com/helm/helm/issues/5834 +How do we want to address this? Deprecation or remove it? +Farina: how would you unset it in a values.yaml file? +Adam: when you set a value, that value is persisted throughout the release history. If it’s explicitly set as `nil`, then we can explicitly check for new values +A simple example of this is probes. It’s becoming increasingly common to unset values for execute vs http probes +If time, check in about Lua chart post-render overrides (Scott) +Assignments +Issue Sherpa +Moderator +Scott +Notes +Michelle + +June 6, 2019 +Announcements +Helm has a new home for downloads: https://get.helm.sh +Three main benefits to this move: +No more changes required for users if we have to switch storage providers in the future +Users in China can now download the Helm client using official download URLs. No mirrors required! +Global content delivery via CDN. Downloads should be faster across the globe. +Helm Summit +CFPs are closed now +Program Committee is reviewing the CFPs. June 14/15 is when the reviews finish and the co-chairs will do the scheduling. More to come. +Standup +Brian +Mic not working +Moving and Lua work +Matt Butcher +Gone all week. Just been tracking issues +Matt Farina +Working on being able to detect individual resources +Looking into popping those up into the capabilities object for checking if resources exist +The Helm Hub is receiving about 5-6 new repos per week, so working on some of the growing pains over in monocular +Michelle +Working on helm test refactor +Updated the helm test proposal based on feedback +Updated people interested in helping with helm test work +Matt Fisher +Migrated to get.helm.sh. No downtime or issues. Yay! +Working on community PRs for Helm. In particular Helm +Discussion +Alibaba Cloud hopes to book a slot to share a bit about its “Helm Hub China” project which is non-profit mirror of hub.helm.sh in China with speedup and localization. (Lei Zhang) +Slides: https://speakerdeck.com/resouer/helm-hub-china-project-from-alibaba-cloud +Things hosted in Google & S3, like charts and images in them, are not available in China +Localization! That includes content in charts? +Yes! We: 1. periodically clone charts from hub.helm.sh, 2. replace unavailable contents (storage, registry etc) in the yaml, 3. CI verify the Charts can run on a local k8s 4. publish “localized” Charts to Helm Hub China portal +Built on chartmuseum, free to use, storage in Alibaba +Preview at developer.aliyun.com/hub +Still in development +We would like to link to this when it launches +Unsetting values keys for Helm 3: https://github.com/helm/helm/issues/5834 (Taylor) +(fisher): Taylor is out today due to on-call work last night. He mentioned Scott may be able to talk about this +Assignments +Issue Sherpa: +Moderator: Matt Farina +Notes: Matt Fisher +May 30, 2019 +Announcements +Everyone survived KubeCon +Helm Summit CFPs are due 5/31 +Please submit CFPs, especially use cases for Helm! +Helm Hub charts available over registry here to play with: bundle.bar +Standup +Taylor +KubeCon +Working on CFP +Helm 3 tasks +Butcher +Reviewing PRs this week +Will be out next week, so not much +Josh +Issue sherpa last week, +looking into a few issues with Regis +Nikhil +Watching KubeCon videos and responding to issues +Scott +Fixed Helm Hub automation. Thanks to Matt for reviewing +Want to understand what we will be able to do with LUA for charts for Helmv3 (can discuss afterwards) +Brian +Been moving, so a lot of packing +Hoping to get back to Lua development for Alpha2 +Looking into the go reflect layer +Fisher +At Kubecon, Deep dive with Adam + Intro with Michelle +Expense reports, getting back into the swing of things +Martin +At Kubecon last week as well +Issue triage, PR reviews, and answering questions in Slack +Is next week the review of CFPs? +[Fisher] Hoping to get more information out on this from the Program committee ~Wednesday next week +Updates to the release checklist, and get back to migration +Farina +Charts and Helm hub +Helm hub is now automated! Yay! +Discussion +Features added to Helm 3 project board so community can help deliver Helm 3 release [martin] +Created this so folks can pick up features off the board and work on it. +Board is at: https://github.com/helm/helm/projects/1 +Core things that we want to get done now; can build on top of it later (e.g. XDG directory changes will break compat, but will be good) We have a window to get changes in that have a potential to be backwards incompatible. +Signing and container repos [matt farina] +How do we go about sticking charts in container repos +Provenance file has hash of package, signed using gpg keys +Container repos don’t necessarily have the same hash in different container repos (e.g. docker-distribution, quay, etc.) +Interesting conversation with OCI folks: Why does the hash change across container registries. There is the index, and the container layers + metadata. The index changes over time, but the content is unchanged? Radu has been looking at this as well for CNAB (how do we sign the bundle and get one signature that we can use to verify across repositories). +How does this work with tuf and notary? +We have alternatives to GPG keys as well -- some folks want to use PKI instead. +Helm is different in one way -- you can sign locally and upload the chart and provenance separately. This is because the hash doesn’t contain the name of the repository. Could also look into some of the other things like hierarchical key distribution vs. flat. +Registry things undiscussed [josh] +This is a longer discussion, so probably a better idea to schedule a 30+ minute slot to hash this out. +Play with bundle.bar -- there are now ~600 charts +2.14 + Azure issue? [josh] +https://github.com/helm/helm/issues/5788 +Issue where helm keeps logging out when login is done with az-cli +Since this is an ecosystem problem, this will be a problem with kubectl +Looks like an issue with a backwards incompatible change with client-go +Check to see if there is a corresponding issue with +Assignments +Moderator: Matt Fisher +Notes: Matt Farina +Issue Sherpa: Matt Fisher + +May 16, 2019 +Announcements +v3.0.0-alpha.1 released (Hooray!) 🎉 +v2.14.0 released ☘️ +KubeCon/Cloud Native Con EU Barcelona, Mon 20 - Thu 23 May (next week) - No dev meeting next week (23rd) +CFPs due May 31st +Standup +Butcher +PR reviewing for v3 +Fisher +Working on v3 Alpha.1 +v2.14.0 pairing with Martin + Preparing for KubeCon Helm 101 and deep dive talks +Michelle +Preparing for KubeCon +WIP: helm test framework +Adam +Working on v3 Alpha.1 +Preparing for KubeCon +Taylor +PR review +Preparing for Helm workshop on Monday at KubeCon +Martin +Yay last library/charts functionality went in! +Also fixed the dry-run output for v3. +Shadowed v2.14.0 release to get that out the door. +Nikhil +Issue sherpa +PR reviews +Farina +Cleanup of owner files +Issues +PRs (lint work etc.) +Discussion +Karen is looking to do more with our community blog. We’d like to make it easier to contribute blog post topics. PR #84 is a place to start. It adds a document that people can us to contribute blog post topics. We can iterate on this process and create a full fledge form, blog contribution guide. Thoughts? (Michelle) +Seems like a good approach +Michelle to chat again with Karen +Some topic raised in community (Martin): +Multiple environment best practices +Micro-services best practices +History/state stored details +We should create a helm org maintainers mailing list if that’s not already a thing and publish it on the communication doc of the Helm community repo so people know where to have discussions around cross cutting topics that concern the helm community and github org. (Michelle) +(fisher) I believe this already exists, we just need to document it: cncf-helm-maintainers@lists.cncf.io +(michelle) that is for helm core maintainers I believe. We need one just for org maintainers in case people higher order concerns and concerns across multiple projects. I don’t see where the cncf-helm-maintainers mailing list info is published. We should also make the goal of the mailing lists clearer. +cncf-helm-core-maintainers@lists.cncf.io is for core maintainers, but cncf-helm-maintainers is for org maintainers. It’s a little unclear for sure +[Action] Farina to document the different mailing lists +People have been asking how to help and get involved. We could have a github project board for “roles” that we need. i.e. “someone to triage helm 2 issues”, “someone to triage helm 3 issues”, someone to help with release management”, “someone to help us figure out a release planning process”, etc. Kubernetes has a role board for this. (Michelle) +Assignments (for the 30th (week after KubeCon)) +Moderator: Adam +Notes: Nikhil +Issue Sherpa: Josh + +May 09, 2019 +Announcements +CFP May 31st +Standup +Adam +Missed last week due to a team meeting +Working on some core reviews, prepping for the first alpha release +Published a proposal on the v3 release rollout +Josh +Working on the oras project, getting things like `helm registry login` implemented for Helm 3 +Martin +Mostly working on PR reviews +Thinking of the v2 -> v3 migration document +Matt Fisher +Missed last week due to a team meeting +Figured out things left for Alpha release +Worked on proposal +Working on solution for moving out of Google Cloud Storage +Brian +Missed last week due to a team meeting +Working on conversion packages from Go to Lua +Working on prototype code for Alpha 2 +Matt Farina +Issue sherpa +Pulling over v2 commits needed for v3 +Matt Butcher +CNCF meetings for graduation +Security audit after Beta 1 of Helm 3 +Good progress on graduation and good feedback +New branding for Helm 3 release inc. CNCF org look and feel +KubeConEU sessions and workshops filling up +Org maintainers maturing +Some PR reviews +Discussion +Proposal: Rollout of v3 release #5695 (adam) +High level plan of deliverables +Can add comments to the issue +Helm 2: Anything else we should get in before we cut v2.14.0-rc.1? (fisher) +We should get in the postgres storage layer PR in (butcher to review): https://github.com/helm/helm/pull/5371 +Demo: https://get.helm.sh (fisher) +Nice demo :) +Opinionated OCI namespacing/versioning + dropping search + repo subcommand as plugin (josh) +Assignments +Moderator: Matt Farina +Notes: Josh (Martin to deputize) +Issue Sherpa: Nikhil + +May 02, 2019 +Announcements + + +Standup +Farina +Working on search (starting with API on Monocular/helm hub) +Sprig and SemVer new major release planning with Dr. Butcher +Butcher +His team putting out a series of Helm 3 blog posts on the MS blog +Most of his team at DockerCon and breakout to work on Helm 3 +Looking for Alpha v1 by KubeCon EU +Martin +Triaged issues +Issues to v2 and v3 on scaffolding charts +From the community +Morten +Issues with proto files and get the generation and tests working +Working on a fix +Discussion +https://github.com/helm/helm/issues/5664 +Can’t switch default behavior because it would break scripts using helm in the wild +A flag could be added for this feature to opt-in to it +https://github.com/helm/helm/issues/5650 +We don’t have a precedence for doing this. +The pattern we have is to link to external related docs +How is Helm going to handle CRDs? +We needs docs on CRDs +Ability to detect if CRD is installed as part of crd-install hook and/or capabilities +CRDs are HARD! [farina 2019] +Assignments +Moderator: Butcher +Notes: Martin +Issue Sherpa: Farina + +April 25, 2019 +Announcements +Helm Summit update [Michelle] +Helm summit CFPs are now open at: https://events.linuxfoundation.org/events/helm-summit-2019/program/call-for-proposals/ +Priyanka Sharma +Standup +Taylor Thomas +Working on PRs this week, reviewing feature PRs +Should think about cutting 2.14 after KubeCon at least the rc for it +Farina +Monocular search API work to tie it into helm search for v3 +Foxish has become inactive on charts… moved to emeratus +Reviewed PRs, yo +Nikhil +Out last week +Getting back into the swing of things +Martin +Out last week +Getting back into things +Did some PR reviews and put in a few PRs +Made it to the program committee! Woo +Will go back to working on the helm v2 -> v3 migration docs +Michelle +Helm test PR is in - works now! +Trying to finish up refactor, so others can jump in as well. +Also working on the Helm Summit stuff +Butcher +Out last week +Took a look at a bunch of code that Brian wrote on the lua repo +Will meet with Adam later today +Brian +Working on the lua runtime +Getting all of the latest code out +Adam +Reviewing PRs +Longer reviews because PRs are touching similar parts of the codebase +Getting those reviews finished up this week +Ian +Getting new tests in before EOD for testing for subcharts on the schema validation PR +Dan Garfield +Chatted with Josh about migrating CICD to use codefresh +Started working on the migration +Hoping to get things in a place to review by next week +Scott Rigby +Looking at the doc this afternoon +There is a regression from something added to helm values coalescing. It’s a key deletion issue. Someone else took that on to fix it. Reviewing that PR. Will paste in helm-dev. Would like another person to review that. +Discussion +How detailed should our CONTRIBUTING guide be? https://github.com/helm/helm/pull/5346 +This PR may target different audiences specifically people who are not familiar with GitHub. Is that what we want? +[Martin] +[michelle] Copy/paste command options are nice for even power users of GitHub +[Taylor] +Matt Farina will follow up and merge PR +$schema in values for json schema? https://github.com/helm/helm/pull/5350#issuecomment-485852606 +Multiple editors support the top level $schema line but it’s not part of the official spec. Informal thing. +If someone copies/pastes a values file, they still want that validation but it’s again not part of the official spec +Matt Farina will open a separate issue so we can have an async discussion on it and sit on it for a few days +https://github.com/helm/helm/pull/5601 [Adam] +This is something that is used in the stable charts today. Do we want to break compatibility with v2 here? +We could potentially create tooling to convert charts +V3, migration and users [Martin] +Assignments +Moderator: Taylor Thomas +Notes: Matt Farina +Issue Sherpa: Martin Hickey + +April 18, 2019 +Announcements +Helm Summit update +September 11-12, 2018 in Amsterdam +CFP form and conference website is live +Be on the lookout for program committee notifications +Link: https://events.linuxfoundation.org/events/helm-summit-2019/ +Standup +Fisher +Working with Ronan. Ronan has been working on the Helm 3 design work and the Helm Summit logo. Trying to get multiple different versions of the helm documentation available on helm.sh so that you can click between versions for documentation +Looking at how Jaeger has done it for their documentation +Working with Bridget as well on this stuff +Re-integrating OCI work into top level commands. Helm package,etc. +Michelle +Pretty deep into the internals of `helm test` for Helm 3 +Using client-go for watching the test pods +Trying to refactor the unit tests for the working test run commands +Josh +Submitted the initial PR for registry login: https://github.com/helm/helm/pull/5597 +Brian +pushed branch to Azure/golua with the Go API changes. Working to solidify the function binding interface to finalize the standard libraries. Need to address runtime information collection on an error when unwinding the stack +Adam +Out last week with Flu +Catching up on PR reviews and getting back up to speed +Dan Garfield +CodeFresh is interested in offering a grant to the Helm project to use for CI/CD and chart repository hosting +Michelle: let’s follow up in the mailing list, and set up a meeting to determine what conversations we need to have RE: grants +Ian Howell +Made progress on schema validation +Discussion +Release/ReleaseVersion CRDs status+questions (Josh) +Tillerless right now is still using configmaps/secrets/in-memory. Same as Tiller was. Switch to CRD would ideally be in alpha but if it has to get bumped, it may. +Concern over RBAC and permission model +Now, RBAC is mapped to user. RBAC will be identical to what kubectl does right now +Define what Helm creates for you and give an overview on what permissions a cluster admin should give a user +Josh will create a follow up issue +Alpha.1 release (michelle) +Looking at the board, most things for alpha.1 are in the review phase now. +Should take about a week and a half +Assignments +Moderator: Adam +Notes: Michelle +Issue Sherpa: Fisher will follow up on mailing list for people + +April 11, 2019 +Announcements +Helm Summit EU updates [michelle] +Helm Summit Program Committee form is now closed and will be announced soon. +Helm venue and dates have been confirmed for September 11-12, 2019 in Amsterdam. +lHelm Summit website will be launched next week along with the CFP form. Be thinking of topics for sessions, lightning talks, and tutorials/workshops. +Standup +Taylor +Working on issue triage/PR triage this week +Going to work on replicating a particular PR next week +WOuld be great if someone with bash autocompletion could take a look at https://github.com/helm/helm/pull/5562 +Josh +Back from holidays +Working on the oras project on the `helm login` stuff +Matt Butcher +Working on things related to the timeline and the Lua stuff +Kubecon will be alpha.1 +After Kubecon, we’ll be transitioning to further alpha releases (possible 3?) +That should bring us to a beta around July +That should be the time when we get a CNCF security audit, which should bring us to CNCF graduation +Brian and I paired on Lua integration yesterday. Found a significant recursion issue where the stack isn’t being copied, so Brian’s working on a fix +Matt Fisher +Program committee stuff squared away for Helm Summit +Paired with Josh on the oras project and getting up to speed on what needs to be done +Specifically interested in credential handling +Review PR #5441 (not rendering templates inside of library chart) is on the list of things to review +Pairing with Ronan on getting alpha documentation for Helm v3 +Martin +Working on some PR/issue reviews and triaging this week +Jumped in on the v2 -> v3 migration doc this week +Michelle +Working on Helm Summit stuff with Fisher, Karen, Ronan +Picked up some of the helm test work +Found a few rendering errors so diving a little deeper into the rendering/label selection code +Scott +Helping Reinhard with the charts-testing project +Working to automate the Helm Hub +Discussion +What’s the process for creating new slack channels now that we’re part of the CNCF? [fisher] +For context, Helm is now part of the CNCF. There exists a CNCF Slack, but Helm slack channels still exist in the Kubernetes slack. +We have not had to create a channel since the CNCF migration, but Scott Rigby wants to create a channel for helm/chart-releaser +Lachie mentioned last time he checked in January, the CNCF slack is only for CNCF related business and temporary channels on an ad-hoc basis +CNCF projects like OPA and Kubernetes should manage and maintain their own Slack workspace +Fisher will ask Scott to ask the Kubernetes org if they’ll create a channel for him +Credential helpers for `helm login`? [fisher] +Fisher and josh will pair together, but it looks like they work out of the box +Assignments +Moderator: Taylor +Notes: Michelle Noorali +Issue Sherpa: Matt Fisher + +April 4, 2019 +Announcements +Martin has been voted in as a core maintainer +Standup +Taylor: +PRs this week, around the atomic flag +Review deleting resources +Continue on with PR reviews +Martin +Working on 2 PRs for the `make docs` target for Helm 3 +Lib charts and app version are ready for review on Helm 3 +Fisher: will definitely take a look at those, just have some things working on at the moment +Investigating a bug around removing a service account and how it isn’t removed from child dependencies (pods relying on the service account) +Looking into another PR with `helm list`for Helm 3: +Matt Fisher: +Refactors in Helm 3 +Looking at OCI integrations (refactoring). Full integrations of repo with Helm CLI. +Blog post with Bridget for KubeCon EU +Brian: +Final integrations of the GO Lua projects +Update soon in repo +Adam: +Working with PRs ands issues in Helm 3 +Fleshing out idea of removing helm init and lazy creating +Charts rendering as atomic units in progress + +Discussion +Update on Helm 3 development progress [fisher] +Assignments +Moderator: Martin +Notes: Matt Fisher +Issue Sherpa: Taylor + +March 28, 2019 +Announcements +http://www.cloudnativeday.ca/en/program/ is looking for Helm speakers +Helm program committee form still open for a day for Helm Summit… https://docs.google.com/forms/d/e/1FAIpQLSeMWnylHu1Yi6SmwKYvitrJxqNpBVAVXtMunjaiqkNAGkeG7g/viewform +Standup +Michelle +Working on `helm test run`. Making it work. Looking into using k8s Jobs +Threw out helm test results for now because there are a lot of decisions around storage that need to be made and it’s not necessary right now. +Brian +Working on the path forward for Lua. Finishing up stdlib for lua tables. Defining api for getting values out of lua into go. +Fisher +Booked travel for giving KubeCon deep dive talk with Adam +JSONSchema research +Reviewed Ian’s PR +Reviewing plugin arch +Butcher +On Vaca all last week. Missed everyone esp Adam +Taylor +MOVED HOUSES! +Working with go modules, having a blast. +Nikhil +Away last week, this week reviewing issues and PR’s +Adam +Been doing prep for KubeCon EU, thinking about the deep dive session +Doing some PR reviews around some of the Helm 3 architecture changes +Looking over the client architecture with a fine-toothed comb (event interrupts, for example) +Matt Farina +Working on the Go modules stuff +Found some issues with Go modules so we’re holding off, but we’ll have to keep a close eye on upstream work in this regard +Let the community test it out and provide feedback +Taylor: I have another PR with Go modules. Should we close this? https://github.com/helm/helm/pull/5520 +Farina: looks like that’s for master vs. Helm 3 +Discussion +Is ‘make docs’ target still relevant? Ref: https://github.com/helm/helm/pull/5458 +Intent was to keep the target around so that users can have the option of generating docs +There is an effort for helm v3 to take the docs under a different location +Mhickey will take it offline with folks to work out what the PR needs to evolve to. +Lua in Helm v3 and golua [mattfarina] + + +There are a few bug fixes that need another review for Helm 2.14 [fisher]: +https://github.com/helm/helm/pull/4871 +https://github.com/helm/helm/pull/5112 +https://github.com/helm/helm/pull/5395 +Assignments +Issue sherpa: Nikhil +Moderator: Matt Fisher +Notes: Martin + + +March 21, 2019 +Announcements +2.13.1 +Standup +Josh +There was a chartmuseum bug that affected Harbour, waiting on a response from them +Continuing work on the Helm 3 repo docs +Matt Farina +Poking at Go modules a bit, as the next version of Go enables it by default +Brian +Working on the Go Lua standard libraries based on some of the core changes over the past few months +Pairing with adam today on the lua implementation for Helm +Matt Fisher +Working on the XDG base directory PR +Lightly reviewed Ian Howell’s schema values PR, need to manually review +Working on a Helm 3 high-level overview blog post +Matt Butcher +On vacation for the next week +Discussion +Lua timeline/milestones [josh] +Wanted to clear up some of the story for Lua in far as Alpha is concerned +Brian: so the current idea is to use it as an overlay as part of the rendering engine +Josh: based on prior information (Matt Butcher’s blog post on sweetcode), I thought we could pass in a chart metadata, values etc. into the lua engine to generate pods. +Fisher: can we propose to discuss this next week? We don’t have a physical integration of Helm and Lua at this point yet +General consensus is to table the discussion once we have a Helm/Lua integration +Helm 2.13.1 release [fisher] +Matt Fisher will go ahead and release 2.13.1 +Assignments +Issue sherpa: Matt Fisher +Moderator: Matt Farina +Notes: Adam Reese + +March 14, 2019 +Announcements + + +Standup +Josh +Met with a few people this week about the Lua subsystem to discuss how that relates to Helm 3 +Working on the Helm 3 repository documentation +Matt Butcher +Helm Summit planning (EU) +Sprig updates +PR reviewing on community PRs +Martin +Sherpa-ing +PR reviews +PR for standard application charts (library charts) +#5441 +Helping on slack channels +Adam +Met with people about docs changes (v2->v3 changes) +Label for PRs that require a +Vanity import path +Scott +Fixed Helm Hub search +Looking into Hub deployment automation +LastPass setup +CNCF prefers we use this +Fisher +Helm 3! +Refactoring “helm template” to action pkg +Major action pkg refactor (thx adam) +Community PRs +PR for storing Helm Home in XDG spec +https://github.com/helm/helm/pull/5443 +This coming week working on FAQ, planning etc +Justin +Triage, catching up starting tmrw +Discussion +Deprecate “helm search” in Helm 3? [josh] +Sent a message to mailing list asking if anyone uses this and received no response +Has no function in a CI/automation setting +“Underpowered” since it only looks at local cache +Users can go to hub.helm.sh +Once remote search is rolled into OCI, we can add this feature back (in 3.1, 3.2 etc.) +Should we cherry-pick https://github.com/helm/helm/pull/5423 into 2.13.1? [fisher] +Vanity import path #5440 [adam] +“helm.sh/helm” +Separates Helm 2 and Helm 3 in go path +Open PRs will have to rebase +There is a sed script to do this +Will enable other proj under the Helm org +When should we cut a 2.13.1? [fisher] +Lua timeline [josh] +Assignments +Issue sherpa: Martin/Justin +Moderator: Josh +Notes: Matt Fisher + +March 7, 2019 +Announcements +Program Committee Applications are now open. Please fill out this form if you’re interested. Deadline to apply is March 29th, 2019. [michelle] +Helm Summit update [michelle] +Planning on Helm Summit 2nd week of September +Venue in Amsterdam is on hold -- things are looking good. +Look above for program committee application. Help conference chairs review CFPs. Adam / Fisher are two of the three co-chairs, we’re looking for a 3rd from the community (fill out the checkbox at the end) +Standup +Butcher +Opened a PR on Helm 2 to update the version of sprig to one that should be used. + Nikhil +Working with a customer engagement so nothing to report this week +Adam +Past week -- Helm 3 momentum picking up. More to come during the Helm 3 discussion. +Lot of refactoring of the engine package - diving in to the go-templates package. +Michelle +Took some time to work on helm-test. Helm test run is now a subcommand. Digging more into getting the test response back. +Refactoring the initial proposal for helm test. Revising the proposal to continue using anotations and adding support for test suites +Fisher +Pairing with folks to figure out Helm 3 project planning. +Late last week - bigger refactor for action package. Will return to that to figure out what can be pulled out to make it cleaner. +Adnan +Not much this week +Josh +Not a huge lot, still trying to mess with LUA and connect with Brian +Get Helm repo docs out by end of the week. +Martin +Libchart -- should have a PR by tomorrow. +Looking at a few issues on the Slack channel and answered a few questions +Took a look at issues tagged with good first issues and have some feedback -- some of these have changes and might not be good first issues any longer. +Farina +A lot of chart stuff including reviews. +Helped Fisher with some Windows stuff and was psyched! +Security process for the Helm org document is up. + +A big shout-out to Fisher for getting the Helm 3 project plan organized! + +Discussion +Make crd-install hook idempotent [mattfarina] +Charts repo is seeing issue from this +Error if the content is different on first pass +In the future we could discuss a flag that allows overwriting if different +Was also proposed over on https://github.com/helm/community/pull/64 +Discussion: +Make CRD hook idempotent -- could this be a problem? Should work, but the trick is deleting the CRDs. Case where 2 things install the same CRD => we should be able to achieve this including for Helm3. +(Adnan) built a workaround +Helm 3 status update [fisher] 👈 +https://github.com/helm/helm/projects/1 +The goal is to understand what are the things we are quantifying for an alpha release of Helm 3. +Paired with core-maintainers to figure out what should be in an alpha release. What we have currently, and what we would like to have in there. +When we go through this backlog, we should be able to cut an alpha release. +Feedback / Comments: +This is awesome! Thanks! +Changes with Helm 3 fall into different buckets. E.g. LUA, repo, tillerless, etc. Does it make sense to make labels for these bigger “themes”. +Might be difficult to do since lines are sometime blurred between components. E.g. refactoring of the engine piece. +This would help with filtering by theme -- especially as we add more items to the board. There might be a parallel with SIGs, perhaps? +This might be a good thing to add at some point later perhaps when we go from alpha => beta. +(fisher / josh) Let’s table the discussion for now and revisit this once we are a bit further along. +#helm slack channel moderators, we need them [mattfarina] +https://github.com/kubernetes/community/blob/master/communication/moderation.md +We’re in k8s Slack and they are looking for moderators. +Especially in EMEA / APAC region time-zones. +Don’t need to necessarily need be core maintainers. It would be good if anyone in the community can be Slack moderators. +Request for feedback on resource policy PR: https://github.com/helm/helm/pull/5092 +Has to do with deleting manifests. +Call to folks who understand this space to comment. +First commit is what’s changing in the application logic. +There might have been some uncaught changes -- so might be good to run some manual tests. Fisher will have some time to hopefully take this on last week. +Assignments +Issue sherpa: Martin +Moderator: Fisher (/ Adam, tag team) +Notes: Josh +February 28, 2019 +Announcements +Helm 2.13.0 was released yesterday +The first release that is PGP signed. Go try it out! +Standup +Michelle: Helm v3 test +Taylor +Today will be trying to get through a PR from a community member +Josh +Diving deep into GoLua +Going to experiment with embedding the Lua engine in Helm 3 +Fisher +Paired with Farina on the Helm 2.13 release +Working on the Helm 3 action package refactor +Butcher +Kubernetes meetup in Boulder with ReactiveOps +Might be a good team to contact on the action package refactor +Brian +Working on the GoLua compiler for parity with luac +Using the output from gluac against the lua runtime for testing +Moving some code around but should hopefully be merged in the next few days +Pairing with Josh next week on Helm and Lua +Martin +Working through some PRs to close them out +Issue triaging +Matt Farina +Working on CII best practices for CNCF graduation +Ian Howell +Working on the JSON schema +Question: should we generate a JSON schema out of the gate? +Solution: there’s not a great answer for this but Ian’s been playing with a few solutions. Play around a bit and see what happens +Nikhil +Nothing to report this week +Discussion +v3 contributor work (mhickey) +Fisher and Adam working on this to get some of the initial pieces out (client-package, v3-board) so that we can move forward. +Would be useful to have a discussion, perhaps on another call, about helm 3 specific pieces. Perhaps an hour long backlog grooming session (post-it note style?). Schedule a time for this when Adam is back? +How can other contributors help with this, to get this unstuck / moving? +Fisher will come up with a workable list of helm v3 basic issues and float it to the rest of the team. +Good first issues (mhickey) +We have about 9 of them, 6/7 of which are somewhat stale. +Mhickey will put in some comments and float it to other folks on the project. +List of good first issues: https://github.com/helm/helm/issues?q=is%3Aopen+is%3Aissue+label%3A%22good+first+issue%22 +OCI Update - not much to share. +Folks were okay with using the manifest / index at the top layer (Steve / Jimmie’s proposal) +Not clear if there are any changes here. There were some discussions on the index and the media-type on yesterday’s call. Would be useful to look through the notes of yesterday’s call. +Notes from yesterday’s OCI call: http://ircbot.wl.linuxfoundation.org/meetings/opencontainers/2019/opencontainers.2019-02-27-21.59.html +Latest Proposal using manifest.config.mediaType but no solution at the index: https://github.com/SteveLasker/RegistryArtifactTypes/blob/master/mediaTypes.md +Farina will try to jump in and get some clarity here. +Assignments +Issue sherpa: Matt Fisher +Moderator: Farina +Notes: Nikhil +February 21, 2019 +Announcements +Helm 2.13.0-rc.2 was released Tuesday +Helm Summit Update: +Waiting on CNCF to get back +Looking at costs etc. +Might know more by early next week +Standup: +Josh: Looking at the LUA language +Adnan: Looked at library charts. Added comment to the issue. +Michelle: +Collecting feedback from CNCF projects for improvement +Continue on Helm test +Nikhil: +Looking into v3 work +Matt Farina: +Reviews +Crypto signing delivered with Matt Fisher +Taylor: +Going to be reviewing this week +Brian: Meta tables in lua to override operators +Adam: +Working on builder to manipulate charts in lua +Populate issue +Matt Fisher: +PR reviews +Helm v3 action package refactoring +Martin: Library chart feature merged +Scott: +Laser github app +Discussion +Lua plans? +https://github.com/jdolitsky/goluamapper +Brian working on an idiomatic go interface in lua +Not going to be modelling charts at start with lua +Design shortly on the syntax of lua in charts +1MB limit w/ no tiller?, +In Helm dev question about map being too big +etcd limit: 1M . Not a limitation of Helm. All Kubs objects have this issue. +https://github.com/etcd-io/etcd/blob/master/Documentation/dev-guide/limit.md#request-size-limit +Some discussions on using an alternative backend to etcd +Assignments +Issue sherpa: Martin +Moderator: Taylor (not Josh) +Notes: Nikhil +February 14, 2019 +Announcements +Helm 2.13.0-rc.1 was released yesterday +Helm repo working group call cancelled. Now gone to the OCI space. +Join CNCF #artifact-registry +Helm Summit Update +Working with CNCF on a venue for September +May need sponsors +If your company would be willing, please contact Michelle and I will get you in touch with the right people +Standup +Michelle +Merged PRs +Working on POC for Helm test v3 +Iterating on the initial helm test proposal for v3 +Butcher +Working on grpc changes +Reviewed martins patch +Discussion +Scott: The Helm Community Incubator page hasn't updated in 2 years. Let's discuss what should be updated, if that hasn't already been done elsewhere? +Adam: 2 LGTM policy for dev-v3 branch +Fisher: will add this to the CONTRIBUTING.md in dev-v3 +Asking for status: What is the status for Helm Summit 2019? +Discussed in announcements +Fisher: bringing back up issue #2039. How do we want to cryptographically sign Helm releases? +Butcher: TUF/Notary looks like the right approach for v3 +For v2 we probably want to cryptographically sign all the assets and upload the signatures via Circle +Support "delete" resource policy in Helm 2? (PR) +Fisher will have a look at it next week +Assignments +Issue sherpa: matt fisher +Moderator: adam +Notes: martin + +February 7, 2019 +Announcements +Good First Issue App added +Twitter account will tweet out our issues if we put a label on it +Standup +Josh +Helm 3 initial registry stuff merged! See PR #5243 +We’ll have to continue the discussion around how this will affect the rest of the Helm commands +Matt Farina +Merged some PRs, talked on some OCI stuff +Michelle +Going to work on some new helm test stuff +Brian +Isolating difficult APIs in lua spec for manipulating tables +Hybrid array+hashtable +Refactoring on call stack to support proper tail recursion +Matt Fisher +Helm 3 PR reviews, PR reviews +Looking at some Helm 3 things this coming week +Giving dev-v3 a try on Windows, found some bugs +CFPs! +Taylor +Wasn’t able to do much this week. Will be back to issue stuff and PRs this next week +Nikhil +Looking into curating issues in issue queue +Adam +Helm 3 stuff, mostly code reviews +Organizing top-level stuff +Martin +Mix btw v2 and v3 +Triaging a bunch of issues +Starting on PR reviews +V3: broke down PR for - + + +Discussion +What’s the status on #5210? Are we ready to cut a v2.13.0? [fisher] +Upgrading GRPC for better TLS connection handling +Need to check w Matt Butcher +When the protos changes, people need to recompile their clients +Is there a way for us to fix issues without updating grpc? +Some community members are asking to cherry-pick a few PRs into a v2.12.4, most notably #5186. Should we cut a v2.12.4, and if so, are there other patches that need to be cherry-picked? [fisher] +What’s the timeline for 2.13? +Fisher will check with Butcher offline on the prior discussion item to get an idea how far out we are from a 2.13 +Is this proposal are runner for v2/v3: https://github.com/helm/helm/issues/3279 ?[mhickey] +Different than other tests, leaves pods around +Take a look at v3 proposal (link me) +Helm Summit update [michelle] +Still confirming an Amsterdam venue +2nd week of september +Working on program committee application + + +GSoC ?? [josh] +Ooo missed the deadline (yesterday) +Assignments +Issue Sherpa +Fisher +Adam (v3) +Martin (v2) +Moderator: Adam+Michelle COMBO +Notes: Martin +January 31, 2019 +Announcements +Standups +Brian +Working on refactoring +Matt Farina +Adnan Abdulhussein +Michelle Noorali +Taylor +Reviewed atomic flag PR +Working on issues/PR this week +Martin +v3 work: Lib chart feature +Helm v3 status https://github.com/helm/helm/projects/1 +Initial registry support PR: https://github.com/helm/helm/pull/5243 +Discussion +Consider installing https://github.com/rajatjindal/goodfirstissue for helm org (Rajat) +What is Helm support of CRDs? Can it handle large CRDs? Open issue: https://github.com/helm/helm/issues/4697 +This will need to go to SIG Apps because of the wider scope of what this will affect. +Helm Summit Update +Working on locking down the venue and getting the CFP things ready +https://github.com/helm/helm/issues/3279 : Proposal for v2/v3? +https://github.com/helm/helm/issues/5242 CNAB +Assignments +Issue Sherpa: Nik +Notes: Josh +Moderator: Adam +January 24, 2019 +Announcements +CVEs for Helm+ChartMuseum vulns +Helm: (link me) +ChartMuseum: (link me) +Helm Summit is being rescheduled from March to the second week of September +Need more time to lock down venue + give travel time to attendees +Standups +Michelle +Issues and PRs triaging +Active in #helm-dev +Scott +Met w farina about Helm Hub deployment automation +Setup on CNCF service +Matt Butcher +https://github.com/helm/helm/issues/3480 : connect btw helm+tiller having issues, unsure why. “write: broken pipe” +Matt Fisher +Investigated #3480 +Helm 3 repo discussions +Trying to offload some work from Adam +OCI docs based on meeting yesterday +Josh +OCI/Helm repo convos +Need to look into search + auth +Working on dev-v3 fork for push/pull +Matt Farina +Helm Hub: how do we scale? # of charts, user experience, etc +Potentially contractors from CNCF +OCI fun, specs +Nikhil +Closed out a couple issues, sherpa-ing some others +Adnan +Monocular issue/PRs +Martin +Issue sherpa-ing, passing things along +Closed out some PRs +Looking into v3 features + + +Helm v3 status https://github.com/helm/helm/projects/1 +Discussion +Could we recap our approach to how we handle v2 fixes while the v3 branch is not yet accepting fixes (or maybe it is accepting them?). Is there a list of fixes waiting to be merged? Is there a tag that we should apply to v2 fixes that need to be ported across later? Etc. etc. (henrynash) +We need a clear policy...which is that v3 IS accepting fixes. +New label: #needs-v3-fix +Place this info somewhere, contributing.md (henrynash to do) +What is Helm support of CRDs? Can it handle large CRDs? Open issue: https://github.com/helm/helm/issues/4697 +Need to punt to next week when Adam returns. He had some actions on this and we don’t know the state +ChartMuseum + Monocular in Helm 3? +Monocular: need to change to own the Helm Hub experience +ChartMuseum: ??? +What do we invest in terms of Google Summer of Code +Google Summer of Code: what projects should we propose? +Deadline for org submission: Feb 6 +Deadline for students: April 9 +Assignments +Issue Sherpa: +Nikhil +Michelle +Notes: Michelle +Moderator: Fisher + +January 17, 2019 +Announcements +Helm and ChartMuseum security releases out +Standups +Nikhil (had to miss call due to a conflict) +Last week, mostly worked on curating our issue queue. Hope to have some time to spend on it this week as well. +Fisher: had to miss due to an AKS all hands +Last week: participating in the helm 3 repo discussions, getting ramped up with Helm Summit committee prep, triaging tickets +This week: wants to write a blog post on the current status of the Helm 3 repo discussions +Butcher: had to miss due to an AKS all hands +Farina: +ChartMuseum and Helm security release work +Took charts in container registries to the OCI for direction. Jimmy Z has a strawman that was generally accepted at the OCI meeting +Josh +ChartMuseum security release v0.8.1 +Chart-scanner to check for the vuln: https://github.com/chartmuseum/chart-scanner +Things moving along w Helm 3 repos stuff, chats w OCI team +Life status changes +Martin +Delivered a feature for v3 +Did issue queue triaging + + +Helm v3 status https://github.com/helm/helm/projects/1 +Discussion +Helm can have an intro and/or deep dive in KubeCon+CloudNativeCon Barcelona. Who from the core team is interested in submitting to do an intro and/or deep dive? 2 maintainers per slot. [Michelle] +Should we support the --token and --insecure flags on helm v3? These are flags on kubectl. https://github.com/helm/helm/issues/5159 +Discussion on Bazel in helm… https://github.com/helm/helm/issues/5160 +Likely pushing to a plugin +Assignments +Issue Sherpa: +Martin + Adam +Notes: Josh +Moderator: Farina + +January 10, 2019 +Announcements +KubeCon+CloudNativeCon Barcelona is in May and CFPs are due Jan 18th. Reach out to Michelle for CFP reviews if you’re interested in submitting and would like some help/guidance/advice. +Parallel flag PR got merged on helm test! Woot! +Standup +Josh +Been working on getting helm push/pull working. Has a working example! Should be ready to PR in a week +Fisher +Not too much to report this week. Going in to the helm 3 repo discussion and continued issue triaging +Michelle +Been issue triaging on issues for the past few weeks +If you aren’t working on Helm 3, we need your help to triage the large number of issues that still need it +Triaging #5118 +Scott +Helping in the different repos as time permits +Working on a tool to help people get a helm repo from a git repo is on hold +Adnan +Not much for this week +Adam +Pretty much just Helm 3 work +Matt Farina +Working in the fun filled world of process. Need to get process things in place like a security reporting process before we can graduate +Have been meeting with the OCI people +Nikhil +Just got back from holidays, not too much to report from last week +Will be issue triaging this week +Taylor +Try to spend a little time tomorrow to triage the issue queue +Butcher +Trying to stay on top of the repo stuff +Doing a bunch of Helm 3 work +Getting close to having Helm Summit EU dates +Brian +Getting back into the swing of things after holidays +Helm v3 status https://github.com/helm/helm/projects/1 +Merged a few PRs in to the v3 branch +Matt Farina is working on an actions package so other projects can consume it if desired +Code cleanup around build targets, makefile, infrastructure +Adam is focusing on the chartutils package +Discussion +Helm Summit 2019 - When? Where? How to help [carlos] +Michelle and Adam volunteered to start getting things rolling with CFP and the like +Should we cut a v2.12.2 with https://github.com/helm/helm/pull/5132? [fisher] +We should validate that this is the same validation that k8s uses +Is this something that should be documented vs. a bug fix? +There was a new name restriction put in place for 2.12.0. This wasn’t quite up to spec to support subdomains +All hands on deck with issue triage and PR review [michelle] +If you’re a core maintainer and not working on helm v3, please help in the issue and PR queues this week. +If you’re a community member and would like to help, please help with issue triage or reviewing PRs. Leave comments on the PR or an LGTM in a comment on the PR. If you’re ready to put a label on an issue, tag Michelle. If you’ve given an LGTM on a PR and need another lgtm, tag Michelle in the github comment on the PR. +Helm 3 repos working group update +Go lib “oras” for pushing any file to OCI-friendly registry: https://github.com/shizhMSFT/oras +Demo: + +Cleaning up hooks - https://github.com/helm/charts/pull/10400 [adnan] +Should Helm CLI should have an option to delete hooks & other dependent things on delete +Assignments +Issue Sherpa: +Michelle + Nikhil + everyone +Notes: Scott +Moderator: Adam + +January 3, 2019 +Announcements +Helm 3 repos +Oras: POC pushing arbitrary data to a container registry +https://github.com/shizhMSFT/oras +Standup +Taylor +Working on diff issues and PRs as needed +Michelle +Triaging issues +Wants to pair with people interested in issue triage +Brian +Coroutines for Lua VM, Lua compiler +Fisher +Knows rust now +Josh +Worked on oras +? +Helm v3 status +Likely same place as pre xmas +Discussion +Organize/sort release notes #5119 +Bugs and features are not distinguished +Also see https://goreleaser.com +Feedback https://github.com/helm/helm/pull/5110 +Adding things to “helm create” +Need to work w charts maintainers +They have been assigned to the issue +Helm repo updates +Working w OCI on next steps +Whitelisting mediatypes +Search spec, to support “helm search” against only charts (not images) +#opencontainers IRC channel on freenode +OCI mailing list: https://groups.google.com/a/opencontainers.org/forum/#!forum/dev +Assignments +Issue Sherpa (2): +1: Matt Fisher +2: Michelle +Notes: +Taylor +Moderator: +Josh +``` diff --git a/community/meeting-notes/2020.md b/community/meeting-notes/2020.md new file mode 100644 index 0000000000..1196844fa1 --- /dev/null +++ b/community/meeting-notes/2020.md @@ -0,0 +1,2719 @@ +--- +title: Helm Minutes for 2020 +--- + + + +```txt +December 17, 2020 +Assignments for this meeting +Moderator: Marc +Notes: Karena +Issue Triage: Butcher + +Announcements +3.5.0 Milestone · GitHub - 3.5 RC1 will be cut on Monday Jan 4 2021, and 3.5 will be released Wednesday Jan 13 2021. +Half PRs still open +OCI- found issues, Farina will work on it over the break +Whatever gets in this year is what will land +This is the last Helm weekly developer call of 2020; no call on Dec 24 or Dec 31; the Helm weekly developer call will resume on Jan 7 2021. + +Discussion +[Joe Julian] I’m off the rest of the year. Can I please get my PR merged before I go since I won’t be around to keep rebasing it before RC1? Reduce linting severity for users of out-of-date kubernetes #8608 +Bridget: it’s in the 3.5.0 milestone - when do those get reviewed/merged? +Farina: hopefully reviewed by end of the week +December is a terrible time to get features into Helm +Farina: with mature projects, esp this time of year, takes longer. Slower at merging since reviewing with other maintainers to consider implications +Joe: concerned since using a fork for their linter now +Joe: wondering as first time contributor what should have done differently +Farina: thank you for the feedback +[Shoubhik Bose] Engineering architect for GitOps +Would like to have more disciplined approach to contributing +Best way to understand from list of PRs for where to contribute? +Looking at milestones +[Bridget] yes, looking at milestones is great +[Farina] one of best - look at PRs and walkthrough +Start walking through and test +Give feedback - not just when something is wrong, but when something is good +For people who want to be maintainers - get the title once you’re already doing it +[Bridget] what if we run a new Helm maintainer workshop +Walk through the process +Have more senior maintainers act as mentors +Bridget to work with Butcher and CNCF + +Assignments for next meeting (Jan 7th!) +Moderator: Bridget +Notes: Karena +Issue Triage: [at least 3 needed] +Matt Farina +Shoubhik for non-core maintainer issue triage +Josh for 3.5 issues + +December 10, 2020 +Assignments for this meeting +Moderator: Marc K +Notes: Bridget Kromhout +Issue Triage: Matt Farina + + +Announcements +Helm 3.4.2 patch release yesterday +3.5.0 Milestone · GitHub - 3.5 RC1 will be cut on Monday Jan 4 2021, and 3.5 will be released Wednesday Jan 13 2021. +The last Helm weekly developer call of 2020 will be next week on Dec 17; no call on Dec 24 or Dec 31; the Helm weekly developer call will resume on Jan 7 2021. +K8s.dev contributor celebration this friday -> sunday +https://www.kubernetes.dev/events/kcc2020/ +Kubecon CFP closes Sunday 13th 11:59p. +https://events.linuxfoundation.org/kubecon-cloudnativecon-europe/program/cfp/#overview +Bridget volunteers to review your talk proposal! + + +Discussion +[Tim St. Clair] - Helm 4, modularity, and pluggable templating. +Tim St Clair: Saw KubeCon NA 2020 talk about past/present/future +Tim St Clair: Is familiar with templating issues +Tim St Clair: Used to be Heptio/RH, and in vmware they’re seeing ytt - but the templating theme keeps repeating itself +Tim St Clair: Interested in an abstraction layer around charts itself +Farina: in Helm 2 we had a mechanism for setting templating engine - “engineyard” +Farina: and nobody ever extended it! Existed, and nobody used it +Tim: in this moment, the demand is now here +Butcher: the right step is probably a HIP - now is a good time +Fisher: possible opportunity of revving to API v3. +Fisher: in a HIP we could discuss backwards compat, use cases, post-rendering +Marc: Tim, would you also be providing implementation? +Tim: I’d be working with a team to do so +Helm v3.5.0 [Farina] - this is less than a month away - the core maintainers should please review over the next two weeks +This is a small release but we do want to get it ready +Helm meeting calendar vs Helm release calendar [Marc] +Fisher: no objection to merging - we also use github milestones to communicate +Farina: calendar is also for us +Introductions + Mark Fisher, Aaron Hurley, John Ryan - Tanzu team - https://github.com/helm/community/blob/master/hips/hip-0001.md + Karena Angell - Red Hat + Joe Julian - d2IQ - Helm needs for their customers +Storage backend needs: https://github.com/helm/helm/issues/8977 [Joe Julian] +Joe Julian - label selectors don’t work - either break up by namespaces or query the predictable-name releases by name +Butcher: there is a pluggable system for alternative data stores +John Ryan: how about WASM, Lua, etc? +Butcher: web assembly is an idea on the table + + +Assignments for next meeting +Moderator: Marc +Notes: Karena +Issue Triage: Butcher + +December 3, 2020 +Assignments for this meeting +Moderator: Josh Dolitsky +Notes: Dan Garfield +Issue Triage: Bridget, Fisher, Martin + + +Announcements + Next patch release (3.4.2) will be Wednesday Dec 9 - add relevant issues/PRs to https://github.com/helm/helm/milestone/106 [Bridget] +[Dan] Few things still need to happen in milestone. +Review bugs in issue queue for 3.4.2 Tuesday is last day to put in +Interested in being a Helm maintainer, reach out to Farina, shadow on Wednesday release available. + +Discussion +Chart Examples in Docs [Bridget] +[Bridget] We now have a request to update docs to refer to something other than deprecated charts (https://github.com/helm/helm-www/issues/965) +[Bridget] Adam and I previously discussed a helm-org repo with illustrative example charts +[Bridget] Not intended to be supported as production-ready, but meant to forestall the inevitable changes if we point to a third party +[Bridget] any objection to us creating that repo under the helm org? Currently used repos are called chart-release and chart-testing - perhaps we could call it chart-examples? +[Dan] How do we handle mentioning deprecated charts… +Farina: Take something like ChartMuseum and point to it as example +Farina: Or… Create examples repository and use it as example charts, use providence files etc all best practices. +[Josh] Should we have examples of more than just charts? +Farina: Let’s make sure we can use CI to test things, so, keep separate repos +Resolution: yes, let’s have examples showing best practices including chart signing, and not claiming to be production-grade. Bridget, Farina, Garfield to tackle after holidays. +Re: examples, we had a similar discussion here at Hashi about standardizing demos, and it ended up an internal group wrote an app ("HashiCups") just to be the example app for product demos. Probably not necessary to write a whole fake coffee shop storefront like our group did but it might be useful to have something like a "Helm guestbook" that exists just to be an example app for Helm chart examples. + +Passing arguments to post-renderer [Marc] +(https://github.com/helm/helm/pull/9047) +Idea is to split on space: +--post-renderer "kubectl kustomize calico/kustomize" +Backwards-compatibility issue? +--post-renderer "./my binary.exe" +Do we need a flag e.g., --post-renderer-args +[Farina] breaking on a space is potentially unreliable, use environment variables instead +[Marc] +Fisher: https://github.com/helm/helm/blob/d3d1ceab4f30ef792195f6a2b0fbf36a3b300340/pkg/postrender/exec.go#L45-L67 +[Josh] I vote to have the flag because you can’t always predict the binary you’re using. Use env if you control the binary, but the flag would be useful for the edge case +[Marc] the goal here is to allow usage of “kubectl kustomize” as a post-renderer +Resolution: Marc will review and comment in the PR + +Moving size labels to GitHub action [Farina] +Currently a service hosted in helm hub cluster +[Farina] Our size labels all come from a deprecated repo. Want to port into Github Actions instead +[Fisher] Github Actions have been very reliable. Very in favor +Conclusion: Farina will start working on moving sizing labels to github actions +[Fisher] LGTM + +Translation PRs… when multiple people are committers and the lgtm comes from a committer? [Farina] +[Fisher] We have LGTM’d our own PRs before when pair programming on a fix, but context is everything though… LGTM’ing your own code doesn’t seem to match up with the code review process. Is the committer LGTM’ing another author’s code and they only provided a few edits, or were they the original author? +[Bridget] I review a lot of translation PRs. I compare the final result’s google translate with the English original to get a rough sense of what’s there, and comment if there’s an issue like a section being skipped. +[Bridget] Issues arise in particular if they forked some time ago and are translating an old version of the page. +[Bridget] I would like to recruit more maintainers from the various language groups for them to do this step, but I would want to formalize this final side-by-side check as part of the process. +[Bridget] Can we get some of the people reviewing to be maintainers to actually check. When translations are behind it causes drift. Can we formalize steps. +Conclusion: Garfield will go do some investigation into what might work best and discuss with Bridget and come back. + +[Josh] Congrats to Bridget and Fisher for winning the CNCF chopping wood and carrying water award! + +[dlipovetsky] action.List client is unable to return a list of all releases (#9028) +[Fisher] Helm CLI does rely on statemask for filtering releases etc in the action package. Under CMD/helm/lists/go it calls action and returns. I *believe* the statemask is what’s setting the filtering. That might be a place to start looking for bugs. Issues with statemask in the past and design concerns with backwards compatibility. +Open Discussion + +Assignments for next meeting +Moderator: Marc K +Notes: Dan Garfield +Issue Triage: Matt Farina + + +[no meetings Nov 19 2020 (KubeCon) or Nov 26 2020 (Thanksgiving)] + + +November 12, 2020 +Assignments for this meeting +Moderator: Martin Hickey +Notes: Josh Dolitsky + +Announcements +Artifact Hub has experimental support for OCI charts [Farina] +Using oci:// you can add in the artifact hub your OCI repo +Security scanning supported +https://artifacthub.io/ +Helm 3.4.1 released - https://github.com/helm/helm/releases/tag/v3.4.1 +First of release cycle +Helm blog: https://helm.sh/blog/helm-release-process/ +“First Patch Wednesday” +Helm v2 EOL and stable/incubator repositories deprecated on this Friday 13th November +Blog post by Butcher in progress +Thats tomorrow +charts.helm.sh new home for stable and incubator +Kudos Matt and Scott (and charts maintainers) +Please use Helm 3, no longer will receive fixes on Helm 2 +tomorrow, friday the 13th +Martin is OK with Tiller +KubeCon/CloudNativeCon next week (17th - 20th Nov) +Helm sessions: (link me) https://events.linuxfoundation.org/kubecon-cloudnativecon-north-america/program/schedule/ +Butcher+Farina+Bridget +https://kccncna20.sched.com/event/ekHz/helm-past-present-future-matt-butcher-bridget-kromhout-microsoft-matt-farina-rancher-labs?iframe=no&w=100%&sidebar=yes&bg=no +Wednesday, November 18 • 4:55pm - 5:30pm +Booth duty - bring your questions! +Office hours +Slot 1: Wednesday, November 18 • 3:00pm - 3:45pm +Slot 2: Thursday, November 19 • 5:00pm - 5:45pm +Slot 3: Friday, November 20 • 3:00pm - 3:45pm + +Discussion +Request for Helm mapkubeapis plugin to join the Helm Org https://github.com/helm/community/issues/157 [Martin] +Following the new HIP process, #? +Farina to take a look and help drive it along +Upcoming call schedule +Will there be a dev weekly call next week (conf week)? [Martin] +[Bridget] Keynotes start on Thursday Nov 19 at 1pm Eastern: https://events.linuxfoundation.org/kubecon-cloudnativecon-north-america/program/schedule/ - Helm call is 12:30-1pm Eastern, so might not conflict badly? +[Bridget] should we cancel the meeting for Nov 26 - US Thanksgiving? And Dec 24 (Christmas Eve), and Dec 31 (NYE)? We could have the last meeting of 2020 on Dec 17, then resume on Jan 7? +[fisher] yes. We usually cancel dev call meetings on US federal holidays as well as the week during/after KubeCon NA when most of the maintainers are present. +[Bridget] No meeting Nov 19, Nov 26; yes meeting Dec 3, Dec 10, Dec 17; no meeting Dec 24, Dec 31; Yes meeting Jan 7 and going forward. +Do we have better/more stats on chart downloads now? [Bridget] + Nope! Because GitHub Pages +Charts that upgrade with an issue when the previous version used a deprecated API. Ref https://github.com/helm/helm/issues/9014 [Martin] +Something using deployment appbeta (old thing), when you upgrade the chart, the old thing is not deleted due to new API versions +“Documenting is better than magic” (lets document this edge case) +Link to release calendar on helm.sh? [Marc] +Marc will make a PR + +Assignments for next meeting (Dec 3) +Moderator: Josh Dolitsky +Notes: Dan Garfield +Issue Triage: Bridget, Fisher, Martin + + + +November 5, 2020 +Assignments for this meeting +Moderator: Marc K +Notes: Bridget Kromhout +Issue Triage: TBD + +Announcements +Farina: the stable and incubator repos are about to leave artifact hub +Farina: we cut the 3.4.1 release on Wednesday + +Discussion +Deprecation(s) Status Check [Bridget] +8 days to go +Do we want a super-minimal blog post that just explains that if you do nothing else, you should do this: +helm repo rm stable +helm repo add stable https://charts.helm.sh/stable +Farina: maybe a blog post to pull their stuff out of stable and incubator? Git history? +Joe Julian: remind people to check requirements yaml +Bridget: reach out to Scott Rigby and Matt Farina; draft last-minute tactical “what you must do” blog post. +How do we communicate essential info about changes with people we’re missing via our usual channels? [Farina] +Bridget] AKS emailed customers; GKE can’t do that but will do outreach +[Farina] Do we have any Digital Ocean contacts? +Farina: Minikube builds in a pop-up +Marc: in a deprecation you can mention it in the tool itself +Paul C: corporate users aren’t big fans of MOTD from internet +Bridget: get their service providers to reach out, when possible? +Martin: get people the message when they upgrade their tool +Marc: perhaps optionally enable “helm announcement”? +Farina: will consider and start a HIP +From Paul Czarkowski to Everyone: (11:43 AM) +a bit left field I just thought of we could have an announcements field in the index.yml of chart repos, and any time a person does a `helm repo update` they'd get a printout of the announcements. +From Paul Czarkowski to Everyone: (11:44 AM) +then we could have an announcements repo that has an index.yaml but no charts so people can subscribe to announcements by adding the repo + + + +Release histories not pruned. Since they are failures… should they be? https://github.com/helm/helm/pull/8881 [Farina] +Farina: pruning only happens after a good installation - could end up with many failed +Joe Julian: happens thousands of times in CI/CD +Martin: technically a bug - but the logic from the last deployed release is valid +Marc: let’s continue the discussion in the PR + +Lint all docs in Multi-doc yaml, should we include a new parser `k8s.io/apimachinery/pkg/util/yaml` ? https://github.com/helm/helm/pull/8862 [Martin] +Should https://github.com/helm/helm/pull/8913 be merged to fix https://github.com/helm/helm/issues/8621 and new issue opened to cover other issues raised? +Farina: two cases: if you have an empty template, or multiple docs in the yaml file - maybe there is an existing issue for the “multiple” case? +Farina: we should merge both +Joe Julian: I think the one you're thinking of talked about multiple empty documents in the file: +--- +--- +--- + +Are internal commands subject to backwards-compatibility (helm docs) [Marc] +Farina: Let’s put it behind a flag + +What’s the best source of replacement examples for the docs? (assuming we may not want to point at stable anymore) [Bridget] +Farina: sounds good - could document best practices + +Bridget: who’s got questions or concerns around the changes? +Joe Julian: we’ve been telling customers they have to upgrade +Martin: you don’t have to change the version of Helm - but do have to point to the right places +Marc: at a minimum, 2.17 would be important because of Tiller. +Farina: we don’t have a solid date on when the GCR buckets will stop working +Joe Thompson: question about the deprecation - what’s the emergency procedure in place? +Farina: the current plan is every chart will point to an archive that gives an error +Dan Garfield: should we yank it early? +Bridget: let’s not make breaking changes during shopping holiday change freeze +Martin: and remember, the archived charts will still exist. +Paul: let’s not disrupt people for no reason +Farina: charts.helm.sh is going nowhere. The google location is what we don’t control. +Martin: so, change your URLs to charts.helm.sh! + + +Assignments for next meeting +Moderator: Martin Hickey +Notes: Josh +Issue Triage: Farina + +October 29, 2020 +Assignments for this meeting +Moderator: Adam Reese +Notes: Bridget Kromhout +Issue Triage: Matt Fisher & Bridget Kromhout + +Announcements + 3.4 & 2.17 [Farina] +upgrade! + +Discussion +Deprecation(s) Update [Farina] +Farina: Friday November 13th, Helm v2 support ends and charts stable/incubator go into archive mode +Farina: Blog post going out tomorrow +Farina: CNCF will post things Friday and Monday - also, Kube Weekly +Farina: Removing stable and incubator from artifact hub on Nov 6th +[Scott] discoverability will increase as charts get relocated to new repos +Farina: helm/helm CI won’t break with the Docker changes +Helm Hub -> Artifact Hub move [Farina] +Can we get this PR looked at for the 3.5 milestone or before? Replace Helm Hub with Artifact Hub · Issue #8626 · helm/helm [Bridget] +Farina: it pays to add your items early! +Farina: we as a whole get the traffic to hub.helm.sh and are redirecting it to artifact hub - other choices include passing DNS to artifact hub in terms of them doing the redirect +Bridget: does this affect stats? +Farina: we can get that now (though it’s not super useful data - unsure what some of these queries are) +Scott: of course we want to decrease our maintenance burden but we might want data +Butcher: we shouldn’t be in the critical path - let’s instead help Artifact Hub craft good stats/reporting +Farina: reach out to artifact hub maintainers for stats/data +Farina: let’s redirect to artifact hub (affirmed by the call) + +Dependabot k8s patch updates and Helm patch releases [Farina] +Check on packages that have bugfixes, if we consume them +Fisher: sometimes these affect helm - a recent client release did +Adam: let’s look at them and (usually) merge + +Focus on recruiting new maintainers [Butcher] +Butcher: let’s form a sub-team to strategize about solving this +Bridget: volunteers +Adam: people may not want new commitments this time of year +Fisher: we could start doing up-front work on docs and testing +Karena Angell [Red Hat] would like to be more involved - wants clarity on what the Helm community _needs_. (Pradeepto B, in chat, is also on her team.) +Butcher: as a group we need to identify who would make good core maintainers +Butcher: we can mention it on calls +Farina: have we documented being a maintainer? +Adam: yes - it’s documented (https://github.com/helm/community/blob/master/helm-maintainers-onboarding-guide.md) +Bridget & Farina will follow up with docs + + +Generating docs for helm-www (not done for 3.4?) [Marc] +https://helm.sh/docs/helm/ +v2? https://github.com/helm/helm/issues/8869 +[Bridget] this is a manual process - https://github.com/helm/helm-www#updating-the-helm-cli-reference-docs +Bridget and Marc will sync + +update chart repository dependency references https://github.com/helm/charts/issues/23971 [Marc] +Farina and Scott will pair on this + +[joe] Can I get this merged? Reduce linting severity for users of out-of-date kubernetes · Issue #8608 · helm/helm +Deprecated APIs were the reason originally - upstream has now started keeping this data, and this is useful +Fisher: this has one LGTM - Adam will look at it +Farina: added to the 3.5 milestone + +Assignments for next meeting +Moderator: Marc +Notes: Bridget Kromhout +Issue Triage: TBD + + +October 22, 2020 +Assignments for this meeting +Moderator: Fisher +Notes: Martin +Issue Triage: Farina + +Announcements + (none this week) + +Discussion +Helm v3.4 and v2.17 [Farina] +RC1s out +Plan is to release on Monday & blog post Monday as well +Main release features: +Default location for Tiller is GHCR (not to be confused with GCR!) +New helm repo location +Criteria to accept dependabot PR [Marc] +Cobra 1.1.1 https://github.com/helm/helm/pull/8916 +What is the criteria for sub-dependencies brought in by dependabot? [Marc] +Is test passing sufficient? Fisher thinks for the most part it is good to merge +There can be exceptions like k8s from time to time [Fisher] +Need to check if licenses are acceptable [Farina] +HIP 0002: Announced release dates [Marc] +Ok to announce 3.5 for January 13th, 2021 once 3.4 released? +Ok to start monthly cycle for patch releases once v2 is done? +https://github.com/helm/helm-www/pull/869 +Once 3.4 is released, then we would like to start announcing major releases. Also patch release announcements. Is this ok to go? [Marc] +Added those milestones and added dates to them [Farina] +We should add a calendar to add the dates in place. Marc is going to add the calendar to the HIP. +Helm Charts Repo Switchover timeline [Vic] +Move charts storage over to GH Pages +Implement URL switchover in Helm 2.17 +Move index.yaml in GCS to point to new GH pages URLs +Create specially crafted chart that presents users with a hard failure +Mark all charts as deprecated +Switch index.yaml to point all charts to the specially crafted chart +Reduce the size of the index.yaml +Disable public access to buckets +Chart producers: Repos switching but need to move charts to new host [Farina] +Chart consumers: Switching stable/incubator but repo is going to become an archive [Farina] +Ongoing plan: Martin points out that some still haven’t changed - who then are (by default) archived +“Band aid” needs to be ripped off wrt obsolescence of charts. So charts are messaged that the charts are deprecated. [Farina] +Message so that users know that charts are deprecated [Dan] +Lint warning when no `templates` directory. Should this be removed as you don’t need it for a valid chart Ref: https://github.com/helm/helm/issues/8033 [Martin] +Answer in the issue [Farina] [Fisher] + +Assignments for next meeting +Moderator: Adam Reese +Notes: Bridget Kromhout +Issue Triage: Matt Fisher & Bridget Kromhout + +October 15, 2020 +Assignments for this meeting +Moderator: Marc +Notes: Bridget +Issue Triage: Martin & Farina + +Announcements +Helm turns 5. Started Oct 19, 2015 (first committed). [Farina] +Butcher points out it’s like 80 in internet years +Discussion +Stable and Incubator repos [Farina] +Should we consider extending the date to make helm/charts read-only, since it has taken longer than expected to relocate stable charts [Scott] +Scott: personally I'm of two minds about this. On one hand extending this could help keep end users happy while the charts relocation effort is continued / escalated. OTOH, it may make chart maintainers feel why bother to help relocate. I would say if we consider this, it would be capped to specific number of months +Paul: read only timeline is still good IMO +Much discussion on TOC list etc +Farina: lesson learned: don’t use a bucket name - use custom domains/CDNs for flexibility +Farina: Kubernetes credits for GCP only apply to k8s itself, not other CNCF projects, so it’s a funding issue to keep these from +Butcher: GitHub has raised bandwidth caps to allow for chart repos - we will make public announcement/thanks next week +Scott: about 45min to pull down the index file - in-flight +Farina: should we update the URL in people’s configs? +Vic: ideas on what we can do - we can’t change the response offered by cloud storage. But a better experience would be ideal (like changing index file, or possibly better: changing the index to point to a chart that has a require field that won’t in their files, but points them at docs to help them fix this.) +Martin: option 2 good, because otherwise people will never update +Vic: this is a happy medium - but my main concern is not wanting to blow away their resources. +Fisher: are there any stable or incubator charts signed by chart authors, which might lead to a failure? +Farina: no, nothing is signed. +Fisher: Can we swap out what they receive without telling them? +Bridget: If we’d had a custom domain in the first place they’d never know when we swap out back-ends, unless it breaks +Vic: a hard fail is safest and a message telling them the path forward +Farina: we need some kind of direction in 2.17 that tells people what to do. +Butcher: what was the argument against automatic, other than proxies? +Joe Julian: many customers are behind proxies with air-gapped clusters +Farina: proxies sometimes limit domains/routing - we should print a message in logs +Farina: we will add something to 2.17 and 3.4 for this. Also: how do we handle stable/incubator? +1 - do nothing/404 +2 - redirect to new download locations (will err eventually) +3 - we could craft a required with a variable that does not exist to throw an exception - but needs investigation/testing +Timeline: we need a solution before Nov 13 +2 weeks before, we could have all charts fail or could give a message +Fisher: client caches locally so without helm repo update, we won’t have them getting updates to their local +Let’s bring this to chat/cartographers list +Farina will look into whether this kind of chart action breaks a cluster. +Vic looking into how much the bill is the index file vs something else +Farina: there is metadata not used - could save bandwidth there +Butcher: on the hook to start the PR for changes to helm 2 and 3 to deal with the stable and incubator repos - docs page for www + +Deferred to next week: +Helm v3.4 and v2.17 [Farina] +Impacts of gopkg.in/yaml.v2 v2.3.0 [Marc] +Dependency of Cobra 1.1 +https://github.com/helm/helm/pull/8890 +HIP 0002: Announced release dates [Marc] +Waiting for 3.4 +https://github.com/helm/helm-www/pull/869 +Helm Charts Repo Switchover timeline: +Move charts storage over to GH Pages +Implement URL switchover in Helm 2.17 +Move index.yaml in GCS to point to new GH pages URLs +Create specially crafted chart that presents users with a hard failure +Switch index.yaml to point all charts to the specially crafted chart +Reduce the size of the index.yaml +Disable public access to buckets + +Assignments for next meeting +Moderator: Fisher +Notes: Martin +Issue Triage: Farina + +October 8, 2020 +Assignments for this meeting +Moderator: Marc +Notes: Josh +Issue Triage: Farina + +Announcements +Artifact Hub takes over for Helm Hub [Bridget]: https://helm.sh/blog/helm-hub-moving-to-artifact-hub/ (some docs updates pending) +There was a CNCF blog post about "Important Helm Repo Changes & v2 End of Support in November": [Scott] +https://www.cncf.io/blog/2020/10/07/important-reminder-for-all-helm-users-stable-incubator-repos-are-deprecated-and-all-images-are-changing-location/ +From Dan +Went out in the newsletter +Discussion +Helm Lightning Talk @ KubeCon [Karen] +Deadline to fill out the form is Oct 11 +15 minute format +Does anyone have ideas? Highlight something special? +Bridget: Karen talks w/ each maintainer about something specific +Will be pre-recorded +Helm Workshop: v2 to v3 - Oct 21 [Karen] +112 attendees registered to participate, as of this morning! +please sign up on Google sheets so we know you'll be there to help! +We need to register too (it’s free and easy with your existing LF account): https://events.linuxfoundation.org/helm-v3-workshop/ +Still need “runners” - +Can expand to non-maintainers if needed +Swag will be involved + + +Helm Project Pavilion/Office Hours [Karen]Three 45-min office hours +Last kubecon, was not effective. Numbers disappointing, 3 clickthroughs according to stats +Instead of this we could do office hours (3 45min sessions) +Martin: it worked in San Diego (in person) +3.4 release planning [Farina] +3.5 planned for january +Kube 1.19 support not in a release yet +3.4 Milestone: https://github.com/helm/helm/milestone/94 +7 open items +“Test” -scott 😂 +Farina: Let’s set a date: next wednesday: 10/14/2020 +Martin: update modules in 2.x? +Should the 3.4 release include https://github.com/helm/helm/pull/8626 (Artifact Hub update) [Scott] +No hub search in 2.x 👍 Updated note above +Farina: let’s cut 2.17.0 before 3.4 so the most current is a 3.x +Jobs and --wait flag [Farina] +https://github.com/helm/helm-www/pull/884#discussion_r501849243 +If a job is part of a hook, it waits. But if part of a chart - relies on --wait flag +People have diff views on what wait means +Special case for jobs? +Scott: could break alot of charts +Maybe new flag? --wait-jobs or --wait-for-jobs + “How Projects Join the Helm Organization” proposal by Matt Butcher seeks your input and LGTMs: +https://github.com/helm/community/pull/149 [Bridget] +Bridget has impersonated dr. butcher +2 approvals from org maintainers needed +Slack integration - let’s give this a yes (my recommendation - I don’t see a down side) or a no: [Bridget] + https://github.com/helm/helm/issues/8610 +Low-hanging fruit to make people happy +Allows people to view issues within slack +OCI Pull PR: https://github.com/helm/helm/pull/8843 [Josh] +Slight miscommunication but resolved +Could base change atop original work so contributor gets points in the commit history +https://stackoverflow.com/questions/7442112/how-to-attribute-a-single-commit-to-multiple-developers +Could credit him in notes +Martin: API deprecation notes - may need issue + +Assignments for next meeting +Moderator: Marc +Notes: Butcher +Issue Triage: Martin & Farina + + +October 1, 2020 +Assignments for this meeting +Moderator: Adam +Notes: Scott +Issue Triage: Farina + +Announcements (items of general interest like releases, requiring no discussion) + “How Projects Join the Helm Organization” proposal by Matt Butcher is now ready for org maintainer review: https://github.com/helm/community/pull/149 [Bridget] +Please review! +Helm maintainer session for KubeCon North America 2020: https://sched.co/ekHz [Bridget] Wednesday, November 18 • 4:55pm - 5:30pm Eastern +- a good time to be in the CNCF Slack channel for the maintainer track so as to discuss/answer questions (during and after) +Removal of governance section on first org maintainers election [Farina] https://github.com/helm/community/pull/148 +PR in - votes in - will be removing that section. + +Discussion Suggest five-minute discussions with a sentence or two about what you’d like to discuss, a link to the issue(s), and your name. Discussion suggestions may be moved to future weeks or GitHub, if warranted.) +Deferred from last week: Announcing migration needs in CNCF blog/newsletter [Dan Garfield] +Current draft here https://docs.google.com/document/d/1D_cbuxObeD6yjKUmfcRjF_i1gyKnGZxG3intv57xw1A/edit?usp=sharing +Deadline October 5th +Reviewed already by some Helm team members (thanks Karen, Bridget, Josh) +Dan will work with Scott (and Matt Farina if he has time?) in Slack before the deadline +Deferred from last week: Helm Hub -> Artifact Hub timeline [Farina] +Hoping to do next week. Defer again to next week +Deferred from last week: Slack integration - do we want to allow this? [Bridget] +https://github.com/helm/helm/issues/8610 +Is there any good reason to say no to this? Please look if you can + End User Story for KubeCon Keynote Project Highlight [Karen] +Due Oct 5 +Any ideas? +If so, please pass along to Bridget and Karen +Helm Workshop: v2 to v3 - Oct 21 [Karen] +Living Event doc +Still need help with staffing presentations (2) and runners (10) for workshop +Feature detection in Helm (lookup function) https://github.com/helm/helm/issues/8834 [Farina] +Looking for a possible hack for older versions of Helm 3 before version was introduced +Adam will think about it +[feature] add option to force/override "Release.Service" back to "Tiller" [Bridget] https://github.com/helm/helm/issues/7211 - possible blocker for migration from v2 to v3 - thoughts? +Farina: could probably add a flag? +Adam: should this be built into Helm, though? +Farina: tear down/standup replacement is the only fix for this, because of match label immutability (specifically, the user template added a changing field into a match label) +Scott: https://github.com/helm/helm/issues/7173#issuecomment-562648387 addresses some of this. Specifically linking to https://github.com/helm/helm/issues/7082 +To be continued + +Assignments for next meeting +Moderator: Marc Khouzam +Notes: Josh Dolitsky +Issue Triage: Matt Farina + + + +September 24, 2020 +Assignments for this meeting +Moderator: Martin +Notes: Bridget +Issue Triage: Farina + +Announcements (items of general interest like releases, requiring no discussion) +Helm v2.16.12 and Helm v3.3.4 have been released +https://github.com/helm/helm/releases/tag/v2.16.12 +https://github.com/helm/helm/releases/tag/v3.3.4 +Patch releases; thanks to Farina and Fisher. +Fisher: It might be important to note that 3.3.2 was the initial release with the security fixes, and 3.3.3/3.3.4 were regression fixes +Zoom call password [Farina] +Zoom will require passwords or waiting rooms across all CNCF + +Discussion Suggest five-minute discussions with a sentence or two about what you’d like to discuss, a link to the issue(s), and your name. Discussion suggestions may be moved to future weeks or GitHub, if warranted.) +Stable and incubator repositories being removed in November. What is the plan for users? [Martin] +Martin: we had been assuming that in orgs people create their own or fork, but they seem to be using the community repos quite a lot - is the best way to do this a detailed document on how to migrate? +Farina: we probably have to spend October on a major campaign of informing people on how to migrate - it’s not cost-feasible to run them centrally +Martin: the message has gone out but we need a good migration path for people. +Fisher: Karen is the community manager around comms +Farina: Helm 2.17 will have a flag to disable adding the stable and incubator so `helm init` won’t automatically err out, and get tiller image from the github container repository +Adam: what about releases? +Farina: get.helm.sh is in azure but if someone is using the old location then yes that will fail +Fisher: we have a clean migration path and blog post for that (over the last year and a half) +Farina: the 8-meg helm init index.yaml for helm 2 is a big part of the bandwidth +Scott: happy to help with migration path for charts +Farina: will work with Scott on that +Marc: where to continue discussion? +Farina: let’s continue discussion in the charts repo in an issue +Deferred from last week: HIP 002 -- Fixed release dates: https://github.com/helm/community/pull/143 [Marc] +Marc: Getting close to an agreement - we need to agree on a date and publish it +Farina: may be related to k8s 1.20 then? Or something off 1.19? +Butcher: we should cut a 3.3.4 with 1.19 support +Farina: let’s start with the approval of a HIP - we need to look at date possibilities in the coming weeks +Fisher: project and org maintainers can approve these HIPs - final approval details pending +Security patches can lead to unexpected problems. How can we mitigate these with previewing upcoming changes? [Bridget] https://github.com/helm/community/issues/128 +Farina will follow up with the CNCF to get the list set up +Farina: We will need to handle the vetting process for list members - k8s uses a vouching system +Dan: can we use the k8s list? +Farina: the CNCF requires specifics around being a certified distro - Helm repos will have different criteria so this can’t be a subset of the k8s list +Butcher: let’s exercise caution and due diligence here +Martin: we will revisit over coming months +End User Story for KubeCon Keynote Project Highlight [Karen] +Due Oct 5 +Focus on graduated projects - to be highlighted during keynotes, focus on end user stories +Helm v2-to-v3 Hands-on Workshop - Oct 21 [Karen] +Need to decide on content + confirm who can help +Working with CNCF - this will be an official CNCF event +Format: two presentations and hands-on workshop - perhaps 9-1:30 (pacific time) - Karen looking to find out who can help with the workshop portion - going to use the zoom webinar platform, so we would like maintainers to be hands-on +If free, attendees might flake out? +Scott: “Maybe also a git repo for the workshop? Would we want a step-by-step like that? It seems to be a useful pattern for a lot of hands-on workshops” +Volunteer/Staffing doc -- https://docs.google.com/spreadsheets/d/1IbZkM_eKiCeOc01lVxCXu1-aiBKNj-9SqP_Swn09rLs/edit?usp=sharing + +Out of time: Announcing migration needs in CNCF blog/newsletter [Dan Garfield] +Current draft here https://docs.google.com/document/d/1D_cbuxObeD6yjKUmfcRjF_i1gyKnGZxG3intv57xw1A/edit?usp=sharing +Deadline October 5th +Helm Hub -> Artifact Hub timeline [Farina] +Slack integration - do we want to allow this? [Bridget] +https://github.com/helm/helm/issues/8610 + +Skip discussion - resolved - Various v2-deprecation-related issues [Bridget] +[Skip discussion - resolved on GitHub] Helm v2 deprecation progress [Bridget] +Do we want to think about https://github.com/helm/helm/issues/7239 - the ability to mark a chart as v3-incompat? [Bridget] +[fisher] I closed the issue. There has not been any activity since it was opened last December. +[Skip discussion - resolved on GitHub] https://github.com/helm/helm/pull/8363 [Bridget] - +“Helm --wait should wait for all manifest resources to be ready; However helm doesn't wait for jobs to be completed when job appears in the manifest, not in the hooks” +Can we review this and see if it should move forward? +[fisher] I’ve added it to the next Helm 3 milestone for review. +[Skip discussion - resolved on GitHub] Can we get a review on Allow helm test to run a subset of tests #8484? [Bridget] +It could close an old issue +[fisher] I’ve added it to the 3.4.0 milestone for review. +[Skip discussion - resolved on GitHub] Is executing hooks in parallel useful? Should we solicit more help here? [Bridget] +https://github.com/helm/helm/pull/7792 +[fisher] I’ve closed the PR and pointed out how users can move this proposal forward. + +Assignments for next meeting +Moderator: Adam +Notes: Scott +Issue Triage: Farina + + +September 17, 2020 + +Assignments for this meeting +Moderator: Marc +Notes: Bridget +Issue Triage: Farina, Josh, and Fisher + +Announcements (items of general interest like releases, requiring no discussion) +CNCF CD Radar (Helm is on it) https://radar.cncf.io/2020-06-continuous-delivery [Farina] +Though Helm isn’t a CD tool it was listed as “Adopt” +Contacted the end users to ask them for feedback on Helm [Farina] +Radar was put out by “end users” so Farina reached out to that mailing list for feedback +QCon Plus Helm Session https://plus.qconferences.com/ [Bridget] +Voluntold Butcher & Farina +Discussed stable repo GCP hosting costs with Vic [Scott] +Costs are not small - chart version package history will need a different solution as this is not going to be sustainable after Nov 13 +Perhaps we could revisit moving their past packages/index file to github hosting? +Butcher likes this idea & will help investigate +Talked with ASF about the possibility of hosting charts that install Apache projects [Scott] +They don't currently have a policy that allows this. Here is a proposal based on those conversations to update their policies on "convenience packages" like Helm (it references Helm as well as other packages): https://cwiki.apache.org/confluence/display/COMDEV/Updates+of+policies+for+the+convenience+packages Please comment if you're interested +Licensing/ownership considerations + + +Discussion Suggest five-minute discussions with a sentence or two about what you’d like to discuss, a link to the issue(s), and your name. Discussion suggestions may be moved to future weeks or GitHub, if warranted.) +Conversation about Helm’s governance [Butcher] +Butcher: two issues. 1) the official org governance structure allocates org maintainership based on which project you’re affiliated with - we need to revise this as projects are sunsetted 2) we also don’t have a project for managing the security team and we should probably add other core maintainers as the project grows - we have no documented process for that either. +Scott and Farina and Martin volunteering to help; also Dan Garfield is willing to help (he’s working on this with the Argo team right now) +Fisher doesn’t think we need to address finance or security org-wide but need to reach out to sub-projects as needed, to provide opportunities for other parties to join in security review +helm/helm call for vote open on 2 approvals for community PRs [Farina] +Farina: we’ve had some commits merged that warranted further discussion - it would be better to catch some issues earlier on +Fisher: we changed this for Helm’s velocity - stability is more important now +Martin: it’s a sticky wicket when you get into backwards-compat +Changing vs extending error strings [Marc] - is this okay? +Fisher: if the error message is output being parsed, then changing it could break scripts - so additive is different from changing/removing - also, changing error types can cause problems for other packages that import, etc (depends on context) +Butcher: perhaps this needs more discussion (as go the language will routinely change error text) +Process HIP could be the path forward! Marc will star;t will need input from other maintainers +Decision on whether the merged PR fixing the few remaining stdout to c.Log is considered a PATCH or MAJOR (whether it should be rolled back until Helm 4, or ok to stay) [Scott] https://github.com/helm/helm/pull/8437 +This one seemed really on the edge for the team, as format was changed (grep should still work), but it is a difference. In keybase nearly everyone seemed to go either way on this one +Fisher: we can work on this in parallel +Docs translations quirk [Bridget] +An ever-growing number of PRs (https://github.com/helm/helm-www/pulls?q=is%3Apr+is%3Aopen+label%3Atranslation) for translations of https://helm.sh/docs/helm/ are waiting for merge because the English pages are auto-generated by the cli and then stored on the website, which cannot currently be done for other languages - is it okay to put translations of some of these docs on the website, with the understanding that (for the foreseeable future) they won’t be generated by or visible in the cli? +Vetting language-specific contributors +Translation community +Helm v2 deprecation tasks [Bridget] +Default tiller image location +https://github.com/helm/helm/issues/7211 (heritage=Tiller issue) +Farina: GitHub container registry will be the default, with mirrors on quay and dockerhub +Blog post and announcement with CNCF [Dan Garfield] +Dan: Started drafting blog post to clarify what will help people who find that their tiller location is gone +Bridget: https://helm.sh/blog/helm-v2-deprecation-timeline/ +Marc: we need to clarify what the user experience change is +Scott: From Keybase, Paul & I have volunteered to work on a post for updating from stable to elsewhere (mostly a how-to for chart maintainers. But also can be helpful for end users +Martin: we have to talk about this again next week +Scott: Here’s the issue to follow: https://github.com/helm/charts/issues/21103💯 +Deferred to next week: HIP 002 -- Fixed release dates: https://github.com/helm/community/pull/143 [Marc] + +Assignments for next meeting +Moderator: Martin +Notes: Scott +Issue Triage: Farina + +September 10, 2020 +Assignments for this meeting +Moderator: Marc +Notes: Martin +Issue Triage: Farina and Fisher (shared triage; both are in and out this week) + +Announcements (items of general interest like releases, requiring no discussion) + + +Discussion (Suggest five-minute discussions with a sentence or two about what you’d like to discuss, a link to the issue(s), and your name. Discussion suggestions may be moved to future weeks or GitHub, if warranted.) +De-listing stable and incubator from Helm Hub as planned? (followup from last week) [Farina] +Two current thoughts on migration plan for users: +1) chartcenter is hosting a “mirror” of the stable and incubator repositories +2) storing this ourselves in S3 +Josh: does this mean new URLs? +Farina: yes. We cannot move google cloud storage buckets from one to another, preventing us from migrating the URL in a clean fashion +Fisher: has there been a discussion over with the chart maintainers on which path seems worth investigating? +Farina: this is something we need to talk more about there +Marc: the one thing that’s a bummer about all this is the guarantee that there is a “stable” repository I can depend on +Farina: the hard discussion here has to do with billing. Google has been sponsoring the bucket hosting the charts. Google is now no longer willing to pay for the bucket. If there is a partner willing to pay for a chart repository then we’d be happy to work with them on that +HIP for fixed release dates - https://github.com/helm/community/pull/143 [Marc] +I tried to put the basic ideas in a HIP - +Butcher: the two things I wanted to ask were: 1) do we always want to discuss security fixes are always as patch releases, and 2) do we want to commit to a new minor release after a Kubernetes release (1 month after or some time after) +Farina: one of the risks was that updating client-go has been a major paint point. Some releases have certainly taken a month to update +Fisher and farina: FWIW, we’ve received backlash for releasing security fixes in a minor release only, so it might be worth making it a point to always cut patch releases in the case of a security fix +Helm security audit [butcher] +We are in the last phases of our security audit. As a reminder, each year the CNCF sponsors a security audit +There will be two reports: an architectural report, and a code report +Two questions: do we want to disclose it to the security maintainers before releasing to the public? +Farina: first opinion, we should release it to the other security maintainers to reduce that bus factor +Fisher: who is on the security maintainers list? +Farina: myself, butcher, fisher, adnan, nikhil, and vic +Storing Tiller after GCR [farina] +Tiller is now in Quay. We’re looking to move to Github Container Registry +(farina had to leave at this point) +Dan Garfield: We should release a coordinated message on the CNCF newsletter, publish on the release notes, make it clear in `helm init --upgrade`, etc. This way we won’t have users upset when their tiller instances restart and it goes into CrashLoopBackoff +Question about governance of Helm and deprecating chart repo [Butcher] +Punted to next week to discuss governance +Related: Security group membership + +Assignments for next meeting +Moderator: Marc +Notes: Bridget (unless someone else claims it!) +Issue Triage: Farina, Fisher, and Josh + + + +September 3, 2020 +Assignments for this meeting +Moderator: Marc +Notes: Bridget +Issue Triage: Butcher + +Announcements (items of general interest like releases, requiring no discussion) +3.3.1 released: https://github.com/helm/helm/releases/tag/v3.3.1 +Farina: we wanted to get the cert-manager issue fixed + +Discussion (Suggest five-minute discussions with a sentence or two about what you’d like to discuss, a link to the issue(s), and your name. Discussion suggestions may be moved to future weeks or GitHub, if warranted.) + +De-listing stable and incubator from Helm Hub as planned? [Scott & Farina] Progress of finding new homes for stable charts: https://github.com/helm/charts/issues/21103 +Stated on 20 Aug that further discussion was needed +Aug 27: stable/incubator becoming unavailable? Blog? [Marc] +Aug 27: Blog post (Farina + Bridget), docs updates, artifact hub switch +Aug 27: Revisit next week +Sept 3: Bridget can participate in blog post writing and docs updating starting Sept 14 +Farina: Many charts have not found new homes - do we want to remove it now? We’re running out of time here +Martin: there were questions around the prometheus chart - large community - Scott working on moving that - we need a clear path forward +Farina: reminder: Nov 13th the bucket will (likely) be garbage-collected - we have an issue on the community repo around moving that elsewhere +Farina: maybe something useful would be a tool to grab the history for a chart and download it etc +Marc: what do we do if important charts aren’t relocated yet? +Farina: we need to make a good plan to move these - I can start work on this Tuesday - JFrog has volunteered on some of these (chart center has a cache) +Martin: charts are where the value of Helm is seen - we need to make sure people have options +Farina: valuable to talk about a new way to replace the stable/incubator repos - I see the problem but the community needs to come up with the answer +Fisher: it’s not like the source code is going away either - there are alternatives but we have to figure out how to support going forward - have we reached out? A question for the chart maintainers team. +Bridget: so we’re moving away from centralized ownership +Farina: Scott is working on a checklist to move to new owners +Farina: will send out an email to the chart maintainer mailing list after this +Farina: let’s talk about this again next week. + +What remains to be done before we can make HIP official? At least a dozen stale issues could easily be resolved with a suggestion to follow the newly-formalized HIP process, once it’s merged. [Bridget] https://github.com/helm/community/pull/140 +Deferred from Aug 27 +Fisher: proposal itself is ready - at this point, we need quorum from org maintainers. (PR review and approval) +Fisher: Let’s seek consensus and ensure it’s not too heavy-handed +Farina: Fisher, can you send an email to cartographers? +Fisher: yes + +Dependabot: https://github.com/helm/helm/pull/8574 [Marc] +Deferred from Aug 27 +Marc: I think Fisher wanted feedback? +Fisher: I’ve seen cases where dependabot creates PRs for security issues and thus makes it public - sending an email can be safer +Fisher: in a couple cases I’ve seen lots of visibility around npm vulns. +Farina: Docker packages where we don’t use the runtime part have CVEs that don’t impact us - but we would see said CVEs +Bridget: it doesn’t nag - just tells you on each version +Farina: if it’s a problem we can turn it off +Fisher: I’m fine with a trial run - it doesn’t rewrite code, just submits PRs +Fisher: let’s give it a try and we can discuss further if it proves necessary + +Application version as container tag? [Farina] https://github.com/helm/helm/pull/8562 +Farina: version vs packaging are not the same +Farina: an annotation might be for the application version, not the container tag version - this PR may be a problem vis a vis separation of concerns? +Farina: we may need to communicate more clearly on these matters +Marc: so an empty version is better? +Farina: no, it’s better to have no annotation at all +Bridget: point of order - will we need to revert that PR? +Martin: I volunteer to do it as I merged it in first place - reverting it back may be the best action. + +Moving images from DockerHub to GitHub? [Bridget] https://github.blog/2020-09-01-introducing-github-container-registry +Bridget: should we move to this? +Farina: do we have access to this beta feature? +Fisher: in my tests we have access - it is available to everyone who has packages (as long as you have a token, if you have read access to the API, and you can see /organization) +Farina: I’ll test if we can migrate everything +Fisher: we should make sure we loop the CNCF in +Bridget: currently no limits on public +Farina: we’d want to avoid hitting a limit but no limit is documented yet + +Allow templating in value files? Yes or no? [Martin] https://github.com/helm/helm/pull/6876 +Martin: this is a huge PR, now broken into three - the big question is what is our opinion on this? Do we want to allow this or tell the person now? +Fisher: there is an issue of cyclic dependencies here - where does Helm’s role end? Templating in a values.yaml file means you need to render before passing into chart, then re-rendering again, and where does it stop? Perhaps that’s a better case for an external tool to do, and have Helm do rendering once? +Farina: there’s separation of concerns here, and I wondered how that PR fit into workflows - this is a great thing for a HIP - the why, the how, how it fits in, dealing with concerns. Little pieces that fit together. +Farina: let’s pause on this until we can suggest they create a HIP +Fisher: I will take the action to explain this pause/conversation to them + +Assignments for next meeting +Moderator: Marc +Notes: Martin +Issue Triage: Farina can help and The Canadian can also help (we have a Labour Day in Canada as well) and Martin also + + +August 27, 2020 +Assignments for this meeting +Moderator: Matt Butcher +Notes: Bridget +Issue Triage: Butcher, Bridget + +Announcements (items of general interest like releases, requiring no discussion) +Anonymized questions available for your perusal from Marc & Bridget’s KubeCon EU Intro to Helm session; Bridget sorted them into topics and will use these as inspiration for blog posts/doc updates: https://docs.google.com/spreadsheets/d/1JHIxdnajgY_4BC8OCoQc-WMQJsSdeWLcsprxCLO10jI/edit?usp=sharing [Bridget] +Butcher: also if you have numbers from your Helm session, drop them in here - Intro to Helm got ~566 + +Discussion (Suggest five-minute discussions with a sentence or two about what you’d like to discuss, a link to the issue(s), and your name. Discussion suggestions may be moved to future weeks or GitHub, if warranted.) +Should the “mapkubeapis” plugin be moved to Helm org (https://github.com/hickeyma/helm-mapkubeapis) ? [Martin] +(deferred from 20 Aug, to when Martin is here) +Martin: We couldn’t find a nice solution, so we still need the plugin - should that be in the Helm org as it’s necessary (instead of in Martin’s github?) +Butcher: related - helmfile has also asked - we need documented guidelines +Farina: helmfile is not apache2 licensed - that’s the big blocker +Butcher: if anyone can document the basics in a helm community PR, that would be a good start +Farina: Martin’s is apache2 so that’s not an issue +Butcher: we could use Martin’s as a test run for the process +Farina: who would like to write this up? I’ll take the followup action +Slack app integration? https://github.com/helm/helm/issues/8610 [Farina] +(skipped on 20 Aug) +Farina: we can deal with it on GitHub +Bump to Kubernetes v1.18 in Helm v2 [Martin] +This has repercussions for projects that use both Helm v2 and v3 APIs as some k8s API calls would be broken through the Helm v2 API when using latest Helm v3 as a dependency +This would mean not being able to upgrade above Helm 3.1.x +Example: https://github.com/hickeyma/helm-mapkubeapis +Martin: in 3.2 we bumped Helm 3 to 1.18 - some APIs changed +Martin: however, Helm v2 doesn’t require 1.18 - so there will be issues (v2 was on 1.16) - is this something we should do? I can take the action to do it. +Farina: we have 2.17 that needs to come out that takes us off Google for storage, so something else could in theory go in there? +Bridget: how do we know this doesn’t come with regressions? +Butcher: we need to decide if we’re changing our minds on adding k8s compat that isn’t security, and decide +Dan Garfield: do we have stats on how many people are still pulling those images? +Farina: I can try to pull that as we discuss other things +Highest item: v2.14.3 - the most widely-downloaded - some CI system +Then. 3.x +Three diff 2.x are still in the top ten + +De-listing stable and incubator from Helm Hub as planned? [Scott] Progress of finding new homes for stable charts: https://github.com/helm/charts/issues/21103 +Stated on 20 Aug that further discussion was needed +stable/incubator becoming unavailable? Blog? [Marc] +Blog post (Farina + Bridget), docs updates, artifact hub switch +Revisit next week + +Open question about Helm Hub -> Artifact Hub move: should we keep hub.helm.sh as the default endpoint even after pointing that to artifacthub.io? [scott] +upside: helm org retains control should we need to point elsewhere in future (though we can also always just update the client in backwards-compatible way as in this PR: https://github.com/helm/helm/pull/8626 +downside: users will be redirected to an eventual different domain than they see in `helm search hub` output +Farina: when we move forward we will have a redirect, but should we change the helm code? +Bridget: I don’t see a downside +Butcher: let’s set a time to do the domain name switch and do a release that follows the redirects, then migrate at a time that we could message enough so nobody could be surprised +Bridget: let’s keep control of the URL +Martin: agreed +Butcher: so we wouldn’t change the domain name at least until it goes from sandbox to incubation +Farina: we can do something in the messaging to make that more clear +Butcher: staying on same domain for now - someone can propose a transition plan for when artifact hub hits incubation + +Taking over a contribution inactive since July 7th 2020? [Marc] https://github.com/helm/helm/pull/8111 +Farina: I would ask on the PR about taking it over, then specify an amount of time to take it over - then do a new PR with commits pulled over and close old one and point to new one. +Marc: needs a rebase + +3.3.1 release date? Cert-manager users are apparently affected by an issue which 3.3.1 would resolve for them. [Bridget] https://github.com/helm/helm/issues/8594#issuecomment-674754119 +Matt Farina can do Monday - Josh D to shadow + +What remains to be done before we can make HIP official? At least a dozen stale issues could easily be resolved with a suggestion to follow the newly-formalized HIP process, once it’s merged. [Bridget] https://github.com/helm/community/pull/140 +defer +Dependabot: https://github.com/helm/helm/pull/8574 [Marc] +defer + + +Assignments for next meeting +Moderator: Marc +Notes: Bridget +Issue Triage: Butcher + + +August 20, 2020 +Assignments for this meeting +Moderator: Marc Khouzam +Notes: Scott +Issue Triage: Fisher + + +Announcements (items of general interest like releases, requiring no discussion) +Introducing the stale issue bot: https://github.com/helm/helm/pull/8521 (added to announcements by Bridget; credit to Fisher) + +Discussion (Suggest five-minute discussions with a sentence or two about what you’d like to discuss, a link to the issue(s), and your name. Discussion suggestions may be moved to future weeks or GitHub, if warranted.) +Helm Hub -> Artifact Hub [Farina] +Paul, Scott, Farina met with AH maintainers on moving HelmHub to AH. +The plan is here and open for a vote: https://github.com/helm/hub/issues/439 +Goal is to make sure we don’t drop any repos +AH will be compliant to Helm’s search API +HH will be redirected to AH when things are stable. Then HH will be removed. And we will do a blog post announcing the change +AH already has migration automated, things are moving quickly. +Provisional PR: https://github.com/helm/helm/pull/8626 +Should the “mapkubeapis” plugin be moved to Helm org (https://github.com/hickeyma/helm-mapkubeapis) ? [Martin] +(defer to when Martin is here) +Dependabot: https://github.com/helm/helm/pull/8574 [Marc] +(defer to when Martin and Fisher are here) +Tiller in Docker Hub or GitHub container registry? [Farina] +Dan Garfield notes danger in moving locations, as experienced at Codefresh +Matt Farina: we need to move it from the google storage bucket regardless. The open questions are about whether GitHub registry will do what we need +Matt Butcher: in favor of GitHub registry, will do what we need +Paul C: agree with github +Dan G: limits for open source projects? +Matt Farina: GH says free for public repos +Mattt B: if anyone wants to list alternatives, please do +Slack app integration? https://github.com/helm/helm/issues/8610 [Farina] +(skip) +Publishing the KubeConEU recordings/demos? [Marc] +Helm youtube channel https://www.youtube.com/helmpack +Bridget, Paul in favor of hosting our own high res verisions +Announced release dates https://github.com/helm/community/issues/141 [Marc] +Butcher: from CNCF meeting, 4 releases annually, with at least 2 of them being minor releases +De-listing stable and incubator from Helm Hub as planned? [Scott] Progress of finding new homes for stable charts: https://github.com/helm/charts/issues/21103 +Will bring up again next week +in the meantime continue discussion via Slack and mailing list + +Assignments for next meeting +Moderator: Butcher +Notes: Bridget +Issue Triage: Butcher, Bridget + + +August 13, 2020 +Assignments for this meeting +Moderator: Martin +Notes: Paul +Issue Triage: + +Announcements (items of general interest like releases, requiring no discussion) +Helm 3.3.0 released +Helm 2.16.10 released & Helm v2 deprecation timeline to inform people about: https://twitter.com/HelmPack/status/1293694958432481280 [Bridget] + ^ thanks to Matt Farina for cutting the releases & Bridget for the blog post +Final cut of helm 2 will be 2.17 +Join CNCF Slack if you want to talk to Helm intro & deep dive session attendees! +Invites: https:///slack.cncf.io , Slack https://cloud-native.slack.com, Channel #2-kubecon-maintainer +Join the slacks for a bit before and up to 15 mins later, help with chat and questions. +A few more Maintainer signups needed for virtual Helm project pavilion at KubeCon EU: https://docs.google.com/spreadsheets/d/1qQ067_AeU274sDiu1nwGBeBfwt1q5H3k5UojlOZFV9s/edit#gid=0 [Karen] +The yellow slots are the “high priority” ones - please prioritize those ones; if you sign up and want a free pass, let Butcher or Karen know +- Helm GitHub Actions have all released v1.0.0 [Scott] +kind action ( start up a cluster that lives for the further tests such as `helm install` `helm test` +Chart-testing - lint + install on just the changed charts ( monorepo ) +Doesn’t test upgrade by default, but functionality is in the testing tool. +Chart-releaser - creates chart package, adds binary to github release, updates index.yml in to gh-pages. +Scott is driving the rehome of prometheus charts, and is showing off how great the actions are. + + + +Discussion (Suggest five-minute discussions with a sentence or two about what you’d like to discuss, a link to the issue(s), and your name. Discussion suggestions may be moved to future weeks or GitHub, if warranted.) +Next version - we already have 10 closed items (and no open items) in the milestone for 3.3.1 (https://github.com/helm/helm/milestone/97?closed=1) - what date are we aiming at releasing it? [ Bridget] +End of August after Farina and Butcher are back from vacation +Road-testing 3.3.0 may give us more +End aug, start Sept May allow us to make choice between 3.3.1 and 3.4.0 (kubecon might surface bugs or features needed for release) +Marc suggests we should do fixed dates for feature releases. +Quarterly minor cadence? [Martin] - move this discussion to next week +Security Mitigation spec/file proposal https://github.com/helm/community/pull/139 [Rimas] +Also see this discussion thread https://kubernetes.slack.com/archives/C0NH30761/p1596744481096000 +Rimas shares reference example on screen (see recording) +chartcenter UI lists CVEs that affect a chart +If mitigation file exists, will display notes/comments/etc from that file per CVE +[Fisher] what’s the rationale, how do others use it? Value prop is there. Do we make this an openstandard, need helm community agreement. + +Proposed change to the Helm community proposals: https://github.com/helm/community/pull/140 [fisher] +Fisher talks to need for a proposal on how to create proposals, inspired by Rimas security Mitigation proposal. +Inspired by PEP, KEP, DEP … but lightened up. +[martin] sounds great, but we’re out of time for further discussion this call. + +(out of time for this week) +Should the “mapkubeapis” plugin be moved to Helm org (https://github.com/hickeyma/helm-mapkubeapis) ? [Martin] +Stale issue bot: https://github.com/helm/helm/pull/8521 [fisher] +It is August 13th. We’re now entering the “security fix only” stage of Helm 2 support. Should we close out issues, support questions and bug reports related to Helm 2 at this time? [fisher] + +Assignments for next meeting +Moderator: Marc Khouzam +Notes: Bridget +Issue Triage: Fisher + +August 6, 2020 +Assignments for this meeting +Moderator: Adam +Notes: Butcher +Issue Triage: Fisher + +Announcements (items of general interest like releases, requiring no discussion) +Helm 3.3.0 release plan? + Possibly ready [Bridget will follow up with Fisher/Farina] +2.16.10 on the 12th? +Farina will release, Bridget will have blog post (with an unwitting Adam on the assist) + +Discussion (Suggest five-minute discussions with a sentence or two about what you’d like to discuss, a link to the issue(s), and your name. Discussion suggestions may be moved to future weeks or GitHub, if warranted.) +Maintainer signups wanted for virtual Helm project pavilion at KubeCon EU: https://docs.google.com/spreadsheets/d/1qQ067_AeU274sDiu1nwGBeBfwt1q5H3k5UojlOZFV9s/edit#gid=0 [Karen] +Bridget: Free passes if you sign up! +Butcher: The yellow slots are the “high priority” ones - please prioritize those ones; if you sign up and want a free pass, let Butcher or Karen know +This is a casual question/answer session on the Intrado platform. Nothing fancy. +Unanswered question: is it text-only or is there video? (Bridget to investigate) Answer: text-only; must be listed as “booth staff” to answer. +How best to implement `untar` capability for `dependency update` https://github.com/helm/helm/pull/8499 [Martin] +When you do an update, you can --untar it. +The capability is in the CLI instead of in the library. Would like input from other maintainers because it seems to modify the download manager, which breaks compatibility. So it might not be viable for Helm 3 +Adam will review. Adam listed a few issues that could come up with local v. remote dependencies +V2 end-of-support progress: https://github.com/helm/helm/issues/8343 [Bridget] +Ongoing triage of v2 issues (7 open) and v2 PRs (three open) +Need quick review before it is too late +Quick update on Security audit +Butcher: one team audits architecture, while another goes through the go code and runs a number of security scanners +Butcher: Trail of Bits found a long-standing bug in macOS (undetected for 10 years!) while doing this audit for Helm. CNCF agreed to have them improve docs too. They are going to make security recommendations for Helm 4. + +Assignments for next meeting +Moderator: Martin +Notes: Paul. +Issue Triage: + + +July 30, 2020 +Assignments for this meeting +Moderator: Farina +Notes: Fisher +Issue Triage: + +Announcements (items of general interest like releases, requiring no discussion) + Helm 3.3.0 release status [Farina] +3.3.0-rc.2 was released yesterday +Looking for a volunteer to release 3.3.0 + +Discussion (Suggest five-minute discussions with a sentence or two about what you’d like to discuss, a link to the issue(s), and your name. Discussion suggestions may be moved to future weeks or GitHub, if warranted.) +Timing for next 2.16.x release? [Bridget] +Fisher: perhaps we should wait until August 13 +Farina: Do we want a 2.17.0? Farina points out we need to garbage-collect old docker location +Fisher: so we’ll have two releases then +Farina: 2.17.0 likely to go the week of Aug 13 +Please add your thoughts today for Marc and Bridget’s KubeCon EU “Intro to Helm”, to be used in a “pop-up video” style! (Must finish editing and upload tomorrow, July 31) https://docs.google.com/document/d/1qZ1Srjfio7umKe1DbOt8iRgIQoRELQZq0yLdBTL99BM/edit?usp=sharing [Bridget] +If you leave any comments in the google doc today, those will be added to the video as “pop-ups” +PR https://github.com/helm/helm/pull/8529 [Martin] +Does this break backward compatibility? +[fisher] in general, new output that does not break existing use cases should be fine (like adding new columns to `helm list`) +The trick here is that `helm status` is plain text - no formatting applied here +[farina] there are a few bugs in `helm status` right now which can change the output, so this output can change +I would ping Matt Butcher on this particular topic - he may have more historical context on whether this may be a breaking change +[fisher] what output from helm status, if breaking, is to be considered here? +Two weeks to go! V2 end-of-support progress: https://github.com/helm/helm/issues/8343 [Bridget] +Ongoing triage of v2 issues (7 open) and v2 PRs (one open) +Bridget will start draft of v2 EOL/migration blog post this week +Farina: 2.16.10 the last bugfix release mid-August, 2.17.0 thereafter. +Fisher: MSFT folks in virtual offsite Aug 11-12. +Farina: can cut 2.16.10 on the 12th and Bridget can get blog post in. + +Assignments for next meeting +Moderator: Adam +Notes: Butcher +Issue Triage: Fisher + + +July 23, 2020 +Assignments for this meeting +Moderator: Bridget +Notes: Scott +Issue Triage: Josh + +Announcements (items of general interest like releases, requiring no discussion) + Helm 3.3.0 release status [fisher] +Release blocker: https://github.com/helm/helm/issues/8467#issuecomment-662502567 +Still in progress + +Discussion (Suggest five-minute discussions with a sentence or two about what you’d like to discuss, a link to the issue(s), and your name. Discussion suggestions may be moved to future weeks or GitHub, if warranted.) + OCI Support Updates [Josh] +Proposal doc: https://github.com/jdolitsky/community/blob/oci-support-updates/proposals/oci-support-updates.md +Community repo PR: https://github.com/helm/community/pull/136 +Summary: +Implement `Getter` and introduce `Pusher` +Support for provenance files +Chart versions == OCI reference tags +Chart names == OCI reference basenames +`helm chart` is removed, integrated into rest of CLI +Experimental until clear messaging from OCI +The goal was to get the base case to be in line with the chart repository API. It doesn't preclude expanding to address other use cases +Cache may also be removed, since the tech debt cost may outweigh the benefits +Jacob: Q: do we plan to support digest references? We need this use case +A: let's address that in the proposal. If not a breaking change, we could introduce post-stable +Github’s /releases/latest API - we’re now up to 10 issues closed on the same subject. Should we consider using github’s “pin issue” feature for these threads? [fisher] +https://github.com/helm/helm/issues/8502 +Could we solve the problem by retagging the 3.x release? https://stackoverflow.com/questions/22822586/swap-latest-release-on-github [Marc] +A concern with re-creating tags is breaking other systems like homebrew etc +Also, it would be mis-leading to users to advertise a different date than the actual release date +Jacob LeGrone: have we looked at server-side apply? https://kubernetes.io/blog/2020/04/01/kubernetes-1.18-feature-server-side-apply-beta-2/ + +Assignments for next meeting +Moderator: Farina +Notes: Fisher +Issue Triage: + + + +July 16, 2020 +Assignments for this meeting +Moderator: Adam +Notes: Bridget +Issue Triage: TBD + +Announcements (items of general interest like releases, requiring no discussion) +KubeCon EU Intro session to be recorded by Marc & Bridget - comments requested: https://docs.google.com/document/d/1giuqSbesC00illJAAHSZF95hXuzXKVfr8UgfyqH5Hkk/edit?usp=sharing [Bridget] +Release checklist updates in progress; please review https://github.com/helm/helm-www/pull/749 [Bridget] + +Discussion (Suggest five-minute discussions with a sentence or two about what you’d like to discuss, a link to the issue(s), and your name. Discussion suggestions may be moved to future weeks or GitHub, if warranted.) +When shall we finalize the 3.3.0 release? How about 2.16.10 and/or 2.17.0? [Bridget] +Farina: Possible issue with the release candidate - we need to chase this down: https://github.com/helm/helm/issues/8467 +Farina: We do need to add some features for 2.x - skip repos, provide tiller from elsewhere - those need to be completed for 2.17 +Farina: tiller available on dockerhub now +Farina: 2.16.x could go out at any time +Support non conformant Kubernetes objects [Martin]: +https://github.com/helm/helm/issues/8439 +Martin thinks there are interrelated issues - asks Ashok (community member) to introduce topic +Ashok clarifies the benefits of adding weighting/ordering +Adam asks if this is for just custom resources +Ashok clarifies that it’s for all resources +Farina points out the issues with sort order when you get outside built-in resources - people want to order things differently than the default - requires consideration of dependencies +Adam points out we don’t separate dependent chart objects from parent chart objects +Farina’s proposed solution: top-level chart could specify order (with an advanced feature toggled on) +Adam: if ordering is dependent, how do upgrades work? +Farina: use the sort ordering in the chart +Adam: need to consider how to deal with dependent objects if parents get upgraded +Farina: solved with config maps - could expand to dependencies - put metadata in Chart.yaml +[long discussion] +Concept from Paul: +My idea for a KindOrder resource wouldn't require a CRD tho ... just telling helm that the resource is for it ... not the kube cluster ... helm would render and consume anything with helm.sh/*, but not apply to the cluster +Why would we expose that in a CRD like object? Why not just as metadata in the _Chart.yaml_ file? [Farina] +https://github.com/helm/helm/pull/8441 +Discussion will continue in https://github.com/helm/helm/pull/8448 + Recreate upgrade strategy [Martin]: +https://github.com/helm/helm/pull/7431 +delete/recreate is a sufficient solution (Butcher in https://github.com/helm/helm/pull/7431#issuecomment-658440433) +Should it and any other similar issues/PRs be closed? +V2 end-of-support progress: https://github.com/helm/helm/issues/8343 [Bridget] +Ongoing triage of v2 issues and v2 PRs +This doc’s ownership [Farina] +Bridget just had Michelle move it to Butcher - done +Resolver vs manager internal cache vs making user manually add repos for deps? [Farina] https://github.com/helm/helm/issues/8449 +Farina: Possible fixes: internal cache, error out +Adam: related was a backwards-compat issue +Farina: whatever we do it will break some CI toolchains +Followup: look at the issue and see what you can add - we want to fix this but be as non-invasive as possible. +[moving to next week] OCI Update after maintainer chat early this week [Josh] +We should implement a new interface GetterPusher - similar to Getter but with upload capabilities (also implements Getter). This will allow using oci:// everywhere where chart repos are referenced +Provenance files will be supported. They will be stored on the manifest as a second layer. If using “helm pull --verify”, 2nd layer will be assumed to be the prov file, and validated +Registry reference tags will be 1-to-1 with chart version (for now). Later on, we may support arbitrary tags, but not until this is more stable +Registry reference basenames will be 1-to-1 with chart name +Most “helm chart” commands should be removed where possible. For example “helm chart save” -> “helm package --save-oci” +As a criteria for removing experimental flag: all of above should be implemented, distribution-spec should release v1.0, and there should be clear language on OCI side supporting Helm’s use of “artifacts” / media-types + + +Assignments for next meeting +Moderator: Farina +Notes: Scott +Issue Triage: Josh + + + +July 9, 2020 +Assignments for this meeting +Moderator: Bridget +Notes: Martin +Issue Triage: Fisher, Martin, Bridget + +Announcements (items of general interest like releases, requiring no discussion) +3.3.0 rc.1 available for testing: https://github.com/helm/helm/releases/tag/v3.3.0-rc.1 [Fisher] +Please try it out +Open for week or so +Reminder to store blog topics here as we plan to put out more blog content in the next year: https://github.com/helm/community/blob/master/blog-topics.md [Karen] +Ronan pulled the top docs search terms over the last 90 days: https://github.com/helm/helm-www/issues/266#issuecomment-655756770 [Bridget] + + +Discussion (Suggest five-minute discussions with a sentence or two about what you’d like to discuss, a link to the issue(s), and your name. Discussion suggestions may be moved to future weeks or GitHub, if warranted.) +Switching `master` to `main|trunk` https://github.com/helm/helm/issues/8412 [Matt Fisher] +Any possible issue about moving over? +Test and research to avoid any downtime/issues +Fisher to investigate further +Some background: https://github.com/chancancode/branch-rename/ +V2 end-of-support progress: https://github.com/helm/helm/issues/8343 [Bridget] +Ongoing triage of v2 issues and v2 PRs +Does https://github.com/helm/helm/issues/6710 need a v3 tag? (We may or may not fix it for v2, but it lacks a v3 tag and people claim it affects v3.) +When do we want to release 2.16.10? Can we get a second review on https://github.com/helm/helm/pull/7360 to unblock that? Is there anything else we want to get in? +The “latest” problem: if we’re releasing 2.x and 3.x close to each other in time, we should do 2.x first? This affects what shows as https://github.com/helm/helm/releases/latest and on the https://github.com/helm/helm highlighted as “Latest”. +Ongoing docs updates +Triage party … Jul 15 10am … based on 2 responses. Do we want to go forward with it ? +Bridget will do a triage of issues/prs to add labels for 2.x +Paul will do triage of labelled 2.x and close or add to existing helm2 eol issue tasks. +Helm Project Pavilion at KubeCon EU Virtual +Karen thinks we should do it +Office hours on zoom +Need volunteers to sign up +Karen to follow up on this +OCI discussion https://github.com/helm/helm/issues/8387 [Josh] +Need discussion with Fisher and Farina at least to help progress +Need maintainers to make a call to get there +Josh to set-up a meeting with maintainers, doodle to get a timeslot +Known issues with EINTR introduced in Go 1.14: https://golang.org/doc/go1.14#runtime [Martin] +Go 1.14 changed how it wraps system calls for interrupts +This is an issue for k8s - is it an issue for Helm? +Fisher: yes, this is an issue for plugins +Martin: if there is an interrupt/capture we are safe - are we doing any waits when creating k8s resource? +Fisher: I don’t think this affects us… “famous last words” +Martin to track in an issue +Kubecon Helm deep dive (scott/paul) … any specific call outs ? +Helm 2to3 plugin (demo) +Helm postrender hook (demo) +Thanks/<3’s for Michelle +Thoughts on growing core maintainership [Karen] +Karen talking about making it a public announcement +Karen to market this initiaitive + +Assignments for next meeting +Moderator: Adam +Notes: Bridget +Issue Triage: TBD + + + +July 2, 2020 +Assignments for this meeting +Moderator: Marc +Notes: Bridget +Issue Triage: Fisher + +Announcements (items of general interest like releases, requiring no discussion) +Intro to Helm KubeCon EU session input - will have script and draft video for review in mind-July - presenting session with Marc [Bridget] + +Discussion (Suggest five-minute discussions with a sentence or two about what you’d like to discuss, a link to the issue(s), and your name. Discussion suggestions may be moved to future weeks or GitHub, if warranted.) +3.3.0 date? Open PRs on the milestone: https://github.com/helm/helm/pulls?q=is%3Aopen+is%3Apr+milestone%3A3.3.0 [Bridget] +Fisher: RC1: not this week because of holidays - probably better to do Tuesday of next week - or slightly later +Farina: we’ve got most things in that we wanted - let’s cut this Tuesday +V2 EOL progress: https://github.com/helm/helm/issues/8343 [Bridget] +Can we merge Add Apt (Deb/Ubuntu) installation instructions for Helm 2 #8136? +Farina will fix the v2 version +Who can review fix(tiller): Avoid corrupting storage via a lock #7360? (it also has a v3 fix: https://github.com/helm/helm/pull/7322) +Who can review [v2] fix stack overflow error in helm template. #7185? (It has a v3 fix too: https://github.com/helm/helm/pull/7184) +Fisher says we need to determine if the v3 parts should be merged, then look at v2 as well +V2-related issues: https://github.com/helm/helm/issues?q=is%3Aopen+is%3Aissue+label%3Av2.x +Don't forget to fill out doodle for times for helm 2 triage party. Paul is out again today, surprise errands. But wants to finalize date. https://doodle.com/poll/ke3vygaf75gmh53f +With new 3-way merge, how about “helm restore” == “helm rollback ”? [Marc] +Fisher: rollback logic is intended to preserve any ad-hoc changes +Adam: upgrade a release passing in the same info - might be nice to have a “helm validate” to see if what’s in-cluster matches the release +Fisher: detect drifts in state +Adam: let user decide on best remedy +Joe Thompson: use cases to deal with drift - 1) keep changes 2) want easy undo +Fisher: find all the patches that helm does during an upgrade, take output, do selective logic? +Joe T: no, I just want to reset to a known state - either a patch or a reset +Adam: how does this differ from `helm delete && helm install`? +Joe T: will create an issue to delineate differences from past request +Fisher: a rollback is an upgrade using internal chart metadata, patching release with an old version’s info - usually going back one release +Intros for interns to learn about the roles Helm maintainers play + +Assignments for next meeting +Moderator: Adam +Notes: Martin +Issue Triage: Fisher, Martin, Bridget + +June 25, 2020 +Assignments for this meeting +Moderator: Marc +Notes: Josh +Issue Triage: Matt Fisher + +Announcements (items of general interest like releases, requiring no discussion) + + + +Discussion (Suggest five-minute discussions with a sentence or two about what you’d like to discuss, a link to the issue(s), and your name. Discussion suggestions may be moved to future weeks or GitHub, if warranted.) +Helm 2 Triage Party [Paul, who has a conflict today] +Paul is putting together a Triage Party for Helm 2 to try finalize it out. Suggested dates (best efforts for both US and EU times) at this doodle - https://doodle.com/poll/ke3vygaf75gmh53f. I’d like to be decided before the next meeting. +Likely use Triage Party to organize. We might want to look at using it longer term to help organize daily/weekly triage. Example running on Paul’s k8s cluster - http://ad4d22aeea574488f86a87f53a180704-1568206551.us-east-2.elb.amazonaws.com/s/v2 +Expected timeline for 3.3? [Marc] +Currently for 3.4 but could be moved up: +Fish completion https://github.com/helm/helm/pull/8111 which requires: +Subcommands for the completion command https://github.com/helm/helm/pull/8314 +Milestone: https://github.com/helm/helm/pulls?q=is%3Aopen+is%3Apr+milestone%3A3.3.0 +Matt Fisher: looking into this yesterday, some things waiting on reviews, others maybe need to be rethought. +Josh: maybe do this on this call +Matt Fisher will bring up on the mailing list the need for a hard date to cut 3.3 +Do we need a v2 release to merge v2 docs? [Bridget, who has a conflict today] +The PR in question: https://github.com/helm/helm/pull/8323 +Trying to understand what the next steps are here +[fisher]: PRs just need to be merged to the dev-v2 branch and v2.helm.sh should rebuild itself from there +Matt Fisher: this should be resolved, unusual situation +Adding more labels to the release secret… https://github.com/helm/helm/pull/8272 [Farina] +Discussion around the security concerns of this - a RBAC role that had just “List” on secrets would be given now extra information (chart name and version) which might be used to determine version used and find exploits +Josh: Can this be configurable? +Fisher: It would take a rethinking of storage implementation +Farina: maybe there is some other way to do this +V2 EOL tracking issue https://github.com/helm/helm/issues/8343 [Farina] +Should we make tiller undownloadable (the container image)? +This might create a large number of support questions + + + +Assignments for next meeting +Moderator: Marc +Notes: Bridget +Issue Triage: Fisher + + +June 18, 2020 +Assignments for this meeting +Moderator: Martin Hickey +Notes: Matt Fisher /Bridget +Issue Triage: Josh Dolitsky + +Announcements (items of general interest like releases, requiring no discussion) +3.2.4 and 2.16.9 released +Possible 3.3.0 RC1? + +Discussion (Suggest five-minute discussions with a sentence or two about what you’d like to discuss, a link to the issue(s), and your name. Discussion suggestions may be moved to future weeks or GitHub, if warranted.) +Some repos in https://github.com/helm/ haven’t been updated since 2018 - does someone want to mark them as archived? [Bridget] +Adam: some maybe - for others we might want to accept issues - we need to review them to see +Bugfixes for v2 were going to end May 13, but now they are planned to end Aug 13. That is less than 2 months away. Can we get some maintainer eyes on ones like https://github.com/helm/helm/pull/7360? (7 open v2.x PRs; 16 open v2.x issues [Bridget] +Paul C will organize a bug-bash cleanup party for 2.x +Subcommands for the completion command https://github.com/helm/helm/pull/8314 [Marc] +Who needs to be involved for this type of change? +Adam thinks this shouldn’t be an issue - think of it like the API - if it’s refactoring but no CLI changes that’s fine +Blocking contribution for Fish completion https://github.com/helm/helm/pull/8111 +Too late for 3.3? +Adam: Time to season isn’t as critical - we can review for 3.3 if it’s in soon +Marc: it’s also not super time-critical +`tpl` function is non performant for Umbrella chart which contains large number of sub-charts (120 in this case) +Ref to: https://github.com/helm/helm/issues/8002 +Confirmed by Matt Butcher +Adam: the bug report was around performance +Martin: listed as bug/help-wanted +Need reviewer on https://github.com/helm/acceptance-testing/pull/84 and feedback on https://github.com/helm/acceptance-testing/pull/81#issuecomment-643952826 [Predrag] +Marc looking at it in limited time +How to properly handle force-pushing in a review? [Marc] +Fisher: ends up being a full re-review - lacks context of what changed since last review +Adam: github allows squashing for more useful history later +Martin: multiple commits in a PR makes cutting the release challenging - squash at the end is helpful +YouTube playlist +Marked as private by default +Need to follow up [Bridget will check] + +Assignments for next meeting +Moderator: Marc +Notes: Martin +Issue Triage: Matt Fisher + + +June 11, 2020 +Assignments for this meeting +Moderator: Matt Fisher +Notes: Josh Dolitsky +Issue Triage: Matt Farina + +Announcements (items of general interest like releases, requiring no discussion) + Helm 2.16.8 was released yesterday [Fisher] +Security issue that affect 32-bit arch on older version of Go, CVE for 1.13.6 and below + Helm 3.2.3 was released [Farina] +3.2.2 botched due to release hiccup, 3.2.3 has everything meant to be in 3.2.2 +CNCF webinar tomorrow - join and heckle! https://www.cncf.io/webinars/cncf-project-webinar-charting-your-voyage-to-helm-3/ [Bridget] +Tell your friends! + +Discussion (Suggest five-minute discussions with a sentence or two about what you’d like to discuss, a link to the issue(s), and your name. Discussion suggestions may be moved to future weeks or GitHub, if warranted.) +The use of .Files.Get (and other methods) in templates from subcharts but being called in parents. What should the scope of .Files be? The subchart or the parent? https://github.com/helm/helm/issues/8266 [Farina] +.File.Get scoping is in whichever chart you are operating on +Will this break peoples current expectations +We should at least try to understand it and document current functionality +Afterwards, maybe we can take action on Helm 3. Need to ensure backwards compatibility so as not to affect older charts +Large release objects, again… https://github.com/helm/helm/issues/8281 [Farina] +Wasn’t there an issue to remove manifests from release objects? +(Bridget adds: Do we want to finish https://github.com/helm/helm-www/pull/538/ https://github.com/helm/helm-www/pull/558 without the input of the original submitter, who is slow to reply? (We were waiting for the 3.2 release which has happened.)) +Manifests are each base64 encoded, then gzipped. Can we just not base64 encode it so gzip could work better? [farina] +If we change underlying storage, it would break migration from 2-to-3 [martin] +People trying to use Helm as a higher-level tool (like Chef), we should document strategies [Farina] +This has been an issue for a long time, maybe there is something we can do to optimize the storage (i.e. double storing things) [Adam] +Allow other storage backends? [Bridget] +3.3.0 release? [Farina] +Please maintainers, review PRs in the milestone +Link: https://github.com/helm/helm/milestone/89 +Release candidate possibly next Thursday +New feature: Add external files to a chart install https://github.com/helm/helm/pull/8227 requested in https://github.com/helm/helm/issues/3276 [Vlad] +Probably not slated for 3.3, will add to 3.4.0 [Fisher] + +Assignments for next meeting +Moderator: Martin Hickey +Notes: Matt Fisher +Issue Triage: Josh + + +June 4, 2020 +Assignments for this meeting +Moderator: Adam +Notes: Bridget +Issue Triage: TBD + +Announcements (items of general interest like releases, requiring no discussion) + + +Discussion (Suggest five-minute discussions with a sentence or two about what you’d like to discuss, a link to the issue(s), and your name. Discussion suggestions may be moved to future weeks or GitHub, if warranted.) +BLM support statement for Twitter and/or Helm website [Karen] +Is this something we need to run past CNCF? [fisher] +Linkerd and Prometheus already have tweets [Bridget] +Discussion - all agree: We should check with the CNCF and follow their guidance. Bridget to follow up. +Discussion of changes in unit tests for chart fixtures [Adam Reese] +Continuing from last week +Adam will open an issue to continue the discussion +Wants to change the practices around test fixtures +How do we want to document the methods of Linux installs for the various distros? https://github.com/helm/helm-www/pull/641 [Matt Farina] +Farina: Do we want to point to a startup’s installation that is not a well-known source? +Adam: we could use a link instead of copy-paste instructions. +Martin: we shouldn’t include a link if we’re unsure about the source +Farina: “reputation” is a squishy thing +Adam: even with homebrew we don’t control what goes into the installation process +Farina: is referencing a third party a recommendation of the third party? Helm is providing links to third parties, ymmv, not an endorsement. +Josh: do we want to release our own fpm, deb, rpm, etc? https://github.com/jordansissel/fpm +Adam: we had requests for snap, etc - hard to draw a line. +Farina: will take action to update install docs to say the Helm community and link (not copypasta) +Farina: Packaging matters but also working with every packaging system increases complexity. +Farina and Butcher - please ack if all points are clear now in https://github.com/helm/helm/issues/8175 [Predrag] +Farina: I’ll look through it and consider - will look at implications +3.3.0: let’s set a date. [Bridget] +Farina: will start reviewing +Adam: add anything to milestone for next release +OCI: let’s get “install chart from registry” in. [Bridget] +https://github.com/helm/helm/pull/7613 +#7613 does not implement this, but it's a prerequisite [Josh] +https://github.com/helm/helm/issues/6982 +We sign release artifacts but nobody verifies the signatures! PR to add GPG verify in install script on Linux https://github.com/helm/helm/pull/7944 [Josh] +Misc. OCI-related PRs (* can we get these ones in for 3.3?) [Josh] +* Unique digests (bug): https://github.com/helm/helm/pull/8216 + + +* Crashing “helm chart list” (bug): https://github.com/helm/helm/pull/8220 +* Tags that look like ports (bug): https://github.com/helm/helm/pull/8199 +* Improve repo parsing (bug): https://github.com/helm/helm/pull/8089 +Appears a duplicate of https://github.com/helm/helm/pull/7236 ? +* Fix for --registry-config (bug): https://github.com/helm/helm/pull/7356 +* Display manifest digest instead: https://github.com/helm/helm/pull/8249 +Built on top of #8216, should be merged after +* oci:// dependencies + Getter: https://github.com/helm/helm/pull/7613 +This the same one from Bridget’s topic +Related: git dependencies: https://github.com/helm/helm/pull/6734 +Experimental Notary support: https://github.com/helm/helm/pull/7829 +Custom TLS config: https://github.com/helm/helm/pull/7844 + +Assignments for next meeting +Moderator: Marc +Notes: Josh +Issue Triage: Farina + + +May 28, 2020 +Assignments for this meeting +Moderator: Adam +Notes: Martin +Issue Triage: Fisher and Bridget + +Announcements (items of general interest like releases, requiring no discussion) +Help with Q&A at today’s “Hands-on Helm” session at DockerCon! [Bridget] +Free registration for DockerCon 2020: https://docker.events.cube365.net/docker/dockercon and look for email with subject “Registration Confirmation: DockerCon 2020 LIVE”; click link in email to log in. +Navigate to Jessica Deen’s Hands-on Helm session: https://docker.events.cube365.net/docker/dockercon/content/Videos/ZbxZrH75SKqf78x2S - it’s a 30min session from 12:30pm-1pm Pacific (3:30pm-4pm Eastern) +Hang out with Bridget in the live chat and share your opinions/answer questions! + +Discussion (Suggest five-minute discussions with a sentence or two about what you’d like to discuss, a link to the issue(s), and your name. Discussion suggestions may be moved to future weeks or GitHub, if warranted.) +Discussion of changes in unit tests for chart fixtures [Adam Reese] +Will talk again next week and maybe have a pattern +Referencing chart fixtures in other packages etc. +So Adam did a review and refactor +Smaller text fixtures and keep in memory - +Martin suggests documenting some patterns of how we suggest doing this +Goal: to reduce code bloat of unit tests +(Farina is out - carry over to next week) How do we want to document the methods of Linux installs for the various distros? https://github.com/helm/helm-www/pull/641 [Matt Farina] +Followup from May 14th: There is a proposal around managing repository configuration in cluster; thoughts? https://github.com/helm/helm/issues/8175 [Predrag] +Predrag to reach out again on GH to Farina and Butcher +https://github.com/helm/helm/issues/7877 was closed but raises a possibility that would be nice to support of reusing the installed version of a chart [Joe Thompson] +Why specify the chart instead of the chart embedded in the release? +Taylor says we don’t have metadata for that, but we do have a proposal +Adam thinks this is possible, Martin not so sure +Joe is going to take a stab at a proposal +Making the best of Cobra 1.0 for completion https://github.com/helm/helm/pull/8131 . How about a “Completion 101” session to get more maintainers up to speed? [Marc] +Patch gets rid of some overhead code and move to Cobra 1.0 +To help get patch reviewed, Marc is willing to do a 101 session around completion +OCI topics [josh]: +Regression since 3.0.3, non-identical digests for identical charts: +Issue: https://github.com/helm/helm/issues/8212 +PR: https://github.com/helm/helm/pull/8216 +Larger issue pointed out by Matt Fisher, “`helm package` should produce bitwise-deterministic tar files”: https://github.com/helm/helm/issues/3612 +Adam says this is probably a bug +When you tar something order of files are not guaranteed +Maybe sort files before performing tar +Could it be because of packaging dependencies also? +oci:// chart dependencies +PR: https://github.com/helm/helm/pull/7613 +Josh looking for maintainers to review and get merged +“helm chart list” with large cache causes “too many open files” - issue+fix coming +Show digest for chart, or manifest? Or both? +Digest is being shown for the chart and not + +Assignments for next meeting +Moderator: Adam +Notes: Bridget +Issue Triage: TBD + + +May 21, 2020 +Assignments for this meeting +Moderator: Bridget +Notes: Farina +Issue Triage: Butcher + +Announcements (items of general interest like releases, requiring no discussion) +Helm project journey going to be released next week [Farina] +CNCF spotlight on Helm sometime in June [Farina] +Helm webinar June 12 [Farina] + +Discussion (include issue links and your name) (To ensure enough time for discussion items, we may not do a formal standup depending on the number of items. Please add discussion items as desired.) +Request for a role (moderator/notes) to upload recordings to youtube playlist [Jeff] +Fisher is working on this using automation around Splain +The videos are uploaded as private and someone needs to make them public +Timeline of merging docs (helm-www) prior to a release? [Josh] +There was a case where docs were merged prior to a feature +We have a longer issue of versioning for docs we are looking for someone to help with +Suggestion, when a new feature is documented we should document the version it’s available in. +Martin suggested a GitHub milestone for docs. +Return ChartLoader Interface instead of the Chart Path when using LocateChart API. [Vibhav] https://github.com/helm/helm/pull/7601 +Fisher: additional context is required +Adam: will take a look +Farina: we will not change function signatures or returns, but old deprecated functions will remain +New helm options and/or removing klog flags [Marc]: +https://github.com/helm/helm/pull/8067 +https://github.com/helm/helm/pull/8095 +Grouping commands was reverted but Marc thinks the command grouping needs to be back in. +No urgency on making these changes +Needs to be reconciled with Adams other work. +I was looking into a bug about dependencies.enabled flag, which led me to find some code that didn't seem to get ported to v3 very well, which is corroborated by some of the other open issues. [Jeff] +https://github.com/helm/helm/issues/8155 +https://github.com/helm/helm/issues/7908 +https://github.com/helm/helm/issues/7389 +https://github.com/helm/helm/issues/5780 +https://github.com/helm/helm/issues/8118 +https://github.com/helm/helm/issues/7993 + + + In the short term, I'd like to get some clarification if we should enable the enabled flag (https://github.com/helm/helm/pull/8138 ) or instead remove it from the documentation. +Butcher has done some auditing - broken in several places +Butcher has blocked off a sprint to take a look into this once the lint work is in +A classic issue from Farina - Add Warning when installing or upgrading a deprecated chart #3724 [Bridget] +https://github.com/helm/helm/issues/3724 +fixed in v3 but the committer doesn’t seem to have come back to fix it in v2. +Do we want this warning in before we stop making bugfix changes to v2, given that deprecations are bound to be common for v2 users over time? +If so, maybe we get a volunteer to backport the fix instead of waiting for that committer? (looks like Martin may have some context) +We agreed this should go into v2 +[we ran out of time at this point] +Linux installs [Farina] https://github.com/helm/helm-www/pull/641 +Followup from the last week: Managing repository configuration in cluster https://github.com/helm/helm/issues/8175 [Predrag not able to attend today], please share your feedback on the issue +(if time permits) https://github.com/helm/helm/issues/7877 was closed but raises a possibility that would be nice to support of reusing the installed version of a chart [Joe Thompson] + +Assignments for next meeting +Moderator: Adam +Notes: Martin +Issue Triage: Fisher and Bridget + +May 14, 2020 +Assignments for this meeting +Moderator: Josh Dolitsky +Notes: Bridget Kromhout +Issue Triage: Matt Farina + +Announcements (items of general interest like releases, requiring no discussion) +V 3.2.1 released + +Discussion (include issue links and your name) (To ensure enough time for discussion items, we may not do a formal standup depending on the number of items. Please add discussion items as desired.) +make test-style seems to fail and be ignored on circle-ci https://circleci.com/gh/helm/helm/12123 [Marc] +Fisher will help; this is fixed on master for now according to Marc +Fisher says the warnings may need to be handled differently +Review needed for plugin loading refactor https://github.com/helm/helm/pull/7906. [Marc] Blocks: +Contribution https://github.com/helm/helm/pull/8111 from a new contrib - blocked by existing PR (we should avoid breaking plugin completion) +Fish completion +Dropping the internal package “completion” +Improved custom completion (adding descriptions) +Upcoming improved Zsh completion (with descriptions) +Does someone have time to look at this now or pair with Marc? +Fisher and Marc will look at this together (Scott R may join as well) +Managing repository configuration in cluster (alternative to .config/helm/repositories.yaml), elevator pitch [Predrag] +At Red Hat they’ve been looking at options to store/read helm charts from a repo instead of a local file +Does this make sense for the community upstream? +Fisher: use case vs local fs? +Predrag: centrally administered configs +Fisher: similar projects exist +Predrag: they’re complimentary but not the same - in this case, not forbidding local repos but want to whitelist an approved set of repositories - this pre-populates configuration +Farina: is the use case a read-only env? Or to help a new dev get running more quickly? (Yes) +Butcher: Also this eases sharing between teams of devs +Farina: helm fetch/install work with a URL without you needing to add the repository first, for CI use cases +Predrag: this is more to share pre-defined configuration for developers +Marc: centralizing repo choices for a cluster is good but then may be inconsistent between clusters. This could actually be a feature, where only some repos are allowed for some clusters? +Farina: a typed secret could be better than a CRD, since some can’t use that. +Rigby: also would the CRDs be namespaced? If not, doesn't that move away from the goal of moving helm from cluster-wide to namespace only? +Rigby: Also in general, doesn't this also move away from Helm's move to client-only? It sounds interesting in general, though my thought is similar to Matt Fisher's (related more to operator CRDs like fluxcd) +Pred: Will follow up with an issue +Artifact stability/OCI: where are we? Let’s make a checklist and get there - there are open issues but I don’t see a summary of the status. [Bridget] +Josh D: This was main part of OCI meeting discussion yesterday: https://www.youtube.com/watch?v=E9WNkklCmuc +Josh: Farina was named - the OCI meeting said it needed a list from us of what it takes to remove the experimental flag +Bridget: yes - let’s figure out our plan/make sure it’s visible +Josh D: OCI dependency PR? https://github.com/helm/helm/pull/7613 +Farina: is this a spec waiting for everyone to use it, or can it be depended on? (Is it “trusted” or “already there”?) +Farina: Distribution spec is concerned with container images. Is the artifact spec something we can stably rely on? +Josh: Helm will drive a lot of this - we could call it a best practices guide and say “this is how helm is using the API” +Farina: we’ll be going off the documented beaten path if we stick things that aren’t images in +Fisher: Docker Distribution can be more compliant +Butcher: the main reason we don’t want to move the experimental flag off is that there is a lot of documentation to do because not all repositories are OCI-compliant and allow chart types. We shouldn’t remove an experimental flag and confuse average users. +Farina: The alternative option here is to discuss pulling the artifacts proposal out of OCI entirely and rely on chartmuseum/harbor to support that functionalit yBut then we lose out on those OCI compatibility guarantees we were touting at Helm 2 +Josh: will take action to try to explain more clearly. +[This is as far as we got. Pushing other topics to next week. --Bridget] +Return ChartLoader Interface instead of the Chart Path when using LocateChart API. [Vibhav] https://github.com/helm/helm/pull/7601 +Timeline of merging docs (helm-www) prior to a release? [Josh] +Request for a role (moderator/notes) to upload recordings to youtube playlist [Jeff] + + +Assignments for next meeting +Moderator: Bridget +Notes: Farina +Issue Triage: Butcher + + +May 7, 2020 +Assignments for this meeting +Moderator: Martin Hickey +Notes: Matt Farina +Issue Triage: Matt Fisher + +Announcements (items of general interest like releases, requiring no discussion) + (Team Microsoft is on vacation today, so none of us are on this call) + Cutting 3.2.1 release + +Discussion (include issue links and your name) (To ensure enough time for discussion items, we may not do a formal standup depending on the number of items. Please add discussion items as desired.) +Install charts with HELM_REPOSITORY_CACHE=off (vibhav) +https://github.com/helm/helm/issues/7545 +https://github.com/helm/helm/pull/7601 +The goal of this effort is to be able to run helm install/upgrade/template in a read-only file system. Kubernetes config would be injected via an injected volume (e.g., when running in a pod). +For this use case a full url or path would need to be passed to Helm to install. This would bypass registries. +How would this be tested? Do we need a test run in a read-only environment? +Might be useful for making chart-test github actions read only … and those would then help verify it works. +OCI - what are the steps to get off of experimental (josh) +Issues left before distribution-spec 1.0: https://github.com/opencontainers/distribution-spec/milestone/3 +OCI charts as dependencies: https://github.com/helm/helm/pull/7613 +Current registry support: https://helm.sh/docs/topics/registries/ +[farina] the issue that’s a blocker is the lack of stability out of the OCI on storing artifacts. Will it change? What guarantees of a stable API are there? We are waiting on the OCI. +[josh] is interested in a better configuration experience other than environment variables. Possibly something like the way git does it. +The hold up isn’t the UX (which we could work on). It’s OCI artifact stability + +Assignments for next meeting +Moderator: Josh +Notes: Bridget Kromhout (unless someone present at the May 7th meeting really wants it!) +Issue Triage: Matt Farina + + +April 30, 2020 +Assignments for this meeting (Matt^3!) +Moderator: Matt Farina +Notes: Matt Fisher +Issue Triage: Matt Butcher + +Announcements (items of general interest like releases, requiring no discussion) + Graduation!!!!!!!! https://twitter.com/HelmPack/status/1255892071002411009 +Bridget: Mention @helmpack in your tweets if you want (if you write a blog post or something) + +Discussion (include issue links and your name) (To ensure enough time for discussion items, we may not do a formal standup depending on the number of items. Please add discussion items as desired.) +(moved from April 23) XDG_DATA_DIRS Support https://github.com/helm/helm/issues/7529 [Vibhav] +Farina: should be in in the next month or so +Paul C: encourages summary; Farina summarizes: tldr, we’re adding better support in Helm for multiple directories and/or overriding it +(confirmed for April 30) Demo: Paul’s helmfile-starter-kit demo (https://github.com/paulczar/helmfile-starter-kit) - demo and discussion expected to take 10 min [Paul C] +Good way to use https://github.com/roboll/helmfile +Celebrating! + + +Assignments for next meeting +Moderator: Martin +Notes: Farina +Issue Triage: Fisher + +April 23, 2020 +Assignments for this meeting +Moderator: Adam +Notes: Farina +Issue Triage: Fisher, Adam + +Announcements +To ensure enough time for discussion items, we will not do a formal standup. Please add discussion items as desired. [Bridget] +Releases this week: 3.2.0, 3.1.3 [Matt Farina] +CVE button! Neat features! +CNCF Graduation - ready your blog posts! [Bridget] +Probably next week - we don’t have exact timing set by the CNCF yet + +Discussion (include issue links and your name) +Means to override the XDG Base Directory Specification: https://github.com/helm/helm/issues/7919 [Martin] +Action items remain +Seems can set specific Helm env vars +Can I add helm to the list of projects using Cobra? https://github.com/spf13/cobra/blob/master/projects_using_cobra.md [Marc] +Yes; everyone agrees this is a good thing +Contributor Beginner’s guide: Logging in different packages? [Marc] +Farina mentioned a need for a beginner’s guide +Questions answered for new maintainers and users +PR template from Helm 2 needs to be added for Helm 3 - Bridget will take as action item to solve problem of drive-by PRs sans info. +Doc on k8s APIs (https://github.com/helm/helm-www/pull/559) [Martin] +Looking for reviews on it +Adam will look at it +Mystery Circle CI failure [Josh] +See https://github.com/helm/helm/pull/7613#issuecomment-617984152 +Failure: https://circleci.com/gh/helm/helm/11875 +Any reason not to upgrade Go version to 1.14+ ? +Josh will try updating to 1.14 +PGP signature verification in install script [Josh] +PR/discussion: https://github.com/helm/helm/pull/7944 +Disabled by default, enable with VERIFY_SIGNATURES=true +Current plan: +Fetch KEYS files from GitHub, @master (all maintainers keys) +Create a temporary keyring, import KEYS file +Fetch .asc files for .tar.gz and .shasum on release +Verify the .asc files against temporary keyring using gpg +Delete temporary keyring +Github actions suggested; Josh will chase down +`helm dep up` seems to traverse directories all over - file an issue? (Joe Thompson) +Must dependencies be documented in charts.yaml? (in theory, yes) +Will start a more general issue to describe this re: dependency resolvers +Mini-retro on no standup (started with 3 minutes to go) [Bridget] +Pro-standup: it’s a point of connection with each other +Anti-standup: if lacking a specific accomplishment, one may feel like skipping the call +Resolution: for now, let’s see how many discussion items there are + +Assignments for next meeting +Moderator: Matt Farina +Notes: Matt Fisher +Issue Triage: Matt Butcher + + +April 16, 2020 +Assignments for this meeting: +Moderator: Matt Fisher +Notes: Bridget +Issue Triage: Butcher, Josh D +Announcements + 2.16.6 released: https://github.com/helm/helm/releases/tag/v2.16.6 +Fixed one issue; there’s another issue in there [Farina] +Standup +Martin Hickey +Triage, PR reviews +implementation in plugin for removing deprecated APIs for supported ones (for v2) - similar to how it’s done in v3 +Josh Dolitsky +Issue triage +Marc +Cobra 1.0 is out - custom go completion - but cannot move Helm to it because of breaking plugin completion (#7906) +Matt Farina +Working on translations process - first file being translated into Korean landed in helm-www! Also release, and PR triaging, and docs. +TOS having discussions about graduation - waiting for TOC to call a vote, which takes about 5 days and then PR +Matt Butcher +Issue queue - getting 3.2 ready +Bridget +Graduation Blog Post and preparations - PR cycle is slow but we’re getting started +Paul C +Presentation on allthetalks - building a chart +Matt Fisher +Providing context on issues +Discussion +Transition Helm release and chart hosting ownership to CNCF [mattfarina] https://github.com/helm/community/issues/114 +Affects charts repository - looking for a process to handle moving this +Hosting this is financially non-trivial +Technical considerations around moving buckets +This affects helm downloads, chart downloads, and CI +Ihor and Chris A have eyes on this +Org, charts, and core maintainers are all impacted by this +So stable going away - what's a “stablish” repo to share? Bitnami? [josh] +Probably good to use Bitnami [Farina] +Action item: heads up! Keep an eye on the issue. +Breaking change to upstream merge library (template function) [mattfarina] +Sprig uses merge-go which made a breaking change +Farina mentions an issue: https://github.com/imdario/mergo/issues/139 +Documentation never matched implementation and now it’s creating problems - do we pin to the working version, file an issue, and add tests to ensure safety? (Probably - we need to exclude this non-working version.) +Helm 3.2 - Finalizing the Issue List [Butcher] +https://github.com/helm/helm/milestone/83 +Let’s cut the RC late today/tomorrow + +Moving to next time: +Means to override the XDG Base Directory Specification: https://github.com/helm/helm/issues/7919 (martin) +Paul’s helmfile-starter-kit demo (https://github.com/paulczar/helmfile-starter-kit) +XDG_DATA_DIRS Support https://github.com/helm/helm/issues/7529 [added by Vibhav] +CRDs not uninstalled upon uninstall. Is this by Design?[vibhav] +Fisher: yes, this is by design. https://helm.sh/docs/topics/charts/#limitations-on-crds +Cool thanks :) +Beginner’s guide: Logging in different packages? [Marc] + +Assignments for next meeting +Moderator: Adam +Notes: Farina +Issue Triage: Fisher, Adam + +April 9, 2020 +Assignments for this meeting: +Moderator: Martin +Notes: Matt Fisher +Issue triage: Matt Butcher +Announcements +Zero comments in public comment period (which is good!) - Farina will follow up with Justin Cormack as to next steps (we’re in the “voting” period) +Standup +Matt Farina +Typical issue triage/PR review +Working through the PGP release signature process +There’s something going on with our GPG signing process that’s causing the verification process to fail +Joe Thompson: has been looking into this as part of his course material +Looking into korean translation for the helm docs +Matt Fisher +Issue triage +Marc Khouzam +Completion PRs being merged +Josh Dolitsky +OCI work +Matt Butcher +Been monitoring the CNCF graduation voting process +Pairing with Adam on some of the bigger PRs out there for Helm +Working with Adam on the Kubernetes 1.18 version bump PR +Bridget Kromhout +Got blog post out with Farina about the bugfixes for another three months Starting to think about a blog post for the graduation announcement +Martin Hickey +Concentrated mostly on issue 7219, which is around deprecated workload apiVersions +Working on a plugin to help ease this issue +There’s a PR sitting out there that Martin’s looking to merge: #7024 +Discussion +In-memory Cache PR +Vibhav: Looking to give a demo on the in-memory cache demo +Predrag: Further elaboration on the use case for the in-memory cache: we’re looking to run Helm in an environment without access to the filesystem +Matt Farina: the pluggable proposal can be discussed offline - https://github.com/helm/helm/issues/7545 +Allow patching/updating CRD resources after first install (https://github.com/helm/helm/issues/7735) [Martin] +James Munnelly to pitch proposal (parking this - no word back from James) +Is the SQL storage backend supported or beta? +Fisher: this is available in a pull request: https://github.com/helm/helm/pull/7635 +Some serious security issues were found in the PR. They’re irrelevant for Helm 2, but was introduced when porting to Helm 3. I think it needs another review +At that time when originally added, only postgres was available +Butcher still doesn’t think this is out of beta +Need second reviewer on https://github.com/helm/helm/pull/7791 (multiple repo remove) [Marc] +Making unit tests results less dependent on test environment setup (e.g. run tests under an arbitrary UID, local kubeconfig file should not be used, assume nothing about default namespace, etc…) [predrag] +This is in reference to `helm test` +We’re looking for help to review some of the use cases we have on our end +Matt Butcher volunteered to help look into these use cases +Assignments for next meeting +Moderator: Matt Fisher +Notes: Bridget +Issue Triage: Butcher, Josh D + +April 2, 2020 +Assignments for this meeting: +Moderator: Adam Reese +Notes: Josh Dolitsky +Issue triage: Matt Farina + +Announcements +2.16.5 - released with new fixes and bugs! +ChartMuseum 0.12 released Friday +Standup +Josh Dolitsky +ChartMuseum 0.12 released Friday +Matt Fisher +PR reviews and triage +Bridget +No update (just helped with blog post which is going out this week) + Matt Butcher +Blog on Helm+Operators +Pairing w/ Adam on some bugs +Version inconsistencies with k8s +Matt Farina +Fix issue w/ Kubernetes 1.15 +Working on - Give resource info in helm status back +SOMETIMES things blow up +Looking into support for translations (on docs) +Marc K +Review on cobra completions coming soon +Martin +Triage +PR reviews +Adam +Pairing, issues queue, PR reviews +Version breaking issues with Kubernetes, Very frustrated. +Discussion +Plan for the Security Story, it is a good time as this can be taken alongside the design of Notary v2. [Vibhav] +Pushed to next week (vibhav gone) +Thoughts on extending the support period for Helm 2, given that the global situation might be leading to code freezes and thus enterprises not moving off Helm 2 to Helm 3 with alacrity? [Bridget] +The original plan was bug fixes for 6 months after the Helm 3 initial release (ending May 13 2020) and a year of security fixes (ending Nov 13 2020) +Can we measure the number of Helm 2 users remaining (downloads, other metrics)? +Butcher: maybe lets push back bug fixes by about 3 months +All: agree +Action: blog post on helm.sh +Matt Farina + Bridget to take +Allow patching/updating CRD resources after first install (https://github.com/helm/helm/issues/7735) [martin] +James Munnelly to pitch proposal +Push to next week (james gone) +Cache Drivers for Helm. +Pushed to next week (no link no vibhav) +[Ken Perkins] I’m hoping to discuss extensible labels for release artifacts (secret/configmap storage driver) as a way to have consistent labeling across all resources related to a release (useable with selectors), https://github.com/helm/helm/issues/7007 +Context - doing backup using Velero, needs more granular backup +Velero: https://velero.io/ +The release driver for secrets plus configmaps is hardcoded +No ability, unilaterally, to get labels defined by user +Adam: there has been discussion on this previously +1. Policy on not wanting to touch resources, fully unopinionated +Haven't found clean way to do this +Jacob: There is a PR using annotations vs labels +Link: https://github.com/helm/helm/pull/7649 +Merged but unreleased, in 3.2 milestone +Ken: annotations might not cover it +Adam: in favor of labels option being added, but was unable to find a clean way to do so previously +Matt Farina: this may be doable with postrenderers +Adam: labels - will make upgrade much easier + +Assignments for next meeting: +Moderator: Martin +Notes: Matt Fisher +Issue triage: Matt Butcher + + +March 26, 2020 +Assignments for this meeting: +Moderator: Josh Dolitsky +Notes: Matt Fisher +Issue triage: [help wanted] + +Announcements +Helm v2.16.4 and v2.16.5 released [mattfarina]. 2.16.4 contained an issue when working with Kubernetes 1.15 +Standup +Marc +Disrupted with COVID-19 +Continuing to hope for fish completion PR review https://github.com/helm/helm/pull/7690 +Matt Butcher +Away all last week +Adam +Disrupted by COVID-19, nothing to report this week +Bridget +Mostly focused on SMI things +Matt Farina +Cut Helm 2.14.4 and 2.14.5 +Issue and PR triage +Martin +Issue and PR triage +Fix for the helm 2to3 plugin (some tests weren’t migrating over) +Matt Fisher +Issue triage; another open source project +Bug reviews +Scott Rigby +We have RC releases out for chart-releaser and updated the github actions around that +More work on the chart repositories (tracking issue) +Worked on a PR to make downloading different Helm 3 binaries easier +Jacob LeGrone +Have an internal change of `helm commandeer`, will open a PR eventually once that’s ready to go +Josh Dolitsky +Fighting with Go 1.14 and tests +Advancing the OCI spec +Discussion +Notary / TUF compatibility or support ( how do we go about it ? ) [Vibhav] +Pushed from last week +Discussed with Radu on some of the design discussions around Notary/TUF support +Question raised to the call: are we looking to get the experimental OCI feature into a stable feature? +Josh D and others have been working on ORAS - works for arbitrary artifacts: https://github.com/deislabs/oras +Josh D: “There is also an ongoing “notary v2” discussion going on in OCI #notary-v2 channel in CNCF slack” +Butcher: definition of stable: a security story, finalized OCI, community momentum +Farina: let’s not move-fast-break-things - real enterprises use Helm +Butcher: in summary, this would be a great time to talk about Notary/TUF support in the experimental OCI support, as that would be required for GA +Some PRs needing just a bit of attention: +Install / Template Charts without downloading to filesystem https://github.com/helm/helm/pull/7601 needs small input @mattfarina [Marc] +Will need a bigger discussion +Can we get some maintainer eyes on this PR? https://github.com/helm/helm/pull/7743 - Joe Thompson +Farina will look at it +Cut a release candidate for 3.2.0? - Jacob +Martin: Can we get 7635 in? +It’s on the milestone so we can get that one in +First class image referencing support proposal presentation https://github.com/helm/helm/issues/7754 - Konstantin Semenov +Presentation (5 min): https://www.icloud.com/iclouddrive/0teMaUh1a8whndQ8vgEyzKVww#Helm_image_reference_proposal +Farina: we’ll mull it over +Butcher: backward compat is important +[this is all we got to] +Diff in Helm History Command https://github.com/helm/helm/issues/7828 +Thoughts on extending the support period for Helm 2, given that the global situation might be leading to code freezes and thus enterprises not moving off Helm 2 to Helm 3 with alacrity? [Bridget] + + +Assignments for next meeting: +Moderator: Adam Reese +Notes: Josh D +Issue triage: Matt Farina + +March 19, 2020 +Assignments for this meeting: +Moderator: Matt Fisher +Notes: Bridget +Issue triage: Matt Butcher / Bridget + +Announcements +2.16.4 release is delayed by printers (not the paper kind), per Farina +Some k8s environments cannot use 2.16 right now, so this is time-sensitive +Fisher and Farina will discuss +Standup +Matt Farina +Printers! Trying to get things to display correctly (affects Helm 2 and 3 both) +Have submitted Helm for CNCF graduation +Process being revamped +TOC member (non-Michelle, as she’s a maintainer) needs to pick up and evaluate our request - breaking news! It’s Justin Cormack of Docker! +Martin Hickey +Created a doc around storage backends - hoping to get it in for 3.2 +Looking at plugin fixes to help with side-by-side (not entirely cleaning up) +PR reviews and bug triaging +Bridget Kromhout +No Helm; all SMI stuff this week +Taylor Thomas +Reviewing Farina’s printer PR +Causing earthquakes in Utah, for maximum hilarity :) +Marc Khouzam +Refactoring completion tests to cover Fish completion +Josh Dolitsky +Triage - possibly breaking changes in chart dependencies from registries +Jacob LeGrone +Got PR in for automatically adopting resources - hoping for Martin’s feedback - planning to add an import command to annotate existing resources +Matt Fisher +PR review - behavioral assumption changes, though not breaking per se (will sync with Josh D) +Discussion +Helm v2 utility library (https://github.com/maorfr/helm-plugin-utils/) request move to Helm org [Martin] - carry over from last week +Farina is working on an email Martin is waiting for. +Notary / TUF compatibility or support ( how do we go about it ? ) [Vibhav] +Push to next week +Some PRs needing just a bit of attention: +Install / Template Charts without downloading to filesystem https://github.com/helm/helm/pull/7601 needs small input @mattfarina [Marc] +Will need a bigger discussion +Use repository-cache if specified https://github.com/helm/helm/pull/7166 @bacongobbler [Marc] +Make side-by-side versions easier - https://github.com/helm/helm/pull/7752 [Bridget] +Present what Codefresh is doing for Helm 3 and collect feedback for the team [Dan Garfield] +Numerous codefresh users particularly in Europe getting ready for Helm 3 - Jessica Deen did a recent presentation using codefresh & Helm 3 +Demo +Time for feedback ran out - Bridget directed them to open an issue if desired for discussion +Assignments for next meeting: +Moderator: Josh Dolitsky +Notes: Matt Fisher +Issue triage: [help wanted] + + +March 12, 2020 +Assignments for this meeting: +Moderator: Matt Butcher +Notes: Scott Rigby +Issue triage: Matt Fisher, Bridget Kromhout + +Announcements +Early access to CNCF Hub is available: https://hub.cncf.io/ +Standup +Bridget: not much this week +Taylor: Triage +Matt Fisher: Triage, follow ups +Adam: spent more time on deprecated k8s API versions +Marc: Added completion to 2to3 plugin. Finished fish shell completion. Reviewing in-memory cache concept +Martin: also quiet week. A few things around migration plugin. Added in capability to remove a release on cleanup. Good to see people using it, giving feedback etc. Thanks to Fisher for review of docs on library charts +Scott: not much this week, heads down. Yay about cncf hub! +Jacob: Worked on ownership issue. Adds a few new annotations we'd need to commit to, so please have a look. https://github.com/helm/helm/pull/7649 After merge, plans to work on import command (commandeer) https://github.com/helm/helm/issues/2730 +Josh: not much to add. Hoping to get eyes on a PR: sourcing dependency charts from OCI https://github.com/helm/helm/pull/7613 +Matt Butcher: Presenting to ToC on Tuesday +Discussion +Release 3.1.2? [Farina] +Will cut later today [probably by Farina] unless someone else get there first +Vision for HelmHub: how to choose the right chart for a product? [Marc] +The stable and incubator Helm chart repositories, currently listed on the Helm Hub, have begun a 1 year deprecation timeline. After 6 months they will be de-listed from the Hub (soon to be CNCF hub). See helm/charts > Status of the Project and Deprecation Timeline +The Helm Hub has a process for Adding distributed Helm repos, and the stable and incubator repos have a process for Deprecating a Chart once this is completed +Orgs and individuals can host distributed Helm repos however they wish, but if they want to use Helm-created tools (chart testing, releasing, etc) they can follow this example to use Helm Chart repo Actions: https://github.com/helm/charts-repo-actions-demo +There is a stub issue to help track migration, here https://github.com/helm/charts/issues/21103 (this will be fleshed out soon. While each deprecated chart README links to it's new home, this issue primarily to help the community see the migration at a glance) +We have engaged with a number of orgs who develop the apps to host charts for those apps (here is a working list that will be added to that github issue soon https://hackmd.io/VgK7_DUpS6CLLT4HSncmDg) +Helm.sh used to have a link to the sig-apps meeting recordings (not helm-specific) but now just points to https://github.com/helm/community/blob/master/communication.md#meetings - do we have a specific link or playlist we want to publish for the Helm dev call? These get recorded - but where do people watch them? [Bridget] / Posting Helm dev call videos [Marc] +https://www.youtube.com/playlist?list=PLVt9l4b66d5EY5Xs9OVJgvO5ss9WzrSY0 +Fisher will migrate videos from Zoom to Youtube +Adam points out there’s a doc in keybase with the necessary info +Helm v2 utility library (https://github.com/maorfr/helm-plugin-utils/) request move to Helm org [Martin] +Discuss next week +Docs: +Improvement of library chart docs https://github.com/helm/helm-www/pull/526 [Martin] +One review done by Matt Fisher. Can we get another core maintainer review? +Plugin shell-completion (which is in 3.2) https://github.com/helm/helm-www/pull/506 [Marc] +Fisher just approved and merged +Follow-up meeting on kube 1.16^ [Marc] +Adam will talk to Farina +Please include Martin and Marc +Should we split this file by decade? 😁 Slow on a phone in the subway. [Marc] +Butcher: we could migrate past years to a markdown doc in github - Marc to open issue in community repo +Please take a critical look at https://github.com/helm/helm/pull/7649 (resource adoption)! [Jacob] + +Assignments for next meeting: +Moderator: Matt Fisher +Notes: Bridget +Issue triage: Matt Butcher / Bridget + + +March 5, 2020 +Assignments for this meeting: +Moderator: Adam +Notes: Matt Farina +Issue triage: +Josh +Matt Farina + +Announcements +none +Standup +Matt Fisher +Looking at PRs for upcoming milestones to see where we’re at +Looking at a PR that does `--force` +Josh D +Issue sherpa-ing +Did not complete Chart Museum release +Matt Butcher +Helm graduation tasks - shoutout to Michelle Noorali for her help on that +Helm Security Assurance case - to get CII Silver badge +Possibly not here next week if traveling +Matt Farina +Has been working on Helm graduation (less pressure due to KubeCon delay) +Helm is on a list with other projects for graduation consideration March 17th. (Hopefully security assurance is done by then.) Working on pitch deck for 17th. Helped with issue triage this week. +Martin +Library charts docs work +PR reviews +Scott +Chart testing/release work with Reinhard +Worked to move charts out of charts repo (e.g., working with nginx project maintainers to host the chart) +Paul +Both KubeApps and Helmfile now support Helm 3. +PR in to script craft release notes: https://github.com/helm/helm/pull/7636 +Jacob +PR open around resource ownership. Make helm more intelligent on adopting resources. Needs work still. +Bridget +KubeCon EU work (intro to Helm maintainer session with Reinhard) is now put off +Adam +Worked on upgrading Kubernetes and depreciated K8s resources + + +Discussion +Kubernetes broken versioning [Adam] https://github.com/helm/helm/issues/7219 +We rely on the libraries kubectl uses - and that no longer supports some old versions +Farina: this problem is going to keep happening/get worse (because the API server/kubectl won’t work with older versions) +Farina: should we add Helm lint rules around this? +Fisher: yes; we should give a warning/message in these cases +Adam: we could build a binary outside of helm for conversion +[new meeting warranted] +[ran out of time] +Release 3.1.2? [Farina] +Vision for HelmHub: how to choose the right chart for a product? [Marc] +Helm.sh has a link to the sig-apps meetings - do we have a specific link or playlist we want to publish for the Helm dev call? [Bridget] +Issue triage: how’s it going? Trends? Thoughts? [Bridget] + + + +Assignments for next meeting: +Moderator: Matt Farina +Notes: Scott Rigby +Issue triage: Matt Fisher, Bridget Kromhout + + + +Feb 27, 2020 +Assignments for this meeting: +Moderator: Josh +Notes: Martin +Issue triage: Farina +Announcements +Fisher, Taylor, and Bridget are at an event today so won’t be on the call +Farina did a webinar on Helm security: https://www.cncf.io/webinars/helm-security-a-look-below-deck/ +Standup +Marc: +Cobra is very open to Go completion +Adding support in Helm for Fish +Adam: +Reviewed some PRs +Pushed a PR for fixing a lib +Jacob: +Resource ownership issues +Matt Farina: +Issue sherpa this week +Lots of support questions +Martin: +Some PR reviews +Some bug triaging +Josh +Talking ChartMuseum bugs +One is: Storage cache issue +New release of CM on the way +Discussion +Contributing Guide? https://github.com/helm/helm/issues/7585 [discussion suggested by Bridget, based on issue opened by Matt Farina] +How do we handle things at project level? All the bits and pieces. +Then handle things at code level? Maybe better code doc/GoDoc. +How do you dive in? How you get started? +How do you lower the barrier? +Farina to maybe drive this outside of the weekly meeting? +Gpg signing [mattfarina] https://github.com/helm/helm/issues/7599 +Best practice for handling kube 1.16 removed APIs? Helm v2 or Helm v3? [Marc] +Big issue we need to be able to handle +Vanilla `kubectl` can handle this, Helm needs to be able to diff against deprecated api to new api in cluster +Adama to investigate +CRDs not available during `dry-run`: https://github.com/helm/helm/issues/7449 [martin] +Do we document that this is a limitation? +Should this issue be marked as a feature? +Resource ownership refactor https://github.com/helm/helm/pull/7649 +Resource ownership does not guarantee exclusivity https://github.com/helm/helm/issues/7699 +Assignments for next meeting: +Moderator: Adam +Notes: Matt Farina +Issue triage: +Josh +Matt Farina + +Feb 20, 2020 +Assignments for this meeting: +Moderator: Adam +Notes: Bridget +Announcements - none! +Standup +Martin +Migration plugin: +Kube context/kubeconfig can be set on the fly now +Fun bug found about back-end storage (we weren’t catching setting that with args) +Possibly need to release 3.1.1 - error not being propagated up correctly +Fisher +PR reviews +Marc +Completion coded in go - posted to cobra +Working on k8s 1.16 at work - so dealing with challenges that are showing up in Helm issues - +Bridget +Working on Intro to Helm for KubeCon EU with Reinhard +Farina +Helm Hub - linting - github actions +Webinar on Helm security +Finding issues - putting issues into backlog +Jacob +Working on a bug to update resources to new API versions that exist in the cluster +May suggest a new ownership heuristic soon (opt-in with label or env variable) (Fisher: maybe as a lookup) +Adam +PR reviews/merges +XDG discussion with Farina +Discussion +Restore issue triage position? [mattfarina] +Assign specific person/persons to do triage for a specific week +Fisher: can we do assignments async on the maintainers list? +Bridget: we should document how to do the triaging +Farina: maintainers who aren’t core maintainers could also sign up +Martin: new core maintainers can learn how to triage by pairing +Farina: let’s start by reinstating the role and writing docs +Add a “NEWS” file to help with release notes? https://github.com/helm/helm/issues/7581 [Marc] +Merge conflicts mean a single file is a challenge +Adam suggests an update to the github template +Fisher will link to another tool that helps. +What versions of Helm should be in docs? https://github.com/helm/helm-www/issues/497 [mattfarina] +Fisher: Ronan added version dropdown list between individual versions - 2.14 does not have a specific need to be on there +Adam: we’re constantly changing docs (not synced with specific versions) +Farina: k8s does it with each minor release but each release is a breaking change - let’s remove the process and just have “helm 2” and “helm 3” but in helm 3 docs, specify minor version when the change came in +Adam - include a section for anything that’s changed in the docs +Fisher: bring it back to Ronan +Farina: will continue convo with Ronan +Note: topics after this point were not discussed on Feb 20 and are being suggested for Feb 27 +Should we cut 3.1.1? [martin] +Errors not being propagated from template/install/list +Contributing Guide? https://github.com/helm/helm/issues/7585 [Bridget, based on issue opened by Matt Farina] +Gpg signing [mattfarina] +Porting of sql storage driver https://github.com/helm/helm/pull/7635 [martin] +Namespaces and user access +Best practice for handling kube 1.16 removed APIs? Helm v2 or Helm v3? [Marc] +Assignments for next meeting: +Moderator: Josh +Notes: Martin +Issue triage: Farina + +Feb 13, 2020 +Assignments for this meeting: +Moderator: Martin Hickey +Notes: Matt Fisher +Announcements +Helm 3.1.0 released today: https://github.com/helm/helm/releases/tag/v3.1.0 +Standup +Matt Farina +Cut the 3.1.0 release, issue triaging, bug fixes +Matt Fisher +Triaging PRs for the 3.1.0 release, issue triaging, PR reviews +Adam Reese +Nothing to report this week +Taylor Thomas +Post-render work, giving a talk next week +Scott Rigby +Working on some demos with Helm 3 and the new github actions +Might work on some demos for the new post-render feature +Got around to pinging people in SIG-PM regarding the “kubernetes helm charts” repo naming suggestions +Matt Butcher +Kubecon stuff: working on the project maintainer’s booth for AMS +Taking a look at managed hooks a little bit to resurrect the architecture +Helm CNCF graduation is moving through the process +Action item: need to fill out the ADOPTERS.md file in helm/helm +Need to spend some time to fix the gpg signing key for past helm releases +Marc Khouzam +Working on PRs: namespaced memory drivers and pre-populating the memory driver for test infra +Jacob LeGrone +Hoping to compile an experience doc for his org +Martin Hickey +Looking into some bugs regarding passing along the kube context for the migration plugin +Facilitating discussion around contributing a new project to the helm org +Discussion +Scott Morgan: I’ve had a PR sitting around for a while. Looking to find a core maintainer to move this around (7060) +Martin: how come the apiVersion had to be updated? `helm lint` should work with older chart APIs +Fisher: to resolve this, let’s add this to 3.2.0 so we can review it for the next release +Travis raines: https://github.com/helm/chart-testing/issues/202 +Taylor: I’ll have to dig into this one a little more. --wait can be a bit of a finicky thing and can’t tell what’s the issue immediately +https://github.com/helm/helm/pull/6920 “helm upgrade --install” purposefully ignores installation errors. Why? [Marc] +Butcher: I’ll review this offline +Should helm env show XDG paths? https://github.com/helm/helm/pull/6892 Result of offline discussion between Farina and Adam? [Marc] +Farina: we shouldn’t be showing XDG-related environment variables. We should expose it as a Helm-specific variable in its place +Action item: farina to push a PR +Should Helm transform API versions? https://github.com/helm/helm/pull/7575 [Farina] +Farina: the code has changed significantly since it was originally posted, so I can’t start a discussion on this. We’ll have to revisit this PR before discussing. +Assignments for next meeting: +Moderator: Adam +Notes: Bridget + +Feb 6, 2020 +Announcements +Sessions scheduled for KubeCon EU (Bridget, credit to Karen Chu): +Intro: https://sched.co/Zx1Z +Deep Dive: https://sched.co/Zx4K + +Standup +Farina +Triaging issue queue & pull requests +Adding items to 3.1.0 at this point +Looking at translations for the website right now +Helm hub growing +Marc +Posted a PR for memory driver to support namespaces - wants to preload releases in memory driver +Autocompletion for plugins +Adam +Catching up - getting back into Helm +Martin +Fix around lockfiles +In Ghent for config mgmt camp to speak about Helm with Taylor +Fisher +Helm website changes around updating helm commands in the docs +Working with Ronan to have good fallbacks for deprecated commands +High-level items & focus on 3.1 +Taylor +Config mgmt camp with Martin - worked up good advanced helm demos +Working on post-render +Working on devopsdays Guad. talk (in Spanish!) about Helm +Butcher +Working on TOC review docs for graduation - researching “security assurance” cases & markdown doc with list of companies using Helm +Triaging issues/reviewing PRs - kudos to Martin on a tricky one! +Bridget +KubeCon EU talks, yay! + +Discussion +When should we cut the 3.1.0 RC? (Farina, Bridget) +RC 3.1 tomorrow (Feb 7) - Farina willing to cut the release +Release 3.1: tentatively, Feb 13 +RC 3.2 March 11, release March 18 +One last sync up on post render [Taylor] +Farina considered this to be for one-off scripts and trying to understand use case +Martin: this capability has some inherent risks - perhaps we should document more than restrict +Farina wants a good pattern for this; Taylor is going to comment/explain future enchancements. +What should we do with https://github.com/helm/helm/issues/6794? [Taylor] +Namespace mechanism is more declarative than before - but might be okay? [Taylor] +Farina: you’re moving namespace choices from one role to another with this change +Fisher: The role conflicts aren’t fixed by this PR - the lookup functionality is the same. +Farina suggesting an opt-in flag for auto-creation +Adam: it was a much-desired feature to limit releases to a namespace +Should helm-plugin-utils (https://github.com/maorfr/helm-plugin-utils) be moved to Helm org? [Maor/Martin] +Fisher: is this a Helm2-only plugin? If so we’d want that to be clear +Farina: there is no license on this repo yet +Should helm env show XDG paths? https://github.com/helm/helm/pull/6892 [Marc] +Marc: XDG paths get default values when no set, which are hard to discern +Farina: debugging is difficult for XDG - this workaround would make our lives easier +Adam: XDG is unix/linux specific, so we probably want to call this “config root directory” or some such +Farina: we have an issue about setting locations - the ability to use multiple path separators doesn’t currently work +Adam & Farina will follow up offline +Update on --name flag https://github.com/helm/helm/issues/7345 [Marc] +Marc: Farina noted that many READMEs mention this +Fisher: core maintainers are making design decisions - we’ll listen but not change based on one community member’s opinion +[note: meeting ran 45min so we could discuss items d, e, and f] +Assignments for next meeting: +Moderator: Martin Hickey +Notes: Matt Fisher + +January 30, 2020 +Announcements +Jan 29 release of 3.0.3 by Matt Farina: https://github.com/helm/helm/releases/tag/v3.0.3 +Standup +Marc +Skip - internet connection flaky +Farina +3.0.3 release +Issue and PR triaging and reviewing +Butcher +Issue queue triaging +Martin +Working on issue where hash was created in helm v2 and now trying to validate with helm v3. Working on a fix with tests +Working on setting kubectx or kubecfg as part of migration (plugin) +Triaging and reviews +Taylor +Working through his backlog +Working on post-render feature with a target on 3.1.0 +Created a repo of advanced Helm demos for an upcoming talk +Fisher +Issue triaging and PR queue. Trying to poke some PRs and make sure they have what they need to move on +Bridget +Learning about release process +Discussion +Let’s discuss a date for 3.1.0 (Farina) +Farina: Can we do this in mid-Feb? +Taylor: let’s make sure the k8s libraries are updated +Yes: Joe Langford did this +Fisher: let’s check a few regressions, but yes, this could work +Farina: by the call next week, we’ll know when we can cut the RC +Fisher: will put some PRs for discussion in the helm dev channel +Prettify Updated time in helm ls [Martin]: https://github.com/helm/helm/pull/7024 +Breaking change or not? +Helmsman (a 3rd party tool) is consuming the table and the time +Potential path forward: +Move to local timezone and remove the fraction of a second. It’s same format with difference in accuracy +See what this means for helmsman and parsing the information +Would be nice for ls and history to be consistent +Dependency digest differs between Helm 2 and 3: https://github.com/helm/helm/pull/7261 [Martin] +Need review and feedback if right approach +Fisher: consistent calculation? +Farina: there is a complication around dependencies with v1 vs v3 of library +Martin: some reverse engineering of hash +Farina will review +Update on --name flag https://github.com/helm/helm/issues/7345 [Farina] +Farina: lots of charts use this - we can make it a hidden flag +Fisher: Helm 3’s refactoring of argument/flag parsing is less complex so this is more straightforward for the CLI - we still have to look at the SDK (might be okay) +Farina: we’re less worried about the SDK and more about copypasta +3tutorials +Taylor: let’s be careful of precedent +Fisher: let’s assert this is a case-by-case decision, and not a precedent +Farina: a valid case exists here, and they get a deprecation message. This isn’t a “we support it forever” scenario. +Assignments +Moderator: Matt Fisher +Notes: Bridget (unless someone else wants to!) + +January 23, 2020 +Announcements +Standup +Josh: +Shifting focus to make OCI distribution mature +Help get OCI out of experimental +Marc: +PR on bash completion in Go now merged +Porting support to Cobra +Adapting patch for helm plugins (bash completion) +Bridget: +Thinking about issues and PRs +Scott: +Connected with Farina on ingress-nginx project +Jaeger and Kong using new Helm actions +Farina asks: do we want a blog post about actions? +Scott thinks yes, now might be the time +Jacob: +New proposal for test: +Upgrade and downgrade +Issue on way +Martin: +Bug triaging, PR review, issues on Slack +Pushed some PRs with fixes for release checklist - brought v2 fixes in to v3 +Fixed a bug in helm plugin utils project +Preparing talk with Taylor for config mgmt camp in Ghent +Farina: +Reviewing in +Helm Hub +Helm core +Discussion +Question about SA by default in `helm create`. Is it considered a good practice for every workload to run on its own SA even before RBAC resources are needed (PR where this was added), and if so, why? [Scott]: +Curious what practice why to create a SA everytime for deploy a chart +Farina said he reviewed this and he thought this pattern was being used commonly in the chart repo +No chart maintainers chimed in when Farina asked +Scott will raise an issue if it needs a change +Upgrade from failed releases: https://github.com/helm/helm/issues/5595 [Martin] +Several issues - releases can get into a state that can’t move on; people can be using deprecated APIs +We’ll have this issue for open a while, for discussion +Jacob to add comment on how this can fail on first attempt to deploy +Reintroducing --name flag? https://github.com/helm/helm/issues/7345 [Farina] +Martin: we need to be cautious about deprecation now that the (metaphorical) horse has bolted - the release is out. +Marc agrees with Martin’s opinion +Farina to add a comment to the PR that we have broken compatibility which is allowed. There is a way to work on this. +Could set a precedence of adding back in deprecated items which is not a great idea +Community member would like to add Deb and RPM packages for Helm: https://github.com/helm/helm/issues/7003#issuecomment-577527262 [Martin] +Martin: Is this something we want? They’re talking about hosting somewhere - do we actively support this or remain neutral/they support+we link? +Farina: Hosting elsewhere could cause a trust issue depending on who - we’d want to be clear that it’s a third party +Martin: choice is between running it ourselves and pointing to a third party +Farina: Point out to them that this is third party and he is totally responsible (unless we have maintainers who want to take it on with him) +3.0.3 and 3.1.0 releases? [Farina] +Bridget to shadow Farina to get 3.0.3 release out this coming week +Discuss next week a date for 3.1.0 +Assignments +Moderator: Bridget +Notes: Farina (or Josh D) +January 16, 2020 +Announcements +We did a CNCF webinar: https://www.cncf.io/webinars/a-conversation-about-helm-3/ +Standup +Matt Fisher +CNCF webinar +Marc +Big patch (discussion topic to follow) +Discussing with Fisher about working with memory driver +Hoping to pre-load it with something (but doesn’t handle namespaces - worried about API compat) +We can add but cannot alter methods +Butcher thinks this is an oversight/bug +Matt Butcher +Webinar +Working on getting us closer to graduation +Matt Farina +Mostly reviews & triaging - Helm & Helm Hub +Bridget +Focused right now on content for the documentation +Webinar +Martin +Linux on s390x +Deprecated APIs (for discussion) +Failed deployments - can we help? Make announcements? +[something I missed which people love] +PR review +Jacob +All good! +Taylor Thomas +Webinar +Postrender +Feedback to address from community members +Working on talks for configmgmt camp and devopsdays Guadalajara +Ping him if you need him on specific PRs +Discussion +Auto-completion re-written in Go https://github.com/helm/helm/pull/7323 [Matt Farina] +Moving it to Go lets us remove kubectl as a dependency +Request: please take a look/review this - it’s a big change +Fisher will be taking a look & put it on the 3.1 milestone +What should be done about the version on master? "unreleased" is currently not being added [Marc] +Marc was unsure how to post a version to show something would be off master - like “3.0 unreleased” like it used to. +Fisher explains he & Adam refactored the internal version packaging so the stable release would not have “unreleased” hardcoded +Fisher: In the makefile there’s a way to specify “unreleased” when not being built from a tag - we should add that (back). +Action item for Fisher: open an issue explaining the problem and suggested solution +Handle CRD ingress resources https://github.com/helm/helm/issues/5574 [Matt Farina provided feedback] +Farina commented on this last May but uncertain why it’s on this list today +Martin added it today, to see if we can give a more complete answer now +Farina says we need more eyes on work that will affect CRDs - they’re still challenging +community charts Helm 3 backwards compatibility is complete (to the best of our knowledge). Does anyone know of other issues that have since come up that aren't listed here? https://github.com/helm/charts/issues/19008 [Scott] +Fisher: that is a pretty comprehensive issue list +Hook up Linux s390x as CI platform: https://github.com/helm/helm/pull/7096 [Martin] +Submitter was asking about hooking a particular test into our CI pipeline +Farina mentions github actions and “self-hosted runners” as an option +Martin wonders if we _want_ this to be automated +Fisher points out that the ARM architecture testing was hosted by a third-party community project (without official support) - could we have the community members who are interested in s390x do the testing? +Martin mentions that we aren’t automatically running other platforms’ tests either. +Fisher: the same argument can be made for PPC arch +Butcher: the problem with new architectures: we cannot guarantee reliability on archs that the core team can’t access +Farina: so, we document to avoid confusion +K8s 1.16 and deprecated APIs: https://github.com/helm/helm/issues/7219 [Martin] +Martin: This is going to be a big issue for people in production +A community member might work on a plugin for this (like the helm 2to3 plugin) +This is going to be messy - there’s no clean delineation +Fisher: other issues like migration of one chart from an older to newer api version - k8s upgrades objects from 1.15 to 1.16, so making it easier for release objects would be good +Farina: other issues are coming - helm upgrade *should* allow All The Things to work (if we can find a way) +Bridget: can we recommend replace instead of upgrade? +Fisher: we should look at the k8s strategy for API version upgrades - this is going to happen with ingress and more +Martin: we’ll keep an eye on this +Assignments +Moderator: Farina +Notes: Martin + +January 9, 2020 +Announcements +CNCF webinar on Helm 3 w/ maintainers next Tuesday (Jan. 14) +https://www.cncf.io/webinars/a-conversation-about-helm-3/ +Standup +Marc +Cobra help text on stderr has been reverted to stdout +What is the “needs pick” process? +Fisher: release triaging for next patch release, tracking what’s been cherry-picked into patch branch +Taylor: +Step 1 -> Add to correct milestone. +Step 2 -> Add the “needs pick” label to the PR +Working on shell completion +Taylor +Post-render PR tidying, getting feedback addressed +Josh +Closed a few chartmuseum bugs +Matt Butcher +PR - making sure we don't use old directories. +Discovery client: make sure last set of fixes work +If you had stale API endpoint declared, it failed to initialized, causing chart rendering to fail +Martin +PR reviews, looking at defects +Looking at Taylor’s proposal +Scott +In a large room +Helm actions work, working with orgs to move charts from community repo to use their own, using action when possible +Jacob +Helm rollout logs, adding more watchers for readiness. Getting more logs to the end user without having to use kubectl +Bridget +Helm 101 content for upcoming workshops, getting it into a repo for anybody to run +Matt Fisher +Panel next week Tuesday w/ other maintainers +https://www.cncf.io/webinars/a-conversation-about-helm-3/ +PR reviewing +Feedback on issue queue, making sure things are triaged +Figuring out what's the story w/ 2.16.2 and 3.0.3, as well as 3.1.0 release + + +Discussion +https://github.com/helm/helm/pull/6752 needs some reviews [Taylor] +We should discuss its behavior with `helm template` +Butcher: the right thing to do is to throw errors vs. default values +Taylor: are we ok w/ this? +FIsher: curious if this solves anyones issues +Taylor: maybe post-render is the better option +Martin: we may not want this capability +Taylor: this feels like --wait - took 2 years to make it work properly, so we should be cautious +Bridget: lets not surprise people in unpleasant ways +https://github.com/helm/helm/issues/7260 [Taylor] +Updates on this proposal +Need to decide on how long we should leave open for comment +Fisher: Is there a precedent in other orgs (python) for long features left open for discussion? +Post-render hooks - the ability to add in extra resources after the fact +Bridget: “we are putting the burden of repeatability on the end user to ensure they are using the correct post-renderer every time” is this going to be okay given sufficient docs? +Taylor: will probably leave open for 2 weeks +https://github.com/helm/helm/pull/7320 [Taylor] +When migrating from 2 to 3, when moving CRDs to crd/ directory, their CRDs will be deleted. +We’ve always said (in docs etc.) we will not delete CRDs +Taylor: rather user angry over not working, vs. things being deleted w/out their knowledge +Auto-completion re-written in Go https://github.com/helm/helm/pull/7323 +Kubernetes nginx-ingress chart [Scott] +What should be done about the version on master? "unreleased" is currently not being added [Marc] +Assignments +Moderator: taylor +Notes: Bridget + +January 2, 2020 +Cancelled for the holidays +``` diff --git a/community/meeting-notes/2021.md b/community/meeting-notes/2021.md new file mode 100644 index 0000000000..4529260a6b --- /dev/null +++ b/community/meeting-notes/2021.md @@ -0,0 +1,2411 @@ +--- +title: Helm Minutes for 2021 +--- + + + +```txt +December 16, 2021 +Assignments for this meeting +Moderator: Butcher +Notes: Karena +Issue Triage: was unassigned for the week that ended today + +Announcements +This is the last meeting of 2021 +no Helm call on Dec 23 or Dec 30 +We will resume this call on Thursday January 6, 2022. +Next release: minor release 3.8 on Jan 19, 2022 +Not a patch release +Milestone in progress (review PRs, ideally by Jan 10!): https://github.com/helm/helm/milestone/113 +Release candidate goes out Jan 10 (monday before) + +Discussion +[Karen] KubeCon CFP reminder, May 17-20, Valencia Spain - Hybrid Event +Deadline is tomorrow, December 16 - https://events.linuxfoundation.org/kubecon-cloudnativecon-europe/program/cfp/ +Maintainers talk deadline is later in January +If two talks: Panel + Non-panel (in the past, could be two co-speaker talks) +Early bird pricing ends January 7 +[Karena] cfp topics? +[Scott] helm 4, sdk improvements for extending to other tools +[Butcher] I have also heard that they are looking for good case-study or “this is how we use Helm” talks from people CNCF describes as “users” rather than “contributors" +[Farina] idea for Scott … flux, helm controller .. ‘how we built something using the helm sdk’ +[Scott] workarounds they might be able to highlight, improvements? +[Andrew] oci level distributions … how client model might change, how package, etc. +[Scott] OCI alignment +[Farina] List of things: https://github.com/helm/helm/issues/10393 +When fall back don’t pass url, pass directory (think is a minor issue) +[Butcher] correct fall back sequence +[Farina] version range support.. Only one unsure about +Work w ORAS team to satisfy version range support + +Assignments for next meeting - Jan 6, first meeting of 2022! +Moderator: Karena +Notes: Bridget +Issue Triage: Dec 16-Dec 23 (Allen Bai), Dec 23-Dec 30 (Scott), Dec 30-Jan 6 (Butcher) + +December 9, 2021 +Assignments for this meeting +Moderator: Marc +Notes: Bridget +Issue Triage: Farina + +Announcements +3.7.2 was released yesterday +Butcher: mostly dependency updates but also some bugfixes +Meeting next week, then a break until January + +Discussion +[Paul Vollmer] demo of helm-playground, a webapp to render helm charts in the browser. +https://paulvollmer.net/helm-playground +Early stages - interested in feedback on https://github.com/paulvollmer/helm-playground +Tool for testing/quick iteration +Renders automatically when changing values +Perhaps we could set up play.helm.sh eventually - what’s the next step to bring this to the community? +Currently no data recorded/only local WASM +Next step: HIP to incorporate this into helm docs +[Butcher] compare to vscode plugin for helm, to see how to incorporate with IDE +D Peraza - could incorporate helm test +Butcher: be interesting to be able to upload a chart or template +Paul: goal is to allow people to see results immediately +Butcher: webassembly is an interesting way to package up templates + + +[suggested by Bridget] any update from Farina, Josh, and Butcher’s discussion of Moving OCI integration from experimental to full feature · Issue #10393 · helm/helm +They met and triaged the list in that issue; currently 6 items need to happen: + Adopt Helm best practice for altering build affix in versions when pushing to OCI #10166 + Move internal/experimental/registry out of internal package #9188 + Documentation only: Helm v3.7.0 OCI Helm push to ecr gives 404 Not found #10169 (comment) + Forthcoming issue: @jdolitsky re DOCKER_CONFIG + OCI: no version range support for dependencies/helm install #9694 + helm registry login cannot use existing config file for authentication #10156 + +[Bridget] do we want to get a second review of https://github.com/helm/helm/pull/9318 and get this bugfix for Helm pull fails if pulling from a repository that redirects to another domain · Issue #9317 · helm/helm merged in for 3.8? +Mentioned - we shall see + + +Assignments for next meeting - Dec 16, last meeting of 2021! +Moderator: Butcher +Notes: Karena +Issue Triage: TBD + + + +December 2, 2021 +Assignments for this meeting +Moderator: Farina +Notes: Karena +Issue Triage: week 1 Scott, then week 2 Butcher + +Announcements +3.7.2 scheduled for Dec 8 - https://github.com/helm/helm/milestone/115 +Second wednesday of every month +[Bridget] when to get in any last minute items? +[Farina] end of this week is the best - has to be a bug (not feature) + +Discussion + +[Bridget] Schedule for the rest of this year(!) +Thursday Dec 9 - meeting as normal +Thursday Dec 16 - meeting as normal +Thursday Dec 23 - cancelled +Thursday Dec 30 - cancelled +Thursday Jan 6 - back to normal + +[Josh] If OCI will not ship for 3.8 due to various reasons, consider transferring internal/experimental/registry/ into new Go module “helm.sh/registry” (github.com/helm/registry) so vendors can start innovating and improving +Josh/Scott/Farina met to discuss getting OCI out of experimental +Concerns: lack of dev resources / feature gaps +https://github.com/helm/helm/issues/10393 +Version ranges .. not finished +Business logic to implement api’s ..? +Lessons learned: more proj mgmt +What is the MVP? +[Josh] need document to clearly outline the requirements and issues to work on +Alias support: https://github.com/helm/helm/issues/10013 +[Farina] Need to go through the list to determine what still needs to be worked on, what needs to be added, etc. +[Joe Julian] distinction between sufficient API and feature complete +Farina/Josh/Butcher meeting this week to discuss further +Additional topics? +[Luke] https://github.com/helm/community/pull/224 if there is time +Release objects stored wherever they are stored +[Farina] strict decoding of yaml objects .. unsure if do that with release objects. Okay with recording in a release object. Generally okay but wants to look into more details to verify. +[Butcher] could potentially put behind a feature flag .. question: will it break the API on the release object? Build processes would have to take on the burden of building the tar balls +[Farina] digest checking and reproducible digests would be great .. want to keep in scope + +Defer to next week when Kent can join [Bridget] Kent Rancourt asking about introducing new template file: https://github.com/helm/helm/issues/10074#issuecomment-973097624 + +Assignments for next meeting +Moderator: Marc (and Butcher on dec 16) +Notes: Bridget +Issue Triage: Farina + + +November 25, 2021 - no meeting (US Thanksgiving) + +November 18, 2021 +Assignments for this meeting +Moderator: Butcher +Notes: Bridget +Issue Triage: Farina + + Announcements +[Bridget] no Helm call next week for US Thanksgiving Thursday Nov 25 +[Bridget] 3.7.2 scheduled for Dec 8 - https://github.com/helm/helm/milestone/115 +Add your bugfixes now! +Patches have been added already! +Get those k8s dependency fixes in, with a single PR to cover the content of those automated dependabot PRs - help wanted on that PR +[Farina] Allen Bai as Triage Maintainer +Congrats! Next step: PRing in himself to https://github.com/helm/helm/blob/main/OWNERS#L12 +Thanks to all for patience as voting can take time + +Discussion +[Scott] OCI update +upgrade oras to 0.5.0, refactor client oci logic to use new oras.Copy() #10294 +ORAS project meeting today +Plan to cover ORAS project community maturity #9 +Josh: experimental features will wait for after 1.0 +Farina: we’re interested in the Go API +also semver contract +Dependency issues - older k8s packages being imported - keep eye on containerd versioning +WIP to remove containerd dep https://github.com/oras-project/oras-go/issues/52 +Thanks to Josh, Farina, and all working to get this over the finish line +Josh: number 1 request for OCI is semver matching +https://github.com/oras-project/oras-go/issues/47 + + +[Farina] An alternative template delimiter - https://github.com/helm/helm/pull/10299 +Other systems like Prometheus have options like this +However, affects execution +[Butcher] Also might cause a breaking change - a silent failure if a chart couldn’t be rendered +Scott - new chart version? +Butcher: yes, this is a severe breaking change to templates - we’d have to do a version increment on charts. +Farine will update issue +Butcher: likely we’d want a HIP for this as well + + +[Farina] Reproducible builds (and further security things) +https://reproducible-builds.org/ +https://slsa.dev/ +Joe J: https://twitter.com/puerco/status/1461176447742226440 SLSA in this month’s patch releases of k8s +We’ve had PRs in the past but would need tests etc +[Scott] yes, as long as we feature-flag this +[David P] does the tar spec claim it will create the same digest output? +[Farina] Go sort order issues, and the timestamp, are why this varies +[Scott] chart repo automation currently has to work around this + +Defer to Dec 2 [Bridget] Kent Rancourt asking about introducing new template file: https://github.com/helm/helm/issues/10074#issuecomment-973097624 + + +Assignments for next meeting (no meeting Nov 25 - next meeting Dec 2) +Moderator: Farina +Notes: Josh +Issue Triage: week 1 Scott, then week 2 Butcher + +November 11, 2021 +Assignments for this meeting +Moderator: Karena +Notes: Butcher +Issue Triage: Scott shadowing Martin + + +Announcements +[Marc] Welcome yxxhero as new triage maintainer! +Vote was a while back, but he is now officially in OWNERS file +Still some open votes for the maintainers, so vote now! +[Marc] Patch release cancelled for this month - No new commits since 3.7.1 +There were no committed changes, so nothing to release. +Farina: We will discuss getting some momentum +[Bridget] no Helm call for US Thanksgiving Thursday Nov 25 +Just a reminder that since many maintainers are in US, we will cancel that meeting +Karena: We had discussed canceling some other meetings during the holiday season + + + +Discussion + [Bridget] Josh opened an issue to discuss what we’d like to see in OCI support: https://github.com/helm/helm/issues/10312 - any new thoughts? Next steps? +Josh opened an issue for what should be coming, and it would be good to get some opinions recorded. We can return to discussion when Josh is present. + + [Bridget] Can someone check and perhaps merge the current dependabot PRs? (do we want this to be part of triage tasks for the week?) +There are several Dependabot PRs that should get some attention. And the longer we wait, the harder they are to merge. +Could this be considered triage work? + + + +[Farina] How do we get more merged? +Core maintainers are quite busy right now (with other things), and with no single corp overseeing Helm, we need to come up with a way to get people engaged in reviewing/merging +We have more maintainers, but not enough to make a big difference here +So what can we do to help with that? +Dpereza: Will more maintainers fix this? +Farina: Maybe, but that does require more work +dpereza: RH does indeed have interest in doing more than this, but we’re unclear on how to start that. What do we do TODAY to set us up to be stronger maintainers in the future? (There are 3-5 people on this team) +Farina: I will help get this going. Feel free to come bug me to help you. I’m in ALL the Slacks. +Karena: What about the dependabot PRs? +Bridget: Can these be triage tasks? Or are they more than that? +Farina: Three of them need to be combined into one big PR, and that will require someone to actually do the work. One big k8s library update. +Marc: Someone from RedHat did this k8s merge in the past. Does anyone remember who? [Will look up] +Farina will write the Help Wanted issue for tracking the k8s upgrade +Marc: It was Shoubik who had done some in the past. +Discussion about asking Shoubik to do this again (David will follow up). + +[Bridget] What do we think of this Slack integration request? https://github.com/helm/helm/issues/10291 +Installing the slack app on the repo… do we want to do this? +Do projects do this? Is this a good idea? Does anyone want to investigate? +Butcher: I will track this one + +Assignments for next meeting +Moderator: Butcher +Notes: Bridget +Issue Triage: Farina + + +November 4, 2021 +Assignments for this meeting +Moderator: Martin Hickey +Notes: Bridget Kromhout +Issue Triage: Scott Rigby - will reach out to other folks for backup + +Announcements +[Bridget] Next scheduled release: 3.8.0 on January 12th, 2022 https://github.com/helm/helm/milestone/113 - review items in there! +Is 3.7.2 still planned for Nov 10? https://github.com/helm/helm/milestone/115 has no items in it yet +[fisher] No. we preemptively create the milestone per HIP 2: https://github.com/helm/community/blob/main/hips/hip-0002.md . If nothing is scheduled for a milestone, then we have nothing to release +[bridget] okay. I wasn’t sure how late an item could be added. +[Fisher] when we have nothing to release we extend the date + + +Discussion +[Bridget] Upcoming holidays - shall we cancel this call for US Thanksgiving on Thursday Nov 25? [yes] Thursday Dec 23? perhaps Thursday Dec 30? [let’s ask closer to the date] +Bridget and Karena will be out for all three +Fisher: generally speaking most people won’t be at the calls these dates +Martin: I will also be out +Resolution: We will cancel the Nov 25th call and ask about the December ones closer to the time. +[Bridget] does anyone know offhand if the OCI support as of 3.7.1 fixes this bug? https://github.com/helm/helm/issues/8090 +[fisher] that should be fixed as of Helm 3.7+. Added a comment +We can revisit this if it doesn’t work in 3.7+ +[Josh] clarity around :version versus --version: https://github.com/helm/helm/issues/8090#issuecomment-961222358 +[Scott] update on ORAS/Helm OCI progress +upgrade oras to 0.5.0, refactor client oci logic to use new oras.Copy() +Josh D, can we connect on how to update the test? +Josh: new API in oras makes it more flexible - this PR validates it still works with the new API - but there is an issue with how layers are sorted - perhaps need to hear from Farina? But it may not matter. +[Fisher] possibly docker may rely on order for layers - “if docker relies on layers being ordered in a certain way because of the nature of a copy-on-write filesystem” +Scott: PR in question: https://github.com/helm/helm/pull/10294 + +Assignments for next meeting +Moderator: Karena +Notes: Butcher +Issue Triage: Scott shadowing Martin + + +October 28, 2021 +Assignments for this meeting +Moderator: Marc +Notes: Karena +Issue Triage: Scott shadowing Farina + +Announcements +[Marc] New triage maintainer: yxxhero +Welcome! +[Karena] KubeCon Maintainer Session - Combined views (in-person + virtual): 1223 + +Discussion +[Marc] Should triage maintainers be added to the OWNERS file? +[Farina] makes sense to have it +AI: Marc to send email to maintainers +[Josh (who cannot attend)] Merge me! https://github.com/helm/helm-www/pull/1228 +Several issues is the queue related to OCI may be prevented, since the current registry docs are misleading/contain old commands +People have command line documentation +old vs. new +[Scott] I am reviewing +[Adam] - PRs to bump +https://github.com/helm/helm-www/pull/1228 +Labeling releases: +https://github.com/helm/helm/pull/8099 +Alternatively https://github.com/helm/helm/pull/9560 +[Farina] Expectations: next minor release (January) for these PRs +[David Peraza] question on pre-GA install +[Farina] k8s versions look semantic but are not semantic +Helm uses a semver check +According to semver, use ascii character map so start w/ using zero +[Farina] could have better help documentation +[Scott] quick update from last week on Helm OCI & ORAS dependency. Moving forward! +Communicating closely w ORAS maintainers (Josh, Sajay, Avi etc) and collabing with volunteers (David P, Andy Block, Josh Wolf, Tom Runyon) +[Marc] Triage maintainers +Voting on Allen too +And Scott + +Assignments for next meeting +Moderator: Matt Farina +Notes: Bridget Kromhout +Issue Triage: Scott Rigby - will reach out to other folks for backup + +October 21, 2021 +Assignments for this meeting +Moderator: Bridget +Notes: Scott +Issue Triage: Farina + +Announcements +[Bridget] 3.7.1 patch release went out last week. Next scheduled release: 3.8.0 in January https://github.com/helm/helm/milestone/113 + +Discussion +[Bridget] does someone want to check and approve/comment on the outstanding dependabot PRs? https://github.com/helm/helm/pulls/app%2Fdependabot +Dependabot will keep them up to date, so if they’re still open, we can review and merge them + +[Scott] feedback on OCI status +Issue, SDK users can not import helm's OCI support, because it is EXPERIMENTAL (note this is by design for now for a good reason) +quick note on earlier idea for helm/registry breakout proposal. Chat prior to HIP +Met with Josh & Matt Farina before and during KubeCon +Now: prefer to instead help push Helm OCI support over the finish line. Shoot for January +Scott: people should not be using experimental features in production, but they are. Next steps: the gaps are almost all closed, so suggest we push over the finish line. Biggest blocker: oras backwards compatibility +Target: the January 3.8.0 release +Volunteers: +Scott +Andrew Block +David Peraza +Josh Wolf +[Scott] will push this forward +set up a simple collaborative process for the busy folks who want to help (scheduled meeting? just async? whatever is pragmatic & easiest) +start with checklist of required things to do +coordinate with Bridget +coordinate with other ppl who have volunteered to collaborate on this +coordinate with Josh for reviews + + +[David] New member asked to bring this up in call: https://github.com/helm/helm/pulls/mmulholla + Will follow up (we were KubeCon-ing last week) + +[Farina] summary of community online meeting during KubeCon +OCI and CRD questions as usual + +[Bridget] HIP review: https://github.com/helm/community/pulls +Anyone can comment + +Assignments for next meeting +Moderator: Marc +Notes: Karena +Issue Triage: Scott shadowing Farina + + +October 14, 2021 +Cancelled due to KubeCon :-) +Join office hours on Bevy instead! +Tuesday, October 12 • 9:00am - 9:45am Pacific +Friday, October 15 • 10:30am - 11:15am Pacific + + +October 7, 2021 +Assignments for this meeting +Moderator: Karena +Notes: Scott +Issue Triage: Farina + +Announcements +[Bridget] reminder: no Thursday Oct 14th Helm weekly dev call due to KubeCon +Join office hours on Bevy instead! +Tuesday, October 12 • 9:00am - 9:45am Pacific +Friday, October 15 • 10:30am - 11:15am Pacific +[Farina] 3.7.1 patch release next week (being cut by Farina) +Cutting this on Wednesday next week : https://github.com/helm/helm/milestone/114 +https://helm.sh/docs/community/release_checklist/ +Marc: new pick and push process + + + +Discussion +[Nick Jennings/Ramindar/Dhanashree] Surfacing container logs in Helm? +https://github.com/helm/helm/pull/7728 and https://github.com/helm/helm/issues/5952 +Matt Farina: check out the https://github.com/helm/chart-testing project +Joe: could potentially be a helm plugin. Not yet sure if you do it within the atomic loop (though you could if you made your own command). +Matt Farina: Nick is looking to do something that's not custom +Joe: agree, though it could start out custom prior to a HIP +Nick: agree that would be a good way to move ahead +Marc: legit use case though right? +Matt Farina: workaround is not use atomic flag, and manage the rollback logic on one's own (follow Unix philosophy of "do one thing well", rather than complexity of single command with all of those flags) +Karena: ensuring there is a clear next step +Nick: yes recommending partners either to not use atomic flag, or re-run without atomic flag on failure. And the next step is either 1. HIP, or 2. Helm plugin. Matt Farina recommends again looking at helm-testing project because surfacing some of those logs for testing has already been done + + + [Tom Runyon] Standardize Annotations to identify images used by Helm Chart. +ArtifactHub uses the annotation `artifacthub.io/images` to identify images used by the chart [Reference]. This helps ArtifactHub show the scan results that are not clearly visible by rendering/templating the chart e.g. here. +Other use cases exist (e.g. bundling artifacts for airgapped/off line deployments, generating SBOMs, etc) and having a global (helm) standard would facilitate tooling built around the specification of images required to use the chart. +Proposed: `helm.sh/images` as seen below: + +Andrew Block: this is important for Red Hat - “related images” - https://docs.openshift.com/container-platform/4.8/operators/operator_sdk/osdk-generating-csvs.html#olm-enabling-operator-for-restricted-network_osdk-generating-csvs +Scott Rigby: agrees there should be a standard - this doesn’t require much from Helm other than stating something is “supported” +Farina: we’d need to agree and document +Tom R: happy to do that work +Farina: this would definitely need to be a HIP and I would be supportive of it + + +(move to Oct 21?) [Scott] If time, feedback on earlier idea for helm/registry breakout proposal. Chat prior to HIP + + + +Assignments for next meeting (Oct 21! No meeting Oct 14) +Moderator: Bridget (or other!) +Notes: Karena +Issue Triage: Farina for week 1; someone needed for week 2 + +September 30, 2021 +Assignments for this meeting +Moderator: Scott +Notes: Bridget +Issue Triage: Butcher + + +Announcements +[Bridget] Hosts needed for KubeCon online office hours (held on Bevy): +Tuesday, October 12 • 9:00am - 9:45am Pacific (to be led by Matt Farina) +Friday, October 15 • 10:30am - 11:15am Pacific (to be led by…?) +[Bridget] 3.7.1 patch release would be during KubeCon - schedule adjustment? +Farina: I can still cut this release that day +[Bridget] reminder: no Thursday Oct 14th Helm weekly dev call due to KubeCon +[Scott] Oct 5th 10 AM PST, Martin & Scott present a feature showcase on Helm + Flux at CloudNative @Scale SF: https://twitter.com/r6by/status/1443596965946744839 + + +Discussion +[Farina] Artifact Hub storing validation in OCI registry for charts there… + - “The repository metadata file can now be added to Helm OCI repositories. This allows using features like verified publisher or ownership claim on OCI based repos. For more information about how to add it to your repository please see the Helm OCI section in the repositories documentation.” +Artifact Hub asking for input/feedback on this feature, and asking you to add the metadata files - similar to provenance files +This is different from “verified publisher” - see https://artifacthub.io/docs/topics/repositories/ - important for businesses etc + +[Bridget] Inactive repo cleanup - I’m proposing we archive three repos due to minimal content and no activity: +https://github.com/helm/query-store-quay-logs - Farina: running this stopped working - nobody noticed - Farina will send out a lazy-consensus and run it by the charts team +https://github.com/helm/repo-audit - was a tool intended for audit/features - unsure about what we should do about this - perhaps there is a way to do this via artifact hub - check for digest changes/security/provenance files/chart-testing-tool/etc - interesting to dperaza - Farina will change master branch to main +https://github.com/helm/specs - based on a request to document specs - Farina believes we need to do this - Farina will change master branch to main + + +[Bridget] OCI/mediatype question - do we know what we want to do with https://github.com/helm/helm/pull/10182#issuecomment-927377309? +Farina: this is an issue with user confusion around experimental features - plugins will be a more clear delineation in the future + +[Scott] who wants to make a PR against Helm Governance for using the private maintainers list for new maintainers voting. +[Bridget] I already have a PR open against governance to update from last year’s HIP-005: https://github.com/helm/community/pull/210 +Bridget will request that clarification - according to farina, self-nominations should happen on public list, then vote on private list + + +Assignments for next meeting +Moderator: Karena +Notes: Scott +Issue Triage: Farina + +September 23, 2021 +Assignments for this meeting +Moderator: Matt Farina +Notes: Bridget +Issue Triage: TBD + +Announcements +[Bridget] Karen Chu has added the last year of meeting recordings to the playlist linked on https://github.com/helm/community/blob/main/communication.md#meetings + +Discussion +[Bridget] September is proposed as a Helm 4 decision time - what is our next move? (Brought up by Butcher at the Sept 7 meeting - defined in HIP 12) + [Bridget] The original plan mentioned possible kickoff activities at kubecon north america 2021, which is fast approaching. +Butcher: the plan is for a release engineer and perhaps also a PM/architect role - the HIP said we’d have this person in place by the end of September - thus far we are slipping timeline-wise - perhaps we need to revisit post-holiday-season. +Butcher so perhaps we amend HIP-12 with a redefinition of the roles to two instead of one, and for a resumption post-holidays +Action item: Butcher to carry out HIP replacement (lol) + +[Bridget] 3.7.1 for bugfixes? +OCI: Allow any mediatype for layers on download #10176 +[Josh] old charts being rejected is not ideal, but this bugfix would allow less-strict checking. +[Farina] debated in the original issue as to whether we should accept the old media type as well - what’s changed? +[Josh] the community reaction has motivated this increase in flexibility +[Farina] we should log deprecated media type - patch is in a couple weeks +[Farina] instead of experiments, we should look at plugins in the future (because of how this has been treated) +[Josh] helm-push plugin is broken due to “helm push” +https://github.com/helm/helm/issues/10175 +Action item: Josh will submit update for the patch release + + +[Karen Chu] Helm at KubeCon +Ways to participate +Online office hours (RSVP - held on Bevy): Tuesday, October 12 • 9:00am - 9:45am Pacific and Friday, October 15 • 10:30am - 11:15am Pacific +Hosts needed! Please sign up here and we can connect you with CNCF - Karen will connect with you to ensure you are signed up on Bevy. +Maintainer session: Wednesday October 13, 2021 11:00am - 11:35am PDT Concourse Hall 150 ABC + Online +Project Pavilion booth +Online +In person - possible to sign up for participation (we have it half the day - mornings each day) + + +[Andrew Block] Helm + Sigstore: Presentation plus very short demo +Helm Sigstore Plugin Demo: https://www.youtube.com/watch?v=cjY26RRHpo8 +Sigstore is not SIG Storage +cosign, rekor, fulcio +https://github.com/sigstore/helm-sigstore +Scott Rigby: please join the Helm chart talk at KubeCon + + +Assignments for next meeting +Moderator: Scott +Notes: Karena +Issue Triage: Butcher + +September 16, 2021 +Assignments for this meeting +Moderator: Karena +Notes: Bridget +Issue Triage: Fisher + +Announcements +Helm 3.7.0 has been released https://github.com/helm/helm/releases/tag/v3.7.0 +Fisher: community identified code regressions, which are now fixed - RC3 was cut and now we’ve released 3.7.0 +[Marc] should we clarify the breaking change further (OCI charts only)? +Fisher: yes, there are significant changes to the experimental OCI support - see the HIP on the OCI support: https://github.com/helm/community/blob/main/hips/hip-0006.md +Charts will need re-uploading +Fisher: documentation needs to be updated in accordance with this change +[Marc] we may need to clarify the release notes +Farina: Josh D did a gist on how to update: https://gist.github.com/jdolitsky/66e0768ceedb6eab7395422e86e16a53 +Action item: Release notes update by Marc + + + +Discussion +Helm 3.8.0 release date +[fisher] I looked at the calendar and tentatively scheduled it for January 12, 2022 (second Wednesday, four months from now). Lazy consensus vote? +Fisher: the HIP says quarterly - 4 months from now would land in January +Farina: January is good - but Jan 3 would be too soon to cut the release - let’s push a week - RC 2nd Wed in Jan, Release 3rd Wed in Jan +Action item: Fisher will send email & update the release calendar +Marc will add Fisher to the calendar +[Karena] Triage shadowing session +[Karena] pairing is challenging - can we schedule a session for walking people through triage? +[Fisher] perhaps we need to define what this is? +[Bridget] Do we want a one-off triage onboarding/shadow session? +[dperaza] Async would be valuable as well, but I would attend a one-off orientation +Stephane: also please record the session and document it +Karena: resolution: +[Bridget] KubeCon logistics +Shall we cancel the Thursday Oct 14th Helm weekly dev call? [yes] +Who wants to host online office hours, Friday Oct 15 10:30am-11:15am pacific, https://sched.co/mtNO? [Maybe Farina but let’s check later] +Who’ll be onsite for KubeCon? (We have an in-person project pavilion spot.) +[Karena] Please comment here if you’re going to be onsite in Los Angeles +Bridget: I’m planning to be there +Karena: I’ll be there! + + +[Marc]: Wondering if dynamic completion of plugins could have security implications? https://helm.sh/docs/topics/plugins/#dynamic-completion +Butcher: Helm can’t secure unknown 3rd-party code on behalf of the user + +[Karena] Helm youtube channel +Who maintains/uploads community videos? +[fisher] The CNCF provided a zoom plugin that will automatically upload Zoom recordings to YouTube. They own the account, but have shared access to myself and Karen (Helm Community Manager) +[Scott] progress on helm session technical focus on charts +[Bridget] Skipped this so pulling it out to highlight it 💖 +Building, publishing, sharing charts! +[David] Can we demo sig-store for the community call? +Fisher: we’ve had demos here before but it’s nice to have a video ahead of time to pre-watch and then discuss on the call +Farina: a recorded demo on youtube is far easier to share + +Assignments for next meeting +Moderator: Matt Farina +Notes: Bridget +Issue Triage: TBD + +September 9, 2021 +Assignments for this meeting +Moderator: Matt Fisher +Notes: Karena Angell +Issue Triage: Matt Butcher +Announcements +[fisher] Helm 3.7.0 delayed due to a few code regressions +Cut 3.7.0-rc.3 and look to release 3.7.0 after that +Next hour, release candidate is out +Next Tuesday for 3.7.0 GA +Discussion +[fisher] Helm 3.7.0-rc.2 update +[fisher] there is a fix available now available for #10112: https://github.com/helm/helm/pull/10117 +Reviewed and approved +[Bridget] Helm at KubeCon NA 2021 - updates? +Project talk: +Helm: The Charts and the Curious - https://sched.co/lV7H +Helm project booth +Online office hours +Friday, https://sched.co/mtNO +Scott, Paul, Carlos, Karena are giving a talk on how to improve your chart workflow - focused on people who are looking to better automate their talks, join us online or at kubecon +[Bridget] Triage maintainer nominations - updates? +One is being onboarded +If anyone else - there’s a HIP: https://github.com/helm/community/blob/main/hips/hip-0014.md +[Bridget] Self-nominate! It’s easy and fun! +Don’t have to be proficient in Go or Helm - it’s a good way to learn +Joe Julian & Scott Rigby interested +[Andrew Block] Sigstore + Helm - https://www.sigstore.dev/ +Sigstore for signing/verifying content +Helm package signing +https://medium.com/@sabre1041/setting-up-your-own-rekor-transparency-log-server-using-helm-fc7bbeafb59c +https://medium.com/@sabre1041/integrating-helm-into-the-sigstore-project-d51564ea001f +Sign Helm charts - not rewriting how they are signed today - taking content and publishing to a transparency log +Interested in feedback - future presentation will demo to the group +Farina: would love to see Helm work published to transparency log +Pgp keys? +Farina: pgp was when we created things - integration with gpg not as good anymore +Josh: helm push - if sees file, will upload over oci distribution … would be cool to detect sigstore plugin + +Assignments for next meeting +Moderator: Karena +Notes: Butcher +Issue Triage: Fisher + + +September 2, 2021 +Assignments for this meeting +Moderator: Martin +Notes: Karena +Issue Triage: Farina + + +Announcements +3.7.0 release Wednesday Sept 8: https://github.com/helm/helm/milestone/111 +Revamped OCI integration +Breaking change to previous OCI experiment +Under experimental flag +Josh dolitsky +Useability +Any volunteers to test?? +API changes: +push/pull from registry, certain manifests pull from there (breaking change) +Action package - tried to move some of the api stuff out +“should be” clearly documented +CRDs out of the chart - helm show crds +SIGTERMS on upgrade/install + +Discussion + [Itai Spiegel] Including external files in chart. https://github.com/helm/helm/pull/10077 +Broke api compatibility - PR not ready for review yet + [Butcher] Helm 4 Release Manager +“It is time!” +Release manager - most of architectural decisions +Roadmarkers +PM’y but more architect role +25-30 hours of work per week +Decide by end of september - go/no-go then +Or nominate Adam ;) +Needs to be existing maintainer of helm/helm code base +Requires some coding and managing PRs with PR authors +David: break up the role? +Andy: cover multiple geos +Julian: 30 hours per week for how long? +6 months? +Butcher: We could also break it into PM-like tasks and coding tasks, and create two distinct roles +Once decide on person(s), can kick off the process +What are the bounds for this release? +[Scott] Feedback on HIP process for detecting changes to objects that are the result of a Helm release (rather than only mutations to the storage like helm-diff) +Command that compares helm storage state with a live cluster state +Helm controller from flux and Helm operator had to do a lot of workarounds to ascertain the info - should this be a HIP? +Farina: Helm 3 - 3-way merge patch +Mutating web hooks +E.g. Service mesh +A tool like this might fail / raise those thing instantly in a case like this +Farina: what’s the use case? +Butcher: And Kubernetes itself mutates things (in ways that change from k8s release to k8s release) +Butcher: a HIP sounds like a great way to discuss this +[Karena] Blog post for this release +Loves the mentions so far about what's landing in this release +Any other notes over the next 3 mins? +Farina: a bunch of new features. Maybe have time to craft full release notes Wednesday? Will have to look at closed pull requests because there were so many + +Assignments for next meeting +Moderator: (Bridget if no other volunteers) +Notes: Karena +Issue Triage: Matt Butcher + + +August 26, 2021 +Assignments for this meeting +Moderator: Adam +Notes: Bridget +Issue Triage: unassigned + +Announcements +3.7.0 RC scheduled for Mon Aug 30 (next week!), with 3.7.0 release Wednesday Sept 8: https://github.com/helm/helm/milestone/111 +Call to action: review (and/or update) PRs for 3.7.0 + +Discussion +[Farina] Download cache HIP and security… https://github.com/helm/community/pull/185 +[Farina] Possible security issue if index.yaml file intercepted/changed, leading to a wrong version being installed +[Farina] Perhaps checking which version is being requested would mitigate? +[Butcher] that reduces the risk to local filesystem attacks +[Farina] this cache also covers cache environment variables +[Butcher] we have extraneous cache environment variables +[Martin] for helm 4 - one cache to rule them all! +[Karena] how does this tie back to the overall security story? +[Farina] many factors for security - like signed indexes - but yes, a security-centered approach is wise +[Farina] we should discuss https://github.com/sigstore/helm-charts +[Karena] Andy would like to come on to discuss +[David Peraza] let’s discuss/bring in more folks +[Farina] We could look into more caching items before Helm v4 + +[Martin] Would functionality to clean failed revisions be useful? Came up as a conversation in https://github.com/helm/helm/issues/10056. +[Farina] In Helm 3 there is a limit of 10 by default +[Martin] Failed revisions that people want the ability to clean up +[Farina] We don’t garbage-collect if all the release objects are failures +[Farina] perhaps we should start with a garbage-collection plugin? +[Martin] that is better than telling people to edit the cluster directly +[Farina] a plugin called `gc` would be a good place to start +[Martin] will raise as a feature and see if someone has the bandwidth + +[Farina] Helm v4 - context, dependency injection container, or something else… +not being able to get to information we didn’t know we needed is making the SDK hard or unusable for non-Helm apps. +See https://github.com/helm/helm/pull/10008 as an example. +Looking for way to solve this in v4. +[Farina] plugin can have wrong directory due to tight coupling +[Farina] dependency injection may be the way to do this +[Farina] hypper work has shown this currently has some issues but we don’t have a way to avoid it now - perhaps in v4 we can change it. +[Butcher] context object or directory perhaps, but building a dependency injection pattern may be useful +[Farina] context or CLI will both work interactively vs in a CI pipeline +[Butcher] possibilities chainable context tuple pattern +[Karena] Do we want to have a working group at KubeCon? +[Butcher] Karen did request space for a planning session +[Martin] remote participation options? +[Bridget] I can join a device from an in-person session as needed + +[Martin] Do changes to an interface break backwards compatibility according to Go conventions? +We have precedent in Helm 3 where an interface was changed in https://github.com/helm/helm/pull/8363. +Should we therefore allow it to be changed in https://github.com/helm/helm/pull/9702? +Can’t see it mentioned in the backwards compatibility HIP: https://github.com/helm/community/blob/main/hips/hip-0004.md +https://go.dev/blog/module-compatibility +[Martin] we can probably get this in for 3.7 +[Farina] this isn’t documented in the backward-compatibility rules +[Butcher] but it is documented in go’s guidelines +[Adam] modifying an interface is a breaking change +[Martin] we did merge a PR that breaks the interface + +[Bridget] do we have any update on adding triage maintainers? +[Farina] Need a few more votes from maintainers for the first candidate + +Assignments for next meeting +Moderator: Martin +Notes: Karena +Issue Triage: Farina + + +August 19, 2021 +Assignments for this meeting +Moderator: Bridget Kromhout +Notes: Matt Fisher +Issue Triage: TBD + +Announcements +3.7.0 RC scheduled for Mon Aug 30, with 3.7.0 release Wednesday Sept 8: https://github.com/helm/helm/milestone/111 +Call to action: review PRs for 3.7.0 +New FAQ entry for tiller download questions: https://helm.sh/docs/faq/troubleshooting/#tiller-installations-stopped-working-and-access-is-denied + +Discussion +[Itai Spiegel] Add --include-file flag for external files: https://github.com/helm/helm/pull/8841 +Writing a helm chart for deploying applications, using the first helm chart as a dependency +Looking for a summary of Helm’s architecture to help move the feature forward +[Fisher] recommended step - first, reach out to the original author of the PR - perhaps you can see if their timeline matches yours +Itai: yes, I sent him email with no response +[Fisher] It’s fair to work on an alternative if you don’t hear back +Adam - he can open a new PR with the existing commits (Butcher: as long as the DCO is in place from the original committer) +Adam (on rollback): when you send up files on an install, these files are added as templates, not configuration in parts of the chart +Additionally, there is a security concern of including files +Itai: we’re fine with this. The security concerns is not important in our case. +Bridget: just because security concerns are not important in this use case doesn’t mean we shouldn’t be concerned about security leaks +Itai: okay. So I’ll go and test/document this with regards to `helm rollback` +[Bridget] progress on OCI support - https://github.com/helm/helm/pull/9782 +[Fisher] Adam, Butcher, and I have reviewed this PR in detail - the only removals are internal so in terms of public packages, nothing has changed - one change to adjust, and another PR to merge first. +Adam & Fisher to pair +[Bridget] Call-to-action to contact Josh Dolitsky later [emailed] +[Stephane] next steps for https://github.com/helm/helm/pull/9180 +Had some conversations with FIsher about how to get this into Helm 3.7.0 +[bridget] added to Helm 3.7.0 for visibility + +Assignments for next meeting +Moderator: Adam +Notes: Karena +Issue Triage: TBD + + +August 12, 2021 +Assignments for this meeting +Moderator: Adam Reese +Notes: Bridget Kromhout +Issue Triage: Matt Farina + +Announcements +3.7.0 RC scheduled for Mon Aug 30, with 3.7.0 release Wednesday Sept 8: https://github.com/helm/helm/milestone/111 +patch release (3.6.4) scheduled for Wed August 11 has not occurred: https://github.com/helm/helm/milestone/112 +PRs were not in shape for merging +Cancel 3.6.4 and move those items to the 3.7.0 milestone? +Farina will do this cleanup step +Call to action: review PRs for 3.7.0 + +Discussion + [Fisher] HIP 14 (Helm Triage Maintainers) update +https://github.com/helm/community/blob/main/hips/hip-0014.md +Let’s sign on new maintainers at a lower commitment level, to help with PR review and triage +This role does not handle release management or event coordination +HIP is approved - Fisher has created github “Team” +Some candidates in the pipeline +Nominate candidates using the same process as for core maintainers +Action item: PR this clarification in - this role falls under https://github.com/helm/community/blob/main/governance/governance.md#project-maintainers specifically for helm/helm + [Martin] Generate `values.schema.json` during `helm create` https://github.com/helm/helm/issues/10009 +Should this be added or do we keep the scaffold chart simple and the basics to better help users onboarding to Helm? +Adam: “create” should be as simple as possible - let’s not add to the base “create” command +Fisher: https://github.com/karuppiah7890/helm-schema-gen - this plugin is not currently maintained, but this discussion happened before +Farina: “create” is already too complex - Helm 4 could make that simpler - but starter templates could also be easier. +Fisher: compare https://github.com/cargo-generate/cargo-generate - values schemas can be quite opinionated +Martin: next steps - I might create a proposal and perhaps a HIP for Helm 4 +Scott: we’ve talked about a “wizard” before but that is too much complexity for helm itself (as opposed to being a plugin) +Fisher: yeoman is great for creating wizard-like templates. we've been using it in a few projects. https://yeoman.io/ +Scott: docs improvements ideas could be migrated over from the legacy charts repo +Martin is going to carry this discussion forward (helm create, templates, best practices, wizards…) +Adam: the `helm create` command is tied with our backwards-compat constraints, so let’s keep it simple to put the practices elsewhere, to preserve optionality +Scott: Decoupling that could make backwards compatibility for v4 easier to maintain +[Martin] `helm repo update` commands return exit code 0 regardless of errors or not https://github.com/helm/helm/issues/10016 +[Martin] Code implemented to just output any errors but does not return an error back to cobra. Is this expected behaviour? +[fisher] dropped a comment in the ticket providing some historical context +Fisher: “helm serve” was mostly a convenience but this behavior might be a workaround for that +Fisher: define “failure” - what if _some_ updates succeed and others (like helm serve) don’t and that is expected? +Fisher: we could consider this change for Helm 4 with a HIP - let’s not surprise people by changing 5-year-old behavior. +Martin: agreed, this is how it works, but maybe we reconsider this for Helm 4 +Fisher: _all_ failing definitely is exit code 1, but it’s ambiguous after that (as to if we need _any_ or _all_ to succeed). +Farina: it’s possible that a CI system could end up silently succeeding in doing a non-update (which could surprise unfortunately). Let’s get a HIP with a good case with examples of apt and similar +[Bridget] should we create a new blog post or FAQ item with the current status of tiller images to point people to when they’re asking, now that the legacy storage bucket is starting to be cleared out? +Action item: Bridget to write updated FAQ entry + +Assignments for next meeting +Moderator: Bridget Kromhout +Notes: Matt Fisher +Issue Triage: TBD + +August 5, 2021 +Assignments for this meeting +Moderator: Marc K +Notes: Jasper +Issue Triage: Matt Farina + +Announcements +Next patch release (3.6.4) scheduled for Wed August 11: https://github.com/helm/helm/milestone/112 +3.7.0 RC scheduled for Mon Aug 30, with 3.7.0 release Wednesday Sept 8: https://github.com/helm/helm/milestone/111 + +Discussion +[Bridget] is there an open issue or HIP that relates to “OSI model for signatures”? A note at the end of https://helm.sh/docs/topics/provenance/ implies there might be, but I do not see it. +[Farina] Unlikely going down this path. May go down sigstore path. +[Shoubhik] https://github.com/sigstore/helm-sigstore +Doc needs to be updated to reflect latest. [action item: Bridget] +[Farina] Helm 4 (and the release engineer) Target Oct 2021 +HIP 12: https://github.com/helm/community/blob/main/hips/hip-0012.md +Need to identify Release Engineer for Helm 4 +Require to be Helm/helm maintainer to be release engineer +Role and responsibilities: Person who oversees Helm 4 from technical coordination +[Scott] Want to help with SDK component. Can help wrangle and flesh out SDK-related stories (I have a new vested interest in this side of things, as I'm also co-maintaining Flux, specifically will help maintain the Flux Helm Controller) +[Martin] Do we have enough stories, features for Helm 4? +Defined in HIP on how to short circuit progres to halt development +Kick off meeting to be scheduled +[Shoubhik] When should we discuss what will go into Helm 4 +[Farina] Opportunity for breaking changes. Require HIP to describe request +Consider topic of Helm Releases on cluster +[Farina] Helm is a package manager and does not enforce a specific style. Need to understand how it works in a specific scenario. +[David] Helm having multiple resources in templates but the user does not have permission to perform action +[Farina] Helm work like other tools and depends on user permissions, Helm stores releases in secret. Can have a limiting experience. Helm can store information in other locations (eg configmap). +Can we improve the experience earlier during or before the installation +[Paul C] Opportunity for a plugin to perform this check +Consider split responsibilities to install different components of a chart +[Farina] This is release management and beyond scope of a package manager +[Scott] SDK issues. For example, race conditions when using SDK for storage locking within package. Locking could be moved to the CLI. Here is a related issue in helm/helm, but we have many more in fluxcd +This may be fixed by https://github.com/helm/helm/pull/9180 +[Farina] Opportunities to improve Helm 4 CLI and SDK +Need to brainstorm for using SDK to flush out stories +Action item for Scott to lead +Need to consider alternatives on how to capture this feedback. +[Marc] PR to add some completion descriptions (HIP 8) +For 3.7? +https://github.com/helm/helm/pull/9421 +https://github.com/helm/community/blob/main/hips/hip-0008.md +[Bridget] Where to track Helm 4 ideas? Attached to a HIP or create separate HIPs? +[Farina] use HIP to track all changes + +Assignments for next meeting +Moderator: Scott Rigby +Notes: Bridget Kromhout +Issue Triage: Matt Farina + +July 29, 2021 +Assignments for this meeting +Moderator: Marc Khouzam +Notes: Karena Angell +Issue Triage: Matt Fisher/Martin + +Announcements +Next patch release (3.6.4) scheduled for Wed August 11: https://github.com/helm/helm/milestone/112 +3.7.0 RC scheduled for Mon Aug 30, with 3.7.0 release Wednesday Sept 8: https://github.com/helm/helm/milestone/111 + +Discussion +[Martin] Support for bearer token authentication https://github.com/helm/helm/pull/8447 +Farina: it’s stale because it still needs work +Farina: want to pass via stdin, need to be security conscious +Farina: just need to think through the implementation details in the PR +AI - Farina to follow-up +[Martin] Go SDK installing Kubernetes resources to the wrong namespaces https://github.com/helm/helm/issues/8780 +Farina: two namespaces - k8s resources diff than the records; can only set it once when you instantiate +Need to instantiate k8s client with new namespace +Farina: no way to change this until Helm v4 +Farina: there is a very ugly way (running long running services that want to keep doing things) to do this currently, Helm v4 would be to simplify this +AI - Farina to share code (from https://github.com/rancher-sandbox/hypper) where it’s done +Farina: initializing isn’t setting it right + +Assignments for next meeting +Moderator: Scott Rigby +Notes: Jasper +Issue Triage: Matt Farina + +July 22, 2021 +Assignments for this meeting +Moderator: Martin Hickey +Notes: Karena Angell +Issue Triage: Martin Hickey/Matt Fisher + +Announcements +Next patch release (3.6.4) scheduled for Wed August 11: https://github.com/helm/helm/milestone/112 +3.7.0 RC scheduled for Mon Aug 30, with 3.7.0 release Wednesday Sept 8: https://github.com/helm/helm/milestone/111 + +Discussion +[Martin] Install chart from remote repo should it get the latest dependencies https://github.com/helm/helm/issues/9962 +If helm repo add and then the person says helm install +Fisher: expectation, would fetch during build or helm dependency update +Andrew: hard dependencies +Fisher: shouldn’t run a helm install and have it run and get any dependencies without you knowing +Fisher: further inspection needed +AI: ill look into more + + [Martin] Helm create a namespace from template which it installs into https://github.com/helm/helm/issues/9965 +Namespace plus custom labels +Fisher: tricky problem to solve +Fisher: Helm 1&2, original assumption, installed by Sys Admin +People didn’t setup acl’s for their grpc endpoints +Mitigated in 1&2, things stored in release record vs release namespace +Changed in Helm 3, user installs +Resource quotas in namespaces, etc +Helm 3 - move to kubectl approach +Create namespace ahead of time +Same as CRD problem +Fisher: Documentation? How to manage namespaces outside the chart +Fisher: namespace mgmt recommendation - one is to use helmfile + + [Martin] Adopt resources to a release https://github.com/helm/helm/issues/9958 : +Any docs for this feature? +Potential bug: https://github.com/helm/helm/issues/9958 +Issue with migrated releases because labels/annotations didn’t exist prior to Helm 3.2.0 +Fisher: If you can get hold of Jacob, best person to talk to +Fisher: Alternative, look through the code and create a HIP +A little familiar with the code +AI: Martin to reach out to Jacob + +[Karena] Helm 3.7 blog / release themes: +Any themes popping up for next major release +Do people think it is a good idea? Do anyone want to work with Karena to create a blog of it? +Fisher: happy to help +Open Initiative PR? +Also look at Helm 4 HIPs +Fall? Helm 4 discussions starting +[Fisher] call for more reviews on Helm Triage Maintainers HIP https://github.com/helm/community/pull/199 +Martin: should look at it too + +Assignments for next meeting +Moderator: Marc Khouzam +Notes: Karena Angell +Issue Triage: Matt Fisher + + + +July 15, 2021 +Assignments for this meeting +Moderator: Bridget Kromhout +Notes: Jasper Chui +Issue Triage: Matt Farina + +Announcements +[Farina] Yesterday (Wed July 14) patch release (3.6.3): https://github.com/helm/helm/releases/tag/v3.6.3 +[Farina] Next patch release (3.6.4) scheduled for Wed August 11: https://github.com/helm/helm/milestone/112 +[Farina] 3.7.0 RC scheduled for Mon Aug 30, with 3.7.0 release Wednesday Sept 8: https://github.com/helm/helm/milestone/111 + +Discussion +[Bridget] repo cleanup project +We merged https://github.com/helm/monocular/pull/691/ - should the repo be archived in the github UI? +[Farina] We can click the clicky +should we archive https://github.com/helm/query-store-quay-logs ? +[Farina] Need to check if its still in use +Used to store metrics for quay +Data kept for 2 months from public source. Source of data into this repo +[Farina] 3-way merge patch and CRs https://github.com/helm/helm/issues/9937 (feature or bug)? +Need to clarify expected use case +Not intended for CR +[Adam] Written when kubernetes does not support 3 way merge +Behaviour has changed and needs to be updated +Which release should include this +Documentation is too general +[Martin] Inconsistency bug and documentation bug, could break backwards compatibility +[Bridget] Open issues in repo to address the documentation bug +Target fix for Helm v4 +[Farina] Feature change needs to be included in major release +behaviour change needs to be behind a flag +[Marc] Building in Kubernetes without Docker, any experiences? +Build container in a kubernetes cluster +[Andrew Block] Use Shipwright and Buildah +[Josh] use Kaniko +[Farina] Docs bug or Helm bug with no repo dependencies… https://github.com/helm/helm/issues/9928 +Sub chart in a chart can only exist in a directory in a repository not a chart archive. Doc says that it could +[Adam] Would work if it’s listed as a dependency +[Farina] It is not a dependency +[David] Doc bug and feature to support archive in future release +[Martin] How did it work in 3.x? +[Farina] Checked original source. It is not a regression +[Farina] version field and file:// in dependencies… should it be optional? It was until a recent bugfix but it’s not documented as optional… https://github.com/helm/helm/issues/9944 +PR already submitted to fix +Is this a doc defect for a file? +Suggestion: Update doc to mark this as optional in the file scheme +Next step: Version is required and not optional +Identify as a bug to be addressed + +Assignments for next meeting (note: Farina, Bridget, and Adam will be gone - volunteers needed) +Moderator: Martin Hickey +Notes: Karena Angell +Issue Triage: Martin Hickey + + + +July 8, 2021 +Assignments for this meeting +Moderator: Adam +Notes: Karena +Issue Triage: Farina + +Announcements +Next patch release (3.6.3) scheduled for Wednesday July 14th: https://github.com/helm/helm/milestone/110 +Farina: one more pass at PRs this week then gtg + +Discussion +[Farina] indexes in OCI registries +(continued from last week) +Butcher: they’re storing the apt index in an image layer +Experiment with a plug-in + [Farina] --repo flag and username/password https://github.com/helm/helm/issues/9599 and https://github.com/helm/helm/pull/9760 +Note, this same idea would apply to `helm install` and `helm upgrade` +https://github.com/helm/helm/issues/9599 +Doesn’t do set when `helm repo add` +Is it a bug but is anything else actually using it? +Bug or feature change? +Fisher: feature addition in helm 3, PR merge +Farina: like it, when should it be released? +AI: Farina to dig into it to look if is a regression or needs to be in 3.7 +Adam: should apply to any repo +[Farina] Move to GH Actions… https://github.com/helm/helm/issues/9921 +Example of CI issues… https://github.com/helm/helm/pull/9763 +Takes 30 mins / timeouts on linting +CircleCI performance issues +Fisher: this is going to get worse over time, GitHub Actions could help run tasks in parallel +Josh: GH action for golang ci lint tool - maybe consider +Farina: linter deprecated error? +Adam: open PRs will have to rebase on it +Josh: if use GH Actions, can keep running Circle in parallel +Farina: start doing Windows testing in GH Actions +[Fisher] HIP: Helm Triage Maintainers https://github.com/helm/community/pull/199 +Intermediary role? Help triage, shadow +[Bridget] relevant to Adding HIP 7 to document subprojects https://github.com/helm/community/pull/156 as well? Roles for charts maintainers? +[Marc] Is updating a single repo safe? +https://github.com/helm/helm/pull/9845 +What happens if you update in one repo, will it update all? +Marc: recipe does a helm repo add (which doesn’t do an update) +Helm repo add; helm repo update +Andrew: wants more control over when to update +Marc: risk in inconsistency +Farina: dependency mgmt handled, thinks it’s okay +Reduce bandwidth, and mem +[Scott] Maintainers track talk for KubeCon NA +Technical talk focusing on Charts for the Application Distributor role (working doc for anyone interested in contributing to content we end up talking about). We'll schedule some collab sessions for slides etc +CTA: any topics you think should be covered? Speak up! +[Marc] Dependabot details? Why hasn’t it picked up Cobra 1.2.1? +Too many dependabot issues? +Please create a PR! + + + +Assignments for next meeting +Moderator: Matt Fisher +Notes: Jasper Chui +Issue Triage: Matt Farina + + +July 1, 2021 +Assignments for this meeting +Moderator: Bridget +Notes: Butcher +Issue Triage: Fisher + +Announcements +Farina: releases +Released 3.6.2 as fix for regression this week. +Fixes a bug that became more pronounced by security fix +Next patch release (3.6.3) scheduled for Wednesday July 14th: https://github.com/helm/helm/milestone/110 +Ask: Maintainers, please review PRs in that milestone + +Discussion +[Bridget] helm org cleanup continues +Can we complete https://github.com/helm/hub/pull/484 so we can archive the helm/hub repo? +Bridget: Process was started but not complete. Anything blocking completion? +Can we archive https://github.com/helm/repo-audit ? Seems to be an experiment that may be concluded. +Bridget: Any reason not to archive? +Farina: This was started for helm hub and charts to audit and make suggestions. For example, checks digests in index file. I don’t know if people still want to build this. Part of chart maintainers projects + +[Farina] Automatically adding repos during build processes… https://github.com/helm/helm/issues/9840 and https://github.com/helm/helm/pull/9841 +Certain commands will error out if a repo has not been added, forcing the user to add the repo manually +These issues want to add a repo on the fly, but that causes a security issue. (A new source of dependencies is added to your system at the chart author’s whim) +Butcher: this can mask the source of untrusted packages - with the recent software supply chain attacks, this is particularly inadvisable +Joe T: this is similar to distro package naming conflicts + +[Adam] annotations nested in List objects are not respected https://github.com/helm/helm/issues/9829 +(continued from last week) +Adam: Annotations on items within a Kubernetes list objects are not respected. Only top-level items on a Kubernetes manifest. This is because during the top parse of an object, we only check its object metadata. What we should do is respect annotations on objects embedded in the list. +Paul: It seems fair to say that we only respect annotations on the top-level object, and ignore the items in the list +Farina: A “keep” on a nested item in a list: How would we handle that? +Adam: We’d have to do something like “if this is a list, then iterate on the items in the list.” and that will actually turn very complex over the lifetime of an installation. So I would prefer what Paul suggested. +Farina: The alternative seems to be complicated and brittle logic. We could do something in `helm lint` to warn a user of this. And update docs. + +[Bridget] https://github.com/helm/community/pull/172 Proposal for HIP-0010 on the distributed pick process - we have a second LGTM now - can we merge? +Bridget: We think this is ready to merge. +Farina: I will do one final review and merge + + +[Farina] indexes in OCI registries +(continued from last week) +Quick review of where we ended last week. +Farina: Should we support indexes inside of an OCI registry, ignoring the locking problem? And how do we support searching, version resolving, etc. The main thing is that we want to continue supporting all of the features available outside OCI registries now +Josh: In OCI, can list tags on a namespace, which means we could list versions if we knew the name of the chart. Index files in OCI today would suffer the same race condition that we have today. With my current PR, we are adding extra rules to OCI so that the chart name MUST be the last element in the name, but we could reserve other parts of the namespace for other things -- like putting the YAML file. If we could host a list of just the basenames and not versions… We could add an extension to the Docker Distro server… +Farina: Would prefer not to need registry-side add-ons +Josh: Could, for example, create a list object that would list all of the chart names for a given user… +Farina: But… (I missed the objection) +Josh: We could make a new media type for the existing index file and store/retrieve that, pointing to the full blob path +Farina: If you have a namespace, can you list all the things in it? +Josh: No. And by design it seems changes to the spec will take longer [Butcher: See Vincent’s email on OCI dist list two weeks ago] +Farina: The search functionality is the outstanding problem. Apt transport on OCI has come around recently. Curious how that works. https://github.com/AkihiroSuda/apt-transport-oci +Josh: Only thing in the Discovery API on OCI Dist is which tags for a given object. + + +Assignments for next meeting +Moderator: Adam +Notes: Karena +Issue Triage: Farina + + + +June 24, 2021 +Assignments for this meeting +Moderator: Scott +Notes: Karena (Andy in for Karena) +Issue Triage: Adam + +Announcements +Farina: Next patch release (3.6.2) scheduled for Wednesday July 14th: https://github.com/helm/helm/milestone/110 +Looking for reviewers +Butcher: Congrats to Martin for becoming an Org Maintainer for Helm! https://twitter.com/HelmPack/status/1408093811050311689 - also bringing in https://github.com/hickeyma/helm-mapkubeapis + +Discussion +[Bridget] What remains before we can archive the helm/hub repo? See question in https://github.com/helm/hub/issues/439#issuecomment-820598759 +Final steps have been complete and archive can be completed +Deprecation notice needs to be added +Action: Scott will PR in the “Obsolete” and click the “archive repo” in settings. PR: https://github.com/helm/hub/pull/484 +[Farina] managedFields and manager… https://github.com/helm/helm/issues/9859 +New field in metadata +Added in 1.18 and displayed in kubectl output. Hidden starting in 1.21 +New field for Helm to be created to denote the tool that performed the action +[Farina] indexes in OCI registries +Challenge is that no metadata can be queried (no search API) +https://hypper.io/ is talking about putting index files into OCI registries +Fisher: review of HIP 6 OCI PR is ongoing +Challenge in a race condition and locking +What is managing the creation of the index? +Helm CLI? What about those not using the CLI +Josh: Why are we trying to implement a search mechanism? +Farina: Its important to be able to determine what is available and what specific versions +Scott: to follow-up next time OCI/Helm semver question: how do we want to handle chart semver metadata (+) as it's illegal in OCI spec? +Topic to be continued next week or in another forum + +[Adam] annotations nested in List objects are not respected https://github.com/helm/helm/issues/9829 +Only looks at top-level object +Maybe: cascade down? +Would be breaking change +If anyone has any thoughts, provide details in the issue and follow up next week. + +[Can move to next week] [Bridget] https://github.com/helm/community/pull/172 Proposal for HIP-0010 on the distributed pick process - we need a second LGTM, I think? Can we move this one forward? + +Assignments for next meeting +Moderator: Bridget +Notes: Scott +Issue Triage: Fisher + + +June 17, 2021 +Assignments for this meeting +Moderator: Matt Farina +Notes: Bridget +Issue Triage: Adam + +Announcements +[Farina] Helm 3.6.1 released. +This was a security release (affects usernames/passwords for repositories) +Added a new flag to preserve the old behavior when needed +Next patch release scheduled for Wednesday July 14th + + +Discussion +[Bridget] HIP 6 OCI changes in flight for 3.7.0 (End of August): https://github.com/helm/helm/pull/9782 - please review! +Josh: thanks for comments +Butcher: yesterday we tri-paired (Adam: tri-pairitops!) +Too large to review in one pass - we started with running everything, then looked at impacts on public API and actions +Josh: will respond to the first round of comments +Josh: tests: https://github.com/bloodorangeio/acceptance-testing/blob/hip-6-push/testsuites/registries.robot +Butcher: read the HIP before trying this out - the HIP dictates the UX + +[Bridget] HIP 4 - can we merge this in? Question for Marc/others https://github.com/helm/community/pull/145#issuecomment-848912289 +Needs a confirmation about not being able to change *.yaml at all +Needs another approval +Marc: this is the backwards-compat HIP - one unaddressed concern about yaml compat +Farina: we use strict parsing now, for security reasons - for those files we’re locked into the current schemas but can use annotations if we need to add things before Helm v4 +Butcher: the security audit is here: https://github.com/helm/community/tree/main/security-audit +Scott: we need to update the docs +Fisher: this is due to limitations in yaml parsing libraries and how they handle duplicate keys - if someone wants to contrib that to the yaml parsing lib we could relax it in Helm v4 +Scott: I will update the docs +Marc: I’ll reach out if I don’t see it there +Butcher: I’ll add the list to that comment thread on the issue +Farina: once that’s in, I’ll review it. + + +[Marc] Why was updating a single repo removed in helm v3? +“helm repo update ” +Missing PR? +https://github.com/helm/helm/pull/5182 +With many repos configured on my machine, a script would benefit from only updating the repo it cares about +Or helm repo add could cause an automatic update when repo exists? +Farina: This appears to have not been brought over to v3 - this would be an easy feature request to port over +Fisher: possible considerations around chart locking, but I don’t think we _chose_ to not port this. + +[Josh] mailing list votes - should we add reminders to this call? +Farina: someone needs to track down all potential votes +Butcher: the project adoption one will be simple majority (4 org maintainers) +Mailing list vote this time for Martin + +Assignments for next meeting +Moderator: Scott +Notes: Karena +Issue Triage: Adam + +June 10, 2021 +Assignments for this meeting +Moderator: Marc +Notes: Jasper +Issue Triage: Matt Farina + +Announcements +No patch release yesterday, as it would have been within 4 weeks after a minor release +Next patch release scheduled for Wednesday July 14th +Summer vacations make things quiet at the helm! +[Farina] Tend to see some slow down in the summer + +Discussion +[Bridget] HIP 6 OCI changes in flight for 3.7.0 (End of August): https://github.com/helm/helm/pull/9782 +[Farina] Make OCI available as GA +Please review PR +[Marc] What can be changed? +[Farina/Adam] As long as it doesn’t have UI impact can be changed +[Farina] Some experimental commands are available when experimental mode is enabled +HIP (4?) in flight that defines what can change +Maintainers to Review and determine next steps +[Farina] Target end of July to ensure it doesn’t break anything. +[Joe] A number of files are being modified and removed +Does impact public API +[Martin M] PR backlog (154 PRs open) +What is the plan to bring this down to a manageable level? +[Farina] Usually hovers around ~100 +Hoping to start going through these PRs if someone else can take over triage +Steps to maintainer is to provide constructive feedback on PR review +Anyone can provide review +[David] Should we wait until tests are passing? +Security scan is gated but should not stop reviews +[David] Testing and verifying fix will be useful +[Farina] ensure test format is consistent with other tests +[Bridget] Chartmuseum repos proposed for Helm org membership: https://github.com/helm/community/issues/191 +[Marc] Martin will cherry pick for next release +Release branch will be ready by day of release +7 PRs in 3.6.1 milestones that are not reviewed +[Farina] Will try to review to get it in +Any help is appreciated + +Assignments for next meeting +Moderator: Matt Farina +Notes: Bridget +Issue Triage: Adam + +June 3, 2021 +Assignments for this meeting +Moderator: Scott Rigby +Notes: Matt Fisher +Issue Triage: Matt Butcher + +Announcements +[none] + +Discussion +[Josh] Various HIP 6 questions +Experimental flag, internal/ vs. pkg/, removal of “helm chart” +“Pusher” interface - implement uploader plugins identical to downloader plugins? +Multiple requests made to fetch .prov, even though both chart and prov can be fetched at once +[fisher] is there a way to pass along the chart cache here? There’s a HIP open about provenance/chart caching that could help here too. +Is there a way in memory to extract chart metadata from .tgz raw bytes? +[fisher] I believe pkg/chart/loader has functions for this +“read” function - reader interface +[fisher] https://github.com/helm/helm/blob/bf486a25cdc12017c7dac74d1582a8a16acd37ea/pkg/chart/loader/archive.go#L188-L189 +Output for “helm push” / “helm pull” - what info should we print to console? We have the chart metadata as well as the digest+size for the following OCI layers: manifest, config, chart, prov +[fisher] would this be useful to append as a PR to HIP 6? +Add --digest= flag on “helm pull” to verify manifest digest? Later? +The registry client not enforcing ref name - should people be able to push/pull charts wherever to/from they want when using it as a library? +[josh] looking for feedback on these items +[farina] we probably need to have all the new work land under “experimental” before we move to GA. Once made public, changes cannot be made until Helm 4 +[josh] the underlying client is being completely overhauled, so it would be easier to change it all underneath. Is this OK? +[fisher] while it’s experimental, we can make whatever changes make sense - go ahead if needed to move the experiment forward +[scott] are there any thoughts on pulling out the registry package into a separate library/repository? +[josh/farina] I think the ORAS project handles this +ORAS: https://github.com/oras-project/oras +[farina] when can that become available for other projects? What are the requirements for removing experimental flag? + + + +[Simon K] Anything else needed for https://github.com/helm/helm/pull/9713 (brought up by David last time)? Next steps? +[fisher] will need two maintainers to review it (cdndoit18 is not a maintainer) +Adding a reproducible test case is a great way to help people see more +[Paul] Does anyone want to enter a Helm team for CNCFaceoff (https://twitter.com/mattstratton/status/1397565630975463432 ) +[bridget] If they do, how should they reach out? +There’s a form in the tweet thread. - https://twitter.com/mattstratton/status/1397567060012580864 + + +[Bridget] notification emails from ArtifactHub - do we need to do any followup? + [farina] most of these emails come from charts that were in Helm Hub. It’s been more chatty because it’s scanning everything by default. I’ve been cleaning up these notifications as it’s out of our hands +[farina] if you post something on Artifact Hub, you can subscribe to notifications to be informed of any security issues + + + +Assignments for next meeting +Moderator: [Bridget if nobody else volunteers] +Notes: Jasper +Issue Triage: Matt Farina + + +May 27, 2021 +Assignments for this meeting +Moderator: Adam Reese +Notes: Karena Angell +Issue Triage: Matt Farina + +Announcements +[Farina] 3.6.0 is released +[Farina] the release date for 3.7 is set to Wednesday September 8, 2021 +Kubernetes 1.22 is scheduled for August 4th; this gives us time to test. +Looking ahead: there will be one more k8s release in 2021 (1.23) +[Butcher] Emeritus maintainers +Thanks, Vic & Brian! +Martin Hickey has been nominated as a new org maintainer +Discussion +[Farina] Generating reproducible tarball fix - https://github.com/helm/helm/pull/9674 +Is it a breaking change to drop the timestamp? +Fisher: need to address a couple of things in the PR before moving forward. Spend time writing a unit test would be helpful +Farina: agree, need more testing - concerned removing the date could be a breaking change. Focus on whether stripping the date is a breaking change. +Butcher: Because some people use the hash to see when the tar has been rebuilt, even if its contents were the same +Butcher: And the Go implementation is different than BSD and Gnu tar, too +Scott: https://github.com/helm/helm/pull/9674#discussion_r640793402 +Maybe feature flag could solve it +Follow-up: Farina going to go back and address some things in PR +[David P] Wanted to bring attention to https://github.com/helm/helm/pull/9713 as being blocked from running the gate checks cause it is a first time contributor. He will benefit from the automation to improve the PR as needed. +[fisher] approved. +Fisher: more nuanced - bitcoin mining! +Marc: trust github automation? +[Adam] Global values https://github.com/helm/helm/pull/9333 +Needs another maintainer’s eyes on it +Fisher: wants to proceed with caution +[Scott] If time, Farina do we want to discuss KubeCon NA session ideas on this call? +Farina: tech focused talk on charts +Fisher: yes, if other CfP doesn’t get accepted +AI: Farina will start a doc + +Assignments for next meeting +Moderator: Scott Rigby +Notes: Matt Fisher +Issue Triage: Matt Butcher + +May 20, 2021 +Assignments for this meeting +Moderator: Marc Khouzam +Notes: Jasper Chui +Issue Triage: Matt Farina + +Announcements +[Farina] Next release is 3.6.0, planned for next week: Wednesday May 26th +RC available for your evaluation: https://github.com/helm/helm/releases/tag/v3.6.0-rc.1 +Please test it out and let us know if there are any issues +[Bridget] Helm at KubeCon EU was a huge hit! Thanks to all who participated; start thinking about KubeCon North America! Numbers from Karen Chu: +Tuesday, May 4 Helm office hours attendees: 458 +Wednesday, May 5 Helm office hours attendees: 312 +Thursday, May 6 Helm office hours attendees: 233 +Helm project booth visitors: 1,233 +[Karena] KubeCon NA - CfP deadline is this Sunday 11:59 PM PDT +Bridget is happy to review any proposals +[Bridget] Thanks to Karena for her work revising the FAQ on the docs site. It was previously focused on helm2->3, and she’s making it a more general FAQ. +Looking for additional topics to document +[Farina] Vic stepped down from Helm org maintainership +Credit for the CI infrastructure for stable/incubator - thank you! + +Discussion +[Bridget] Reminder about the Helm repo audit - if you think you have repos to archive, you may be right! Please take a look; let’s keep moving this along. +[Marc] For Josh, regarding acceptance testing repo +[Josh] Needing updates +HELP WANTED +[Farina] Pull sizer: designate size of issues +Should not be deprecated as there are no alternatives +Help needed to determine if there are GitHub actions that could be used to achieve this function + +[Bridget] Have you commented on all HIPs of interest to you? https://github.com/helm/community/pulls has various HIPs to check out. + +[Butcher] Continuing discussion for HIP for Helm 4 planning and development process (HIP0012) +[Bridget] Should we defer to next week? +[Farina] Highlights approach for Helm 4, including roles and responsibilities +Feedback is useful +[Martin] May need additional updates to branching. Waiting on feedback from Matt Fisher +[Bridget] Should we say lazy consensus by next week? +[Farina] Need approvals from 2 helm/helm maintainers +[Josh] Is there a requirement to push for Helm 4 +[Farina] Opportunity for breaking changes, api changes, clean up. Requests from the community. +[Martin] Need a list of PRs before Helm 4 kicks off + + +[S Bose] Support for the --hide-secrets flag, PR is good to go https://github.com/helm/helm/pull/9130 +Bridget: should this go in milestone 3.6.1? 3.7.0? +[Farina] Requires approval from two maintainers +Soonest is 3.7.0 as it is a feature addition +Possibly 3.7.0 (September 8). Month after next k8s release + +[David P] Pipeline doesn’t run and need approval from maintainer to approve +[Farina] This is a good forum to raise this +New requirement from Github within last few weeks +Bridget: https://github.blog/2021-04-22-github-actions-update-helping-maintainers-combat-bad-actors/ + +[Bridget] Welcome Annie Wang, new intern on Bridget’s team + + +Assignments for next meeting +Moderator: Adam Reese +Notes: Karena Angell +Issue Triage: Matt Farina + +May 13, 2021 +Assignments for this meeting +Moderator: Adam Reese +Notes: Karena Angell +Issue Triage: (2 weeks) - Butcher, Fisher + + +Announcements +[Bridget & Farina] Next release will be 3.6.0 +RC planned to be cut Monday May 17th +release planned for Wednesday May 26th +[Bridget & Butcher] Butcher’s HIP for Helm 4 planning and development process (HIP0012) has one more week for discussion + +Discussion +[farina] HIP on caching https://github.com/helm/community/pull/185 +Currently - when pull or install, chart is stuck in cache with index files - creates conflicts +HIP - local cache w/ content addressability +Also helps w/ people who download the same charts over and over again +Needs two maintainers to look at +Matt Fisher +?? +Also, look at to make sure there isn’t anything that can go horribly wrong +[farina] Hypper Demo https://hypper.io/ +Built on top of Helm +For cluster admins +Install charts into separate namespaces +Joe J: shared dependencies but different values? +Farina: still working through that +Farina: currently, can alter namespace name and release +Bridget: use cases? +Farina: used by tooling, structured like helm, future wrap the sdk +[karena] new FAQs from office hour sessions + + +Assignments for next meeting +Moderator: Marc Khouzam +Notes: Jasper Chui +Issue Triage: Matt Farina + +May 6, 2021 +Cancelled this week - KubeCon EU (various Helm sessions and office hours - https://events.linuxfoundation.org/kubecon-cloudnativecon-europe/program/schedule/) + +April 29, 2021 +Assignments for this meeting +Moderator: Marc Khouzam +Notes: Matt Fisher +Issue Triage: unassigned + +Announcements +[Bridget] Next release will be 3.6.0 +RC planned to be cut Monday May 17th +release planned for Wednesday May 26th +[Bridget] Helm org repo audit continues +[Bridget] Sign up to participate in KubeCon EU next week: https://docs.google.com/spreadsheets/d/1yJyvuzHoOoQk0yiGGUXPfDUCo_mO_UWyryFURc1HOX4/edit?usp=sharing +“Meet the maintainer” means staffing the booth in the KubeCon EU event platform +“Project office hours” are held on Bevy +[Bridget] Not having this meeting next week Thursday May 6, due to KubeCon EU. On Thursday we do have the KubeCon EU maintainer session with live chat, as well as the office hours session, for all your Helm-meeting needs. + + +Discussion +[Marc] Backwards-compatibility for yaml files (Hip 0004): https://github.com/helm/community/pull/145 +Fisher: security issue based on unexpected overwrites +Fisher: solved by strict field checking +Karena: documentation of this limitation would be good +Marc: why can’t we introduce optional fields? +Fisher: older versions of Helm would have no notion of this field. Introducing a new field would break strict parsing +Fisher: let’s be cautious about circumventing security - avoid footguns +Adam: when strict checking is enabled, it doesn’t error out. It just ignore those fields. Right +Fisher: I believe strict checking does tell YAML to error out on those fields. By default those fields are ignored + +[Marc] Hip 0010 for distributed pick process: https://github.com/helm/community/pull/172 +Marc: This is ready for review. I left if there for when anyone has time to review + +[Josh] Registry support + OCI Distribution + ORAS updates +HIP 006: https://github.com/helm/community/blob/main/hips/hip-0006.md +The Distribution spec was put up for a 1.0 vote this week +There is a movement to move the oras project as a CNCF sandbox project +I will be working on the reference implementation for HIP 6. Expect that to be coming in the next month or so +Fisher: is the artifacts proposal part of the v1.0 vote or is that separate? +Josh: putting Helm charts in a registry is not an official part of the “spec”. That being said cloud vendors are supporting these solutions. So it’s not part of the vote but it’s in there. +Josh: I would ask if you can join the OCI meeting and ask about that +Paul: does harbor support Helm charts in the registry? +Josh: short answer yes + +[Joe] I tried asking in slack, but can this get into 3.6? https://github.com/helm/helm/pull/9425 +There's no functional change, but it does create a public library that can be used to check the release readiness after the initial deploy. This will unblock a readiness plugin I want to write, and a fluxcd capability that we need. +[Bridget] let’s try to get it some reviews after KubeCon EU? +Added to the 3.6.0 milestone for review + +Assignments for next meeting (Thursday May 13th) +Moderator: Adam Reese +Notes: Karena Angell +Issue Triage: (2 weeks) - Butcher, Fisher + +April 22, 2021 +Assignments for this meeting +Moderator: Matt Farina +Notes: Karena Angell +Issue Triage: Matt Fisher, Joe Julian (shadow) + +Announcements +[Farina] Next release will be 3.6.0 +Target for Wednesday, May 26th for Kubernetes 1.21 +Monday of the week before, RC will be cut - May 17th + +Discussion +[Butcher] HIP for Helm 4 planning and development process (HIP0012) +What will be selected for development +When will it be worked on +How to stop the process if necessary (lack of community resources/involvement) +Acceptance: project maintainers +Mid to end of May - May 20th dev meeting, finalize comments/acceptance +Someone needs to make sure they’re looking at all the HIPs and they work well together +Shoubhik: High level themes for Helm 4? +Farina: separate process from content, but sdk changes, feature changes, etc. +Farina: define process first and pull those discussions into the bigger picture strategy for Helm 4 + +[Bridget] Helm org repo audit progress +Can we archive helm/hub and other inactive repos? +Let’s finish the branch rename for active repos +Progressing and will continue to progress +Farina: will help after KubeCon/CNcon + + +[jannfis/shoubhik] Helm integration with Argo CD +Want to talk about https://github.com/helm/helm/pull/9040 +We need --kube-version for “helm template” badly +Jann: Maintainer for Argo CD, in Argo community, some people are having difficulties installing charts +Fisher: validate flag - grabs kube version from live k8s cluster - possibility? +Jann: separate isolated process for processing manifests using a repo server, no live info from cluster - security requirement +Farina: is there a conflict setting the kube version and validating? Maybe specify can only have one or the other +Farina AI: will add to backlog for 3.6.0 [Bridget added to the milestone for review, as of April 29, 2021] +Shoubhik volunteering to dive deeper into use cases +Fisher: Helm 2 did not do openapi validation + +[shoubhik] Curiosity question :) What’s the due diligence needed when we do kubernetes version bumps? https://github.com/helm/helm/pull/9595 + +[Srishti] question : I had a question around the issue I recently raised https://github.com/helm/helm/issues/9620 +Farina: you can still put CRDs in the templates directory +Farina: You can use a separate chart to template crds: https://helm.sh/docs/chart_best_practices/custom_resource_definitions/#method-2-separate-charts +Farina: STRONGLY suggest reading the CRDs HIP: https://github.com/helm/community/blob/main/hips/hip-0011.md +Joe Julian: important reason for CRD templating: conversion webhooks +Butcher: no changes to CRDs for the rest of Helm 3 lifecycle, Helm 4 HIPs would be a good place to discuss + +[dperaza] question: Recording for last contributor summit out? +[Bridget] CNCF will release that; Helm maintainers don’t control the timing. We expect it around the end of the month. + +[Scott] I’ll be archiving some repos that I understand were already discussed, and will update the spreadsheet accordingly! :-) Thanks Bridget for the reminder +Also PS, I still have not deleted the old meeting time event from my calendar, so when I’m super busy I sometimes come a half hour late. Finally deleting that now lol + +Assignments for next meeting +Moderator: Marc Khouzam +Notes: Matt Fisher +Issue Triage: + +April 15, 2021 +Assignments for this meeting +Moderator: Bridget +Notes: Jasper +Issue Triage: Butcher + +Announcements +[Bridget] Branch rename (to “main”) +in progress for repos under https://github.com/helm +check your repos and rename if need be! +Instructions: https://github.com/github/renaming +Working checklist: https://docs.google.com/spreadsheets/d/13OjQnpzCRrdFtJ6nhzO7c7JmsKjnyJ48y63ry1GmP14/edit?usp=sharing +[Farina] v3.5.4 released +Next release 3.6.0 Target for May for Kubernetes 1.21 + +Discussion +[Marc] Blog about DockerHub rate limits (see last week) +Should we clarify to community if they may think it is caused by Helm? +Could use a blog to inform community +[Joe T] Starting to collect details, could put towards google docs +[Fisher] Rate limit has been in place since last October +[Farina] Are we seeing any complaints? +[Bridget] Not directly, just hearing from community +[Bridget] To review docs and update as appropriate +[Farina] Shameless plug: I’ll be presenting a new project based on Helm and charts ... next wednesday in the Rancher meetup… https://info.rancher.com/online-meetup-april2021 +[Bridget] Should we use the GitHub “archive” setting on helm/charts and helm/monocular, among others? (https://docs.google.com/spreadsheets/d/13OjQnpzCRrdFtJ6nhzO7c7JmsKjnyJ48y63ry1GmP14/edit?usp=sharing) +[Farina] Has a list of repos to be archived +Monocular: Ready to be archived. Need to inform community +Bridget to connect with Farina to create list of repos to be archived +[Butcher] Only maintainers can / should archive repos +[Marc K] What is the process to identify which PR to include in a release? +[Farina] Only the PRs that were closed +[Butcher] https://github.com/helm/community/pull/145 - backward-compat HIP +[Fisher] Needs to be approved by core maintainer +[Marc K] Are referenced implementations required? +[Fisher] If HIP requires one then it should +Marc to remove referenced implementation section +[Marc] Should we have a master list of what cannot change? +[Butcher] Agree that it should be in the www documentation. Not required before HIP is approved. +[Fisher] Question deferred to future discussion +[Marc] HIP will be used for backward compatibility criteria +[Bridget] PRs to be reviewed + +Assignments for next meeting +Moderator: Matt Farina +Notes: Karena +Issue Triage: Matt Fisher, Joe Julian (shadow) + + +April 8, 2021 +Assignments for this meeting +Moderator: Marc K +Notes: Karena A +Issue Triage: Adam and Bridget + +Announcements +[Bridget] Branch rename (to “main”) + in progress for repos under https://github.com/helm +check your repos and rename if need be! +Instructions: https://github.com/github/renaming +[Bridget] Helm Contributor Summit is a wrap! +CNCF will publish videos. +Shout out to Karen Chu and Matt Butcher for all their work putting it together. +[Bridget] get those bug fixes in! +3.5.4 will contain only bug fixes and be released on April 14, 2021 +New “pick” process should help with release +Marc wants to help w/ release +AI: Whoever is cutting the release, pull Marc in + +Discussion +[Bridget] Dockerhub rate limiting and defaults +Potential problem (in https://docs.microsoft.com/en-us/azure/aks/ingress-basic#create-an-ingress-controller) to use a helm chart that points to dockerhub which may have rate limiting (https://github.com/kubernetes/ingress-nginx/blob/master/charts/ingress-nginx/values.yaml#L494) +Potential change: https://github.com/kubernetes/ingress-nginx/pull/7018/files (to decouple the registry and repository) +Anything else to consider here? +[fisher] the CNCF struck a deal with DockerHub so that any CNCF projects will not be rate limited. ingress-nginx and others may fall into that category. https://github.com/cncf/servicedesk#my-project-is-affected-by-the-docker-hub-rate-limits-policy-changes-what-can-i-do +Bridget: where should this be documented? ArtifactHub? Helm docs? +Karena: blog post, Scott +1 +Scott Rigby: we can communicate to users about how this might affect them - charts have images configurable for helm values +Joe Julian: Helm users might not be k8s admins and might not know about dockerhub rate limits - pointing it out in documentation might be useful +Scott: even people who use k8s frequently, they might not know where in the supply chain it’s pulled from +Bridget: cya for Helm, not a prob created by Helm +Joe J: be aware of your rate limits +Joe Thompson: It would be nice if Docker themselves displayed something in the docker logs about "rate limit in effect for this repo" but I dunno if that's even possible with the way Docker works. +Joe: “Turns out they do! https://docs.docker.com/docker-hub/download-rate-limit/#how-can-i-check-my-current-rate” +AI: Blog post, start a draft next week, volunteers? + +Assignments for next meeting +Moderator: Bridget +Notes: Jasper +Issue Triage: Butcher + + +April 1 2021 +Assignments for this meeting +Moderator: Adam Reese +Notes: Karena Angell +Issue Triage: Matt Farina + +Announcements +[Martin] Rename of “main” branch +Mostly redirection +Look at Helm slack channel for details +GitHub will pop-up info too +Bridget: clean up for others? +Martin: yes, maintainer by maintainer AI +Maintainers AI: Update your repos +[Farina] Archiving of Monocular +Blog tbd saying ‘use ArtifactHub instead of Monocular’ +[Karena] Contributor Summit on Tuesday! April 6 + +Discussion +[Farina] The --dependency-update flag, it’s docs, and it is not matching its functionality… https://github.com/helm/helm/issues/9545 +Create documentation that says ‘only updates in this case’ +Create another flag that updates everything +Clean up in Helm 4 +Only returns if there are missing dependencies: https://github.com/helm/helm/blob/213a7df2dcd07e8d49fc6acf8a53a540c661ed53/cmd/helm/install.go#L216 +Bug since Helm 2.9 or .. ? +Joe T: deprecate the old flag, define 2 new flags +Farina: no deprecation cycle, mark for removal in Helm v4 +Farina AI: Document the ticket to remove +[Marc] HIP-0010: "Cherry-pick a PR into the release branch right after it is merged into main" +Marc AI: add a section for the security patch +[Farina] chart cache in helm https://github.com/helm/helm/issues/9561 +Index.yaml, use digest to go look at cache +Bridget: bandwidth discussion, what gets cached, what doesn’t +Farina: that was about binaries, so prob no impact +Scott: careful with changes in index.yaml, sounds good +[Karena] Investigate artifact signing? https://sigstore.dev/what_is_sigstore/ +Farina: provenance files are pgp signed +Farina AI: Go learn about it + +Assignments for next meeting +Moderator: Marc K +Notes: Karena A +Issue Triage: Adam and Bridget + + +March 25, 2021 +Assignments for this meeting +Moderator: Martin Hickey +Notes: Jasper Chui +Issue Triage: Matt Butcher + +Announcements + [Bridget] get those bug fixes in! +3.5.4 will contain only bug fixes and be released on April 14, 2021 +When would we like to cut an RC? +[Farina] No RC for Patch +3.6.0 is the next feature release and will be released on May 26, 2021 +Depending on k8s release schedule (on track) +Followup end of April on release status +Contributor Summit April 6, 2021 +Helm Contributor Summit - Tues Apr 6, 2021 +Register: https://community.cncf.io/events/details/cncf-cncf-helm-community-presents-helm-contributor-summit-2021/#/ +[Bridget] Reach out to Karen if you want to register as an organizer +[Fisher] Need an LF account to register as an organizer +Discussion + [Farina] Archiving Monocular https://github.com/helm/monocular (Web UI for Helm Chart repositories) +Maintainers are in agreement to archive project +Target next week to archive +Replaced by Artifacthub.io +Documents to be updated: +https://helm.sh/docs/community/related/#additional-tools +[Farina] Hackweek project: How to navigate source code - https://codeengineered.com/blog/2021/helm-vid-series/ +Assignments for next meeting +Moderator: Adam Reese +Notes: Karena Angell +Issue Triage: Matt Farina + +March 18, 2021 +Assignments for this meeting +Moderator: Josh D +Notes: Bridget K +Issue Triage: Josh Dolitsky + +Announcements + + + +Discussion + [Marc] Details of the “needs-pick” process? +Label goes on bugs that need to go into a patch release (not a minor) +What if no patch release until minor release? +[fisher] If there’s no need to cherry-pick, then we remove the “needs-pick” label. +Not features (features don’t go into patch releases) +Does a milestone need to be added/created? +[fisher] For a patch release, yes. +What query to use? +is:pr label:needs-pick -label:picked +[fisher] it looks like a number of PRs need to be triaged in that query. +Butcher: ideally, add “picked” and remove “needs-pick” +Marc: found some needs-pick and they ended up in a minor release +Butcher: minor-release might not mark as picked for those pre-picked for a patch release - from the last minor onwards is likely the only that need it +Resolution: Marc will change labels as desired to correct inconsistencies + + +[Simon Croome] - Linter name validation rules: https://github.com/helm/helm/pull/9416 +Simon: in 3.3.0, change to add name validation +Simon: PRs in place to try to correct this (inferring from k8s API is challenging - match on object Kind?) +Simon: hoping to get movement on this as it’s blocking us from doing releases +Butcher: Adam can look at PR +Josh: can you pool the cases from k8s? +Butcher: API server in k8s does validation after determining if validation is well-formed +Bridget: 3.5.4 will contain only bug fixes and be released on April 14, 2021 - can we get this PR reviewed by then? +Butcher: yes, this goes in bugfix. Josh to look first, then Adam + +[Butcher] Helm Contributor Summit - Tues Apr 6, 2021 +Register: https://community.cncf.io/events/details/cncf-cncf-helm-community-presents-helm-contributor-summit-2021/#/ + +[Farina] Dropping support for Go < 1.14 … https://github.com/helm/helm/pull/9355 +Farina: Cobra dropped below 1.14 support +Marc: confirms that Cobra won’t confirm 1.14 soon but this hasn’t happened yet +Farina: the only supported Go versions are 1.15 and 1.16 + +Butcher: GitHub had a security alert - we audited and are fine. + +Josh: I was doing triage this week - do we have rules around squashing vs merge commits +Farina: no consistency +Butcher: we had a rule about squashing but haven’t enforced it in at least two years +Josh: sounds like we don’t have an answer to this? +Discussion ensues and we find that Butcher, Farina, Bridget, Joe, and more all dislike squashing and history rewrites, so we are not going to mandate any of that. + +Assignments for next meeting +Moderator: Marc K +Notes: Jasper Chui +Issue Triage: Matt Butcher + + +March 11, 2021 +Assignments for this meeting +Moderator: Josh +Notes: Karena +Issue Triage: Butcher + +Announcements +[Farina] Helm 3.5.3 released +3.5.4 will contain only bug fixes and be released on April 14, 2021 +3.6.0 is the next feature release and will be released on May 26, 2021. +[Bridget] get.helm.sh funding renewed +[Butcher & Karen] Helm Contributor Summit - Tues Apr 6, 2021 +Register: https://community.cncf.io/events/details/cncf-cncf-helm-community-presents-helm-contributor-summit-2021/#/ +[Bridget] KubeCon EU 2021 Helm content: +Helm Users! What Flux 2 Can Do For You - Scott Rigby & Kingdon Barrett, Weaveworks +Mainly for Helm-only users +Taking the Helm: Becoming a Maintainer - Bridget Kromhout & Matt Butcher, Microsoft; Karena Angell, Red Hat; Matt Farina, Rancher Labs +Office hours (Karen arranging) +Helm project pavilion booth (Karen arranging) +[Farina] Helm 2nd security audit - https://helm.sh/blog/helm-2nd-security-audit/ +Also includes threat analysis + +Discussion +[Adam] Helm examples repo +https://github.com/helm/examples +Created a straw man - looking for any help +Bridget: former stable/incubating repo is a good place to start for any docs help +Farina: let’s use best practices +Scott: volunteering to help / charts team would be good volunteers too +AI: Scott to start an issue in the repo for brainstorming +Scott: GH Discussions? +Bridget: Not now - the tldr is I’ve seen other projects turn it on, find it unmaintainable, turn it off, and find out that they’ve now hidden all the past discussions. Sounds not quite ready for prime time. +[Bridget] get.helm.sh download metrics: how should we surface them? +Fisher: using verizon cdn, unsure how to pull metrics, maybe could scrape the mgmt portal +AI: no AI +[Devdatta Kulkarni] highlighting KubePlus (https://github.com/cloud-ark/kubeplus) +Presentation: https://github.com/cloud-ark/kubeplus/blob/master/KubePlus-presentation.pdf +Multi-tenant application stacks +Wrap api around the Helm chart +Butcher: resourcePolicy sounds like a good idea +Able to collect consumption metrics now +Might be interesting to folks from Orkestra (https://github.com/Azure/orkestra) +[Joe] Issue w storage size for secrets +Fisher: opt in to configmaps, move from 2 to 3 +Fisher: talking about alternate storage backends (like mysql) +https://helm.sh/docs/topics/advoanced/#configmap-storage-backend + +Postponed to March 18 [Marc] Details of the “needs-pick” process? +Label goes on bugs that need to go into a patch release (not a minor) +What if no patch release until minor release? +Not features (features don’t go into patch releases) +Does a milestone need to be added/created? +What query to use? +is:pr label:needs-pick -label:picked + +Assignments for next meeting +Moderator: Matt Farina +Notes: Scott Rigby +Issue Triage: Josh Dolitsky + + +March 4, 2021 +Assignments for this meeting +Moderator: Bridget +Notes: Butcher +Issue Triage: Fisher + +Announcements +[Bridget] 3.5.3 milestone due March 10, 2021: https://github.com/helm/helm/milestone/107 +Cut-off for the Helm release is tomorrow, Mar 5 +Only two issues in the milestone, and changes have not been made, so may be removed from release +[Butcher & Karen] Helm Contributor Summit - Tues Apr 6, 2021 +Register: https://community.cncf.io/events/details/cncf-cncf-helm-community-presents-helm-contributor-summit-2021/#/ +Workshop to help new contributors and those who may want to become maintainers +TA-style maintainers needed for Q&A during chat +KubeCon EU: Karen arranging booth and office hours; Bridget arranging recording of contributor-onboarding maintainer session: https://sched.co/iE6C +Office hours: Zoom calls at specific times where people can join and chat +Karen will tell us when it is time to sign up +Karena, Bridget, and “various Matts” will do a talk + +Discussion +[Bridget] followup on Brendan’s idea about a Helm label project? +Butcher’s action item was to send info to Farina who was going to talk to sig-apps +Next SIG-Apps meeting is next Monday +[Scott & Farina] progress on opening up the functions to the SDK? +Blocked on OCI experimental flag +Josh: There is a branch open with some Push (abstraction) work. Oras is also going through some changes to make it more CNCF-supported (maybe part of the distribution project). +[Karena] Update on CI/CD? +Farina: Issue is that GitHub actions are pulling Helm fresh each time +Caching is not as airtight as it should be… no best practices. So we are stalled +Shoubhik will take a look at it. “Is there an issue to look at?” +Farina: Maybe on www repo? +Brief discussion on docs for release process https://helm.sh/docs/community/release_checklist/ + + +Assignments for next meeting +Moderator: Josh +Notes: Karena +Issue Triage: Butcher + +February 25, 2021 +Assignments for this meeting +Moderator: Marc K +Notes: Scott +Issue Triage: Matt Farina + +Announcements +[Bridget] 3.5.3 milestone due March 10, 2021: https://github.com/helm/helm/milestone/107 +Review issues/pr and add to milestone as appropriate +Target week before (March 3) due date + +Discussion +[Butcher & Karen] Helm Contributor’s Summit - Tues Apr 6, 2021 +Website is live! https://community.cncf.io/events/details/cncf-cncf-helm-community-presents-helm-contributor-summit-2021/#/ +Need volunteers to present +Registration on the website +Single track. See Agenda on website +One goal of this is to help those contributors who may eventually become maintainers +Plan to work w CNCF to have a dedicated slack channel for this event. People can ask Qs there, and TAs can jump in and answer questions without interrupting the speaker. "backchannel" +No cost for attending the event +[Farina] How much of this covers parts of the Helm project that aren't helm/helm (chartmuseum, chart-releaser, etc) +[Butcher] mainly focused on Helm org, community repo, documentation, and helm/helm (the biggest process load) +Need more maintainers to help organize +[Scott] happy to help with various things, including charts and tooling related repos + + +[Butcher] Brendan’s idea about a Helm label project +k8s in general is trying to come up with more labels, but no org happy to take that on +Brendan thought, since Helm is how most people organize their manifests, could Helm help canonicalize this? +Butcher talked with a few people already, but this would be the forum +Farina: if it's not documented somewhere, I think that would be great +example "icon" - no standard label for application icon yet +Farina (re SIG Apps): would this be better to expand in k8s common labels there, or here? +[Joe J] was thinking SIG Apps so that it can be used in other projects e.g. kudo +Farina will take this to SIG Apps to see if that is the right place. If not will bring it back to here +[Fisher] if it comes back to here, a HIP is a good way to go +[Farina] would like to see this at a higher level, not buried in documentation. One nice thing in `helm create` it populates these for you. Otherwise these are ont easily discoverable +[Scott] What steps are needed to open up the functions to the SDK +getter is already open +one thing that would help open up is the registry client currently in internal package in helm +Scott: Yes we have semver contracts and don’t want to screw those up - but what do we need to get the OCI support finished? +Farina in same boat. but 2 things would like to have before we make public +1. APIs solidified. Not sure if done, must talk w Josh +2. doesn't want to use logrus as a dependency because they're not in maintenance mode. Ideally would not like to pull this in +3. Really like to see ORAS repo (https://github.com/deislabs/oras) moved out of deislabs and into its own org +Fisher OCI is still considered a draft. +Scott: can we keep the experimental flag but also make functions avail to SDK? +Fisher: some things (like catalog items) changing over time - if stable, we won’t break compatibility +Scott: hmmm.. Own package/repo for versioning? +Farina: Scott, do you have time? Action item: Farina and Scott to connect and write a plan. + + +Assignments for next meeting +Moderator: Bridget +Notes: Butcher +Issue Triage: Fisher + +February 18, 2021 +Assignments for this meeting +Moderator: Scott +Notes: Jasper +Issue Triage: Matt Farina + +Announcements +[Bridget] 3.5.3 milestone due March 10, 2021: https://github.com/helm/helm/milestone/107 +Review issues/pr and add to milestone as appropriate +Target week before (March 3) due date + +Discussion +[Marc] HIP for a distributed pick process https://github.com/helm/community/pull/172 +Process for Patch release identify needs-pick labelled items to include +Person approves into master also responsible for including in release branch +[Farina] What would be the process to handle a security release? +Create a separate branch for Security Release based on previous release +Does this work for the two recent security releases? +Discuss proposal on how to handle releases and branches under different scenarios +Merge back commits from hot fix branch back to master +Looking for reviewers and feedback +[Marc] HIP for descriptions for custom completions https://github.com/helm/community/pull/161 +Cobra has improved handling auto complete +Where does the description come from? +Pulls from various sources +Looking for reviewers and feedback +Scott: I'll look closer from a charts end user POV +[Bridget] good first issue label - can we revisit this one? https://github.com/helm/helm/labels/good%20first%20issue is very stale +Looking for additional issues that could be labelled with “good first issue” + +Assignments for next meeting +Moderator: Marc K +Notes: Scott +Issue Triage: Matt Farina + +February 11, 2021 +Assignments for this meeting +Moderator: Bridget +Notes: Karena +Issue Triage: Matt Butcher + +Announcements +Artifact Hub: Values Schema Reference [Farina] https://blog.artifacthub.io/blog/helm-values-schema-reference/ +Discussion +When a release fails to update (after the upgrade of Kubernetes manifests) should we display a message or return an error [Farina] +Inconsistent between Install and Upgrade/rollback +On Install we display a message to debug log +Comment in action install says… +// This is a tricky case. The release has been created, but the result +// cannot be recorded. The truest thing to tell the user is that the +// release was created. However, the user will not be able to do anything +// further with this release. +// +// One possible strategy would be to do a timed retry to see if we can get +// this stored in the future. +On upgrade/rollback we return an error +It will upgrade all the k8s assets, doesn’t actually store the secret +[M Butcher] Failure of etcd to store something +If recorded, will show installing +[Farina] Just return a non 0 exit code +https://github.com/helm/helm/pull/9131 is looking to add a case where another error could be returned on upgrade/rollback +[Scott] should this be a bugfix? +GitHub Discussions [Farina] +Disabling github discussions: https://github.com/dotnet/aspnetcore/issues/29935 +[Bridget] What happens to existing discussions? +[Scott] Will test +Discussions last longer than issues +Homebrew is using discussions +[M Butcher] Is GH Discussions basically “Stack Overflow by GitHub” +[Bridget] yes, but don't have the management granularity, would it make it harder for ourselves? +[Scott] has default categories, can change categories at any point +Threaded answers, user or maintainer can select the correct answer +[Josh/Bridget] more things to check / more work for the community/maintainers? +[Farina] Will send to helm mailing list and other maintainers, revisit in a week or two. +Better CI practices [Farina & Butcher] +Costs a lot for downloads every month +Example: homebrew ~ $25k/mo +Document best practices +[Scott] GH actions have artifacts, will look into also look into caching across jobs +[Bridget] define how to be more prescriptive +TO DO: “CI Best Practices” on helm docs +Question about CRDs during helm upgrade [Scott] +If a CRD exists we don’t try to apply it - but what about updates? +Could we have a similar functionality on “helm upgrade” to what we have on “helm install”? +Read: https://github.com/helm/community/blob/f9e06c16d89ccea1bea77c01a6a96ae3b309f823/architecture/crds.md +Explains pitfalls of handling crd’s +Farina has opinions :) + +Assignments for next meeting +Moderator: Scott +Notes: Jasper +Issue Triage: Farina + +February 4, 2021 +Assignments for this meeting +Moderator: Adam Reese +Notes: Jasper Chui +Issue Triage: Matt Farina + +Announcements +ChartMuseum v0.13.0 released today (currently in progress..) +Follows Helm’s release process: same artifact store (get.helm.sh), installer script, release notes, signatures, etc. +Docker image on GitHub Container Registry + +Discussion +Cancelling patch release of Feb 10th? (4 weeks after 3.5.0) [Marc] +policy https://helm.sh/docs/topics/release_policy/#patch-releases +Should this be cancelled per policy +[Butcher] Security team scheduled release today so it makes sense to cancel patch release +Next patch will be in March +Patches in current release will be bumped to 3.5.3 +HIP for a distributed pick process https://github.com/helm/community/pull/172 [Marc] +Please review, if approved will impact all maintainers +Recent intermittent CircleCI failures - perhaps we need to consider changes to the build pipeline? [Bridget] +[Butcher] Security issue was found and should be fixed today +Chart releaser action docs update? https://github.com/helm/helm-www/pull/928 [Bridget] +Scott says circle back +[Scott] Reviewed and will leave suggestions for owner to review +Creating a 4.0 milestone? [Marc] +4.0 should be delayed as long as possible but good to have community to start tracking +[Butcher] Milestone 3.0 was opened a year before so good to do the same for 4.0 +[Bridget] Label already exists for 4.0 https://github.com/helm/helm/labels/v4.x +Label is sufficient to track 4.0 work +--hide-secrets https://github.com/helm/helm/pull/9130 Discussion on the state of the PR [Shoubhik] +Does not work for template but works for Helm Install +[Adam] Important for this to work with templates +Quick update on planning the contributor summit [Butcher] +Topics: How to contribute to project, How to become core maintainer +Curriculum in progress (Butcher, Bridget, Karen) +Talk to CNCF to determine timeframe for sessions +Talk to this (Bridget, Karen, Butcher) if you are interested in presenting, working on curriculum + +Assignments for next meeting +Moderator: Scott +Notes: Bridget +Issue Triage: Butcher + +January 28, 2021 +Assignments for this meeting +Moderator: Bridget +Notes: Jasper +Issue Triage: Josh Dolitsky + +Announcements +3.5.1 milestone in progress +Rebuild of 3.5.0 with new version of Go (today) with security updates +No other patches +Patches and updates will become 3.5.2 +Learning Helm [written by Matts and Josh] +Covers introduction and how to use it +Commands of Helm +Position within CNCF +Charts +Registries and plugin +Appendix on differences between v2 and v3 +To be published soon + +Discussion +Storage improvement brainstorming [Joe Julian] https://github.com/stedolan/jq/issues/2257 +Config and secrets can be very large +Helm v3: limits to history of 10 items +Exception if its failing: capture failure log +Helm used to use Config maps, want Helm to be usable out of box +Used secrets as it is simple and just works +Alternative (CRD) may require additional permissions +Alternative postgres +Looking for alternatives that could fit requirement to be used out of box +Etcd pulls entire dataset +Split secrets into two parts +Split manifest into its own object (separate namespace) +Config: helm release, secret: metadata +Where would Values go? +Secrets stored in secrets (can be referenced) +[Igor] Confirm that we are trying to simplify how to store runtime data? +Alternatives: postgres service, sqllite, aggregated api server +[Matt] Enterprise wanted simpler format +[Matt] different than programming locally +Helm is a package manager (need to keep this space) +Need higher level tool to manage complexity (ansible, chef, flux helm operator) +Need to make sure when we scale up we handle the simpler case and need to reduce complexity for easy +Simple case easy to use with Helm, don’t want to optimize for the complex case +[Igor] Just to be clear: I wasn't raising the point Helm should do more than it does, what I'm saying is there are several ways of interacting with a store, from going "secrets" to CRDs; when using CRDs there is the alternative of storing the runtime data in Etcd (with its limitations) or promote it to a cluster wide aggregated API, where the limitations of Etcd and some other complexities could be avoided. +Joe to open an issue to continue the conversation to determine next step (HIP or PR) +Test failure in https://github.com/helm/helm/pull/9276 - apparent mismatch between testing/mariadb 0.3.0-0565674 and testing/mariadb 0.3.0 - action needed? [Bridget] +in https://app.circleci.com/pipelines/github/helm/helm/2106/workflows/fad17fdc-61dd-4558-9704-b6d930568cc6/jobs/13653 +--- FAIL: TestSearchRepositoriesCmd/search_for_'maria',_expect_one_match_with_semver_begin_with_zero_development_version (0.00s) +helm_test.go:61: running cmd (attempt 1): search repo maria --devel --repository-config testdata/helmhome/helm/repositories.yaml --repository-cache testdata/helmhome/helm/repository helm_test.go:67: does not match golden file testdata/output/search-semver-pre-zero-devel-release.txt +[Fisher] just a test fluke - never seen it before. Likely just a rebase error. Re-running the test suite passed. + + +Hiding secrets - is this a blocker we should resolve quickly? [Bridget] https://github.com/helm/helm/pull/9130 +[Farina] Should hide secrets in log +Should this be in next release as low hanging fruit +[Farina] Should look into this issue +[Shoubhik] Can take a look into this issue : Done +[Scott] fun question: what blockers would we have to revisit the idea of installing missing CRDs from the /crds dir at the version level +[Farina] What do you mean by version level? CRD capture all version info in each CRD +Creating a 4.0 milestone to track any feature needing a major release [Marc] +(but we should avoid a 4.0 as long as possible in my opinion) +[Shoubhik] Should not signify that its coming +[Farina] There could be a mismatch +[Bridget] Stick with milestone 4.0 +[Karena] Charts Chat - is that still active, I have a standing conflict and the notes doc was last updated in 2019 +Is this still happening? +[Farina] Should be cancelled. Meeting has not been held since 2019. +[Farina] Meeting has been cancelled. +[Karena] If people still need help with Charts should they be directed to this meeting? +Direct to charts channel in community slack +[Farina] Topics has been covered in this meeting or directly in issues + +Assignments for next meeting +Moderator: Adam Reese +Notes: Karena +Issue Triage: Matt Farina + + +January 21, 2021 +Assignments for this meeting +Moderator: Matt Farina +Notes: Karena +Issue Triage: Matt Butcher + +Announcements +None this week + +Discussion +3.5.1- https://github.com/helm/helm/milestone/107 +Patch fix milestone +Updating kube libraries for 1.20.2 +Maintainer doesn’t have to do the upgrades for the libraries +Usually aren’t breaking +Volunteer? Shoubhik will attempt +If need to release Go security patch, 3.5.1 will only the security patch and 3.5.2 will be the rest +Performance improvements [Farina] +Index.yaml updates +Previously, 8mb yaml file - slow to parse +Json so much faster to parse, both in memory and operations +Index.json to cut down on processing time (vs index.yaml) +[Matt Fisher] Redirect? (might be a breaking change) +Farina: perhaps a start - look at what’s on artifact hub. Explore further. +Helm repositories with Git [Igor] +Suggestion: parse tar balls on the fly - grab directly from git +[Igor] Example: https://github.com/otaviof/chart-streams +[Bridget] GitHub pages example: https://helm.sh/docs/topics/chart_repository/#github-pages-example +[Farina] Helm is meant to be simple and like seeing people using the API +[Matt Fisher] there’s a section in documentation to point to projects +Nice that it demonstrates the chart repository api +[Bridget] here is where you can PR in a link: https://github.com/helm/helm-www/blob/master/content/en/docs/community/related.md +[Josh Dolitsky] Similar, but using plugin vs. http(s): https://github.com/aslafy-z/helm-git +Storage improvement brainstorming [Joe Julian - deferring a week] + +Assignments for next meeting +Moderator: Bridget +Notes: Jasper +Issue Triage: Josh Dolitsky + +January 14, 2021 +Assignments for this meeting +Moderator: Marc K +Notes: Bridget +Issue Triage: Shoubhik, tbd + +Announcements +3.5.0 released [Farina] - https://github.com/helm/helm/releases/tag/v3.5.0 +Bridget to coordinate a blog post; Farina to review +3.5.1 milestone: https://github.com/helm/helm/milestone/107 (second Wed in Feb) +Date for next minor release [Marc] +3.6 RC1: Monday May 17th, 2021 +3.6 final release: Wednesday May 26th, 2021 +Marc to update calendar + Helm plugins in Artifact Hub [Farina] +(for example, https://artifacthub.io/packages/helm-plugin/helm-2to3/2to3) +List and search - artifact hub is like a search engine +To do: add this to helm docs + + +Discussion +Dependabot recommendations (https://github.com/helm/helm/pulls/app%2Fdependabot) - what action do we want to take? [Bridget] +bump k8s.io/[various] from 0.20.1 to 0.20.2 +https://github.com/stretchr/testify update +Older containerd issue +Farina: we shouldn’t do the k8s ones through dependabot - we should do these - cherry-pick into 3.5.1 +But the containerd one is a tough one - a transitive dependency we need to update - we ideally would prefer ORAS to update this +The testify one could probably be merged & marked as needs-pick - may work best for 3.6 not 3.5.x +Picks for patches [Farina] +Marking “needs pick” and then picking them - not a long period of sitting in the branch +More difficult if the main branch has diverged far from the release branch +Ideally, whoever merges marks as needs pick and pushes to release branch - would make patch releases quicker +Marc: we could move this towards a “make release” if this were made more consistent +Butcher: now that we do releases more consistently, we can pick onto the branch sooner rather than later +Marc: how about a process HIP to document this? (willing to write it but others can help) +Plugin discussion for artifact hub [Butcher] +Butcher: Might we want “helm plugin search”? +Farina: artifact hub is API driven so external tools are entirely possible +Butcher: we could do this as a feature HIP +Bucket redirections [Butcher] +Farina: no problem thus far +KubeCon video [Bridget] +Should be a sea shanty +Helm 4 wishlist +Date formatting [issues open already] [Bridget] +Storage - too large of release storage objects bring kubernetes api to its knees [Joe Julian] +Farina: we should iterate on this in an experimental fashion in v3 +Could do a tool to migrate from secrets to postgres +Context-specific storage options instead of env variables +Joe Julian: also we read all the secrets to get metadata but just need the metadata itself +Joe Thompson: 1meg request limit also is an issue +Igor Sutton Lopes: can we use something other than etcd? +Farina: we can’t assume people can install anywhere other than their clusters +Igor: alternative backends for storage - discussion for next week +Farina: with secrets we have encryption, so we have to consider that and not just push secrets to git - could be opt-in + +Assignments for next meeting +Moderator: Farina +Notes: Karena +Issue Triage: Butcher + + +January 7, 2021 +Assignments for this meeting +Moderator: Bridget +Notes: Karena +Issue Triage: Farina/Josh/Shoubhik + +Announcements +3.5.0 Milestone · GitHub - 3.5 RC2 (https://github.com/helm/helm/releases/tag/v3.5.0-rc.2) was cut on Wednesday Jan 6 2021, and 3.5 will be released Wednesday Jan 13 2021. + +Discussion +We must select the date for the next minor release [Marc] +Move discussion to the mailing list for consensus? +[Farina] april 19-23 is release week, suggesting May 12, first week after KubeCon Europe (virtual) +Tentative date: +Big risk - any changes from kube release +Want to make sure follow a quarterly release cadence +[marc, farina] suggesting follow new kube release schedule - 3 x’s a year +[farina] suggesting May 26, rc1 would be May 17 +[marc] to send email to maintainer list +[shoubhik] how to check api changes? +Check docs, not easy question +[bridget] would you like to check api questions that may affect helm? +[farina] any k8s go api changes could break anything for helm +Tracking changes may be more work than just fixing what’s breaking +When should a patch release be cancelled? [Marc] +https://github.com/helm/community/issues/160 +Final point to finish HIP2 (Pre-defined release dates for Helm) https://github.com/helm/community/blob/master/hips/hip-0002.md +[fisher] justification to cancel a patch release? +[farina] canceled patch release because minor release (superseded) +[fisher] patch release == low severity bugs that affect the smallest number of users +[bridget] if within x days, judgement call +If within 7 days, wait for minor release to save time for release managers +Needs more discussion +Asset pipeline: https://github.com/helm/helm/pull/8697/ - let’s discuss “add Asset Transparency action for GitHub releases” in regards to our CI/CD [Butcher] + Asset Transparency project +[butcher] if generally in favor, would like to get merged +Please look at and comment so decision can be made w/i the next week +Contributor Workshop +[bridget] working w CNCF to schedule the workshop +[Butcher] 2-block format +1 - Non-maintainer +2 - People who are interested in becoming a core maintainer +Karen has already reached out to people who have done this before +Timeline: Late first quarter, early second quarter +Who wants to volunteer from core maintainers for Kube preso? +Martin? +Bridget will coordinate + +Assignments for next meeting +Moderator: Marc +Notes: Josh +Issue Triage: Shoubhik (non-maintainer issues), tbd +``` diff --git a/community/meeting-notes/index.mdx b/community/meeting-notes/index.mdx new file mode 100644 index 0000000000..42e2d5015b --- /dev/null +++ b/community/meeting-notes/index.mdx @@ -0,0 +1,11 @@ +--- +title: Archived Meeting Notes +--- + +Here are all of the archived Helm meeting notes prior to 2022. They are retained here for historical purposes. + +For current Helm dev meeting agenda and notes, see [this Google Doc](https://docs.google.com/document/d/1d-6xJEx0C78csIYSPKJzRPeWaHG_8W1Hjl72OJggwdc/edit?usp=sharing). + +import DocCardList from "@theme/DocCardList"; + + diff --git a/community/stable-repo-charts-new-locations.md b/community/stable-repo-charts-new-locations.md new file mode 100644 index 0000000000..4bee2524ff --- /dev/null +++ b/community/stable-repo-charts-new-locations.md @@ -0,0 +1,345 @@ +--- +title: Stable chart repo new locations +--- + + + +## First try Artifact Hub + +The canonical source for Helm charts is the [Artifact Hub](https://artifacthub.io/), an aggregator for distributed chart repos. + +- [Chart end users](https://github.com/helm/community/blob/main/user-profiles.md#1-application-operator) looking for charts should look there. +- [Chart contributors and maintainers](https://github.com/helm/community/blob/main/user-profiles.md#2-application-distributor) – people who want to contribute features or fixes to individual chart source code, or help to maintain them – may also look there. Many existing chart maintainers list the chart source in the Artifact Hub `links` metadata, but this is optional and many do not. + +## Ongoing effort to relocate charts to new repos + +If you read this far, this file is a continuation of an ongoing effort to [relocate charts to new repos](https://github.com/helm/charts/issues/21103). +It continues to serve two needs: + +1. Points end users for the now archived `stable` or `incubator` charts ([the releases prior to November 13, 2020](https://helm.sh/blog/new-location-stable-incubator-charts/)) to new chart locations, so the users can upgrade to newer and currently maintained versions of those charts. +2. Helps previous and/or potential new chart maintainers coordinate where to continue maintaining the chart source and repo automation tooling for each chart (or set of related charts) as a community. Thanks for your continuing work on Helm charts! ✨ + +We will maintain this file until these needs are solved in another way, or are no longer necessary to solve, whichever comes first 🤝 + +## Brief history to avoid confusion + +When `helm/charts` stable and incubator [support plan](https://github.com/helm/charts/blob/master/README.md#status-of-the-project) and [Deprecation Timeline](https://github.com/helm/charts/blob/master/README.md#deprecation-timeline) were announced, the community (chart OWNERS, organizations, groups or individuals who want to host charts) began moving the source of those charts to new Helm repos according to the [Search of Distributed Repositories proposal](https://github.com/helm/community/blob/main/hips/archives/helm/distributed-search.md). + +Those archived chart releases were listed first on the (now deprecated) [Helm Hub](https://hub.helm.sh/), and now on [Artifact Hub](#first-try-artifact-hub) along with the new versions of actively maintained chart source code hosted elsewhere. + +The table below was moved from the now in GitHub to help the community contribute to tracking this migration through Pull Requests. + +## Status of relocated charts + +### Notes on updating lists below + +1. List all charts: + + ```bash + find -d stable/ -mindepth 1 -maxdepth 1 + ``` + +2. List all charts marked `deprecated`: + + ```bash + grep -l 'deprecated: true' stable/*/Chart.yaml | xargs -I {} dirname {} + ``` + +3. Manually check each deprecated chart for status and deprecation issue link, and update applicable table and non-applicable list accordingly (apart from the flag above, the deprecation process is not consistent enough to automate this check) + +### Non-applicable (purposefully deprecated) + +- stable/acs-engine-autoscaler +- stable/ark +- stable/aws-cluster-autoscaler +- stable/dask-distributed +- stable/gcloud-endpoints +- stable/kube-lego +- stable/magic-namespace +- stable/mongodb-replicaset (#23747) +- stable/nginx-lego +- stable/rabbitmq-ha (#23746) +- stable/sematext-docker-agent + +### Applicable + + + +| Chart | Status | Issue/PR | +| -- | -- | -- | +|
  • [ ] stable/aerospike
| STATUS | URL | +|
  • [ ] stable/airflow
| in progress: discussion started | https://github.com/apache/airflow/issues/10523 | +|
  • [x] stable/ambassador
| done | https://github.com/datawire/ambassador-chart/issues/9 | +|
  • [x] stable/anchore-engine
| done | https://github.com/helm/charts/pull/23509 | +|
  • [ ] stable/apm-server
| STATUS | URL | +|
  • [x] stable/artifactory
| done | https://github.com/helm/charts/pull/7627 | +|
  • [x] stable/artifactory-ha
| done | https://github.com/helm/charts/pull/7627 | +|
  • [ ] stable/atlantis
| STATUS | URL | +|
  • [ ] stable/auditbeat
| STATUS | URL | +|
  • [ ] stable/aws-iam-authenticator
| STATUS | URL | +|
  • [ ] stable/bitcoind
| STATUS | URL | +|
  • [ ] stable/bookstack
| STATUS | URL | +|
  • [x] stable/buildkite
| done | https://github.com/helm/charts/pull/9200 | +|
  • [ ] stable/burrow
| STATUS | URL | +|
  • [ ] stable/centrifugo
| STATUS | URL | +|
  • [ ] stable/cerebro
| STATUS | URL | +|
  • [x] stable/cert-manager
| done | https://github.com/helm/charts/pull/12970 | +|
  • [ ] stable/chaoskube
| STATUS | URL | +|
  • [ ] stable/chartmuseum
| STATUS | URL | +|
  • [x] stable/chronograf
| done | https://github.com/helm/charts/pull/21233 | +|
  • [ ] stable/clamav
| STATUS | URL | +|
  • [ ] stable/cloudserver
| STATUS | URL | +|
  • [x] stable/cluster-autoscaler
| done | https://github.com/kubernetes/autoscaler/pull/3341 | +|
  • [ ] stable/cluster-overprovisioner
| in progress | https://github.com/helm/charts/pull/23586 | +|
  • [x] stable/cockroachdb
| done | https://github.com/helm/charts/pull/23000 | +|
  • [ ] stable/collabora-code
| STATUS | URL | +|
  • [x] stable/concourse
| done | https://github.com/helm/charts/pull/19128 | +|
  • [x] stable/consul
| done | https://github.com/helm/charts/pull/22696 | +|
  • [ ] stable/contour
| STATUS | URL | +|
  • [ ] stable/coredns
| in progress | https://github.com/coredns/coredns/issues/3905 | +|
  • [ ] stable/cosbench
| STATUS | URL | +|
  • [ ] stable/coscale
| STATUS | URL | +|
  • [ ] stable/couchbase-operator
| STATUS | URL | +|
  • [x] stable/couchdb
| done | https://github.com/helm/charts/pull/18079 | +|
  • [x] stable/dask
| done | https://github.com/helm/charts/pull/18419 | +|
  • [X] stable/datadog
| done | https://github.com/helm/charts/pull/23384 | +|
  • [ ] stable/dex
| STATUS | URL | +|
  • [ ] stable/distributed-jmeter
| STATUS | URL | +|
  • [ ] stable/distributed-tensorflow
| STATUS | URL | +|
  • [x] stable/distribution
| done | https://github.com/helm/charts/pull/7627 | +|
  • [x] stable/dmarc2logstash
| done | https://github.com/helm/charts/pull/22524 | +|
  • [ ] stable/docker-registry
| STATUS | URL | +|
  • [x] stable/dokuwiki
| done | https://github.com/helm/charts/issues/20969 | +|
  • [x] stable/drone
| done | https://github.com/helm/charts/pull/21151 | +|
  • [x] stable/drupal
| done | https://github.com/helm/charts/issues/20969 | +|
  • [ ] stable/efs-provisioner
| STATUS | URL | +|
  • [x] stable/elastabot
| done | https://github.com/helm/charts/pull/22676 | +|
  • [x] stable/elastalert
| done | https://github.com/helm/charts/pull/22689 | +|
  • [ ] stable/elastic-stack
| STATUS | URL | +|
  • [x] stable/elasticsearch
| done | https://github.com/helm/charts/pull/21955 | +|
  • [ ] stable/elasticsearch-curator
| STATUS | URL | +|
  • [ ] stable/elasticsearch-exporter
| STATUS | URL | +|
  • [ ] stable/envoy
| STATUS | URL | +|
  • [ ] stable/etcd-operator
| STATUS | URL | +|
  • [ ] stable/ethereum
| STATUS | URL | +|
  • [ ] stable/eventrouter
| STATUS | URL | +|
  • [ ] stable/express-gateway
| STATUS | URL | +|
  • [x] stable/external-dns
| done | https://github.com/helm/charts/issues/20969 | +|
  • [ ] stable/factorio
| STATUS | URL | +|
  • [ ] stable/filebeat
| STATUS | URL | +|
  • [ ] stable/fluent-bit
| migrated: need to deprecate chart with migration path | https://github.com/helm/charts/issues/21235 | +|
  • [ ] stable/fluentd
| migrated: need to deprecate chart with migration path | https://github.com/helm/charts/issues/21235 | +|
  • [x] stable/fluentd-elasticsearch
| done | https://github.com/helm/charts/pull/10354 | +|
  • [x] stable/g2
| done | https://github.com/helm/charts/pull/4957 | +|
  • [ ] stable/gangway
| STATUS | URL | +|
  • [ ] stable/gce-ingress
| STATUS | URL | +|
  • [x] stable/gcloud-sqlproxy
| done | https://github.com/helm/charts/pull/9219 | +|
  • [ ] stable/gcp-night-king
| STATUS | URL | +|
  • [x] stable/ghost
| done | https://github.com/helm/charts/issues/20969 | +|
  • [x] stable/gitlab-ce
| done | https://github.com/helm/charts/pull/1876 | +|
  • [x] stable/gitlab-ee
| done | https://github.com/helm/charts/pull/1876 | +|
  • [ ] stable/gocd
| STATUS | URL | +|
  • [ ] stable/goldpinger
| STATUS | URL | +|
  • [x] stable/grafana
| done | https://github.com/helm/charts/pull/23662 | +|
  • [x] stable/graphite
| done | https://github.com/helm/charts/pull/10350 | +|
  • [x] stable/graylog
| done | helm/charts#24011 | +|
  • [ ] stable/hackmd
| STATUS | URL | +|
  • [ ] stable/hadoop
| STATUS | URL | +|
  • [x] stable/hazelcast
| done | https://github.com/helm/charts/pull/22797 | +|
  • [x] stable/hazelcast-jet
| done | https://github.com/helm/charts/pull/22798 | +|
  • [ ] stable/heapster
| STATUS | URL | +|
  • [ ] stable/heartbeat
| STATUS | URL | +|
  • [x] stable/helm-exporter
| migrated: need to update README | https://github.com/helm/charts/pull/20376 | +|
  • [ ] stable/hl-composer
| STATUS | URL | +|
  • [ ] stable/hlf-ca
| STATUS | URL | +|
  • [ ] stable/hlf-couchdb
| STATUS | URL | +|
  • [ ] stable/hlf-ord
| STATUS | URL | +|
  • [ ] stable/hlf-peer
| STATUS | URL | +|
  • [ ] stable/hoard
| STATUS | URL | +|
  • [x] stable/home-assistant
| done | https://github.com/helm/charts/pull/22745 | +|
  • [ ] stable/horovod
| STATUS | URL | +|
  • [ ] stable/hubot
| STATUS | URL | +|
  • [ ] stable/ignite
| STATUS | URL | +|
  • [ ] stable/inbucket
| STATUS | URL | +|
  • [x] stable/influxdb
| done | https://github.com/influxdata/helm-charts | +|
  • [ ] stable/ingressmonitorcontroller
| STATUS | URL | +|
  • [ ] stable/instana-agent
| STATUS | URL | +|
  • [ ] stable/ipfs
| STATUS | URL | +|
  • [x] stable/jaeger-operator
| done | https://github.com/helm/charts/pull/19636 | +|
  • [ ] stable/janusgraph
| STATUS | URL | +|
  • [x] stable/jasperreports
| done | https://github.com/helm/charts/issues/20969 | +|
  • [x] stable/jenkins
| done | https://github.com/helm/charts/issues/23562 | +|
  • [x] stable/joomla
| done | https://github.com/helm/charts/issues/20969 | +|
  • [ ] stable/k8s-spot-rescheduler
| STATUS | URL | +|
  • [ ] stable/k8s-spot-termination-handler
| STATUS | URL | +|
  • [ ] stable/kafka-manager
| STATUS | URL | +|
  • [ ] stable/kanister-operator
| STATUS | URL | +|
  • [x] stable/kapacitor
| done | https://github.com/helm/charts/pull/21234 | +|
  • [ ] stable/karma
| STATUS | URL | +|
  • [ ] stable/katafygio
| STATUS | URL | +|
  • [x] stable/keel
| done | https://github.com/helm/charts/pull/9514 | +|
  • [x] stable/keycloak
| done | https://github.com/helm/charts/pull/13316 | +|
  • [x] stable/kiam
| done | https://github.com/helm/charts/pull/17959 | +|
  • [ ] stable/kibana
| in progress | https://github.com/helm/charts/pull/23844 | +|
  • [x] stable/kong
| done | https://github.com/helm/charts/pull/20149 | +|
  • [ ] stable/kube2iam
| in progress: conversation started | https://github.com/jtblin/kube2iam/issues/277 | +|
  • [ ] stable/kube-hunter
| STATUS | URL | +|
  • [ ] stable/kube-ops-view
| STATUS | URL | +|
  • [ ] stable/kube-slack
| STATUS | URL | +|
  • [ ] stable/kube-state-metrics
| in progress | https://github.com/kubernetes/kube-state-metrics/issues/1153 | +|
  • [x] stable/kubed
| done | https://github.com/helm/charts/pull/4957 | +|
  • [x] stable/kubedb
| done | https://github.com/helm/charts/pull/4957 | +|
  • [x] stable/kuberhealthy
| done | https://github.com/helm/charts/pull/23919 | +|
  • [x] stable/kubernetes-dashboard
| done | https://github.com/helm/charts/pull/22627 | +|
  • [ ] stable/kuberos
| STATUS | URL | +|
  • [x] stable/kubewatch
| done | https://github.com/helm/charts/issues/20969 | +|
  • [X] stable/kured
| done | https://github.com/weaveworks/kured/pull/150 | +|
  • [ ] stable/lamp
| STATUS | URL | +|
  • [ ] stable/linkerd
| STATUS | URL | +|
  • [ ] stable/locust
| STATUS | URL | +|
  • [ ] stable/logdna-agent
| STATUS | URL | +|
  • [ ] stable/logstash
| STATUS | URL | +|
  • [ ] stable/luigi
| STATUS | URL | +|
  • [x] stable/magento
| done | https://github.com/helm/charts/pull/14555 | +|
  • [ ] stable/magic-ip-address
| STATUS | URL | +|
  • [x] stable/mailhog
| done | https://github.com/helm/charts/pull/13315 | +|
  • [x] stable/mariadb
| done | https://github.com/helm/charts/issues/20969 | +|
  • [x] stable/mattermost-team-edition
| done | https://github.com/helm/charts/pull/13540 | +|
  • [ ] stable/mcrouter
| STATUS | URL | +|
  • [x] stable/mediawiki
| done | https://github.com/helm/charts/issues/20969 | +|
  • [ ] stable/memcached
| STATUS | URL | +|
  • [ ] stable/mercure
| STATUS | URL | +|
  • [ ] stable/metabase
| STATUS | URL | +|
  • [x] stable/metallb
| done | https://github.com/helm/charts/pull/23486 | +|
  • [ ] stable/metricbeat
| STATUS | URL | +|
  • [ ] stable/metrics-server
| in progress | https://github.com/kubernetes-sigs/metrics-server/issues/572 | +|
  • [ ] stable/minecraft
| STATUS | URL | +|
  • [x] stable/minio
| done | https://charts.min.io | +|
  • [x] stable/mission-control
| done | https://github.com/helm/charts/pull/7627 | +|
  • [x] stable/mongodb
| done | https://github.com/helm/charts/issues/20969 | +|
  • [x] stable/moodle
| done | https://github.com/helm/charts/issues/20969 | +|
  • [ ] stable/msoms
| in progress: discussion started | https://github.com/microsoft/charts/issues/19 | +|
  • [ ] stable/mssql-linux
| in progress: discussion started | https://github.com/microsoft/charts/issues/19 | +|
  • [ ] stable/mysql
| STATUS | URL | +|
  • [x] stable/mysqldump
| done | https://github.com/helm/charts/pull/23840 | +|
  • [ ] stable/namerd
| STATUS | URL | +|
  • [x] stable/nats
| done | https://github.com/helm/charts/issues/20969 | +|
  • [x] stable/neo4j
| done | https://github.com/helm/charts/pull/22437 | +|
  • [ ] stable/newrelic-infrastructure
| STATUS | URL | +|
  • [ ] stable/nextcloud
| done | https://github.com/helm/charts/pull/23627 | +|
  • [ ] stable/nfs-client-provisioner
| STATUS | URL | +|
  • [ ] stable/nfs-server-provisioner
| STATUS | URL | +|
  • [x] stable/nginx-ingress
| done | https://github.com/helm/charts/pull/22823 | +|
  • [ ] stable/nginx-ldapauth-proxy
| STATUS | URL | +|
  • [ ] stable/node-problem-detector
| STATUS | URL | +|
  • [x] stable/node-red
| done | https://github.com/helm/charts/pull/22739 | +|
  • [ ] stable/oauth2-proxy
| STATUS | URL | +|
  • [x] stable/odoo
| done | https://github.com/helm/charts/issues/20969 | +|
  • [ ] stable/opa
| STATUS | URL | +|
  • [x] stable/opencart
| done | https://github.com/helm/charts/issues/20969 | +|
  • [X] stable/openebs
| done | https://github.com/helm/charts/pull/22860 | +|
  • [ ] stable/openiban
| STATUS | URL | +|
  • [ ] stable/openldap
| STATUS | URL | +|
  • [ ] stable/openvpn
| STATUS | URL | +|
  • [x] stable/orangehrm
| done | https://github.com/helm/charts/issues/20969 | +|
  • [x] stable/osclass
| done | https://github.com/helm/charts/issues/20969 | +|
  • [x] stable/owncloud
| done | https://github.com/helm/charts/issues/20969 | +|
  • [ ] stable/pachyderm
| STATUS | URL | +|
  • [x] stable/parse
| done | https://github.com/helm/charts/issues/20969 | +|
  • [ ] stable/percona
| STATUS | URL | +|
  • [ ] stable/percona-xtradb-cluster
| STATUS | URL | +|
  • [x] stable/pgadmin
| done | https://github.com/helm/charts/pull/21275 | +|
  • [x] stable/phabricator
| done | https://github.com/helm/charts/issues/20969 | +|
  • [x] stable/phpbb
| done | https://github.com/helm/charts/issues/20969 | +|
  • [x] stable/phpmyadmin
| done | https://github.com/helm/charts/issues/20969 | +|
  • [ ] stable/pomerium
| STATUS | URL | +|
  • [x] stable/postgresql
| done | https://github.com/helm/charts/issues/20969 | +|
  • [x] stable/prestashop
| done | https://github.com/helm/charts/issues/20969 | +|
  • [ ] stable/presto
| STATUS | URL | +|
  • [ ] stable/prisma
| STATUS | URL | +|
  • [x] stable/prometheus
| done | https://github.com/helm/charts/pull/23692 | +|
  • [x] stable/prometheus-adapter
| done | https://github.com/helm/charts/pull/23694 | +|
  • [x] stable/prometheus-blackbox-exporter
| done | https://github.com/helm/charts/pull/23695 | +|
  • [x] stable/prometheus-cloudwatch-exporter
| done | https://github.com/helm/charts/pull/23696 | +|
  • [x] stable/prometheus-consul-exporter
| done | https://github.com/helm/charts/pull/23697 | +|
  • [x] stable/prometheus-couchdb-exporter
| done | https://github.com/helm/charts/pull/23698 | +|
  • [x] stable/prometheus-mongodb-exporter
| done | https://github.com/helm/charts/pull/23699 | +|
  • [x] stable/prometheus-mysql-exporter
| done | https://github.com/helm/charts/pull/23700 | +|
  • [x] stable/prometheus-nats-exporter
| done | https://github.com/helm/charts/pull/23701 | +|
  • [x] stable/prometheus-node-exporter
| done | https://github.com/helm/charts/pull/23702 | +|
  • [x] stable/prometheus-operator
| done | https://github.com/helm/charts/pull/23738 | +|
  • [x] stable/prometheus-postgres-exporter
| done | https://github.com/helm/charts/pull/23703 | +|
  • [x] stable/prometheus-pushgateway
| done | https://github.com/helm/charts/pull/23704 | +|
  • [x] stable/prometheus-rabbitmq-exporter
| done | https://github.com/helm/charts/pull/23705 | +|
  • [x] stable/prometheus-redis-exporter
| done | https://github.com/helm/charts/pull/23706 | +|
  • [x] stable/prometheus-snmp-exporter
| done | https://github.com/helm/charts/pull/23708 | +|
  • [x] stable/prometheus-to-sd
| done | https://github.com/helm/charts/pull/23707 | +|
  • [ ] stable/quassel
| STATUS | URL | +|
  • [x] stable/rabbitmq
| done | https://github.com/helm/charts/issues/20969 | +|
  • [x] stable/redis
| done | https://github.com/helm/charts/issues/20969 | +|
  • [ ] stable/redis-ha
| STATUS | URL | +|
  • [x] stable/redmine
| done | https://github.com/helm/charts/issues/20969 | +|
  • [x] stable/reloader
| done | https://github.com/helm/charts/pull/23595 | +|
  • [ ] stable/rethinkdb
| STATUS | URL | +|
  • [ ] stable/risk-advisor
| STATUS | URL | +|
  • [ ] stable/rocketchat
| STATUS | URL | +|
  • [ ] stable/rookout
| STATUS | URL | +|
  • [ ] stable/sapho
| STATUS | URL | +|
  • [ ] stable/satisfy
| STATUS | URL | +|
  • [ ] stable/schema-registry-ui
| STATUS | URL | +|
  • [ ] stable/sealed-secrets
| Discussion ongoing - not settled | https://github.com/bitnami-labs/sealed-secrets/issues/389 | +|
  • [x] stable/searchlight
| done | https://github.com/helm/charts/pull/4957 | +|
  • [ ] stable/selenium
| STATUS | URL | +|
  • [ ] stable/sematext-agent
| STATUS | URL | +|
  • [ ] stable/sensu
| STATUS | URL | +|
  • [ ] stable/sentry
| STATUS | URL | +|
  • [ ] stable/seq
| STATUS | URL | +|
  • [x] stable/signalfx-agent
| done | https://github.com/helm/charts/pull/13586 | +|
  • [ ] stable/signalsciences
| STATUS | URL | +|
  • [ ] stable/socat-tunneller
| STATUS | URL | +|
  • [x] stable/sonarqube
| done | https://github.com/helm/charts/pull/21007 | +|
  • [x] stable/sonatype-nexus
| done | https://github.com/helm/charts/pull/21255 | +|
  • [ ] stable/spark
| STATUS | URL | +|
  • [ ] stable/spark-history-server
| STATUS | URL | +|
  • [ ] stable/spartakus
| STATUS | URL | +|
  • [ ] stable/spinnaker
| STATUS | URL | +|
  • [ ] stable/spotify-docker-gc
| STATUS | URL | +|
  • [ ] stable/spring-cloud-data-flow
| STATUS | URL | +|
  • [ ] stable/stackdriver-exporter
| STATUS | URL | +|
  • [x] stable/stash
| done | https://github.com/helm/charts/pull/4957 | +|
  • [ ] stable/stellar-core
| STATUS | URL | +|
  • [ ] stable/stolon
| STATUS | URL | +|
  • [x] stable/suitecrm
| done | https://github.com/helm/charts/issues/20969 | +|
  • [ ] stable/sumokube
| STATUS | URL | +|
  • [ ] stable/sumologic-fluentd
| STATUS | URL | +|
  • [ ] stable/superset
| STATUS | URL | +|
  • [x] stable/swift
| done | https://github.com/helm/charts/pull/4957 | +|
  • [ ] stable/sysdig
| STATUS | URL | +|
  • [x] stable/telegraf
| done | https://github.com/helm/charts/pull/21232 | +|
  • [ ] stable/tensorflow-notebook
| STATUS | URL | +|
  • [ ] stable/tensorflow-serving
| STATUS | URL | +|
  • [ ] stable/terracotta
| STATUS | URL | +|
  • [x] stable/testlink
| done | https://github.com/helm/charts/issues/20969 | +|
  • [ ] stable/tomcat
| STATUS | URL | +|
  • [ ] stable/traefik
| STATUS | URL | +|
  • [ ] stable/uchiwa
| STATUS | URL | +|
  • [ ] stable/unbound
| STATUS | URL | +|
  • [x] stable/unifi
| done | https://github.com/helm/charts/pull/23714 | +|
  • [ ] stable/vault-operator
| STATUS | URL | +|
  • [x] stable/velero
| done | https://github.com/helm/charts/pull/19719 | +|
  • [ ] stable/verdaccio
| STATUS | URL | +|
  • [x] stable/voyager
| done | https://github.com/helm/charts/pull/4957 | +|
  • [ ] stable/vsphere-cpi
| STATUS | URL | +|
  • [x] stable/wavefront
| done | https://github.com/helm/charts/pull/20055 | +|
  • [ ] stable/weave-cloud
| STATUS | URL | +|
  • [ ] stable/weave-scope
| in progress: discussion underway | https://github.com/weaveworks/scope/issues/3807 | +|
  • [x] stable/wordpress
| done | https://github.com/helm/charts/issues/20969 | +|
  • [x] stable/xray
| done | https://github.com/helm/charts/pull/7627 | +|
  • [ ] stable/zeppelin
| STATUS | URL | +|
  • [ ] stable/zetcd
| STATUS | URL | diff --git a/community/user-profiles.md b/community/user-profiles.md new file mode 100644 index 0000000000..d596d2eb5d --- /dev/null +++ b/community/user-profiles.md @@ -0,0 +1,54 @@ +--- +title: User Profiles +--- + + + +The purpose of this document is to aid in the development of Helm features by evaluating Helm features against those who will be using them. + +When considering requirements and implementation solutions it's useful look at who uses Helm to have a better understanding of how something should work. The Helm user profiles describe the different types of users and contributors to Helm along with the order of priority they have relative to each other. The ordering is because nothing can share the exact same priority and we want to convey that. + +## Preface + +* What's described here are user profiles as opposed to [personas](https://en.wikipedia.org/wiki/Persona#In_user_experience_design). Personas are example actors rather than general categories. +* Kubernetes Cluster Operators are out of scope for this document. A cluster operator is one who manages the operation of a Kubernetes cluster that applications can run in. + +## Profiles + +Profiles describe a type of role a user may perform. A real person may perform more than one role and have more than one profile apply to them. How this mapping works between profiles and real people can vary between companies and other organizations. To handle this variation we focus on the user profiles rather than how they may map to people in these different organizations. + +### 1. Application Operator + +Application operators take an application and operate it within a Kubernetes cluster. For example, the operation of WordPress and MySQL. This is not to be confused with the role of a Kubernetes cluster operator (see the preface above for more detail). + +### 2. Application Distributor + +Distributors are people who package an application for someone else to operate. Examples of this would be those who maintainer [Community Charts](https://github.com/kubernetes/charts) such as WordPress and Datadog. + +### 3. Application Developer + +An application developer writes the software for an application. They are typically not concerned with where the application is running as applications can often be run more than one environment (e.g., many applications can be run in a virtual machine or a container). Examples of this include the developers of WordPress and MySQL. + +### 4. Supporting Tool Developer + +Supporting tool developers build tools adjacent to Helm such as a linter, Helm plugin, or even kubectl. These are developers building complementary things that can be used along with Helm. + +### 5. Helm Developer + +Helm developers are those who develop Helm itself. That includes core maintainers along with anyone else who fixes a bug or updates docs. + +Generally speaking, the developers of Helm consider the end users above themselves when looking at requirements and implementation strategies. + +## Profiles Not In Scope + +Some user profiles are not considered in scope for Helm. That does not mean a real person who multiple profiles apply to is not considered a supported user. Rather, the out of scope profiles apply to roles that are not typically supported. + +## Cluster Operator + +A cluster operator stands up and operates a Kubernetes cluster. This includes elements such as the control plane, nodes, and elements in the stack below these. It does not include applications running on Kubernetes as those are handled by the _Application Operator_ profile. \ No newline at end of file diff --git a/docusaurus.config.js b/docusaurus.config.js index 957ff36535..4f13f8e21f 100644 --- a/docusaurus.config.js +++ b/docusaurus.config.js @@ -15,12 +15,201 @@ const normalizedBaseUrl = ? rawBaseUrl : rawBaseUrl + "/"; +const { + transformImportedContent, +} = require("./src/utils/communityDocsTransforms"); +const { + deriveHelpers, + createCommunityEditUrl, +} = require("./src/utils/communityDocsConfig"); + +// Custom fields configuration +const customFields = { + communityDocs: { + // Single source of truth: remote docs with optional front matter additions + remoteDocs: [ + // No changes + { origFilename: "blog-topics.md" }, + { origFilename: "code-of-conduct.md" }, + { origFilename: "communication.md" }, + { origFilename: "MAINTAINERS.md" }, + { origFilename: "incubator.md" }, + { origFilename: "stable-repo-charts-new-locations.md" }, + { origFilename: "user-profiles.md" }, + + { origFilename: "hips/README.md" }, + { origFilename: "hips/hip-0001.md" }, + { origFilename: "hips/hip-0002.md" }, + { origFilename: "hips/hip-0003.md" }, + { origFilename: "hips/hip-0004.md" }, + { origFilename: "hips/hip-0005.md" }, + { origFilename: "hips/hip-0006.md" }, + { origFilename: "hips/hip-0007.md" }, + { origFilename: "hips/hip-0008.md" }, + { origFilename: "hips/hip-0009.md" }, + { origFilename: "hips/hip-0010.md" }, + { origFilename: "hips/hip-0011.md" }, + { origFilename: "hips/hip-0012.md" }, + { origFilename: "hips/hip-0014.md" }, + { origFilename: "hips/hip-0015.md" }, + { origFilename: "hips/hip-0016.md" }, + { origFilename: "hips/hip-0017.md" }, + { origFilename: "hips/hip-0018.md" }, + { origFilename: "hips/hip-0019.md" }, + { origFilename: "hips/hip-0020.md" }, + { origFilename: "hips/hip-0021.md" }, + { origFilename: "hips/hip-0022.md" }, + { origFilename: "hips/hip-0023.md" }, + { origFilename: "hips/hip-0024.md" }, + { origFilename: "hips/hip-0025.md" }, + { origFilename: "hips/hip-0026.md" }, + + { origFilename: "hips/archives/README.md" }, + { origFilename: "hips/archives/monocular/1.0-improvements.md" }, + { origFilename: "hips/archives/helm/distributed-search.md" }, + { origFilename: "hips/archives/helm/helm-v3/000-helm-v3.md" }, + { origFilename: "hips/archives/helm/helm-v3/001-charts.md" }, + { origFilename: "hips/archives/helm/helm-v3/002-events.md" }, + { origFilename: "hips/archives/helm/helm-v3/003-state.md" }, + { origFilename: "hips/archives/helm/helm-v3/004-hooks.md" }, + { origFilename: "hips/archives/helm/helm-v3/005-plugins.md" }, + { origFilename: "hips/archives/helm/helm-v3/006-repositories.md" }, + { origFilename: "hips/archives/helm/helm-v3/007-security.md" }, + { origFilename: "hips/archives/helm/helm-v3/008-controller.md" }, + { origFilename: "hips/archives/helm/helm-v3/009-package_manager.md" }, + { origFilename: "hips/archives/helm/helm-v3/010-removed.md" }, + { origFilename: "hips/archives/helm/helm-v3/011-user_stories.md" }, + { origFilename: "hips/archives/helm/helm-v3/012-chart-dev-stories.md" }, + { + origFilename: + "hips/archives/helm/helm-v3/research/package-manager-ux.md", + }, + + { origFilename: "art/readme.md", meta: { title: "Styleguide" } }, + + { origFilename: "meeting-notes/2017.txt" }, + { origFilename: "meeting-notes/2018.txt" }, + { origFilename: "meeting-notes/2019.txt" }, + { origFilename: "meeting-notes/2020.txt" }, + { origFilename: "meeting-notes/2021.txt" }, + + // Changes to imported files + { + origFilename: "README.md", + meta: { + sidebar_position: 1, + }, + }, + { + origFilename: "SECURITY.md", + meta: { + sidebar_label: "Helm Security", + }, + }, + { + origFilename: "governance/README.md", + meta: { + sidebar_label: "Governance", + title: "Governance Introduction", + // The frontmatter id key should match the id in community/governance/_category_.json + // in order for this file to be the category landing page. + // We only need this if we want to keep the other imported file's original filepath + // as governance/governance.md. Because a filename matching it's category is the + // default landing page for that category (then index.md/x, then README), unless + // overridden by an id. + // See: https://docusaurus.io/docs/3.8.1/sidebar/autogenerated#category-index-convention + id: "helm-governance", + // Make this the last item + sidebar_position: 9, + }, + }, + { + origFilename: "governance/governance.md", + meta: { + sidebar_label: "Rules", + title: "Governance Rules", + slug: "governance", + }, + }, + ], + // Exceptions for specific files/links → force target href + // Keys are source filenames; inner keys are original hrefs; values are desired hrefs + linkExceptions: { + "README.md": { + "https://github.com/helm/community/tree/main/art": "/community/art", + }, + "governance/README.md": { + "governance.md": "/community/governance/governance", + "../MAINTAINERS.md": "/community/MAINTAINERS", + }, + "hips/hip-0005.md": { + "https://github.com/helm/community/blob/master/governance/governance.md": + "/community/governance/governance", + }, + "hips/hip-0007.md": { + "https://github.com/helm/community/blob/master/governance/governance.md": + "/community/governance/governance", + // To-do: is there a way to import maintainer-groups.yaml into docusaurus? + "../maintainer-groups.yaml": + "https://github.com/helm/community/blob/main/maintainer-groups.yaml", + }, + "hips/hip-0009.md": { + "../security.md": "../SECURITY.md", + }, + "hips/hip-0012.md": { + "https://github.com/helm/community/blob/main/user-profiles.md": + "/community/user-profiles", + }, + "hips/hip-0014.md": { + "https://github.com/helm/community/tree/main/governance": + "/community/governance/governance", + // To-do: is there a way to import maintainer-groups.yaml into docusaurus? + "https://github.com/helm/community/blob/main/Teams.md": + "https://github.com/helm/community/blob/main/maintainer-groups.yaml", + }, + "hips/hip-0025.md": { + "https://github.com/helm/community/blob/main/user-profiles.md": + "/community/user-profiles", + }, + "hips/hip-0026.md": { + "https://github.com/helm/community/blob/main/hips/hip-0012.md": + "/community/hips/hip-0012", + "https://github.com/helm/community/blob/main/hips/archives/helm/distributed-search.md": + "/community/hips/archives/helm/distributed-search", + }, + "hips/archives/monocular/1.0-improvements.md": { + "https://github.com/helm/community/blob/master/proposals/distributed-search.md": + "/community/hips/archives/helm/distributed-search", + }, + // To-do: fix these broken links upstream + "SECURITY.md": { + // Anchors present in source links (eg, #how-can-i-help) will be appended automatically + "README.md": "/community", + }, + "hips/archives/helm/helm-v3/000-helm-v3.md": { + "../../../user-profiles.md": "../../../../user-profiles.md", + }, + "hips/archives/helm/helm-v3/011-user_stories.md": { + "../user-profiles.md": "../../../../user-profiles.md", + }, + }, + }, +}; + +// Derive helpers from community docs configuration +const { remoteDocPaths, metaByPath, slugByPath } = deriveHelpers( + customFields.communityDocs.remoteDocs +); +const linkExceptions = customFields.communityDocs.linkExceptions; + /** @type {import('@docusaurus/types').Config} */ const config = { title: "Helm", tagline: "The package manager for Kubernetes", favicon: "img/favicon.ico", + customFields: customFields, + // Future flags, see https://docusaurus.io/docs/api/docusaurus-config#future future: { v4: true, // Improve compatibility with the upcoming Docusaurus v4 @@ -150,10 +339,37 @@ const config = { routeBasePath: "community", sidebarPath: "./sidebars_community.js", editLocalizedFiles: true, - editUrl: "https://github.com/helm/helm-www/blob/main/", + editUrl: createCommunityEditUrl(remoteDocPaths), numberPrefixParser: false, }, ], + [ + "docusaurus-plugin-remote-content", + { + name: "community", + sourceBaseUrl: + "https://raw.githubusercontent.com/helm/community/refs/heads/main/", + outDir: "community", + documents: remoteDocPaths, + // Set to true since we commit files to Git and performCleanup: false prevents deletion + noRuntimeDownloads: true, + // Must be false to prevent files being deleted between i18n locale builds + // See: https://github.com/rdilweb/docusaurus-plugin-remote-content/issues/98 + performCleanup: false, + modifyContent(filename, content) { + const transformed = transformImportedContent( + filename, + content, + metaByPath, + slugByPath, + linkExceptions + ); + + // transformImportedContent now returns an object with content and optionally filename + return transformed; + }, + }, + ], ], themeConfig: diff --git a/package.json b/package.json index e5fe54e361..ff000faf30 100644 --- a/package.json +++ b/package.json @@ -13,7 +13,9 @@ "write-translations": "docusaurus write-translations", "write-heading-ids": "docusaurus write-heading-ids", "migrate:v2": "node scripts/migrate-v2-docs.js", - "migrate:v3": "node scripts/migrate-v3-docs.js" + "migrate:v3": "node scripts/migrate-v3-docs.js", + "download-remote-community": "docusaurus download-remote-community", + "clear-remote-community": "docusaurus clear-remote-community" }, "dependencies": { "@docusaurus/core": "3.9.1", @@ -21,6 +23,7 @@ "@mdx-js/react": "^3.0.0", "@octokit/rest": "^22.0.1", "clsx": "^2.0.0", + "docusaurus-plugin-remote-content": "^4.0.0", "js-yaml": "^4.1.1", "ora": "^9.0.0", "prism-react-renderer": "^2.3.0", diff --git a/src/utils/communityDocsConfig.js b/src/utils/communityDocsConfig.js new file mode 100644 index 0000000000..d21d07d741 --- /dev/null +++ b/src/utils/communityDocsConfig.js @@ -0,0 +1,37 @@ +// Derive helpers from the community remote docs configuration +function deriveHelpers(communityRemoteDocs) { + const remoteDocPaths = communityRemoteDocs.map((d) => d.origFilename); + const metaByPath = communityRemoteDocs.reduce((acc, d) => { + if (d.meta) acc[d.origFilename] = d.meta; + return acc; + }, Object.create(null)); + const slugByPath = communityRemoteDocs.reduce((acc, d) => { + if (d.meta?.slug) acc[d.origFilename] = d.meta.slug; + return acc; + }, Object.create(null)); + + return { remoteDocPaths, metaByPath, slugByPath }; +} + +// Edit URL function for community docs plugin +function createCommunityEditUrl(remoteDocPaths) { + return ({ versionDocsDirPath, docPath, locale }) => { + const parts = docPath.split("/"); + const maybeLocale = parts[0]; + const localeStrippedPath = + locale && maybeLocale === locale + ? parts.slice(1).join("/") + : docPath; + + const isRemote = remoteDocPaths.includes(localeStrippedPath); + if (isRemote) { + return `https://github.com/helm/community/edit/main/${localeStrippedPath}`; + } + return `https://github.com/helm/helm-www/edit/main/${versionDocsDirPath}/${docPath}`; + }; +} + +module.exports = { + deriveHelpers, + createCommunityEditUrl, +}; diff --git a/src/utils/communityDocsTransforms.js b/src/utils/communityDocsTransforms.js new file mode 100644 index 0000000000..19aad6fb0c --- /dev/null +++ b/src/utils/communityDocsTransforms.js @@ -0,0 +1,374 @@ +const path = require("path"); +const yaml = require("js-yaml"); + +// Parse existing frontmatter and content +function parseFrontMatterAndContent(rawContent) { + const frontMatterRegex = /^---\n([\s\S]*?)\n---\n([\s\S]*)$/; + const match = rawContent.match(frontMatterRegex); + + if (match) { + const frontMatterStr = match[1]; + const content = match[2]; + + try { + // Use js-yaml to parse frontmatter properly + const frontMatter = yaml.load(frontMatterStr) || {}; + return { frontMatter, content }; + } catch (e) { + console.warn(`Failed to parse frontmatter YAML: ${e.message}`); + return { frontMatter: {}, content: rawContent }; + } + } + + return { frontMatter: {}, content: rawContent }; +} + +// Extract H1 title from content +function extractH1Title(content) { + const h1Match = content.match(/^\s*#\s+([^\n]+)\n/); + return h1Match ? h1Match[1].trim() : null; +} + +// Remove H1 from content (including the newline) +function stripH1(content) { + // This removes the H1 and its trailing newline, but preserves any blank lines after it + return content.replace(/^\s*#\s+[^\n]+\n/, ""); +} + +// Build front matter from merged meta +function buildFrontMatter(meta) { + if (!meta || Object.keys(meta).length === 0) return ""; + + // Filter out null/empty values + const cleanMeta = {}; + for (const [key, value] of Object.entries(meta)) { + if (value != null && value !== "") { + cleanMeta[key] = value; + } + } + + if (Object.keys(cleanMeta).length === 0) return ""; + + // Use js-yaml to properly dump the frontmatter + // This handles special characters, arrays, etc. correctly + const yamlStr = yaml.dump(cleanMeta, { + lineWidth: -1, // Don't wrap long lines + quotingType: '"', // Use double quotes when needed + forceQuotes: false, // Only quote when necessary + }); + + return `---\n${yamlStr}---\n\n`; +} + +// Resolve relative link target against current file +function resolveCanonicalTargetPath(currentFilePath, hrefPath) { + const currentDir = path.posix.dirname(currentFilePath); + return path.posix.normalize(path.posix.join(currentDir, hrefPath)); +} + +// Helper to process a link href (used by both inline and reference links) +function processLinkHref(filename, href, linkExceptions, slugByPath) { + // Don't process anchors or mailto + if (href.startsWith("#") || href.startsWith("mailto:")) { + return href; + } + + const m = href.match(/^([^?#]+)(\?[^#]*)?(#.*)?$/); + if (!m) return href; + const [, pathPart, queryPart = "", hashPart = ""] = m; + + // Check file-specific exceptions (works for both absolute and relative URLs) + const fileExceptions = linkExceptions[filename]; + if ( + fileExceptions && + Object.prototype.hasOwnProperty.call(fileExceptions, pathPart) + ) { + const forced = fileExceptions[pathPart]; + return `${forced}${queryPart}${hashPart}`; + } + + // Otherwise, return the link as-is (don't strip .md or transform paths) + // Since we're keeping the same file structure, internal links should just work + return href; +} + +// Rewrite relative markdown links using exceptions/slug when available, otherwise strip .md/.mdx +function rewriteMarkdownLinks(filename, content, linkExceptions, slugByPath) { + // First, handle inline links: [text](url) + const inlineLinkRe = /!?\[([^\]]+)\]\(([^)\s]+(?:\s+"[^"]*")?)\)/g; + + content = content.replace(inlineLinkRe, (full, text, hrefRaw) => { + if (full.startsWith("!")) return full; // image + + const mTitle = hrefRaw.match(/^([^\s]+)(?:\s+"[^"]*")?$/); + const href = mTitle ? mTitle[1] : hrefRaw; + + const processedHref = processLinkHref(filename, href, linkExceptions, slugByPath); + + // Reconstruct with title if present + if (mTitle && mTitle[0] !== mTitle[1]) { + const title = mTitle[0].substring(mTitle[1].length); + return `[${text}](${processedHref}${title})`; + } + return `[${text}](${processedHref})`; + }); + + // Handle angle-bracket links: + const angleBracketLinkRe = /<(https?:\/\/[^>]+)>/g; + + content = content.replace(angleBracketLinkRe, (full, url) => { + const processedUrl = processLinkHref(filename, url, linkExceptions, slugByPath); + // If the URL was transformed, convert to markdown link format + if (processedUrl !== url && !processedUrl.startsWith('http')) { + return `[${processedUrl}](${processedUrl})`; + } + return `<${processedUrl}>`; + }); + + // Then, handle reference link definitions: [ref]: url + const refLinkDefRe = /^\[([^\]]+)\]:\s*(.+)$/gm; + + content = content.replace(refLinkDefRe, (full, ref, url) => { + // Process the URL part (handle angle brackets in reference definitions too) + let cleanUrl = url.trim(); + let isAngleBracket = false; + + if (cleanUrl.startsWith('<') && cleanUrl.endsWith('>')) { + cleanUrl = cleanUrl.slice(1, -1); + isAngleBracket = true; + } + + const processedUrl = processLinkHref(filename, cleanUrl, linkExceptions, slugByPath); + + // Preserve angle brackets if they were there and URL wasn't transformed to internal link + if (isAngleBracket && processedUrl.startsWith('http')) { + return `[${ref}]: <${processedUrl}>`; + } + return `[${ref}]: ${processedUrl}`; + }); + + return content; +} + +// Add import notice header +function addImportNotice(filename) { + const sourceUrl = `https://github.com/helm/community/blob/main/${filename}`; + + return ` +`; // Removed extra newline here +} + +// Format HIP sidebar_label with number prefix +function formatHipSidebarLabel(meta, originalFrontmatter, filename) { + // Check if this is a HIP file (has hip field in original frontmatter) + const isHip = filename.startsWith('hips/') && originalFrontmatter && originalFrontmatter.hip; + + if (isHip && originalFrontmatter.hip && meta.title) { + // Format hip number with leading zeros (4 digits) + const hipNum = String(originalFrontmatter.hip).padStart(4, '0'); + // Add sidebar_label with HIP number prefix + meta.sidebar_label = `${hipNum}: ${meta.title}`; + } + + return meta; +} + +// Create markdown table from HIP frontmatter +function createHipFrontmatterTable(originalFrontmatter, filename) { + // Only create table for HIP files + if (!filename.startsWith('hips/') || !originalFrontmatter.hip) { + return ''; + } + + // Define which fields to show and their display names + // Order matches HIP-0001 specification + const hipFields = [ + { key: 'hip', label: 'HIP' }, + { key: 'title', label: 'Title' }, + { key: 'authors', label: 'Author(s)' }, + { key: 'created', label: 'Created' }, + { key: 'type', label: 'Type' }, + { key: 'status', label: 'Status' }, + { key: 'helm-version', label: 'Helm Version' }, // optional + { key: 'requires', label: 'Requires' }, // optional + { key: 'replaces', label: 'Replaces' }, // optional + { key: 'superseded-by', label: 'Superseded by' }, // optional + ]; + + // Collect fields that have values + const fieldsWithValues = []; + const values = []; + + for (const field of hipFields) { + const value = originalFrontmatter[field.key]; + if (value !== undefined && value !== null && value !== '') { + fieldsWithValues.push(field); + + let displayValue; + // Handle arrays (like authors) + if (Array.isArray(value)) { + displayValue = value.join(', '); + } else { + displayValue = String(value); + } + + // Escape pipe characters in values + displayValue = displayValue.replace(/\|/g, '\\|'); + values.push(displayValue); + } + } + + if (fieldsWithValues.length === 0) { + return ''; + } + + // Build header row with field names + const headerRow = '| ' + fieldsWithValues.map(f => `**${f.label}**`).join(' | ') + ' |'; + + // Build separator row with correct number of columns + const separatorRow = '|' + fieldsWithValues.map(() => '---').join('|') + '|'; + + // Build data row with values + const dataRow = '| ' + values.join(' | ') + ' |'; + + return '\n' + headerRow + '\n' + separatorRow + '\n' + dataRow + '\n\n'; +} + +// Extract title from .txt file (handles both Markdown and underline-style headers) +function extractTxtTitle(content) { + // First try markdown-style H1 + const h1Match = content.match(/^\s*#\s+([^\n]+)\n/); + if (h1Match) return { title: h1Match[1].trim(), contentWithoutTitle: content.replace(/^\s*#\s+[^\n]+\n/, "") }; + + // Then try underline-style header (text followed by ===) + const underlineMatch = content.match(/^\s*([^\n]+)\n=+\n/); + if (underlineMatch) { + return { + title: underlineMatch[1].trim(), + contentWithoutTitle: content.replace(/^\s*[^\n]+\n=+\n/, "") + }; + } + + return { title: null, contentWithoutTitle: content }; +} + +// Compose transforms per file +function transformImportedContent(filename, rawContent, metaByPath, slugByPath, linkExceptions) { + // Check if this is a .txt file + const isTxtFile = filename.endsWith('.txt'); + + // For .txt files, handle them specially + if (isTxtFile) { + // Extract title from the content + const { title, contentWithoutTitle } = extractTxtTitle(rawContent); + + // Build metadata + const meta = { + ...(metaByPath[filename] || {}), + ...(title ? { title } : {}) + }; + + // Build frontmatter + const fm = buildFrontMatter(meta); + + // Add import notice + const importNotice = addImportNotice(filename); + + // Wrap the content in a code block + const wrappedContent = `\`\`\`txt\n${contentWithoutTitle.trim()}\n\`\`\`\n`; + + // Return transformed content with new filename + return { + content: `${fm}${importNotice}\n${wrappedContent}`, + filename: filename.replace(/\.txt$/, '.md') + }; + } + + // Original logic for non-.txt files + // 1) Parse existing frontmatter and content + const { frontMatter: existingFrontMatter, content: bodyWithH1 } = parseFrontMatterAndContent(rawContent); + + // Keep original frontmatter for HIP table + const originalFrontmatter = { ...existingFrontMatter }; + + // 2) Extract H1 title and remove it from content + const h1Title = extractH1Title(bodyWithH1); + const bodyWithoutH1 = stripH1(bodyWithH1); + + // 3) For HIPs, remove HIP-specific fields from merged frontmatter (they'll go in the table) + const hipSpecificFields = [ + 'hip', + 'authors', + 'created', + 'type', + 'status', + 'helm-version', + 'requires', + 'replaces', + 'superseded-by' + ]; + const isHip = filename.startsWith('hips/') && existingFrontMatter.hip; + + let mergedMeta; + if (isHip) { + // For HIPs, filter out HIP-specific fields from frontmatter + const filteredExisting = {}; + for (const [key, value] of Object.entries(existingFrontMatter)) { + if (!hipSpecificFields.includes(key)) { + filteredExisting[key] = value; + } + } + mergedMeta = { + ...filteredExisting, + ...metaByPath[filename] || {} + }; + } else { + // For non-HIPs, keep everything + mergedMeta = { + ...existingFrontMatter, + ...metaByPath[filename] || {} + }; + } + + // Add extracted H1 as title if no title is specified + if (h1Title && !mergedMeta.title) { + mergedMeta.title = h1Title; + } + + // 4) Apply HIP-specific sidebar_label formatting + formatHipSidebarLabel(mergedMeta, originalFrontmatter, filename); + + // 5) Build frontmatter (will always exist since we extract H1 or have config) + const fm = buildFrontMatter(mergedMeta); + + // 6) Add import notice after frontmatter + const importNotice = addImportNotice(filename); + + // 7) Create HIP frontmatter table if applicable + const hipTable = createHipFrontmatterTable(originalFrontmatter, filename); + + // 8) Compose final content: frontmatter + import notice + HIP table + body + let content = `${fm}${importNotice}${hipTable}${bodyWithoutH1}`; + + // 9) Rewrite links + content = rewriteMarkdownLinks(filename, content, linkExceptions, slugByPath); + + // Return as object for consistency (even for non-.txt files) + return { content }; +} + +module.exports = { + parseFrontMatterAndContent, + extractH1Title, + stripH1, + buildFrontMatter, + resolveCanonicalTargetPath, + rewriteMarkdownLinks, + transformImportedContent, +}; diff --git a/yarn.lock b/yarn.lock index 10210d8d99..d46b652a41 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1997,6 +1997,18 @@ dependencies: "@hapi/hoek" "^9.0.0" +"@isaacs/cliui@^8.0.2": + version "8.0.2" + resolved "https://registry.yarnpkg.com/@isaacs/cliui/-/cliui-8.0.2.tgz#b37667b7bc181c168782259bab42474fbf52b550" + integrity sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA== + dependencies: + string-width "^5.1.2" + string-width-cjs "npm:string-width@^4.2.0" + strip-ansi "^7.0.1" + strip-ansi-cjs "npm:strip-ansi@^6.0.1" + wrap-ansi "^8.1.0" + wrap-ansi-cjs "npm:wrap-ansi@^7.0.0" + "@jest/schemas@^29.6.3": version "29.6.3" resolved "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz" @@ -2277,6 +2289,11 @@ resolved "https://registry.npmjs.org/@opentelemetry/api/-/api-1.9.0.tgz" integrity sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg== +"@pkgjs/parseargs@^0.11.0": + version "0.11.0" + resolved "https://registry.yarnpkg.com/@pkgjs/parseargs/-/parseargs-0.11.0.tgz#a77ea742fab25775145434eb1d2328cf5013ac33" + integrity sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg== + "@pnpm/config.env-replace@^1.1.0": version "1.1.0" resolved "https://registry.npmjs.org/@pnpm/config.env-replace/-/config.env-replace-1.1.0.tgz" @@ -3148,6 +3165,11 @@ astring@^1.8.0: resolved "https://registry.npmjs.org/astring/-/astring-1.9.0.tgz" integrity sha512-LElXdjswlqjWrPpJFg1Fx4wpkOCxj1TDHlSV4PlaRxHGWko024xICaa97ZkMfs6DRKlCguiAI+rbXv5GWwXIkg== +asynckit@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" + integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== + autoprefixer@^10.4.19, autoprefixer@^10.4.21: version "10.4.21" resolved "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.21.tgz" @@ -3160,6 +3182,15 @@ autoprefixer@^10.4.19, autoprefixer@^10.4.21: picocolors "^1.1.1" postcss-value-parser "^4.2.0" +axios@^1.6.0: + version "1.13.2" + resolved "https://registry.yarnpkg.com/axios/-/axios-1.13.2.tgz#9ada120b7b5ab24509553ec3e40123521117f687" + integrity sha512-VPk9ebNqPcy5lRGuSlKx752IlDatOjT9paPlm8A7yOuW2Fbvp4X3JznJtT4f0GzGLLiWE9W8onz51SqLYwzGaA== + dependencies: + follow-redirects "^1.15.6" + form-data "^4.0.4" + proxy-from-env "^1.1.0" + babel-loader@^9.2.1: version "9.2.1" resolved "https://registry.npmjs.org/babel-loader/-/babel-loader-9.2.1.tgz" @@ -3308,6 +3339,13 @@ brace-expansion@^1.1.7: balanced-match "^1.0.0" concat-map "0.0.1" +brace-expansion@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.2.tgz#54fc53237a613d854c7bd37463aad17df87214e7" + integrity sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ== + dependencies: + balanced-match "^1.0.0" + braces@^3.0.3, braces@~3.0.2: version "3.0.3" resolved "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz" @@ -3607,6 +3645,13 @@ combine-promises@^1.1.0: resolved "https://registry.npmjs.org/combine-promises/-/combine-promises-1.2.0.tgz" integrity sha512-VcQB1ziGD0NXrhKxiwyNbCDmRzs/OShMs2GqW2DlU2A/Sd0nQxE1oWDAE5O0ygSx5mgQOn9eIFh7yKPgFRVkPQ== +combined-stream@^1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" + integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== + dependencies: + delayed-stream "~1.0.0" + comma-separated-tokens@^2.0.0: version "2.0.3" resolved "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz" @@ -3772,7 +3817,7 @@ cosmiconfig@^8.1.3, cosmiconfig@^8.3.5: parse-json "^5.2.0" path-type "^4.0.0" -cross-spawn@^7.0.3: +cross-spawn@^7.0.3, cross-spawn@^7.0.6: version "7.0.6" resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz" integrity sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA== @@ -4086,6 +4131,11 @@ define-properties@^1.2.1: has-property-descriptors "^1.0.0" object-keys "^1.1.1" +delayed-stream@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" + integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== + depd@2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz" @@ -4140,6 +4190,16 @@ dns-packet@^5.2.2: dependencies: "@leichtgewicht/ip-codec" "^2.0.1" +docusaurus-plugin-remote-content@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/docusaurus-plugin-remote-content/-/docusaurus-plugin-remote-content-4.0.0.tgz#2e8980a5ec7be543eec9f715624bc81cd92e45be" + integrity sha512-e+gBmNdgOwA+7u6O2kk/u1w4ET23j8OIF6OiOWV6EoKHJJ/w/8U5smkHNlrQC3hQOltxE2NRC1jbsG7wfS+d3w== + dependencies: + axios "^1.6.0" + picocolors "^1.0.0" + pretty-ms "^7.0.1" + rimraf "^5.0.5" + dom-converter@^0.2.0: version "0.2.0" resolved "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz" @@ -4333,6 +4393,16 @@ es-object-atoms@^1.0.0, es-object-atoms@^1.1.1: dependencies: es-errors "^1.3.0" +es-set-tostringtag@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz#f31dbbe0c183b00a6d26eb6325c810c0fd18bd4d" + integrity sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA== + dependencies: + es-errors "^1.3.0" + get-intrinsic "^1.2.6" + has-tostringtag "^1.0.2" + hasown "^2.0.2" + esast-util-from-estree@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/esast-util-from-estree/-/esast-util-from-estree-2.0.0.tgz" @@ -4691,16 +4761,35 @@ flat@^5.0.2: resolved "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz" integrity sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ== -follow-redirects@^1.0.0: +follow-redirects@^1.0.0, follow-redirects@^1.15.6: version "1.15.11" resolved "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.11.tgz" integrity sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ== +foreground-child@^3.1.0: + version "3.3.1" + resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-3.3.1.tgz#32e8e9ed1b68a3497befb9ac2b6adf92a638576f" + integrity sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw== + dependencies: + cross-spawn "^7.0.6" + signal-exit "^4.0.1" + form-data-encoder@^2.1.2: version "2.1.4" resolved "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-2.1.4.tgz" integrity sha512-yDYSgNMraqvnxiEXO4hi88+YZxaHC6QKzb5N84iRCTDeRO7ZALpir/lVmf/uXUhnwUr2O4HU8s/n6x+yNjQkHw== +form-data@^4.0.4: + version "4.0.5" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.5.tgz#b49e48858045ff4cbf6b03e1805cebcad3679053" + integrity sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.8" + es-set-tostringtag "^2.1.0" + hasown "^2.0.2" + mime-types "^2.1.12" + format@^0.2.0: version "0.2.2" resolved "https://registry.npmjs.org/format/-/format-0.2.2.tgz" @@ -4750,7 +4839,7 @@ get-east-asian-width@^1.3.0: resolved "https://registry.yarnpkg.com/get-east-asian-width/-/get-east-asian-width-1.4.0.tgz#9bc4caa131702b4b61729cb7e42735bc550c9ee6" integrity sha512-QZjmEOC+IT1uk6Rx0sX22V6uHWVwbdbxf1faPqJ1QhLdGgsRGCZoyaQBm/piRdJy/D2um6hM1UP7ZEeQ4EkP+Q== -get-intrinsic@^1.2.4, get-intrinsic@^1.2.5, get-intrinsic@^1.3.0: +get-intrinsic@^1.2.4, get-intrinsic@^1.2.5, get-intrinsic@^1.2.6, get-intrinsic@^1.3.0: version "1.3.0" resolved "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz" integrity sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ== @@ -4813,6 +4902,18 @@ glob-to-regexp@^0.4.1: resolved "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz" integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw== +glob@^10.3.7: + version "10.5.0" + resolved "https://registry.yarnpkg.com/glob/-/glob-10.5.0.tgz#8ec0355919cd3338c28428a23d4f24ecc5fe738c" + integrity sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg== + dependencies: + foreground-child "^3.1.0" + jackspeak "^3.1.2" + minimatch "^9.0.4" + minipass "^7.1.2" + package-json-from-dist "^1.0.0" + path-scurry "^1.11.1" + global-dirs@^3.0.0: version "3.0.1" resolved "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.1.tgz" @@ -4909,11 +5010,18 @@ has-property-descriptors@^1.0.0, has-property-descriptors@^1.0.2: dependencies: es-define-property "^1.0.0" -has-symbols@^1.1.0: +has-symbols@^1.0.3, has-symbols@^1.1.0: version "1.1.0" resolved "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz" integrity sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ== +has-tostringtag@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.2.tgz#2cdc42d40bef2e5b4eeab7c01a73c54ce7ab5abc" + integrity sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw== + dependencies: + has-symbols "^1.0.3" + has-yarn@^3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/has-yarn/-/has-yarn-3.0.0.tgz" @@ -5554,6 +5662,15 @@ isobject@^3.0.1: resolved "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz" integrity sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg== +jackspeak@^3.1.2: + version "3.4.3" + resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-3.4.3.tgz#8833a9d89ab4acde6188942bd1c53b6390ed5a8a" + integrity sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw== + dependencies: + "@isaacs/cliui" "^8.0.2" + optionalDependencies: + "@pkgjs/parseargs" "^0.11.0" + jest-util@^29.7.0: version "29.7.0" resolved "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz" @@ -5811,6 +5928,11 @@ lowercase-keys@^3.0.0: resolved "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-3.0.0.tgz" integrity sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ== +lru-cache@^10.2.0: + version "10.4.3" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.4.3.tgz#410fc8a17b70e598013df257c2446b7f3383f119" + integrity sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ== + lru-cache@^11.2.1, lru-cache@^11.2.2: version "11.2.2" resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.2.tgz" @@ -6566,7 +6688,7 @@ mime-types@2.1.18: dependencies: mime-db "~1.33.0" -mime-types@^2.1.27, mime-types@~2.1.17, mime-types@~2.1.24, mime-types@~2.1.34: +mime-types@^2.1.12, mime-types@^2.1.27, mime-types@~2.1.17, mime-types@~2.1.24, mime-types@~2.1.34: version "2.1.35" resolved "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz" integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== @@ -6625,11 +6747,23 @@ minimatch@3.1.2: dependencies: brace-expansion "^1.1.7" +minimatch@^9.0.4: + version "9.0.5" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.5.tgz#d74f9dd6b57d83d8e98cfb82133b03978bc929e5" + integrity sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow== + dependencies: + brace-expansion "^2.0.1" + minimist@^1.2.0: version "1.2.8" resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz" integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== +"minipass@^5.0.0 || ^6.0.2 || ^7.0.0", minipass@^7.1.2: + version "7.1.2" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.1.2.tgz#93a9626ce5e5e66bd4db86849e7515e92340a707" + integrity sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw== + mrmime@^2.0.0: version "2.0.1" resolved "https://registry.npmjs.org/mrmime/-/mrmime-2.0.1.tgz" @@ -6895,6 +7029,11 @@ p-timeout@^3.2.0: dependencies: p-finally "^1.0.0" +package-json-from-dist@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz#4f1471a010827a86f94cfd9b0727e36d267de505" + integrity sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw== + package-json@^8.1.0: version "8.1.1" resolved "https://registry.npmjs.org/package-json/-/package-json-8.1.1.tgz" @@ -6943,6 +7082,11 @@ parse-json@^5.2.0: json-parse-even-better-errors "^2.3.0" lines-and-columns "^1.1.6" +parse-ms@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/parse-ms/-/parse-ms-2.1.0.tgz#348565a753d4391fa524029956b172cb7753097d" + integrity sha512-kHt7kzLoS9VBZfUsiKjv43mr91ea+U05EyKkEtqp7vNbHxmaVuEqN7XxeEVnGrMtYOAxGrDElSi96K7EgO1zCA== + parse-numeric-range@^1.3.0: version "1.3.0" resolved "https://registry.npmjs.org/parse-numeric-range/-/parse-numeric-range-1.3.0.tgz" @@ -7003,6 +7147,14 @@ path-parse@^1.0.7: resolved "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz" integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== +path-scurry@^1.11.1: + version "1.11.1" + resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-1.11.1.tgz#7960a668888594a0720b12a911d1a742ab9f11d2" + integrity sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA== + dependencies: + lru-cache "^10.2.0" + minipass "^5.0.0 || ^6.0.2 || ^7.0.0" + path-to-regexp@0.1.12: version "0.1.12" resolved "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz" @@ -7610,6 +7762,13 @@ pretty-error@^4.0.0: lodash "^4.17.20" renderkid "^3.0.0" +pretty-ms@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/pretty-ms/-/pretty-ms-7.0.1.tgz#7d903eaab281f7d8e03c66f867e239dc32fb73e8" + integrity sha512-973driJZvxiGOQ5ONsFhOF/DtzPMOMtgC11kCpUrPGMTgqp2q/1gwzCquocrN33is0VZ5GFHXZYMM9l6h67v2Q== + dependencies: + parse-ms "^2.1.0" + pretty-time@^1.1.0: version "1.1.0" resolved "https://registry.npmjs.org/pretty-time/-/pretty-time-1.1.0.tgz" @@ -7673,6 +7832,11 @@ proxy-addr@~2.0.7: forwarded "0.2.0" ipaddr.js "1.9.1" +proxy-from-env@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" + integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== + punycode@^2.1.0, punycode@^2.3.1: version "2.3.1" resolved "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz" @@ -8142,6 +8306,13 @@ reusify@^1.0.4: resolved "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz" integrity sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw== +rimraf@^5.0.5: + version "5.0.10" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-5.0.10.tgz#23b9843d3dc92db71f96e1a2ce92e39fd2a8221c" + integrity sha512-l0OE8wL34P4nJH/H2ffoaniAokM2qSmrtXHmlpvYr5AVVX8msAyW0l8NVJFDxlSK4u3Uh/f41cQheDVdnYijwQ== + dependencies: + glob "^10.3.7" + rrweb-cssom@^0.8.0: version "0.8.0" resolved "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.8.0.tgz" @@ -8421,7 +8592,7 @@ signal-exit@^3.0.2, signal-exit@^3.0.3: resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz" integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== -signal-exit@^4.1.0: +signal-exit@^4.0.1, signal-exit@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-4.1.0.tgz#952188c1cbd546070e2dd20d0f41c0ae0530cb04" integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw== @@ -8579,6 +8750,15 @@ stdin-discarder@^0.2.2: resolved "https://registry.yarnpkg.com/stdin-discarder/-/stdin-discarder-0.2.2.tgz#390037f44c4ae1a1ae535c5fe38dc3aba8d997be" integrity sha512-UhDfHmA92YAlNnCfhmq0VeNL5bDbiZGg7sZ2IvPsXubGkiNa9EC+tUTsjBRsYUAz87btI6/1wf4XoVvQ3uRnmQ== +"string-width-cjs@npm:string-width@^4.2.0": + version "4.2.3" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" + string-width@^4.1.0, string-width@^4.2.0: version "4.2.3" resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz" @@ -8636,6 +8816,13 @@ stringify-object@^3.3.0: is-obj "^1.0.1" is-regexp "^1.0.0" +"strip-ansi-cjs@npm:strip-ansi@^6.0.1": + version "6.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + strip-ansi@^6.0.0, strip-ansi@^6.0.1: version "6.0.1" resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz" @@ -9329,6 +9516,15 @@ wildcard@^2.0.0, wildcard@^2.0.1: resolved "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz" integrity sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ== +"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + wrap-ansi@^7.0.0: version "7.0.0" resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz" From 256da6d622ddc950493df9fa7fc32c167fa19c4f Mon Sep 17 00:00:00 2001 From: Scott Rigby Date: Sun, 23 Nov 2025 13:39:36 -0500 Subject: [PATCH 3/6] ci(community): add github action for upstream sync - create weekly scheduled workflow with manual trigger - automatically create or update PR with upstream changes - use DCO signoff for helm compliance - label PRs with docs and community tags Signed-off-by: Scott Rigby --- .github/workflows/update-community-docs.yml | 61 +++++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 .github/workflows/update-community-docs.yml diff --git a/.github/workflows/update-community-docs.yml b/.github/workflows/update-community-docs.yml new file mode 100644 index 0000000000..d201403ca7 --- /dev/null +++ b/.github/workflows/update-community-docs.yml @@ -0,0 +1,61 @@ +name: Update Community Documentation + +on: + schedule: + # Run weekly on Mondays at 3 AM UTC + # Adjust frequency as needed - could be nightly: '0 3 * * *' + - cron: '0 3 * * 1' + workflow_dispatch: # Allows manual triggering + +permissions: + contents: write + pull-requests: write + +jobs: + update-community-docs: + runs-on: ubuntu-latest + + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Setup Node.js + uses: actions/setup-node@v4 + with: + node-version-file: '.nvmrc' + cache: 'yarn' + + - name: Install dependencies + run: yarn install --frozen-lockfile + + - name: Update community docs + run: yarn download-remote-community + + - name: Create or Update Pull Request + uses: peter-evans/create-pull-request@v7 + with: + token: ${{ secrets.GITHUB_TOKEN }} + commit-message: 'chore(community): update docs from upstream' + signoff: true + title: 'chore(community): update docs from helm/community' + body: | + ## 🔄 Automated Community Documentation Update + + Updates community documentation from [helm/community](https://github.com/helm/community) repository. + + ### What this does: + - Downloads latest docs from helm/community + - Applies transformations (frontmatter, links, etc.) + - Creates PR if there are changes + + ### Review checklist: + - [ ] Verify docs render correctly with `yarn start` + - [ ] Check that no local files were overwritten + + --- + *This is an automated PR. See `.github/workflows/update-community-docs.yml` for details.* + branch: upstream-community-changes + delete-branch: true + labels: | + docs + community From 2d5118e08cb3ae3016bc4740806c5feddc456638 Mon Sep 17 00:00:00 2001 From: Scott Rigby Date: Sun, 23 Nov 2025 13:44:40 -0500 Subject: [PATCH 4/6] docs: update documentation for community import implementation - document rationale in ARCHITECTURAL_DECISIONS.md - explain plugin configuration and workarounds - add contributor guidelines for community docs - document why files are committed to git - update README.md accordingly Signed-off-by: Scott Rigby --- ARCHITECTURAL_DECISIONS.md | 71 ++++++++++++++++++++++++++++++++++++++ README.md | 20 ++++++++++- 2 files changed, 90 insertions(+), 1 deletion(-) diff --git a/ARCHITECTURAL_DECISIONS.md b/ARCHITECTURAL_DECISIONS.md index f43f976009..f49a4d8ab8 100644 --- a/ARCHITECTURAL_DECISIONS.md +++ b/ARCHITECTURAL_DECISIONS.md @@ -336,6 +336,77 @@ Remove them only after: 2. All redirects are tested and working 3. No rollback scenarios require Hugo functionality +## Community Documentation Import + +### Helm-Specific Requirement + +The Helm project maintains community governance documents in a [separate repository](https://github.com/helm/community) that need to be included in the website as an unversioned documentation section with proper Docusaurus integration. + +### Solution + +Uses [docusaurus-plugin-remote-content](https://github.com/rdilweb/docusaurus-plugin-remote-content) to import and transform content at build time. + +**Architecture:** +- **Multi-instance docs:** Community docs are a separate Docusaurus docs plugin instance with `id: "community"`, creating `/community/*` URLs +- **Content transformation:** Custom functions in `src/utils/communityDocsTransforms.js` handle all content processing +- **Configuration:** Centralized in `docusaurus.config.js` under `customFields.communityDocs` +- **Files committed to Git:** Imported files are tracked in version control to maintain clean git status and avoid complex .gitignore management +- **Build settings:** Uses `performCleanup: false` to prevent file deletion during i18n builds (workaround for [plugin issue #98](https://github.com/rdilweb/docusaurus-plugin-remote-content/issues/98)) + +### Content Transformation Features + +**Import notice headers:** Every imported file gets a warning header indicating it shouldn't be edited directly, with a link to the source file in the helm/community repository. + +**HIP (Helm Improvement Proposal) formatting:** HIP documents get special treatment: +- Metadata fields (hip, authors, created, status, etc.) displayed as a markdown table +- Sidebar labels include HIP number for easy navigation (e.g., "0023: Utilize Server Side Apply") +- Frontmatter cleaned to remove duplicate metadata + +**Plain text file handling:** `.txt` files (like meeting notes) are automatically: +- Converted to `.md` files during import +- Title extracted from content headers +- Content wrapped in code blocks to preserve formatting + +**Link transformations:** Only applied for configured exceptions - most links work as-is since the file structure mirrors the source repository. + +### Why imported files are committed to Git + +The `/community` directory mixes imported files from helm/community with locally-maintained community docs. Committing imported files to Git: + +1. **Avoids complex .gitignore patterns** - No need to maintain a parallel list of which specific files to ignore +2. **Provides clean git status** - Contributors don't see dozens of untracked files during development +3. **Enables offline development** - With `noRuntimeDownloads: true`, `yarn start` works without network access +4. **Simplifies mental model** - All files in `/community` are tracked, regardless of source + +The tradeoff of content duplication is acceptable since these files rarely change structure and the import notices clearly indicate they shouldn't be edited locally. + +### Commands + +- `yarn download-remote-community` - Fetch and transform latest content from helm/community repository +- `yarn clear-remote-community` - Remove imported files (useful for testing) + +### Automated Updates + +A GitHub Action (`.github/workflows/update-community-docs.yml`) runs weekly to: +1. Check for updates in helm/community repository +2. Apply transformations and import changes +3. Create or update a PR if there are changes +4. Skip if an identical PR already exists + +The workflow can also be triggered manually through GitHub Actions UI. + +### For Contributors + +To add new community documents: +1. Add entry to `customFields.communityDocs.remoteDocs` in `docusaurus.config.js` +2. Include optional `meta` field for frontmatter overrides +3. Add link exceptions only if specific links need custom mapping +4. Run `yarn download-remote-community` to test import locally + +To modify transformation logic: +1. Edit `src/utils/communityDocsTransforms.js` for content processing +2. Test changes with `yarn download-remote-community` + ## Netlify Build Caching ### Problem diff --git a/README.md b/README.md index a06c9a8aad..46984a37ab 100755 --- a/README.md +++ b/README.md @@ -36,6 +36,24 @@ Helm v3 documentation is located under `versioned-docs/version-3`. The sidebar f For earlier versions, see the dev-v2 branch of the main Helm repo [here](https://github.com/helm/helm/tree/dev-v2/docs). +### Community Documentation + +The Community section imports content from the [helm/community](https://github.com/helm/community) repository. To manage these imported docs: + +#### Download/Update Community Docs +```bash +yarn download-remote-community +``` +This command fetches the latest community documentation from the helm/community repository and applies transformations for proper integration. + +#### Clear Community Docs +```bash +yarn clear-remote-community +``` +This removes the imported community documentation files (useful before re-importing or for troubleshooting). + +The imported docs configuration is defined in `docusaurus.config.js` under `customFields.communityDocs`. See `ARCHITECTURAL_DECISIONS.md` for details on the implementation. + ### Updating the Helm CLI Reference Docs The documentation for the list of Helm CLI Commands are [exported](https://github.com/helm/helm/blob/a6b2c9e2126753f6f94df231e89b2153c2862764/cmd/helm/root.go#L169) from the main helm project repo and rendered [here on the website](https://helm.sh/docs/helm) as a reference. @@ -190,7 +208,7 @@ For more information about cutting new docs versions, see [Versioning](https://d **We welcome content translations** to our site and our docs, to help expand access to Helm around the world. -Helm.sh supports multiple languages. Please refer to the [Localizing Helm Documentation](/community/localization) for a guide on translating and configuring content for international users. +Helm.sh supports multiple languages. Please refer to the [Localizing Helm Documentation](https://helm.sh/docs/community/localization/) for a guide on translating and configuring content for international users. --- From 8138b955d71949ce61f289e0156131b5f1cb00fc Mon Sep 17 00:00:00 2001 From: Scott Rigby Date: Mon, 24 Nov 2025 00:06:41 -0500 Subject: [PATCH 5/6] Move remote-content community config to a separate config file Signed-off-by: Scott Rigby --- docusaurus.config.js | 233 ++++++------------------------ remote-content_community.js | 167 +++++++++++++++++++++ src/utils/communityDocsConfig.js | 37 ----- src/utils/communityDocsHelpers.js | 74 ++++++++++ 4 files changed, 287 insertions(+), 224 deletions(-) create mode 100644 remote-content_community.js delete mode 100644 src/utils/communityDocsConfig.js create mode 100644 src/utils/communityDocsHelpers.js diff --git a/docusaurus.config.js b/docusaurus.config.js index 4f13f8e21f..f6271811d6 100644 --- a/docusaurus.config.js +++ b/docusaurus.config.js @@ -15,192 +15,23 @@ const normalizedBaseUrl = ? rawBaseUrl : rawBaseUrl + "/"; +// Community documentation configuration +const communityConfig = require("./remote-content_community"); +const { + processConfig, + createEditUrlFunction, +} = require("./src/utils/communityDocsHelpers"); const { transformImportedContent, } = require("./src/utils/communityDocsTransforms"); -const { - deriveHelpers, - createCommunityEditUrl, -} = require("./src/utils/communityDocsConfig"); - -// Custom fields configuration -const customFields = { - communityDocs: { - // Single source of truth: remote docs with optional front matter additions - remoteDocs: [ - // No changes - { origFilename: "blog-topics.md" }, - { origFilename: "code-of-conduct.md" }, - { origFilename: "communication.md" }, - { origFilename: "MAINTAINERS.md" }, - { origFilename: "incubator.md" }, - { origFilename: "stable-repo-charts-new-locations.md" }, - { origFilename: "user-profiles.md" }, - - { origFilename: "hips/README.md" }, - { origFilename: "hips/hip-0001.md" }, - { origFilename: "hips/hip-0002.md" }, - { origFilename: "hips/hip-0003.md" }, - { origFilename: "hips/hip-0004.md" }, - { origFilename: "hips/hip-0005.md" }, - { origFilename: "hips/hip-0006.md" }, - { origFilename: "hips/hip-0007.md" }, - { origFilename: "hips/hip-0008.md" }, - { origFilename: "hips/hip-0009.md" }, - { origFilename: "hips/hip-0010.md" }, - { origFilename: "hips/hip-0011.md" }, - { origFilename: "hips/hip-0012.md" }, - { origFilename: "hips/hip-0014.md" }, - { origFilename: "hips/hip-0015.md" }, - { origFilename: "hips/hip-0016.md" }, - { origFilename: "hips/hip-0017.md" }, - { origFilename: "hips/hip-0018.md" }, - { origFilename: "hips/hip-0019.md" }, - { origFilename: "hips/hip-0020.md" }, - { origFilename: "hips/hip-0021.md" }, - { origFilename: "hips/hip-0022.md" }, - { origFilename: "hips/hip-0023.md" }, - { origFilename: "hips/hip-0024.md" }, - { origFilename: "hips/hip-0025.md" }, - { origFilename: "hips/hip-0026.md" }, - - { origFilename: "hips/archives/README.md" }, - { origFilename: "hips/archives/monocular/1.0-improvements.md" }, - { origFilename: "hips/archives/helm/distributed-search.md" }, - { origFilename: "hips/archives/helm/helm-v3/000-helm-v3.md" }, - { origFilename: "hips/archives/helm/helm-v3/001-charts.md" }, - { origFilename: "hips/archives/helm/helm-v3/002-events.md" }, - { origFilename: "hips/archives/helm/helm-v3/003-state.md" }, - { origFilename: "hips/archives/helm/helm-v3/004-hooks.md" }, - { origFilename: "hips/archives/helm/helm-v3/005-plugins.md" }, - { origFilename: "hips/archives/helm/helm-v3/006-repositories.md" }, - { origFilename: "hips/archives/helm/helm-v3/007-security.md" }, - { origFilename: "hips/archives/helm/helm-v3/008-controller.md" }, - { origFilename: "hips/archives/helm/helm-v3/009-package_manager.md" }, - { origFilename: "hips/archives/helm/helm-v3/010-removed.md" }, - { origFilename: "hips/archives/helm/helm-v3/011-user_stories.md" }, - { origFilename: "hips/archives/helm/helm-v3/012-chart-dev-stories.md" }, - { - origFilename: - "hips/archives/helm/helm-v3/research/package-manager-ux.md", - }, - - { origFilename: "art/readme.md", meta: { title: "Styleguide" } }, - - { origFilename: "meeting-notes/2017.txt" }, - { origFilename: "meeting-notes/2018.txt" }, - { origFilename: "meeting-notes/2019.txt" }, - { origFilename: "meeting-notes/2020.txt" }, - { origFilename: "meeting-notes/2021.txt" }, - - // Changes to imported files - { - origFilename: "README.md", - meta: { - sidebar_position: 1, - }, - }, - { - origFilename: "SECURITY.md", - meta: { - sidebar_label: "Helm Security", - }, - }, - { - origFilename: "governance/README.md", - meta: { - sidebar_label: "Governance", - title: "Governance Introduction", - // The frontmatter id key should match the id in community/governance/_category_.json - // in order for this file to be the category landing page. - // We only need this if we want to keep the other imported file's original filepath - // as governance/governance.md. Because a filename matching it's category is the - // default landing page for that category (then index.md/x, then README), unless - // overridden by an id. - // See: https://docusaurus.io/docs/3.8.1/sidebar/autogenerated#category-index-convention - id: "helm-governance", - // Make this the last item - sidebar_position: 9, - }, - }, - { - origFilename: "governance/governance.md", - meta: { - sidebar_label: "Rules", - title: "Governance Rules", - slug: "governance", - }, - }, - ], - // Exceptions for specific files/links → force target href - // Keys are source filenames; inner keys are original hrefs; values are desired hrefs - linkExceptions: { - "README.md": { - "https://github.com/helm/community/tree/main/art": "/community/art", - }, - "governance/README.md": { - "governance.md": "/community/governance/governance", - "../MAINTAINERS.md": "/community/MAINTAINERS", - }, - "hips/hip-0005.md": { - "https://github.com/helm/community/blob/master/governance/governance.md": - "/community/governance/governance", - }, - "hips/hip-0007.md": { - "https://github.com/helm/community/blob/master/governance/governance.md": - "/community/governance/governance", - // To-do: is there a way to import maintainer-groups.yaml into docusaurus? - "../maintainer-groups.yaml": - "https://github.com/helm/community/blob/main/maintainer-groups.yaml", - }, - "hips/hip-0009.md": { - "../security.md": "../SECURITY.md", - }, - "hips/hip-0012.md": { - "https://github.com/helm/community/blob/main/user-profiles.md": - "/community/user-profiles", - }, - "hips/hip-0014.md": { - "https://github.com/helm/community/tree/main/governance": - "/community/governance/governance", - // To-do: is there a way to import maintainer-groups.yaml into docusaurus? - "https://github.com/helm/community/blob/main/Teams.md": - "https://github.com/helm/community/blob/main/maintainer-groups.yaml", - }, - "hips/hip-0025.md": { - "https://github.com/helm/community/blob/main/user-profiles.md": - "/community/user-profiles", - }, - "hips/hip-0026.md": { - "https://github.com/helm/community/blob/main/hips/hip-0012.md": - "/community/hips/hip-0012", - "https://github.com/helm/community/blob/main/hips/archives/helm/distributed-search.md": - "/community/hips/archives/helm/distributed-search", - }, - "hips/archives/monocular/1.0-improvements.md": { - "https://github.com/helm/community/blob/master/proposals/distributed-search.md": - "/community/hips/archives/helm/distributed-search", - }, - // To-do: fix these broken links upstream - "SECURITY.md": { - // Anchors present in source links (eg, #how-can-i-help) will be appended automatically - "README.md": "/community", - }, - "hips/archives/helm/helm-v3/000-helm-v3.md": { - "../../../user-profiles.md": "../../../../user-profiles.md", - }, - "hips/archives/helm/helm-v3/011-user_stories.md": { - "../user-profiles.md": "../../../../user-profiles.md", - }, - }, - }, -}; -// Derive helpers from community docs configuration -const { remoteDocPaths, metaByPath, slugByPath } = deriveHelpers( - customFields.communityDocs.remoteDocs -); -const linkExceptions = customFields.communityDocs.linkExceptions; +// Process the community docs configuration +const { + documents: remoteDocPaths, + metaByPath, + slugByPath, + linkExceptions, +} = processConfig(communityConfig); /** @type {import('@docusaurus/types').Config} */ const config = { @@ -208,8 +39,6 @@ const config = { tagline: "The package manager for Kubernetes", favicon: "img/favicon.ico", - customFields: customFields, - // Future flags, see https://docusaurus.io/docs/api/docusaurus-config#future future: { v4: true, // Improve compatibility with the upcoming Docusaurus v4 @@ -339,7 +168,7 @@ const config = { routeBasePath: "community", sidebarPath: "./sidebars_community.js", editLocalizedFiles: true, - editUrl: createCommunityEditUrl(remoteDocPaths), + editUrl: createEditUrlFunction(communityConfig.sourceRepo), numberPrefixParser: false, }, ], @@ -347,8 +176,7 @@ const config = { "docusaurus-plugin-remote-content", { name: "community", - sourceBaseUrl: - "https://raw.githubusercontent.com/helm/community/refs/heads/main/", + sourceBaseUrl: communityConfig.sourceBaseUrl, outDir: "community", documents: remoteDocPaths, // Set to true since we commit files to Git and performCleanup: false prevents deletion @@ -356,6 +184,11 @@ const config = { // Must be false to prevent files being deleted between i18n locale builds // See: https://github.com/rdilweb/docusaurus-plugin-remote-content/issues/98 performCleanup: false, + /** + * @param {string} filename - The filename being processed + * @param {string} content - The file content + * @returns {{content: string, filename?: string}} Transformed content + */ modifyContent(filename, content) { const transformed = transformImportedContent( filename, @@ -370,6 +203,32 @@ const config = { }, }, ], + [ + "docusaurus-plugin-remote-content", + { + name: "community-images", + sourceBaseUrl: communityConfig.sourceBaseUrl, + outDir: "community", + documents: [ + "art/images/Backgrounds-Pattern-Dark.png", + "art/images/Backgrounds-Pattern.png", + "art/images/Example-Icon-Illustrations.png", + "art/images/Helm-3-Color-Palettes-Dark.png", + "art/images/Helm-3-Color-Palettes-Light.png", + "art/images/Helm-Summit.png", + "art/images/Logo-Tweak-Dark.png", + "art/images/Logo-Tweak-Light.png", + "art/images/Typography.png", + "art/images/Website-Exmple.png", + "art/images/Website-Sample.png", + "art/images/helm-3.png", + "art/images/type-notes.png", + ], + requestConfig: { responseType: "arraybuffer" }, + noRuntimeDownloads: true, + performCleanup: false, + }, + ], ], themeConfig: diff --git a/remote-content_community.js b/remote-content_community.js new file mode 100644 index 0000000000..f529b2a134 --- /dev/null +++ b/remote-content_community.js @@ -0,0 +1,167 @@ +/** + * Configuration for the "community" instance of docusaurus-plugin-remote-content + * Imports documentation from the helm/community GitHub repository + */ + +module.exports = { + // Source repository information + sourceRepo: "https://github.com/helm/community", + sourceBaseUrl: "https://raw.githubusercontent.com/helm/community/refs/heads/main/", + + // Files to import with their transformations + files: { + // Simple files with no modifications + "blog-topics.md": {}, + "code-of-conduct.md": {}, + "communication.md": {}, + "incubator.md": {}, + "stable-repo-charts-new-locations.md": {}, + "user-profiles.md": {}, + + // Files with modifications + "README.md": { + meta: { + sidebar_position: 1, + }, + links: { + "https://github.com/helm/community/tree/main/art": "/community/art", + }, + }, + + "MAINTAINERS.md": {}, + + "SECURITY.md": { + meta: { + sidebar_label: "Helm Security", + }, + links: { + "README.md": "/community", + }, + }, + + "governance/README.md": { + meta: { + sidebar_label: "Governance", + title: "Governance Introduction", + id: "helm-governance", + sidebar_position: 9, + }, + links: { + "governance.md": "/community/governance/governance", + "../MAINTAINERS.md": "/community/MAINTAINERS", + }, + }, + + "governance/governance.md": { + meta: { + sidebar_label: "Rules", + title: "Governance Rules", + slug: "governance", + }, + }, + + // Art files + "art/readme.md": { + meta: { + title: "Styleguide", + }, + }, + + // Meeting notes - automatically converted from .txt to .md + "meeting-notes/2017.txt": {}, + "meeting-notes/2018.txt": {}, + "meeting-notes/2019.txt": {}, + "meeting-notes/2020.txt": {}, + "meeting-notes/2021.txt": {}, + + // HIPs + "hips/README.md": {}, + "hips/hip-0001.md": {}, + "hips/hip-0002.md": {}, + "hips/hip-0003.md": {}, + "hips/hip-0004.md": {}, + "hips/hip-0005.md": { + links: { + "https://github.com/helm/community/blob/master/governance/governance.md": "/community/governance/governance", + }, + }, + "hips/hip-0006.md": {}, + "hips/hip-0007.md": { + links: { + "https://github.com/helm/community/blob/master/governance/governance.md": "/community/governance/governance", + "../maintainer-groups.yaml": "https://github.com/helm/community/blob/main/maintainer-groups.yaml", + }, + }, + "hips/hip-0008.md": {}, + "hips/hip-0009.md": { + links: { + "../security.md": "../SECURITY.md", + }, + }, + "hips/hip-0010.md": {}, + "hips/hip-0011.md": {}, + "hips/hip-0012.md": { + links: { + "https://github.com/helm/community/blob/main/user-profiles.md": "/community/user-profiles", + }, + }, + "hips/hip-0014.md": { + links: { + "https://github.com/helm/community/tree/main/governance": "/community/governance/governance", + "https://github.com/helm/community/blob/main/Teams.md": "https://github.com/helm/community/blob/main/maintainer-groups.yaml", + }, + }, + "hips/hip-0015.md": {}, + "hips/hip-0016.md": {}, + "hips/hip-0017.md": {}, + "hips/hip-0018.md": {}, + "hips/hip-0019.md": {}, + "hips/hip-0020.md": {}, + "hips/hip-0021.md": {}, + "hips/hip-0022.md": {}, + "hips/hip-0023.md": {}, + "hips/hip-0024.md": {}, + "hips/hip-0025.md": { + links: { + "https://github.com/helm/community/blob/main/user-profiles.md": "/community/user-profiles", + }, + }, + "hips/hip-0026.md": { + links: { + "https://github.com/helm/community/blob/main/hips/hip-0012.md": "/community/hips/hip-0012", + "https://github.com/helm/community/blob/main/hips/archives/helm/distributed-search.md": "/community/hips/archives/helm/distributed-search", + }, + }, + + // HIP Archives + "hips/archives/README.md": {}, + "hips/archives/monocular/1.0-improvements.md": { + links: { + "https://github.com/helm/community/blob/master/proposals/distributed-search.md": "/community/hips/archives/helm/distributed-search", + }, + }, + "hips/archives/helm/distributed-search.md": {}, + "hips/archives/helm/helm-v3/000-helm-v3.md": { + links: { + "../../../user-profiles.md": "../../../../user-profiles.md", + }, + }, + "hips/archives/helm/helm-v3/001-charts.md": {}, + "hips/archives/helm/helm-v3/002-events.md": {}, + "hips/archives/helm/helm-v3/003-state.md": {}, + "hips/archives/helm/helm-v3/004-hooks.md": {}, + "hips/archives/helm/helm-v3/005-plugins.md": {}, + "hips/archives/helm/helm-v3/006-repositories.md": {}, + "hips/archives/helm/helm-v3/007-security.md": {}, + "hips/archives/helm/helm-v3/008-controller.md": {}, + "hips/archives/helm/helm-v3/009-package_manager.md": {}, + "hips/archives/helm/helm-v3/010-removed.md": {}, + "hips/archives/helm/helm-v3/011-user_stories.md": { + links: { + "../user-profiles.md": "../../../../user-profiles.md", + }, + }, + "hips/archives/helm/helm-v3/012-chart-dev-stories.md": {}, + "hips/archives/helm/helm-v3/research/package-manager-ux.md": {}, + }, +}; diff --git a/src/utils/communityDocsConfig.js b/src/utils/communityDocsConfig.js deleted file mode 100644 index d21d07d741..0000000000 --- a/src/utils/communityDocsConfig.js +++ /dev/null @@ -1,37 +0,0 @@ -// Derive helpers from the community remote docs configuration -function deriveHelpers(communityRemoteDocs) { - const remoteDocPaths = communityRemoteDocs.map((d) => d.origFilename); - const metaByPath = communityRemoteDocs.reduce((acc, d) => { - if (d.meta) acc[d.origFilename] = d.meta; - return acc; - }, Object.create(null)); - const slugByPath = communityRemoteDocs.reduce((acc, d) => { - if (d.meta?.slug) acc[d.origFilename] = d.meta.slug; - return acc; - }, Object.create(null)); - - return { remoteDocPaths, metaByPath, slugByPath }; -} - -// Edit URL function for community docs plugin -function createCommunityEditUrl(remoteDocPaths) { - return ({ versionDocsDirPath, docPath, locale }) => { - const parts = docPath.split("/"); - const maybeLocale = parts[0]; - const localeStrippedPath = - locale && maybeLocale === locale - ? parts.slice(1).join("/") - : docPath; - - const isRemote = remoteDocPaths.includes(localeStrippedPath); - if (isRemote) { - return `https://github.com/helm/community/edit/main/${localeStrippedPath}`; - } - return `https://github.com/helm/helm-www/edit/main/${versionDocsDirPath}/${docPath}`; - }; -} - -module.exports = { - deriveHelpers, - createCommunityEditUrl, -}; diff --git a/src/utils/communityDocsHelpers.js b/src/utils/communityDocsHelpers.js new file mode 100644 index 0000000000..58b468335f --- /dev/null +++ b/src/utils/communityDocsHelpers.js @@ -0,0 +1,74 @@ +/** + * Helper functions for processing community documentation configuration + */ + +/** + * @typedef {Object} ProcessedConfig + * @property {string} sourceBaseUrl - Base URL for fetching remote content + * @property {string[]} documents - Array of document paths to fetch + * @property {Object.} metaByPath - Metadata indexed by file path + * @property {Object.} slugByPath - Slug mappings indexed by file path + * @property {Object.>} linkExceptions - Link transformations indexed by file path + */ + +/** + * Converts the simplified community config to the format needed by docusaurus-plugin-remote-content + * @param {Object} config - The community docs configuration + * @param {string} config.sourceBaseUrl - Base URL for remote content + * @param {string} config.sourceRepo - GitHub repository URL + * @param {Object.} config.files - File configurations + * @returns {ProcessedConfig} Configuration for docusaurus-plugin-remote-content + */ +function processConfig(config) { + const { sourceBaseUrl, files } = config; + + // Extract file paths + const remoteDocPaths = Object.keys(files); + + // Build metadata and link mappings + const metaByPath = {}; + const linkExceptions = {}; + + for (const [filename, fileConfig] of Object.entries(files)) { + if (fileConfig.meta) { + metaByPath[filename] = fileConfig.meta; + } + if (fileConfig.links) { + linkExceptions[filename] = fileConfig.links; + } + } + + // Build slug mapping (for files with slug in meta) + const slugByPath = {}; + for (const [path, meta] of Object.entries(metaByPath)) { + if (meta.slug) { + slugByPath[path] = meta.slug; + } + } + + return { + sourceBaseUrl, + documents: remoteDocPaths, + metaByPath, + slugByPath, + linkExceptions, + }; +} + +/** + * Creates the edit URL function for community docs + * @param {string} sourceRepo - The GitHub repository URL + * @returns {Function} Edit URL function for Docusaurus + */ +function createEditUrlFunction(sourceRepo) { + return function editUrl({ docPath }) { + // Convert .md back to .txt for meeting notes + const origPath = docPath.replace(/^meeting-notes\/(\d+)\.md$/, 'meeting-notes/$1.txt'); + return `${sourceRepo}/edit/main/${origPath}`; + }; +} + +module.exports = { + processConfig, + createEditUrlFunction, +}; From dfbd06c5f322f7be1fe1cf2b2a775fe9e5eb525a Mon Sep 17 00:00:00 2001 From: Scott Rigby Date: Mon, 24 Nov 2025 00:53:21 -0500 Subject: [PATCH 6/6] Fix another community i18n broken anchor Fixes: - Broken anchor on source page path = /zh/docs/plugins/overview: -> linking to /zh/community/related#helm-plugins - Broken anchor on source page path = /zh/docs/topics/plugins: -> linking to /zh/community/related#helm-plugins Signed-off-by: Scott Rigby --- community/related.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/community/related.md b/community/related.md index ef28d78de2..0b460d358f 100644 --- a/community/related.md +++ b/community/related.md @@ -11,7 +11,7 @@ If you have anything you'd like to add to this list, please open an [issue](https://github.com/helm/helm-www/issues) or [pull request](https://github.com/helm/helm-www/pulls). -## Helm Plugins +## Helm Plugins {#helm-plugins} - [helm-adopt](https://github.com/HamzaZo/helm-adopt) - A helm v3 plugin to adopt existing k8s resources into a new generated helm chart.